mirascope 1.0.5__py3-none-any.whl → 2.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. mirascope/__init__.py +6 -6
  2. mirascope/_stubs.py +384 -0
  3. mirascope/_utils.py +34 -0
  4. mirascope/api/__init__.py +14 -0
  5. mirascope/api/_generated/README.md +207 -0
  6. mirascope/api/_generated/__init__.py +444 -0
  7. mirascope/api/_generated/annotations/__init__.py +33 -0
  8. mirascope/api/_generated/annotations/client.py +506 -0
  9. mirascope/api/_generated/annotations/raw_client.py +1414 -0
  10. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
  13. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  14. mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
  15. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  18. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
  19. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  21. mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
  22. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  23. mirascope/api/_generated/api_keys/__init__.py +17 -0
  24. mirascope/api/_generated/api_keys/client.py +530 -0
  25. mirascope/api/_generated/api_keys/raw_client.py +1236 -0
  26. mirascope/api/_generated/api_keys/types/__init__.py +15 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  28. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  29. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
  30. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  31. mirascope/api/_generated/client.py +211 -0
  32. mirascope/api/_generated/core/__init__.py +52 -0
  33. mirascope/api/_generated/core/api_error.py +23 -0
  34. mirascope/api/_generated/core/client_wrapper.py +46 -0
  35. mirascope/api/_generated/core/datetime_utils.py +28 -0
  36. mirascope/api/_generated/core/file.py +67 -0
  37. mirascope/api/_generated/core/force_multipart.py +16 -0
  38. mirascope/api/_generated/core/http_client.py +543 -0
  39. mirascope/api/_generated/core/http_response.py +55 -0
  40. mirascope/api/_generated/core/jsonable_encoder.py +100 -0
  41. mirascope/api/_generated/core/pydantic_utilities.py +255 -0
  42. mirascope/api/_generated/core/query_encoder.py +58 -0
  43. mirascope/api/_generated/core/remove_none_from_dict.py +11 -0
  44. mirascope/api/_generated/core/request_options.py +35 -0
  45. mirascope/api/_generated/core/serialization.py +276 -0
  46. mirascope/api/_generated/docs/__init__.py +4 -0
  47. mirascope/api/_generated/docs/client.py +91 -0
  48. mirascope/api/_generated/docs/raw_client.py +178 -0
  49. mirascope/api/_generated/environment.py +9 -0
  50. mirascope/api/_generated/environments/__init__.py +23 -0
  51. mirascope/api/_generated/environments/client.py +649 -0
  52. mirascope/api/_generated/environments/raw_client.py +1567 -0
  53. mirascope/api/_generated/environments/types/__init__.py +25 -0
  54. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  55. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
  56. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
  57. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
  58. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  59. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  60. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  61. mirascope/api/_generated/errors/__init__.py +25 -0
  62. mirascope/api/_generated/errors/bad_request_error.py +14 -0
  63. mirascope/api/_generated/errors/conflict_error.py +14 -0
  64. mirascope/api/_generated/errors/forbidden_error.py +11 -0
  65. mirascope/api/_generated/errors/internal_server_error.py +10 -0
  66. mirascope/api/_generated/errors/not_found_error.py +11 -0
  67. mirascope/api/_generated/errors/payment_required_error.py +15 -0
  68. mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
  69. mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
  70. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  71. mirascope/api/_generated/functions/__init__.py +39 -0
  72. mirascope/api/_generated/functions/client.py +647 -0
  73. mirascope/api/_generated/functions/raw_client.py +1890 -0
  74. mirascope/api/_generated/functions/types/__init__.py +53 -0
  75. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  76. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  77. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  78. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  79. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  80. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
  81. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
  82. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  83. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  84. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
  85. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
  86. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
  87. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  88. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  89. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  90. mirascope/api/_generated/health/__init__.py +7 -0
  91. mirascope/api/_generated/health/client.py +92 -0
  92. mirascope/api/_generated/health/raw_client.py +175 -0
  93. mirascope/api/_generated/health/types/__init__.py +8 -0
  94. mirascope/api/_generated/health/types/health_check_response.py +22 -0
  95. mirascope/api/_generated/health/types/health_check_response_status.py +5 -0
  96. mirascope/api/_generated/organization_invitations/__init__.py +33 -0
  97. mirascope/api/_generated/organization_invitations/client.py +546 -0
  98. mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
  99. mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
  100. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
  101. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
  102. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
  103. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
  104. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
  105. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
  106. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
  107. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
  108. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
  109. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
  110. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
  111. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
  112. mirascope/api/_generated/organization_memberships/__init__.py +19 -0
  113. mirascope/api/_generated/organization_memberships/client.py +302 -0
  114. mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
  115. mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
  116. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
  117. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
  118. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
  119. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
  120. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
  121. mirascope/api/_generated/organizations/__init__.py +51 -0
  122. mirascope/api/_generated/organizations/client.py +869 -0
  123. mirascope/api/_generated/organizations/raw_client.py +2593 -0
  124. mirascope/api/_generated/organizations/types/__init__.py +71 -0
  125. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
  126. mirascope/api/_generated/organizations/types/organizations_create_response.py +26 -0
  127. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +5 -0
  128. mirascope/api/_generated/organizations/types/organizations_get_response.py +26 -0
  129. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +5 -0
  130. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +26 -0
  131. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +5 -0
  132. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
  133. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
  134. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
  135. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
  136. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
  137. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
  138. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
  139. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
  140. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
  141. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
  142. mirascope/api/_generated/organizations/types/organizations_update_response.py +26 -0
  143. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +5 -0
  144. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
  145. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
  146. mirascope/api/_generated/project_memberships/__init__.py +29 -0
  147. mirascope/api/_generated/project_memberships/client.py +528 -0
  148. mirascope/api/_generated/project_memberships/raw_client.py +1278 -0
  149. mirascope/api/_generated/project_memberships/types/__init__.py +33 -0
  150. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
  151. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
  152. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
  153. mirascope/api/_generated/project_memberships/types/project_memberships_get_response.py +33 -0
  154. mirascope/api/_generated/project_memberships/types/project_memberships_get_response_role.py +7 -0
  155. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
  156. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
  157. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
  158. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
  159. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
  160. mirascope/api/_generated/projects/__init__.py +7 -0
  161. mirascope/api/_generated/projects/client.py +428 -0
  162. mirascope/api/_generated/projects/raw_client.py +1302 -0
  163. mirascope/api/_generated/projects/types/__init__.py +10 -0
  164. mirascope/api/_generated/projects/types/projects_create_response.py +25 -0
  165. mirascope/api/_generated/projects/types/projects_get_response.py +25 -0
  166. mirascope/api/_generated/projects/types/projects_list_response_item.py +25 -0
  167. mirascope/api/_generated/projects/types/projects_update_response.py +25 -0
  168. mirascope/api/_generated/reference.md +4987 -0
  169. mirascope/api/_generated/tags/__init__.py +19 -0
  170. mirascope/api/_generated/tags/client.py +504 -0
  171. mirascope/api/_generated/tags/raw_client.py +1288 -0
  172. mirascope/api/_generated/tags/types/__init__.py +17 -0
  173. mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
  174. mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
  175. mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
  176. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
  177. mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
  178. mirascope/api/_generated/token_cost/__init__.py +7 -0
  179. mirascope/api/_generated/token_cost/client.py +160 -0
  180. mirascope/api/_generated/token_cost/raw_client.py +264 -0
  181. mirascope/api/_generated/token_cost/types/__init__.py +8 -0
  182. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
  183. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
  184. mirascope/api/_generated/traces/__init__.py +97 -0
  185. mirascope/api/_generated/traces/client.py +1103 -0
  186. mirascope/api/_generated/traces/raw_client.py +2322 -0
  187. mirascope/api/_generated/traces/types/__init__.py +155 -0
  188. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +29 -0
  189. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +27 -0
  190. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +23 -0
  191. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +38 -0
  192. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +19 -0
  193. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +22 -0
  194. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +20 -0
  195. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +29 -0
  196. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +31 -0
  197. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +23 -0
  198. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +38 -0
  199. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +19 -0
  200. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +22 -0
  201. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +22 -0
  202. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +48 -0
  203. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +23 -0
  204. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +38 -0
  205. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +19 -0
  206. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +24 -0
  207. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +22 -0
  208. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +20 -0
  209. mirascope/api/_generated/traces/types/traces_create_response.py +24 -0
  210. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +22 -0
  211. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
  212. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  213. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  214. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
  215. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
  216. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  217. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
  218. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
  219. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
  220. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
  221. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
  222. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
  223. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
  224. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
  225. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
  226. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  227. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  228. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  229. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  230. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  231. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
  232. mirascope/api/_generated/types/__init__.py +85 -0
  233. mirascope/api/_generated/types/already_exists_error.py +22 -0
  234. mirascope/api/_generated/types/already_exists_error_tag.py +5 -0
  235. mirascope/api/_generated/types/bad_request_error_body.py +50 -0
  236. mirascope/api/_generated/types/click_house_error.py +22 -0
  237. mirascope/api/_generated/types/database_error.py +22 -0
  238. mirascope/api/_generated/types/database_error_tag.py +5 -0
  239. mirascope/api/_generated/types/date.py +3 -0
  240. mirascope/api/_generated/types/http_api_decode_error.py +27 -0
  241. mirascope/api/_generated/types/http_api_decode_error_tag.py +5 -0
  242. mirascope/api/_generated/types/immutable_resource_error.py +22 -0
  243. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  244. mirascope/api/_generated/types/issue.py +38 -0
  245. mirascope/api/_generated/types/issue_tag.py +10 -0
  246. mirascope/api/_generated/types/not_found_error_body.py +22 -0
  247. mirascope/api/_generated/types/not_found_error_tag.py +5 -0
  248. mirascope/api/_generated/types/number_from_string.py +3 -0
  249. mirascope/api/_generated/types/permission_denied_error.py +22 -0
  250. mirascope/api/_generated/types/permission_denied_error_tag.py +5 -0
  251. mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
  252. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
  253. mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
  254. mirascope/api/_generated/types/property_key.py +7 -0
  255. mirascope/api/_generated/types/property_key_key.py +25 -0
  256. mirascope/api/_generated/types/property_key_key_tag.py +5 -0
  257. mirascope/api/_generated/types/rate_limit_error.py +31 -0
  258. mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
  259. mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
  260. mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
  261. mirascope/api/_generated/types/stripe_error.py +20 -0
  262. mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
  263. mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
  264. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  265. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  266. mirascope/api/client.py +255 -0
  267. mirascope/api/settings.py +99 -0
  268. mirascope/llm/__init__.py +316 -0
  269. mirascope/llm/calls/__init__.py +17 -0
  270. mirascope/llm/calls/calls.py +348 -0
  271. mirascope/llm/calls/decorator.py +268 -0
  272. mirascope/llm/content/__init__.py +71 -0
  273. mirascope/llm/content/audio.py +173 -0
  274. mirascope/llm/content/document.py +94 -0
  275. mirascope/llm/content/image.py +206 -0
  276. mirascope/llm/content/text.py +47 -0
  277. mirascope/llm/content/thought.py +58 -0
  278. mirascope/llm/content/tool_call.py +69 -0
  279. mirascope/llm/content/tool_output.py +43 -0
  280. mirascope/llm/context/__init__.py +6 -0
  281. mirascope/llm/context/_utils.py +41 -0
  282. mirascope/llm/context/context.py +24 -0
  283. mirascope/llm/exceptions.py +360 -0
  284. mirascope/llm/formatting/__init__.py +39 -0
  285. mirascope/llm/formatting/format.py +291 -0
  286. mirascope/llm/formatting/from_call_args.py +30 -0
  287. mirascope/llm/formatting/output_parser.py +178 -0
  288. mirascope/llm/formatting/partial.py +131 -0
  289. mirascope/llm/formatting/primitives.py +192 -0
  290. mirascope/llm/formatting/types.py +83 -0
  291. mirascope/llm/mcp/__init__.py +5 -0
  292. mirascope/llm/mcp/mcp_client.py +130 -0
  293. mirascope/llm/messages/__init__.py +35 -0
  294. mirascope/llm/messages/_utils.py +34 -0
  295. mirascope/llm/messages/message.py +190 -0
  296. mirascope/llm/models/__init__.py +21 -0
  297. mirascope/llm/models/models.py +1339 -0
  298. mirascope/llm/models/params.py +72 -0
  299. mirascope/llm/models/thinking_config.py +61 -0
  300. mirascope/llm/prompts/__init__.py +34 -0
  301. mirascope/llm/prompts/_utils.py +31 -0
  302. mirascope/llm/prompts/decorator.py +215 -0
  303. mirascope/llm/prompts/prompts.py +484 -0
  304. mirascope/llm/prompts/protocols.py +65 -0
  305. mirascope/llm/providers/__init__.py +65 -0
  306. mirascope/llm/providers/anthropic/__init__.py +11 -0
  307. mirascope/llm/providers/anthropic/_utils/__init__.py +27 -0
  308. mirascope/llm/providers/anthropic/_utils/beta_decode.py +297 -0
  309. mirascope/llm/providers/anthropic/_utils/beta_encode.py +272 -0
  310. mirascope/llm/providers/anthropic/_utils/decode.py +326 -0
  311. mirascope/llm/providers/anthropic/_utils/encode.py +431 -0
  312. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  313. mirascope/llm/providers/anthropic/beta_provider.py +338 -0
  314. mirascope/llm/providers/anthropic/model_id.py +23 -0
  315. mirascope/llm/providers/anthropic/model_info.py +87 -0
  316. mirascope/llm/providers/anthropic/provider.py +440 -0
  317. mirascope/llm/providers/base/__init__.py +14 -0
  318. mirascope/llm/providers/base/_utils.py +248 -0
  319. mirascope/llm/providers/base/base_provider.py +1463 -0
  320. mirascope/llm/providers/base/kwargs.py +12 -0
  321. mirascope/llm/providers/google/__init__.py +6 -0
  322. mirascope/llm/providers/google/_utils/__init__.py +17 -0
  323. mirascope/llm/providers/google/_utils/decode.py +357 -0
  324. mirascope/llm/providers/google/_utils/encode.py +418 -0
  325. mirascope/llm/providers/google/_utils/errors.py +50 -0
  326. mirascope/llm/providers/google/message.py +7 -0
  327. mirascope/llm/providers/google/model_id.py +22 -0
  328. mirascope/llm/providers/google/model_info.py +63 -0
  329. mirascope/llm/providers/google/provider.py +456 -0
  330. mirascope/llm/providers/mirascope/__init__.py +5 -0
  331. mirascope/llm/providers/mirascope/_utils.py +73 -0
  332. mirascope/llm/providers/mirascope/provider.py +313 -0
  333. mirascope/llm/providers/mlx/__init__.py +9 -0
  334. mirascope/llm/providers/mlx/_utils.py +141 -0
  335. mirascope/llm/providers/mlx/encoding/__init__.py +8 -0
  336. mirascope/llm/providers/mlx/encoding/base.py +69 -0
  337. mirascope/llm/providers/mlx/encoding/transformers.py +146 -0
  338. mirascope/llm/providers/mlx/mlx.py +242 -0
  339. mirascope/llm/providers/mlx/model_id.py +17 -0
  340. mirascope/llm/providers/mlx/provider.py +416 -0
  341. mirascope/llm/providers/model_id.py +16 -0
  342. mirascope/llm/providers/ollama/__init__.py +7 -0
  343. mirascope/llm/providers/ollama/provider.py +71 -0
  344. mirascope/llm/providers/openai/__init__.py +15 -0
  345. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  346. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  347. mirascope/llm/providers/openai/completions/__init__.py +7 -0
  348. mirascope/llm/providers/openai/completions/_utils/__init__.py +18 -0
  349. mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
  350. mirascope/llm/providers/openai/completions/_utils/encode.py +390 -0
  351. mirascope/llm/providers/openai/completions/_utils/feature_info.py +50 -0
  352. mirascope/llm/providers/openai/completions/base_provider.py +522 -0
  353. mirascope/llm/providers/openai/completions/provider.py +28 -0
  354. mirascope/llm/providers/openai/model_id.py +31 -0
  355. mirascope/llm/providers/openai/model_info.py +303 -0
  356. mirascope/llm/providers/openai/provider.py +405 -0
  357. mirascope/llm/providers/openai/responses/__init__.py +5 -0
  358. mirascope/llm/providers/openai/responses/_utils/__init__.py +15 -0
  359. mirascope/llm/providers/openai/responses/_utils/decode.py +289 -0
  360. mirascope/llm/providers/openai/responses/_utils/encode.py +399 -0
  361. mirascope/llm/providers/openai/responses/provider.py +472 -0
  362. mirascope/llm/providers/openrouter/__init__.py +5 -0
  363. mirascope/llm/providers/openrouter/provider.py +67 -0
  364. mirascope/llm/providers/provider_id.py +26 -0
  365. mirascope/llm/providers/provider_registry.py +305 -0
  366. mirascope/llm/providers/together/__init__.py +7 -0
  367. mirascope/llm/providers/together/provider.py +40 -0
  368. mirascope/llm/responses/__init__.py +66 -0
  369. mirascope/llm/responses/_utils.py +146 -0
  370. mirascope/llm/responses/base_response.py +103 -0
  371. mirascope/llm/responses/base_stream_response.py +824 -0
  372. mirascope/llm/responses/finish_reason.py +28 -0
  373. mirascope/llm/responses/response.py +362 -0
  374. mirascope/llm/responses/root_response.py +248 -0
  375. mirascope/llm/responses/stream_response.py +577 -0
  376. mirascope/llm/responses/streams.py +363 -0
  377. mirascope/llm/responses/usage.py +139 -0
  378. mirascope/llm/tools/__init__.py +71 -0
  379. mirascope/llm/tools/_utils.py +34 -0
  380. mirascope/llm/tools/decorator.py +184 -0
  381. mirascope/llm/tools/protocols.py +96 -0
  382. mirascope/llm/tools/provider_tools.py +18 -0
  383. mirascope/llm/tools/tool_schema.py +321 -0
  384. mirascope/llm/tools/toolkit.py +178 -0
  385. mirascope/llm/tools/tools.py +263 -0
  386. mirascope/llm/tools/types.py +112 -0
  387. mirascope/llm/tools/web_search_tool.py +32 -0
  388. mirascope/llm/types/__init__.py +22 -0
  389. mirascope/llm/types/dataclass.py +9 -0
  390. mirascope/llm/types/jsonable.py +44 -0
  391. mirascope/llm/types/type_vars.py +19 -0
  392. mirascope/ops/__init__.py +129 -0
  393. mirascope/ops/_internal/__init__.py +5 -0
  394. mirascope/ops/_internal/closure.py +1172 -0
  395. mirascope/ops/_internal/configuration.py +177 -0
  396. mirascope/ops/_internal/context.py +76 -0
  397. mirascope/ops/_internal/exporters/__init__.py +26 -0
  398. mirascope/ops/_internal/exporters/exporters.py +362 -0
  399. mirascope/ops/_internal/exporters/processors.py +104 -0
  400. mirascope/ops/_internal/exporters/types.py +165 -0
  401. mirascope/ops/_internal/exporters/utils.py +66 -0
  402. mirascope/ops/_internal/instrumentation/__init__.py +28 -0
  403. mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
  404. mirascope/ops/_internal/instrumentation/llm/common.py +500 -0
  405. mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
  406. mirascope/ops/_internal/instrumentation/llm/encode.py +238 -0
  407. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +38 -0
  408. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +31 -0
  409. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +38 -0
  410. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +18 -0
  411. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +100 -0
  412. mirascope/ops/_internal/instrumentation/llm/llm.py +161 -0
  413. mirascope/ops/_internal/instrumentation/llm/model.py +1777 -0
  414. mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
  415. mirascope/ops/_internal/instrumentation/llm/serialize.py +324 -0
  416. mirascope/ops/_internal/instrumentation/providers/__init__.py +29 -0
  417. mirascope/ops/_internal/instrumentation/providers/anthropic.py +78 -0
  418. mirascope/ops/_internal/instrumentation/providers/base.py +179 -0
  419. mirascope/ops/_internal/instrumentation/providers/google_genai.py +85 -0
  420. mirascope/ops/_internal/instrumentation/providers/openai.py +82 -0
  421. mirascope/ops/_internal/propagation.py +198 -0
  422. mirascope/ops/_internal/protocols.py +133 -0
  423. mirascope/ops/_internal/session.py +139 -0
  424. mirascope/ops/_internal/spans.py +232 -0
  425. mirascope/ops/_internal/traced_calls.py +389 -0
  426. mirascope/ops/_internal/traced_functions.py +528 -0
  427. mirascope/ops/_internal/tracing.py +353 -0
  428. mirascope/ops/_internal/types.py +13 -0
  429. mirascope/ops/_internal/utils.py +131 -0
  430. mirascope/ops/_internal/versioned_calls.py +512 -0
  431. mirascope/ops/_internal/versioned_functions.py +357 -0
  432. mirascope/ops/_internal/versioning.py +303 -0
  433. mirascope/ops/exceptions.py +21 -0
  434. mirascope-2.1.1.dist-info/METADATA +231 -0
  435. mirascope-2.1.1.dist-info/RECORD +437 -0
  436. {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/WHEEL +1 -1
  437. {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/licenses/LICENSE +1 -1
  438. mirascope/beta/__init__.py +0 -0
  439. mirascope/beta/openai/__init__.py +0 -5
  440. mirascope/beta/openai/parse.py +0 -129
  441. mirascope/beta/rag/__init__.py +0 -24
  442. mirascope/beta/rag/base/__init__.py +0 -22
  443. mirascope/beta/rag/base/chunkers/__init__.py +0 -2
  444. mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
  445. mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
  446. mirascope/beta/rag/base/config.py +0 -8
  447. mirascope/beta/rag/base/document.py +0 -11
  448. mirascope/beta/rag/base/embedders.py +0 -35
  449. mirascope/beta/rag/base/embedding_params.py +0 -18
  450. mirascope/beta/rag/base/embedding_response.py +0 -30
  451. mirascope/beta/rag/base/query_results.py +0 -7
  452. mirascope/beta/rag/base/vectorstore_params.py +0 -18
  453. mirascope/beta/rag/base/vectorstores.py +0 -37
  454. mirascope/beta/rag/chroma/__init__.py +0 -11
  455. mirascope/beta/rag/chroma/types.py +0 -57
  456. mirascope/beta/rag/chroma/vectorstores.py +0 -97
  457. mirascope/beta/rag/cohere/__init__.py +0 -11
  458. mirascope/beta/rag/cohere/embedders.py +0 -87
  459. mirascope/beta/rag/cohere/embedding_params.py +0 -29
  460. mirascope/beta/rag/cohere/embedding_response.py +0 -29
  461. mirascope/beta/rag/cohere/py.typed +0 -0
  462. mirascope/beta/rag/openai/__init__.py +0 -11
  463. mirascope/beta/rag/openai/embedders.py +0 -144
  464. mirascope/beta/rag/openai/embedding_params.py +0 -18
  465. mirascope/beta/rag/openai/embedding_response.py +0 -14
  466. mirascope/beta/rag/openai/py.typed +0 -0
  467. mirascope/beta/rag/pinecone/__init__.py +0 -19
  468. mirascope/beta/rag/pinecone/types.py +0 -143
  469. mirascope/beta/rag/pinecone/vectorstores.py +0 -148
  470. mirascope/beta/rag/weaviate/__init__.py +0 -6
  471. mirascope/beta/rag/weaviate/types.py +0 -92
  472. mirascope/beta/rag/weaviate/vectorstores.py +0 -103
  473. mirascope/core/__init__.py +0 -55
  474. mirascope/core/anthropic/__init__.py +0 -21
  475. mirascope/core/anthropic/_call.py +0 -71
  476. mirascope/core/anthropic/_utils/__init__.py +0 -16
  477. mirascope/core/anthropic/_utils/_calculate_cost.py +0 -63
  478. mirascope/core/anthropic/_utils/_convert_message_params.py +0 -54
  479. mirascope/core/anthropic/_utils/_get_json_output.py +0 -34
  480. mirascope/core/anthropic/_utils/_handle_stream.py +0 -89
  481. mirascope/core/anthropic/_utils/_setup_call.py +0 -76
  482. mirascope/core/anthropic/call_params.py +0 -36
  483. mirascope/core/anthropic/call_response.py +0 -158
  484. mirascope/core/anthropic/call_response_chunk.py +0 -104
  485. mirascope/core/anthropic/dynamic_config.py +0 -26
  486. mirascope/core/anthropic/py.typed +0 -0
  487. mirascope/core/anthropic/stream.py +0 -140
  488. mirascope/core/anthropic/tool.py +0 -77
  489. mirascope/core/base/__init__.py +0 -40
  490. mirascope/core/base/_call_factory.py +0 -323
  491. mirascope/core/base/_create.py +0 -167
  492. mirascope/core/base/_extract.py +0 -139
  493. mirascope/core/base/_partial.py +0 -63
  494. mirascope/core/base/_utils/__init__.py +0 -64
  495. mirascope/core/base/_utils/_base_type.py +0 -17
  496. mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -45
  497. mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
  498. mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -126
  499. mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
  500. mirascope/core/base/_utils/_extract_tool_return.py +0 -36
  501. mirascope/core/base/_utils/_format_template.py +0 -29
  502. mirascope/core/base/_utils/_get_audio_type.py +0 -18
  503. mirascope/core/base/_utils/_get_fn_args.py +0 -14
  504. mirascope/core/base/_utils/_get_image_type.py +0 -26
  505. mirascope/core/base/_utils/_get_metadata.py +0 -17
  506. mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
  507. mirascope/core/base/_utils/_get_prompt_template.py +0 -25
  508. mirascope/core/base/_utils/_get_template_values.py +0 -52
  509. mirascope/core/base/_utils/_get_template_variables.py +0 -38
  510. mirascope/core/base/_utils/_json_mode_content.py +0 -15
  511. mirascope/core/base/_utils/_parse_content_template.py +0 -157
  512. mirascope/core/base/_utils/_parse_prompt_messages.py +0 -51
  513. mirascope/core/base/_utils/_protocols.py +0 -215
  514. mirascope/core/base/_utils/_setup_call.py +0 -64
  515. mirascope/core/base/_utils/_setup_extract_tool.py +0 -24
  516. mirascope/core/base/call_params.py +0 -6
  517. mirascope/core/base/call_response.py +0 -189
  518. mirascope/core/base/call_response_chunk.py +0 -91
  519. mirascope/core/base/dynamic_config.py +0 -55
  520. mirascope/core/base/message_param.py +0 -61
  521. mirascope/core/base/metadata.py +0 -13
  522. mirascope/core/base/prompt.py +0 -415
  523. mirascope/core/base/stream.py +0 -365
  524. mirascope/core/base/structured_stream.py +0 -251
  525. mirascope/core/base/tool.py +0 -126
  526. mirascope/core/base/toolkit.py +0 -146
  527. mirascope/core/cohere/__init__.py +0 -21
  528. mirascope/core/cohere/_call.py +0 -71
  529. mirascope/core/cohere/_utils/__init__.py +0 -16
  530. mirascope/core/cohere/_utils/_calculate_cost.py +0 -39
  531. mirascope/core/cohere/_utils/_convert_message_params.py +0 -31
  532. mirascope/core/cohere/_utils/_get_json_output.py +0 -31
  533. mirascope/core/cohere/_utils/_handle_stream.py +0 -33
  534. mirascope/core/cohere/_utils/_setup_call.py +0 -89
  535. mirascope/core/cohere/call_params.py +0 -57
  536. mirascope/core/cohere/call_response.py +0 -167
  537. mirascope/core/cohere/call_response_chunk.py +0 -101
  538. mirascope/core/cohere/dynamic_config.py +0 -24
  539. mirascope/core/cohere/py.typed +0 -0
  540. mirascope/core/cohere/stream.py +0 -113
  541. mirascope/core/cohere/tool.py +0 -92
  542. mirascope/core/gemini/__init__.py +0 -21
  543. mirascope/core/gemini/_call.py +0 -71
  544. mirascope/core/gemini/_utils/__init__.py +0 -16
  545. mirascope/core/gemini/_utils/_calculate_cost.py +0 -8
  546. mirascope/core/gemini/_utils/_convert_message_params.py +0 -74
  547. mirascope/core/gemini/_utils/_get_json_output.py +0 -33
  548. mirascope/core/gemini/_utils/_handle_stream.py +0 -33
  549. mirascope/core/gemini/_utils/_setup_call.py +0 -68
  550. mirascope/core/gemini/call_params.py +0 -28
  551. mirascope/core/gemini/call_response.py +0 -173
  552. mirascope/core/gemini/call_response_chunk.py +0 -85
  553. mirascope/core/gemini/dynamic_config.py +0 -26
  554. mirascope/core/gemini/stream.py +0 -121
  555. mirascope/core/gemini/tool.py +0 -104
  556. mirascope/core/groq/__init__.py +0 -21
  557. mirascope/core/groq/_call.py +0 -71
  558. mirascope/core/groq/_utils/__init__.py +0 -16
  559. mirascope/core/groq/_utils/_calculate_cost.py +0 -68
  560. mirascope/core/groq/_utils/_convert_message_params.py +0 -23
  561. mirascope/core/groq/_utils/_get_json_output.py +0 -27
  562. mirascope/core/groq/_utils/_handle_stream.py +0 -121
  563. mirascope/core/groq/_utils/_setup_call.py +0 -67
  564. mirascope/core/groq/call_params.py +0 -51
  565. mirascope/core/groq/call_response.py +0 -160
  566. mirascope/core/groq/call_response_chunk.py +0 -89
  567. mirascope/core/groq/dynamic_config.py +0 -26
  568. mirascope/core/groq/py.typed +0 -0
  569. mirascope/core/groq/stream.py +0 -136
  570. mirascope/core/groq/tool.py +0 -79
  571. mirascope/core/litellm/__init__.py +0 -6
  572. mirascope/core/litellm/_call.py +0 -73
  573. mirascope/core/litellm/_utils/__init__.py +0 -5
  574. mirascope/core/litellm/_utils/_setup_call.py +0 -46
  575. mirascope/core/litellm/py.typed +0 -0
  576. mirascope/core/mistral/__init__.py +0 -21
  577. mirascope/core/mistral/_call.py +0 -69
  578. mirascope/core/mistral/_utils/__init__.py +0 -16
  579. mirascope/core/mistral/_utils/_calculate_cost.py +0 -47
  580. mirascope/core/mistral/_utils/_convert_message_params.py +0 -23
  581. mirascope/core/mistral/_utils/_get_json_output.py +0 -28
  582. mirascope/core/mistral/_utils/_handle_stream.py +0 -121
  583. mirascope/core/mistral/_utils/_setup_call.py +0 -86
  584. mirascope/core/mistral/call_params.py +0 -36
  585. mirascope/core/mistral/call_response.py +0 -156
  586. mirascope/core/mistral/call_response_chunk.py +0 -84
  587. mirascope/core/mistral/dynamic_config.py +0 -24
  588. mirascope/core/mistral/py.typed +0 -0
  589. mirascope/core/mistral/stream.py +0 -117
  590. mirascope/core/mistral/tool.py +0 -77
  591. mirascope/core/openai/__init__.py +0 -21
  592. mirascope/core/openai/_call.py +0 -71
  593. mirascope/core/openai/_utils/__init__.py +0 -16
  594. mirascope/core/openai/_utils/_calculate_cost.py +0 -110
  595. mirascope/core/openai/_utils/_convert_message_params.py +0 -53
  596. mirascope/core/openai/_utils/_get_json_output.py +0 -27
  597. mirascope/core/openai/_utils/_handle_stream.py +0 -125
  598. mirascope/core/openai/_utils/_setup_call.py +0 -62
  599. mirascope/core/openai/call_params.py +0 -54
  600. mirascope/core/openai/call_response.py +0 -162
  601. mirascope/core/openai/call_response_chunk.py +0 -90
  602. mirascope/core/openai/dynamic_config.py +0 -26
  603. mirascope/core/openai/py.typed +0 -0
  604. mirascope/core/openai/stream.py +0 -148
  605. mirascope/core/openai/tool.py +0 -79
  606. mirascope/core/py.typed +0 -0
  607. mirascope/integrations/__init__.py +0 -20
  608. mirascope/integrations/_middleware_factory.py +0 -277
  609. mirascope/integrations/langfuse/__init__.py +0 -3
  610. mirascope/integrations/langfuse/_utils.py +0 -114
  611. mirascope/integrations/langfuse/_with_langfuse.py +0 -71
  612. mirascope/integrations/logfire/__init__.py +0 -3
  613. mirascope/integrations/logfire/_utils.py +0 -188
  614. mirascope/integrations/logfire/_with_logfire.py +0 -60
  615. mirascope/integrations/otel/__init__.py +0 -5
  616. mirascope/integrations/otel/_utils.py +0 -268
  617. mirascope/integrations/otel/_with_hyperdx.py +0 -61
  618. mirascope/integrations/otel/_with_otel.py +0 -60
  619. mirascope/integrations/tenacity.py +0 -50
  620. mirascope/py.typed +0 -0
  621. mirascope/v0/__init__.py +0 -43
  622. mirascope/v0/anthropic.py +0 -54
  623. mirascope/v0/base/__init__.py +0 -12
  624. mirascope/v0/base/calls.py +0 -118
  625. mirascope/v0/base/extractors.py +0 -122
  626. mirascope/v0/base/ops_utils.py +0 -207
  627. mirascope/v0/base/prompts.py +0 -48
  628. mirascope/v0/base/types.py +0 -14
  629. mirascope/v0/base/utils.py +0 -21
  630. mirascope/v0/openai.py +0 -54
  631. mirascope-1.0.5.dist-info/METADATA +0 -519
  632. mirascope-1.0.5.dist-info/RECORD +0 -198
@@ -0,0 +1,577 @@
1
+ """StreamResponse and AsyncStreamResponse to stream content from LLMs."""
2
+
3
+ import asyncio
4
+ from collections.abc import Sequence
5
+ from typing import TYPE_CHECKING, Generic, overload
6
+
7
+ from ..content import ToolOutput
8
+ from ..context import Context, DepsT
9
+ from ..formatting import Format, FormattableT
10
+ from ..messages import Message, UserContent
11
+ from ..tools import (
12
+ AsyncContextToolkit,
13
+ AsyncContextTools,
14
+ AsyncToolkit,
15
+ AsyncTools,
16
+ ContextToolkit,
17
+ ContextTools,
18
+ Toolkit,
19
+ Tools,
20
+ )
21
+ from ..types import Jsonable
22
+ from .base_stream_response import (
23
+ AsyncChunkIterator,
24
+ BaseAsyncStreamResponse,
25
+ BaseSyncStreamResponse,
26
+ ChunkIterator,
27
+ )
28
+
29
+ if TYPE_CHECKING:
30
+ from ..models import Params
31
+ from ..providers import ModelId, ProviderId
32
+
33
+
34
+ class StreamResponse(BaseSyncStreamResponse[Toolkit, FormattableT]):
35
+ """A `StreamResponse` wraps response content from the LLM with a streaming interface.
36
+
37
+ This class supports iteration to process chunks as they arrive from the model.
38
+
39
+ Content can be streamed in one of three ways:
40
+ - Via `.streams()`, which provides an iterator of streams, where each
41
+ stream contains chunks of streamed data. The chunks contain `delta`s (new content
42
+ in that particular chunk), and the stream itself accumulates the collected state
43
+ of all the chunks processed thus far.
44
+ - Via `.chunk_stream()` which allows iterating over Mirascope's provider-
45
+ agnostic chunk representation.
46
+ - Via `.pretty_stream()` a helper method which provides all response content
47
+ as `str` deltas. Iterating through `pretty_stream` will yield text content and
48
+ optionally placeholder representations for other content types, but it will still
49
+ consume the full stream.
50
+ - Via `.structured_stream()`, a helper method which provides partial
51
+ structured outputs from a response (useful when FormatT is set). Iterating through
52
+ `structured_stream` will only yield structured partials, but it will still consume
53
+ the full stream.
54
+
55
+ As chunks are consumed, they are collected in-memory on the `StreamResponse`, and they
56
+ become available in `.content`, `.messages`, `.tool_calls`, etc. All of the stream
57
+ iterators can be restarted after the stream has been consumed, in which case they
58
+ will yield chunks from memory in the original sequence that came from the LLM. If
59
+ the stream is only partially consumed, a fresh iterator will first iterate through
60
+ in-memory content, and then will continue consuming fresh chunks from the LLM.
61
+
62
+ In the specific case of text chunks, they are included in the response content as soon
63
+ as they become available, via an `llm.Text` part that updates as more deltas come in.
64
+ This enables the behavior where resuming a partially-streamed response will include
65
+ as much text as the model generated.
66
+
67
+ For other chunks, like `Thinking` or `ToolCall`, they are only added to response
68
+ content once the corresponding part has fully streamed. This avoids issues like
69
+ adding incomplete tool calls, or thinking blocks missing signatures, to the response.
70
+
71
+ For each iterator, fully iterating through the iterator will consume the whole
72
+ LLM stream. You can pause stream execution midway by breaking out of the iterator,
73
+ and you can safely resume execution from the same iterator if desired.
74
+
75
+
76
+ Example:
77
+ ```python
78
+ from mirascope import llm
79
+
80
+ @llm.call(
81
+ provider_id="openai",
82
+ model_id="openai/gpt-5-mini",
83
+ )
84
+ def answer_question(question: str) -> str:
85
+ return f"Answer this question: {question}"
86
+
87
+ stream_response = answer_question.stream("What is the capital of France?")
88
+
89
+ for chunk in stream_response.text_stream():
90
+ print(chunk, end="", flush=True)
91
+ ```
92
+ """
93
+
94
+ def __init__(
95
+ self,
96
+ *,
97
+ provider_id: "ProviderId",
98
+ model_id: "ModelId",
99
+ provider_model_name: str,
100
+ params: "Params",
101
+ tools: Tools | None = None,
102
+ format: Format[FormattableT] | None = None,
103
+ input_messages: Sequence[Message],
104
+ chunk_iterator: ChunkIterator,
105
+ ) -> None:
106
+ """Initialize a `StreamResponse`."""
107
+ toolkit = tools if isinstance(tools, Toolkit) else Toolkit(tools=tools)
108
+ super().__init__(
109
+ provider_id=provider_id,
110
+ model_id=model_id,
111
+ provider_model_name=provider_model_name,
112
+ params=params,
113
+ toolkit=toolkit,
114
+ format=format,
115
+ input_messages=input_messages,
116
+ chunk_iterator=chunk_iterator,
117
+ )
118
+
119
+ def execute_tools(self) -> Sequence[ToolOutput[Jsonable]]:
120
+ """Execute and return all of the tool calls in the response.
121
+
122
+ Returns:
123
+ A sequence containing a `ToolOutput` for every tool call in the order they appeared.
124
+
125
+ Raises:
126
+ ToolNotFoundError: If one of the response's tool calls has no matching tool.
127
+ Exception: If one of the tools throws an exception.
128
+ """
129
+ return [self.toolkit.execute(tool_call) for tool_call in self.tool_calls]
130
+
131
+ @overload
132
+ def resume(self: "StreamResponse", content: UserContent) -> "StreamResponse": ...
133
+
134
+ @overload
135
+ def resume(
136
+ self: "StreamResponse[FormattableT]", content: UserContent
137
+ ) -> "StreamResponse[FormattableT]": ...
138
+
139
+ def resume(
140
+ self, content: UserContent
141
+ ) -> "StreamResponse | StreamResponse[FormattableT]":
142
+ """Generate a new `StreamResponse` using this response's messages with additional user content.
143
+
144
+ Uses this response's tools and format type. Also uses this response's provider,
145
+ model, client, and params, unless the model context manager is being used to
146
+ provide a new LLM as an override.
147
+
148
+ Args:
149
+ content: The new user message content to append to the message history.
150
+
151
+ Returns:
152
+ A new `StreamResponse` instance generated from the extended message history.
153
+ """
154
+ return self.model.resume_stream(
155
+ response=self,
156
+ content=content,
157
+ )
158
+
159
+
160
+ class AsyncStreamResponse(BaseAsyncStreamResponse[AsyncToolkit, FormattableT]):
161
+ """An `AsyncStreamResponse` wraps response content from the LLM with a streaming interface.
162
+
163
+ This class supports iteration to process chunks as they arrive from the model.
164
+
165
+ Content can be streamed in one of three ways:
166
+ - Via `.streams()`, which provides an iterator of streams, where each
167
+ stream contains chunks of streamed data. The chunks contain `delta`s (new content
168
+ in that particular chunk), and the stream itself accumulates the collected state
169
+ of all the chunks processed thus far.
170
+ - Via `.chunk_stream()` which allows iterating over Mirascope's provider-
171
+ agnostic chunk representation.
172
+ - Via `.pretty_stream()` a helper method which provides all response content
173
+ as `str` deltas. Iterating through `pretty_stream` will yield text content and
174
+ optionally placeholder representations for other content types, but it will still
175
+ consume the full stream.
176
+ - Via `.structured_stream()`, a helper method which provides partial
177
+ structured outputs from a response (useful when FormatT is set). Iterating through
178
+ `structured_stream` will only yield structured partials, but it will still consume
179
+ the full stream.
180
+
181
+ As chunks are consumed, they are collected in-memory on the `AsyncContextStreamResponse`, and they
182
+ become available in `.content`, `.messages`, `.tool_calls`, etc. All of the stream
183
+ iterators can be restarted after the stream has been consumed, in which case they
184
+ will yield chunks from memory in the original sequence that came from the LLM. If
185
+ the stream is only partially consumed, a fresh iterator will first iterate through
186
+ in-memory content, and then will continue consuming fresh chunks from the LLM.
187
+
188
+ In the specific case of text chunks, they are included in the response content as soon
189
+ as they become available, via an `llm.Text` part that updates as more deltas come in.
190
+ This enables the behavior where resuming a partially-streamed response will include
191
+ as much text as the model generated.
192
+
193
+ For other chunks, like `Thinking` or `ToolCall`, they are only added to response
194
+ content once the corresponding part has fully streamed. This avoids issues like
195
+ adding incomplete tool calls, or thinking blocks missing signatures, to the response.
196
+
197
+ For each iterator, fully iterating through the iterator will consume the whole
198
+ LLM stream. You can pause stream execution midway by breaking out of the iterator,
199
+ and you can safely resume execution from the same iterator if desired.
200
+
201
+
202
+ Example:
203
+ ```python
204
+ from mirascope import llm
205
+
206
+ @llm.call(
207
+ provider_id="openai",
208
+ model_id="openai/gpt-5-mini",
209
+ )
210
+ async def answer_question(question: str) -> str:
211
+ return f"Answer this question: {question}"
212
+
213
+ stream_response = await answer_question.stream("What is the capital of France?")
214
+
215
+ async for chunk in stream_response.text_stream():
216
+ print(chunk, end="", flush=True)
217
+ ```
218
+ """
219
+
220
+ def __init__(
221
+ self,
222
+ *,
223
+ provider_id: "ProviderId",
224
+ model_id: "ModelId",
225
+ provider_model_name: str,
226
+ params: "Params",
227
+ tools: AsyncTools | None = None,
228
+ format: Format[FormattableT] | None = None,
229
+ input_messages: Sequence[Message],
230
+ chunk_iterator: AsyncChunkIterator,
231
+ ) -> None:
232
+ """Initialize an `AsyncStreamResponse`."""
233
+ toolkit = (
234
+ tools if isinstance(tools, AsyncToolkit) else AsyncToolkit(tools=tools)
235
+ )
236
+ super().__init__(
237
+ provider_id=provider_id,
238
+ model_id=model_id,
239
+ provider_model_name=provider_model_name,
240
+ params=params,
241
+ toolkit=toolkit,
242
+ format=format,
243
+ input_messages=input_messages,
244
+ chunk_iterator=chunk_iterator,
245
+ )
246
+
247
+ async def execute_tools(self) -> Sequence[ToolOutput[Jsonable]]:
248
+ """Execute and return all of the tool calls in the response.
249
+
250
+ Returns:
251
+ A sequence containing a `ToolOutput` for every tool call in the order they appeared.
252
+
253
+ Raises:
254
+ ToolNotFoundError: If one of the response's tool calls has no matching tool.
255
+ Exception: If one of the tools throws an exception.
256
+ """
257
+ tasks = [self.toolkit.execute(tool_call) for tool_call in self.tool_calls]
258
+ return await asyncio.gather(*tasks)
259
+
260
+ @overload
261
+ async def resume(
262
+ self: "AsyncStreamResponse", content: UserContent
263
+ ) -> "AsyncStreamResponse": ...
264
+
265
+ @overload
266
+ async def resume(
267
+ self: "AsyncStreamResponse[FormattableT]", content: UserContent
268
+ ) -> "AsyncStreamResponse[FormattableT]": ...
269
+
270
+ async def resume(
271
+ self, content: UserContent
272
+ ) -> "AsyncStreamResponse | AsyncStreamResponse[FormattableT]":
273
+ """Generate a new `AsyncStreamResponse` using this response's messages with additional user content.
274
+
275
+ Uses this response's tools and format type. Also uses this response's provider,
276
+ model, client, and params, unless the model context manager is being used to
277
+ provide a new LLM as an override.
278
+
279
+ Args:
280
+ content: The new user message content to append to the message history.
281
+
282
+ Returns:
283
+ A new `AsyncStreamResponse` instance generated from the extended message history.
284
+ """
285
+ return await self.model.resume_stream_async(
286
+ response=self,
287
+ content=content,
288
+ )
289
+
290
+
291
+ class ContextStreamResponse(
292
+ BaseSyncStreamResponse[ContextToolkit[DepsT], FormattableT],
293
+ Generic[DepsT, FormattableT],
294
+ ):
295
+ """A `ContextStreamResponse` wraps response content from the LLM with a streaming interface.
296
+
297
+ This class supports iteration to process chunks as they arrive from the model.
298
+
299
+ Content can be streamed in one of three ways:
300
+ - Via `.streams()`, which provides an iterator of streams, where each
301
+ stream contains chunks of streamed data. The chunks contain `delta`s (new content
302
+ in that particular chunk), and the stream itself accumulates the collected state
303
+ of all the chunks processed thus far.
304
+ - Via `.chunk_stream()` which allows iterating over Mirascope's provider-
305
+ agnostic chunk representation.
306
+ - Via `.pretty_stream()` a helper method which provides all response content
307
+ as `str` deltas. Iterating through `pretty_stream` will yield text content and
308
+ optionally placeholder representations for other content types, but it will still
309
+ consume the full stream.
310
+ - Via `.structured_stream()`, a helper method which provides partial
311
+ structured outputs from a response (useful when FormatT is set). Iterating through
312
+ `structured_stream` will only yield structured partials, but it will still consume
313
+ the full stream.
314
+
315
+ As chunks are consumed, they are collected in-memory on the `ContextStreamResponse`, and they
316
+ become available in `.content`, `.messages`, `.tool_calls`, etc. All of the stream
317
+ iterators can be restarted after the stream has been consumed, in which case they
318
+ will yield chunks from memory in the original sequence that came from the LLM. If
319
+ the stream is only partially consumed, a fresh iterator will first iterate through
320
+ in-memory content, and then will continue consuming fresh chunks from the LLM.
321
+
322
+ In the specific case of text chunks, they are included in the response content as soon
323
+ as they become available, via an `llm.Text` part that updates as more deltas come in.
324
+ This enables the behavior where resuming a partially-streamed response will include
325
+ as much text as the model generated.
326
+
327
+ For other chunks, like `Thinking` or `ToolCall`, they are only added to response
328
+ content once the corresponding part has fully streamed. This avoids issues like
329
+ adding incomplete tool calls, or thinking blocks missing signatures, to the response.
330
+
331
+ For each iterator, fully iterating through the iterator will consume the whole
332
+ LLM stream. You can pause stream execution midway by breaking out of the iterator,
333
+ and you can safely resume execution from the same iterator if desired.
334
+
335
+
336
+ Example:
337
+ ```python
338
+ from mirascope import llm
339
+
340
+ @llm.call(
341
+ provider_id="openai",
342
+ model_id="openai/gpt-5-mini",
343
+ )
344
+ def answer_question(ctx: llm.Context, question: str) -> str:
345
+ return f"Answer this question: {question}"
346
+
347
+ ctx = llm.Context()
348
+ stream_response = answer_question.stream(ctx, "What is the capital of France?")
349
+
350
+ for chunk in stream_response.text_stream():
351
+ print(chunk, end="", flush=True)
352
+ ```
353
+ """
354
+
355
+ def __init__(
356
+ self,
357
+ *,
358
+ provider_id: "ProviderId",
359
+ model_id: "ModelId",
360
+ provider_model_name: str,
361
+ params: "Params",
362
+ tools: ContextTools[DepsT] | None = None,
363
+ format: Format[FormattableT] | None = None,
364
+ input_messages: Sequence[Message],
365
+ chunk_iterator: ChunkIterator,
366
+ ) -> None:
367
+ """Initialize a `ContextStreamResponse`."""
368
+ toolkit = (
369
+ tools if isinstance(tools, ContextToolkit) else ContextToolkit(tools=tools)
370
+ )
371
+ super().__init__(
372
+ provider_id=provider_id,
373
+ model_id=model_id,
374
+ provider_model_name=provider_model_name,
375
+ params=params,
376
+ toolkit=toolkit,
377
+ format=format,
378
+ input_messages=input_messages,
379
+ chunk_iterator=chunk_iterator,
380
+ )
381
+
382
+ def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput[Jsonable]]:
383
+ """Execute and return all of the tool calls in the response.
384
+
385
+ Args:
386
+ ctx: A `Context` with the required deps type.
387
+
388
+ Returns:
389
+ A sequence containing a `ToolOutput` for every tool call.
390
+
391
+ Raises:
392
+ ToolNotFoundError: If one of the response's tool calls has no matching tool.
393
+ Exception: If one of the tools throws an exception.
394
+ """
395
+ return [self.toolkit.execute(ctx, tool_call) for tool_call in self.tool_calls]
396
+
397
+ @overload
398
+ def resume(
399
+ self: "ContextStreamResponse[DepsT]", ctx: Context[DepsT], content: UserContent
400
+ ) -> "ContextStreamResponse[DepsT]": ...
401
+
402
+ @overload
403
+ def resume(
404
+ self: "ContextStreamResponse[DepsT, FormattableT]",
405
+ ctx: Context[DepsT],
406
+ content: UserContent,
407
+ ) -> "ContextStreamResponse[DepsT, FormattableT]": ...
408
+
409
+ def resume(
410
+ self, ctx: Context[DepsT], content: UserContent
411
+ ) -> "ContextStreamResponse[DepsT] | ContextStreamResponse[DepsT, FormattableT]":
412
+ """Generate a new `ContextStreamResponse` using this response's messages with additional user content.
413
+
414
+ Uses this response's tools and format type. Also uses this response's provider,
415
+ model, client, and params, unless the model context manager is being used to
416
+ provide a new LLM as an override.
417
+
418
+ Args:
419
+ ctx: A Context with the required deps type.
420
+ content: The new user message content to append to the message history.
421
+
422
+ Returns:
423
+ A new `ContextStreamResponse` instance generated from the extended message history.
424
+ """
425
+ return self.model.context_resume_stream(
426
+ ctx=ctx,
427
+ response=self,
428
+ content=content,
429
+ )
430
+
431
+
432
+ class AsyncContextStreamResponse(
433
+ BaseAsyncStreamResponse[AsyncContextToolkit[DepsT], FormattableT],
434
+ Generic[DepsT, FormattableT],
435
+ ):
436
+ """An `AsyncContextStreamResponse` wraps response content from the LLM with a streaming interface.
437
+
438
+ This class supports iteration to process chunks as they arrive from the model.
439
+
440
+ Content can be streamed in one of three ways:
441
+ - Via `.streams()`, which provides an iterator of streams, where each
442
+ stream contains chunks of streamed data. The chunks contain `delta`s (new content
443
+ in that particular chunk), and the stream itself accumulates the collected state
444
+ of all the chunks processed thus far.
445
+ - Via `.chunk_stream()` which allows iterating over Mirascope's provider-
446
+ agnostic chunk representation.
447
+ - Via `.pretty_stream()` a helper method which provides all response content
448
+ as `str` deltas. Iterating through `pretty_stream` will yield text content and
449
+ optionally placeholder representations for other content types, but it will still
450
+ consume the full stream.
451
+ - Via `.structured_stream()`, a helper method which provides partial
452
+ structured outputs from a response (useful when FormatT is set). Iterating through
453
+ `structured_stream` will only yield structured partials, but it will still consume
454
+ the full stream.
455
+
456
+ As chunks are consumed, they are collected in-memory on the `AsyncContextStreamResponse`, and they
457
+ become available in `.content`, `.messages`, `.tool_calls`, etc. All of the stream
458
+ iterators can be restarted after the stream has been consumed, in which case they
459
+ will yield chunks from memory in the original sequence that came from the LLM. If
460
+ the stream is only partially consumed, a fresh iterator will first iterate through
461
+ in-memory content, and then will continue consuming fresh chunks from the LLM.
462
+
463
+ In the specific case of text chunks, they are included in the response content as soon
464
+ as they become available, via an `llm.Text` part that updates as more deltas come in.
465
+ This enables the behavior where resuming a partially-streamed response will include
466
+ as much text as the model generated.
467
+
468
+ For other chunks, like `Thinking` or `ToolCall`, they are only added to response
469
+ content once the corresponding part has fully streamed. This avoids issues like
470
+ adding incomplete tool calls, or thinking blocks missing signatures, to the response.
471
+
472
+ For each iterator, fully iterating through the iterator will consume the whole
473
+ LLM stream. You can pause stream execution midway by breaking out of the iterator,
474
+ and you can safely resume execution from the same iterator if desired.
475
+
476
+
477
+ Example:
478
+ ```python
479
+ from mirascope import llm
480
+
481
+ @llm.call(
482
+ provider_id="openai",
483
+ model_id="openai/gpt-5-mini",
484
+ )
485
+ async def answer_question(ctx: llm.Context, question: str) -> str:
486
+ return f"Answer this question: {question}"
487
+
488
+ ctx = llm.Context()
489
+ stream_response = await answer_question.stream(ctx, "What is the capital of France?")
490
+
491
+ async for chunk in stream_response.text_stream():
492
+ print(chunk, end="", flush=True)
493
+ ```
494
+ """
495
+
496
+ def __init__(
497
+ self,
498
+ *,
499
+ provider_id: "ProviderId",
500
+ model_id: "ModelId",
501
+ provider_model_name: str,
502
+ params: "Params",
503
+ tools: AsyncContextTools[DepsT] | None = None,
504
+ format: Format[FormattableT] | None = None,
505
+ input_messages: Sequence[Message],
506
+ chunk_iterator: AsyncChunkIterator,
507
+ ) -> None:
508
+ """Initialize an `AsyncContextStreamResponse`."""
509
+ toolkit = (
510
+ tools
511
+ if isinstance(tools, AsyncContextToolkit)
512
+ else AsyncContextToolkit(tools=tools)
513
+ )
514
+ super().__init__(
515
+ provider_id=provider_id,
516
+ model_id=model_id,
517
+ provider_model_name=provider_model_name,
518
+ params=params,
519
+ toolkit=toolkit,
520
+ format=format,
521
+ input_messages=input_messages,
522
+ chunk_iterator=chunk_iterator,
523
+ )
524
+
525
+ async def execute_tools(
526
+ self, ctx: Context[DepsT]
527
+ ) -> Sequence[ToolOutput[Jsonable]]:
528
+ """Execute and return all of the tool calls in the response.
529
+
530
+ Args:
531
+ ctx: A `Context` with the required deps type.
532
+
533
+ Returns:
534
+ A sequence containing a `ToolOutput` for every tool call in the order they appeared.
535
+
536
+ Raises:
537
+ ToolNotFoundError: If one of the response's tool calls has no matching tool.
538
+ Exception: If one of the tools throws an exception.
539
+ """
540
+ tasks = [self.toolkit.execute(ctx, tool_call) for tool_call in self.tool_calls]
541
+ return await asyncio.gather(*tasks)
542
+
543
+ @overload
544
+ async def resume(
545
+ self: "AsyncContextStreamResponse[DepsT]",
546
+ ctx: Context[DepsT],
547
+ content: UserContent,
548
+ ) -> "AsyncContextStreamResponse[DepsT]": ...
549
+
550
+ @overload
551
+ async def resume(
552
+ self: "AsyncContextStreamResponse[DepsT, FormattableT]",
553
+ ctx: Context[DepsT],
554
+ content: UserContent,
555
+ ) -> "AsyncContextStreamResponse[DepsT, FormattableT]": ...
556
+
557
+ async def resume(
558
+ self, ctx: Context[DepsT], content: UserContent
559
+ ) -> "AsyncContextStreamResponse[DepsT] | AsyncContextStreamResponse[DepsT, FormattableT]":
560
+ """Generate a new `AsyncContextStreamResponse` using this response's messages with additional user content.
561
+
562
+ Uses this response's tools and format type. Also uses this response's provider,
563
+ model, client, and params, unless the model context manager is being used to
564
+ provide a new LLM as an override.
565
+
566
+ Args:
567
+ ctx: A Context with the required deps type.
568
+ content: The new user message content to append to the message history.
569
+
570
+ Returns:
571
+ A new `AsyncContextStreamResponse` instance generated from the extended message history.
572
+ """
573
+ return await self.model.context_resume_stream_async(
574
+ ctx=ctx,
575
+ response=self,
576
+ content=content,
577
+ )