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
@@ -1,121 +0,0 @@
1
- """Handles the stream of completion chunks."""
2
-
3
- from collections.abc import AsyncGenerator, Generator
4
-
5
- from mistralai.models.chat_completion import (
6
- ChatCompletionStreamResponse,
7
- FunctionCall,
8
- ToolCall,
9
- ToolType,
10
- )
11
-
12
- from ..call_response_chunk import MistralCallResponseChunk
13
- from ..tool import MistralTool
14
-
15
-
16
- def _handle_chunk(
17
- chunk: ChatCompletionStreamResponse,
18
- current_tool_call: ToolCall,
19
- current_tool_type: type[MistralTool] | None,
20
- tool_types: list[type[MistralTool]] | None,
21
- ) -> tuple[
22
- MistralTool | None,
23
- ToolCall,
24
- type[MistralTool] | None,
25
- ]:
26
- """Handles a chunk of the stream."""
27
- if not tool_types or not (tool_calls := chunk.choices[0].delta.tool_calls):
28
- return None, current_tool_call, current_tool_type
29
-
30
- tool_call = tool_calls[0]
31
- # Reset on new tool
32
- if tool_call.id != "null" and tool_call.function is not None:
33
- previous_tool_call = current_tool_call.model_copy()
34
- previous_tool_type = current_tool_type
35
- current_tool_call = ToolCall(
36
- id=tool_call.id,
37
- function=FunctionCall(
38
- arguments="",
39
- name=tool_call.function.name if tool_call.function.name else "",
40
- ),
41
- type=ToolType.function,
42
- )
43
- current_tool_type = None
44
- for tool_type in tool_types:
45
- if tool_type._name() == tool_call.function.name:
46
- current_tool_type = tool_type
47
- break
48
- if current_tool_type is None:
49
- raise RuntimeError(
50
- f"Unknown tool type in stream: {tool_call.function.name}"
51
- ) # pragma: no cover
52
- if previous_tool_call.id and previous_tool_type is not None:
53
- return (
54
- previous_tool_type.from_tool_call(previous_tool_call),
55
- current_tool_call,
56
- current_tool_type,
57
- )
58
-
59
- # Update arguments with each chunk
60
- if tool_call.function and tool_call.function.arguments:
61
- current_tool_call.function.arguments += tool_call.function.arguments
62
-
63
- return None, current_tool_call, current_tool_type
64
-
65
-
66
- def handle_stream(
67
- stream: Generator[ChatCompletionStreamResponse, None, None],
68
- tool_types: list[type[MistralTool]] | None,
69
- ) -> Generator[tuple[MistralCallResponseChunk, MistralTool | None], None, None]:
70
- """Iterator over the stream and constructs tools as they are streamed."""
71
- current_tool_call = ToolCall(
72
- id="", function=FunctionCall(arguments="", name=""), type=ToolType.function
73
- )
74
- current_tool_type = None
75
- for chunk in stream:
76
- if not tool_types or not chunk.choices[0].delta.tool_calls:
77
- if current_tool_type:
78
- yield (
79
- MistralCallResponseChunk(chunk=chunk),
80
- current_tool_type.from_tool_call(current_tool_call),
81
- )
82
- current_tool_type = None
83
- else:
84
- yield MistralCallResponseChunk(chunk=chunk), None
85
- tool, current_tool_call, current_tool_type = _handle_chunk(
86
- chunk,
87
- current_tool_call,
88
- current_tool_type,
89
- tool_types,
90
- )
91
- if tool is not None:
92
- yield MistralCallResponseChunk(chunk=chunk), tool
93
-
94
-
95
- async def handle_stream_async(
96
- stream: AsyncGenerator[ChatCompletionStreamResponse, None],
97
- tool_types: list[type[MistralTool]] | None,
98
- ) -> AsyncGenerator[tuple[MistralCallResponseChunk, MistralTool | None], None]:
99
- """Async iterator over the stream and constructs tools as they are streamed."""
100
- current_tool_call = ToolCall(
101
- id="", function=FunctionCall(arguments="", name=""), type=ToolType.function
102
- )
103
- current_tool_type = None
104
- async for chunk in stream:
105
- if not tool_types or not chunk.choices[0].delta.tool_calls:
106
- if current_tool_type:
107
- yield (
108
- MistralCallResponseChunk(chunk=chunk),
109
- current_tool_type.from_tool_call(current_tool_call),
110
- )
111
- current_tool_type = None
112
- else:
113
- yield MistralCallResponseChunk(chunk=chunk), None
114
- tool, current_tool_call, current_tool_type = _handle_chunk(
115
- chunk,
116
- current_tool_call,
117
- current_tool_type,
118
- tool_types,
119
- )
120
- if tool is not None:
121
- yield MistralCallResponseChunk(chunk=chunk), tool
@@ -1,86 +0,0 @@
1
- """This module contains the setup_call function for Mistral tools."""
2
-
3
- import inspect
4
- from collections.abc import AsyncGenerator, Awaitable, Callable, Coroutine, Iterable
5
- from typing import Any, cast
6
-
7
- from mistralai.async_client import MistralAsyncClient
8
- from mistralai.client import MistralClient
9
- from mistralai.models.chat_completion import (
10
- ChatCompletionResponse,
11
- ChatCompletionStreamResponse,
12
- ChatMessage,
13
- ResponseFormat,
14
- ResponseFormats,
15
- ToolChoice,
16
- )
17
-
18
- from ...base import BaseMessageParam, BaseTool, _utils
19
- from ..call_params import MistralCallParams
20
- from ..dynamic_config import MistralDynamicConfig
21
- from ..tool import MistralTool
22
- from ._convert_message_params import convert_message_params
23
-
24
-
25
- def setup_call(
26
- *,
27
- model: str,
28
- client: MistralClient | MistralAsyncClient | None,
29
- fn: Callable[..., MistralDynamicConfig | Awaitable[MistralDynamicConfig]],
30
- fn_args: dict[str, Any],
31
- dynamic_config: MistralDynamicConfig,
32
- tools: list[type[BaseTool] | Callable] | None,
33
- json_mode: bool,
34
- call_params: MistralCallParams,
35
- extract: bool,
36
- ) -> tuple[
37
- Callable[..., ChatCompletionResponse]
38
- | Callable[..., Awaitable[ChatCompletionResponse]],
39
- str,
40
- list[ChatMessage],
41
- list[type[MistralTool]] | None,
42
- dict[str, Any],
43
- ]:
44
- prompt_template, messages, tool_types, call_kwargs = _utils.setup_call(
45
- fn, fn_args, dynamic_config, tools, MistralTool, call_params
46
- )
47
- messages = cast(list[BaseMessageParam | ChatMessage], messages)
48
- messages = convert_message_params(messages)
49
- if json_mode:
50
- call_kwargs["response_format"] = ResponseFormat(
51
- type=ResponseFormats("json_object")
52
- )
53
- json_mode_content = _utils.json_mode_content(
54
- tool_types[0] if tool_types else None
55
- )
56
- if messages[-1].role == "user":
57
- messages[-1].content += json_mode_content
58
- else:
59
- messages.append(ChatMessage(role="user", content=json_mode_content.strip()))
60
- call_kwargs.pop("tools", None)
61
- elif extract:
62
- assert tool_types, "At least one tool must be provided for extraction."
63
- call_kwargs["tool_choice"] = ToolChoice.any
64
- call_kwargs |= {"model": model, "messages": messages}
65
-
66
- if client is None:
67
- client = (
68
- MistralAsyncClient() if inspect.iscoroutinefunction(fn) else MistralClient()
69
- )
70
-
71
- def create_or_stream(
72
- stream: bool,
73
- **kwargs: Any, # noqa: ANN401
74
- ) -> (
75
- Iterable[ChatCompletionStreamResponse]
76
- | AsyncGenerator[ # noqa: ANN401
77
- ChatCompletionStreamResponse, None
78
- ]
79
- | ChatCompletionResponse
80
- | Coroutine[Any, Any, ChatCompletionResponse]
81
- ):
82
- if stream:
83
- return client.chat_stream(**kwargs)
84
- return client.chat(**kwargs)
85
-
86
- return create_or_stream, prompt_template, messages, tool_types, call_kwargs # type: ignore
@@ -1,36 +0,0 @@
1
- """usage docs: learn/calls.md#provider-specific-parameters"""
2
-
3
- from __future__ import annotations
4
-
5
- from mistralai.models.chat_completion import ResponseFormat, ToolChoice
6
- from typing_extensions import NotRequired
7
-
8
- from ..base import BaseCallParams
9
-
10
-
11
- class MistralCallParams(BaseCallParams):
12
- """The parameters to use when calling the Mistral API.
13
-
14
- [Mistral API Reference](https://docs.mistral.ai/api/)
15
-
16
- Attributes:
17
- endpoint: ...
18
- max_tokens: ...
19
- random_seed: ...
20
- response_format: ...
21
- safe_mode: ...
22
- safe_prompt: ...
23
- temperature: ...
24
- tool_choice: ...
25
- top_p: ...
26
- """
27
-
28
- endpoint: NotRequired[str | None]
29
- max_tokens: NotRequired[int | None]
30
- random_seed: NotRequired[int | None]
31
- response_format: NotRequired[ResponseFormat | None]
32
- safe_mode: NotRequired[bool | None]
33
- safe_prompt: NotRequired[bool | None]
34
- temperature: NotRequired[float | None]
35
- tool_choice: NotRequired[ToolChoice | None]
36
- top_p: NotRequired[float | None]
@@ -1,156 +0,0 @@
1
- """This module contains the `MistralCallResponse` class.
2
-
3
- usage docs: learn/calls.md#handling-responses
4
- """
5
-
6
- from mistralai.models.chat_completion import ChatCompletionResponse, ChatMessage
7
- from mistralai.models.common import UsageInfo
8
- from pydantic import computed_field
9
-
10
- from ..base import BaseCallResponse
11
- from ._utils import calculate_cost
12
- from .call_params import MistralCallParams
13
- from .dynamic_config import MistralDynamicConfig
14
- from .tool import MistralTool
15
-
16
-
17
- class MistralCallResponse(
18
- BaseCallResponse[
19
- ChatCompletionResponse,
20
- MistralTool,
21
- MistralDynamicConfig,
22
- ChatMessage,
23
- MistralCallParams,
24
- ChatMessage,
25
- ]
26
- ):
27
- """A convenience wrapper around the Mistral `ChatCompletion` response.
28
-
29
- When calling the Mistral API using a function decorated with `mistral_call`, the
30
- response will be an `MistralCallResponse` instance with properties that allow for
31
- more convenience access to commonly used attributes.
32
-
33
- Example:
34
-
35
- ```python
36
- from mirascope.core import prompt_template
37
- from mirascope.core.mistral import mistral_call
38
-
39
-
40
- @mistral_call("mistral-largel-latest")
41
- @prompt_template("Recommend a {genre} book")
42
- def recommend_book(genre: str):
43
- ...
44
-
45
-
46
- response = recommend_book("fantasy") # response is an `MistralCallResponse` instance
47
- print(response.content)
48
- ```
49
- """
50
-
51
- _provider = "mistral"
52
-
53
- @property
54
- def content(self) -> str:
55
- """The content of the chat completion for the 0th choice."""
56
- return self.response.choices[0].message.content
57
-
58
- @property
59
- def finish_reasons(self) -> list[str]:
60
- """Returns the finish reasons of the response."""
61
- return [
62
- choice.finish_reason if choice.finish_reason else ""
63
- for choice in self.response.choices
64
- ]
65
-
66
- @property
67
- def model(self) -> str:
68
- """Returns the name of the response model."""
69
- return self.response.model
70
-
71
- @property
72
- def id(self) -> str:
73
- """Returns the id of the response."""
74
- return self.response.id
75
-
76
- @property
77
- def usage(self) -> UsageInfo:
78
- """Returns the usage of the chat completion."""
79
- return self.response.usage
80
-
81
- @property
82
- def input_tokens(self) -> int:
83
- """Returns the number of input tokens."""
84
- return self.usage.prompt_tokens
85
-
86
- @property
87
- def output_tokens(self) -> int | None:
88
- """Returns the number of output tokens."""
89
- return self.usage.completion_tokens
90
-
91
- @property
92
- def cost(self) -> float | None:
93
- """Returns the cost of the call."""
94
- return calculate_cost(self.input_tokens, self.output_tokens, self.model)
95
-
96
- @computed_field
97
- @property
98
- def message_param(self) -> ChatMessage:
99
- """Returns the assistants's response as a message parameter."""
100
- return self.response.choices[0].message
101
-
102
- @computed_field
103
- @property
104
- def tools(self) -> list[MistralTool] | None:
105
- """Returns the tools for the 0th choice message.
106
-
107
- Raises:
108
- ValidationError: if the tool call doesn't match the tool's schema.
109
- """
110
- tool_calls = self.response.choices[0].message.tool_calls
111
- if not self.tool_types or not tool_calls:
112
- return None
113
-
114
- extracted_tools = []
115
- for tool_call in tool_calls:
116
- for tool_type in self.tool_types:
117
- if tool_call.function.name == tool_type._name():
118
- extracted_tools.append(tool_type.from_tool_call(tool_call))
119
- break
120
-
121
- return extracted_tools
122
-
123
- @computed_field
124
- @property
125
- def tool(self) -> MistralTool | None:
126
- """Returns the 0th tool for the 0th choice message.
127
-
128
- Raises:
129
- ValidationError: if the tool call doesn't match the tool's schema.
130
- """
131
- if tools := self.tools:
132
- return tools[0]
133
- return None
134
-
135
- @classmethod
136
- def tool_message_params(
137
- cls, tools_and_outputs: list[tuple[MistralTool, str]]
138
- ) -> list[ChatMessage]:
139
- """Returns the tool message parameters for tool call results.
140
-
141
- Args:
142
- tools_and_outputs: The list of tools and their outputs from which the tool
143
- message parameters should be constructed.
144
-
145
- Returns:
146
- The list of constructed `ChatMessage` parameters.
147
- """
148
- return [
149
- ChatMessage(
150
- role="tool",
151
- content=output,
152
- tool_call_id=tool.tool_call.id,
153
- name=tool._name(),
154
- )
155
- for tool, output in tools_and_outputs
156
- ]
@@ -1,84 +0,0 @@
1
- """This module contains the `MistralCallResponseChunk` class.
2
-
3
- usage docs: learn/streams.md#handling-streamed-responses
4
- """
5
-
6
- from mistralai.models.chat_completion import ChatCompletionStreamResponse, FinishReason
7
- from mistralai.models.common import UsageInfo
8
-
9
- from ..base import BaseCallResponseChunk
10
-
11
-
12
- class MistralCallResponseChunk(
13
- BaseCallResponseChunk[ChatCompletionStreamResponse, FinishReason]
14
- ):
15
- """A convenience wrapper around the Mistral `ChatCompletionChunk` streamed chunks.
16
-
17
- When calling the Mistral API using a function decorated with `mistral_call` and
18
- `stream` set to `True`, the stream will contain `MistralResponseChunk` instances with
19
- properties that allow for more convenient access to commonly used attributes.
20
-
21
- Example:
22
-
23
- ```python
24
- from mirascope.core import prompt_template
25
- from mirascope.core.mistral import mistral_call
26
-
27
-
28
- @mistral_call("mistral-large-latest", stream=True)
29
- @prompt_template("Recommend a {genre} book")
30
- def recommend_book(genre: str):
31
- ...
32
-
33
-
34
- stream = recommend_book("fantasy") # response is an `MistralStream`
35
- for chunk, _ in stream:
36
- print(chunk.content, end="", flush=True)
37
- ```
38
- """
39
-
40
- @property
41
- def content(self) -> str:
42
- """Returns the content of the delta."""
43
- delta = None
44
- if self.chunk.choices:
45
- delta = self.chunk.choices[0].delta
46
- return delta.content if delta is not None and delta.content is not None else ""
47
-
48
- @property
49
- def finish_reasons(self) -> list[FinishReason]:
50
- """Returns the finish reasons of the response."""
51
- return [
52
- choice.finish_reason
53
- for choice in self.chunk.choices
54
- if choice.finish_reason
55
- ]
56
-
57
- @property
58
- def model(self) -> str:
59
- """Returns the name of the response model."""
60
- return self.chunk.model
61
-
62
- @property
63
- def id(self) -> str:
64
- """Returns the id of the response."""
65
- return self.chunk.id
66
-
67
- @property
68
- def usage(self) -> UsageInfo | None:
69
- """Returns the usage of the chat completion."""
70
- return self.chunk.usage
71
-
72
- @property
73
- def input_tokens(self) -> int | None:
74
- """Returns the number of input tokens."""
75
- if self.usage:
76
- return self.usage.prompt_tokens
77
- return None
78
-
79
- @property
80
- def output_tokens(self) -> int | None:
81
- """Returns the number of output tokens."""
82
- if self.usage:
83
- return self.usage.completion_tokens
84
- return None
@@ -1,24 +0,0 @@
1
- """This module defines the function return type for functions as LLM calls.
2
-
3
- usage docs: learn/dynamic_configuration.md#dynamic-configuration-options
4
- """
5
-
6
- from ..base import BaseDynamicConfig, BaseMessageParam
7
- from .call_params import MistralCallParams
8
-
9
- MistralDynamicConfig = BaseDynamicConfig[BaseMessageParam, MistralCallParams]
10
- """The function return type for functions wrapped with the `mistral_call` decorator.
11
-
12
- Example:
13
-
14
- ```python
15
- from mirascope.core import prompt_template
16
- from mirascope.core.mistral import MistralDynamicConfig, mistral_call
17
-
18
-
19
- @mistral_call("mistral-large-latest")
20
- @prompt_template("Recommend a {capitalized_genre} book")
21
- def recommend_book(genre: str) -> MistralDynamicConfig:
22
- return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
23
- ```
24
- """
File without changes
@@ -1,117 +0,0 @@
1
- """The `MistralStream` class for convenience around streaming LLM calls.
2
-
3
- usage docs: learn/streams.md
4
- """
5
-
6
- from mistralai.models.chat_completion import (
7
- ChatCompletionResponse,
8
- ChatCompletionResponseChoice,
9
- ChatMessage,
10
- FinishReason,
11
- )
12
- from mistralai.models.common import UsageInfo
13
-
14
- from ..base.stream import BaseStream
15
- from ._utils import calculate_cost
16
- from .call_params import MistralCallParams
17
- from .call_response import MistralCallResponse
18
- from .call_response_chunk import MistralCallResponseChunk
19
- from .dynamic_config import MistralDynamicConfig
20
- from .tool import MistralTool
21
-
22
-
23
- class MistralStream(
24
- BaseStream[
25
- MistralCallResponse,
26
- MistralCallResponseChunk,
27
- ChatMessage,
28
- ChatMessage,
29
- ChatMessage,
30
- ChatMessage,
31
- MistralTool,
32
- MistralDynamicConfig,
33
- MistralCallParams,
34
- FinishReason,
35
- ]
36
- ):
37
- """A class for convenience around streaming Mistral LLM calls.
38
-
39
- Example:
40
-
41
- ```python
42
- from mirascope.core import prompt_template
43
- from mirascope.core.mistral import mistral_call
44
-
45
-
46
- @mistral_call("mistral-large-latest", stream=True)
47
- @prompt_template("Recommend a {genre} book")
48
- def recommend_book(genre: str):
49
- ...
50
-
51
-
52
- stream = recommend_book("fantasy") # returns `MistralStream` instance
53
- for chunk, _ in stream:
54
- print(chunk.content, end="", flush=True)
55
- ```
56
- """
57
-
58
- _provider = "mistral"
59
-
60
- @property
61
- def cost(self) -> float | None:
62
- """Returns the cost of the call."""
63
- return calculate_cost(self.input_tokens, self.output_tokens, self.model)
64
-
65
- def _construct_message_param(
66
- self, tool_calls: list | None = None, content: str | None = None
67
- ) -> ChatMessage:
68
- message_param = ChatMessage(
69
- role="assistant", content=content if content else "", tool_calls=tool_calls
70
- )
71
- return message_param
72
-
73
- def construct_call_response(self) -> MistralCallResponse:
74
- """Constructs the call response from a consumed MistralStream.
75
-
76
- Raises:
77
- ValueError: if the stream has not yet been consumed.
78
- """
79
- if not hasattr(self, "message_param"):
80
- raise ValueError(
81
- "No stream response, check if the stream has been consumed."
82
- )
83
- usage = UsageInfo(
84
- prompt_tokens=int(self.input_tokens or 0),
85
- completion_tokens=int(self.output_tokens or 0),
86
- total_tokens=int(self.input_tokens or 0) + int(self.output_tokens or 0),
87
- )
88
- completion = ChatCompletionResponse(
89
- id=self.id if self.id else "",
90
- choices=[
91
- ChatCompletionResponseChoice(
92
- finish_reason=self.finish_reasons[0]
93
- if self.finish_reasons
94
- else None,
95
- index=0,
96
- message=self.message_param,
97
- )
98
- ],
99
- created=0,
100
- model=self.model,
101
- object="",
102
- usage=usage,
103
- )
104
- return MistralCallResponse(
105
- metadata=self.metadata,
106
- response=completion,
107
- tool_types=self.tool_types,
108
- prompt_template=self.prompt_template,
109
- fn_args=self.fn_args if self.fn_args else {},
110
- dynamic_config=self.dynamic_config,
111
- messages=self.messages,
112
- call_params=self.call_params,
113
- call_kwargs=self.call_kwargs,
114
- user_message_param=self.user_message_param,
115
- start_time=self.start_time,
116
- end_time=self.end_time,
117
- )