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,77 +0,0 @@
1
- """The `MistralTool` class for easy tool usage with Mistral LLM calls.
2
-
3
- usage docs: learn/tools.md#using-tools-with-standard-calls
4
- """
5
-
6
- from __future__ import annotations
7
-
8
- from typing import Any
9
-
10
- import jiter
11
- from mistralai.models.chat_completion import ToolCall
12
- from pydantic.json_schema import SkipJsonSchema
13
-
14
- from ..base import BaseTool
15
-
16
-
17
- class MistralTool(BaseTool):
18
- """A class for defining tools for Mistral LLM calls.
19
-
20
- Example:
21
-
22
- ```python
23
- from mirascope.core import prompt_template
24
- from mirascope.core.mistral import mistral_call
25
-
26
-
27
- def format_book(title: str, author: str) -> str:
28
- return f"{title} by {author}"
29
-
30
-
31
- @mistral_call("mistral-large-latest", tools=[format_book])
32
- @prompt_template("Recommend a {genre} book")
33
- def recommend_book(genre: str):
34
- ...
35
-
36
-
37
- response = recommend_book("fantasy")
38
- if tool := response.tool: # returns a `MistralTool` instance
39
- print(tool.call())
40
- ```
41
- """
42
-
43
- tool_call: SkipJsonSchema[ToolCall]
44
-
45
- @classmethod
46
- def tool_schema(cls) -> dict[str, Any]:
47
- """Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
48
-
49
- Example:
50
- ```python
51
- from mirascope.core.mistral import MistralTool
52
-
53
-
54
- def format_book(title: str, author: str) -> str:
55
- return f"{title} by {author}"
56
-
57
-
58
- tool_type = MistralTool.type_from_fn(format_book)
59
- print(tool_type.tool_schema()) # prints the Mistral-specific tool schema
60
- ```
61
- """
62
- fn: dict[str, Any] = {"name": cls._name(), "description": cls._description()}
63
- model_schema = cls.model_tool_schema()
64
- if model_schema["properties"]:
65
- fn["parameters"] = model_schema
66
- return {"function": fn, "type": "function"}
67
-
68
- @classmethod
69
- def from_tool_call(cls, tool_call: ToolCall) -> MistralTool:
70
- """Constructs an `MistralTool` instance from a `tool_call`.
71
-
72
- Args:
73
- tool_call: The Mistral tool call from which to construct this tool instance.
74
- """
75
- model_json = jiter.from_json(tool_call.function.arguments.encode())
76
- model_json["tool_call"] = tool_call.model_dump()
77
- return cls.model_validate(model_json)
@@ -1,21 +0,0 @@
1
- """The Mirascope OpenAI Module."""
2
-
3
- from ._call import openai_call
4
- from ._call import openai_call as call
5
- from .call_params import OpenAICallParams
6
- from .call_response import OpenAICallResponse
7
- from .call_response_chunk import OpenAICallResponseChunk
8
- from .dynamic_config import OpenAIDynamicConfig
9
- from .stream import OpenAIStream
10
- from .tool import OpenAITool
11
-
12
- __all__ = [
13
- "call",
14
- "OpenAIDynamicConfig",
15
- "OpenAICallParams",
16
- "OpenAICallResponse",
17
- "OpenAICallResponseChunk",
18
- "OpenAIStream",
19
- "OpenAITool",
20
- "openai_call",
21
- ]
@@ -1,71 +0,0 @@
1
- """The `openai_call` decorator for functions as LLM calls."""
2
-
3
- from ..base import call_factory
4
- from ._utils import (
5
- get_json_output,
6
- handle_stream,
7
- handle_stream_async,
8
- setup_call,
9
- )
10
- from .call_params import OpenAICallParams
11
- from .call_response import OpenAICallResponse
12
- from .call_response_chunk import OpenAICallResponseChunk
13
- from .dynamic_config import OpenAIDynamicConfig
14
- from .stream import OpenAIStream
15
- from .tool import OpenAITool
16
-
17
- openai_call = call_factory(
18
- TCallResponse=OpenAICallResponse,
19
- TCallResponseChunk=OpenAICallResponseChunk,
20
- TDynamicConfig=OpenAIDynamicConfig,
21
- TToolType=OpenAITool,
22
- TStream=OpenAIStream,
23
- TCallParams=OpenAICallParams,
24
- default_call_params=OpenAICallParams(),
25
- setup_call=setup_call, # type: ignore
26
- get_json_output=get_json_output,
27
- handle_stream=handle_stream,
28
- handle_stream_async=handle_stream_async,
29
- )
30
- """A decorator for calling the OpenAI API with a typed function.
31
-
32
- usage docs: learn/calls.md
33
-
34
- This decorator is used to wrap a typed function that calls the OpenAI API. It parses
35
- the docstring of the wrapped function as the messages array and templates the input
36
- arguments for the function into each message's template.
37
-
38
- Example:
39
-
40
- ```python
41
- from mirascope.core import prompt_template
42
- from mirascope.core.openai import openai_call
43
-
44
-
45
- @openai_call("gpt-4o-mini")
46
- @prompt_template("Recommend a {genre} book")
47
- def recommend_book(genre: str):
48
- ...
49
-
50
- response = recommend_book("fantasy")
51
- print(response.content)
52
- ```
53
-
54
- Args:
55
- model (str): The OpenAI model to use in the API call.
56
- stream (bool): Whether to stream the response from the API call.
57
- tools (list[BaseTool | Callable]): The tools to use in the OpenAI API call.
58
- response_model (BaseModel | BaseType): The response model into which the response
59
- should be structured.
60
- output_parser (Callable[[OpenAICallResponse | ResponseModelT], Any]): A function for
61
- parsing the call response whose value will be returned in place of the original
62
- call response.
63
- json_mode (bool): Whether to use JSON Mode.
64
- client (object): An optional custom client to use in place of the default client.
65
- call_params (OpenAICallParams): The `OpenAICallParams` call parameters to use in the
66
- API call.
67
-
68
- Returns:
69
- decorator (Callable): The decorator for turning a typed function into an OpenAI API
70
- call.
71
- """
@@ -1,16 +0,0 @@
1
- """OpenAI utilities for decorator factories."""
2
-
3
- from ._calculate_cost import calculate_cost
4
- from ._convert_message_params import convert_message_params
5
- from ._get_json_output import get_json_output
6
- from ._handle_stream import handle_stream, handle_stream_async
7
- from ._setup_call import setup_call
8
-
9
- __all__ = [
10
- "calculate_cost",
11
- "convert_message_params",
12
- "get_json_output",
13
- "handle_stream",
14
- "handle_stream_async",
15
- "setup_call",
16
- ]
@@ -1,110 +0,0 @@
1
- """Calculate the cost of a completion using the OpenAI API."""
2
-
3
-
4
- def calculate_cost(
5
- input_tokens: int | float | None,
6
- output_tokens: int | float | None,
7
- model: str = "gpt-3.5-turbo-16k",
8
- ) -> float | None:
9
- """Calculate the cost of a completion using the OpenAI API.
10
-
11
- https://openai.com/pricing
12
-
13
- Model Input Output
14
- gpt-4o-mini $0.15 / 1M tokens $0.60 / 1M tokens
15
- gpt-4o-mini-2024-07-18 $0.15 / 1M tokens $0.60 / 1M tokens
16
- gpt-4o $5.00 / 1M tokens $15.00 / 1M tokens
17
- gpt-4o-2024-05-13 $5.00 / 1M tokens $15.00 / 1M tokens
18
- gpt-4-turbo $10.00 / 1M tokens $30.00 / 1M tokens
19
- gpt-4-turbo-2024-04-09 $10.00 / 1M tokens $30.00 / 1M tokens
20
- gpt-3.5-turbo-0125 $0.50 / 1M tokens $1.50 / 1M tokens
21
- gpt-3.5-turbo-1106 $1.00 / 1M tokens $2.00 / 1M tokens
22
- gpt-4-1106-preview $10.00 / 1M tokens $30.00 / 1M tokens
23
- gpt-4 $30.00 / 1M tokens $60.00 / 1M tokens
24
- text-embedding-3-small $0.02 / 1M tokens
25
- text-embedding-3-large $0.13 / 1M tokens
26
- text-embedding-ada-0002 $0.10 / 1M tokens
27
- """
28
- pricing = {
29
- "gpt-4o-mini": {
30
- "prompt": 0.000_000_15,
31
- "completion": 0.000_000_6,
32
- },
33
- "gpt-4o-mini-2024-07-18": {
34
- "prompt": 0.000_000_15,
35
- "completion": 0.000_000_6,
36
- },
37
- "gpt-4o": {
38
- "prompt": 0.000_005,
39
- "completion": 0.000_015,
40
- },
41
- "gpt-4o-2024-05-13": {
42
- "prompt": 0.000_005,
43
- "completion": 0.000_015,
44
- },
45
- "gpt-4-turbo": {
46
- "prompt": 0.000_01,
47
- "completion": 0.000_03,
48
- },
49
- "gpt-4-turbo-2024-04-09": {
50
- "prompt": 0.000_01,
51
- "completion": 0.000_03,
52
- },
53
- "gpt-3.5-turbo-0125": {
54
- "prompt": 0.000_000_5,
55
- "completion": 0.000_001_5,
56
- },
57
- "gpt-3.5-turbo-1106": {
58
- "prompt": 0.000_001,
59
- "completion": 0.000_002,
60
- },
61
- "gpt-4-1106-preview": {
62
- "prompt": 0.000_01,
63
- "completion": 0.000_03,
64
- },
65
- "gpt-4": {
66
- "prompt": 0.000_003,
67
- "completion": 0.000_006,
68
- },
69
- "gpt-3.5-turbo-4k": {
70
- "prompt": 0.000_015,
71
- "completion": 0.000_02,
72
- },
73
- "gpt-3.5-turbo-16k": {
74
- "prompt": 0.000_003,
75
- "completion": 0.000_004,
76
- },
77
- "gpt-4-8k": {
78
- "prompt": 0.000_003,
79
- "completion": 0.000_006,
80
- },
81
- "gpt-4-32k": {
82
- "prompt": 0.000_006,
83
- "completion": 0.000_012,
84
- },
85
- "text-embedding-3-small": {
86
- "prompt": 0.000_000_02,
87
- "completion": 0.000_000_02,
88
- },
89
- "text-embedding-ada-002": {
90
- "prompt": 0.000_000_1,
91
- "completion": 0.000_000_1,
92
- },
93
- "text-embedding-3-large": {
94
- "prompt": 0.000_000_13,
95
- "completion": 0.000_000_13,
96
- },
97
- }
98
- if input_tokens is None or output_tokens is None:
99
- return None
100
-
101
- try:
102
- model_pricing = pricing[model]
103
- except KeyError:
104
- return None
105
-
106
- prompt_cost = input_tokens * model_pricing["prompt"]
107
- completion_cost = output_tokens * model_pricing["completion"]
108
- total_cost = prompt_cost + completion_cost
109
-
110
- return total_cost
@@ -1,53 +0,0 @@
1
- """Utility for converting `BaseMessageParam` to `ChatCompletionMessageParam`."""
2
-
3
- import base64
4
-
5
- from openai.types.chat import ChatCompletionMessageParam
6
-
7
- from ...base import BaseMessageParam
8
-
9
-
10
- def convert_message_params(
11
- message_params: list[BaseMessageParam | ChatCompletionMessageParam],
12
- ) -> list[ChatCompletionMessageParam]:
13
- converted_message_params = []
14
- for message_param in message_params:
15
- if not isinstance(message_param, BaseMessageParam):
16
- converted_message_params.append(message_param)
17
- elif isinstance((content := message_param.content), str):
18
- converted_message_params.append(message_param.model_dump())
19
- else:
20
- converted_content = []
21
- for part in content:
22
- if part.type == "text":
23
- converted_content.append(part.model_dump())
24
- elif part.type == "image":
25
- if part.media_type not in [
26
- "image/jpeg",
27
- "image/png",
28
- "image/gif",
29
- "image/webp",
30
- ]:
31
- raise ValueError(
32
- f"Unsupported image media type: {part.media_type}. OpenAI"
33
- " currently only supports JPEG, PNG, GIF, and WebP images."
34
- )
35
- data = base64.b64encode(part.image).decode("utf-8")
36
- converted_content.append(
37
- {
38
- "type": "image_url",
39
- "image_url": {
40
- "url": f"data:{part.media_type};base64,{data}",
41
- "detail": part.detail if part.detail else "auto",
42
- },
43
- }
44
- )
45
- else:
46
- raise ValueError(
47
- "OpenAI currently only supports text and image modalities. "
48
- f"Modality provided: {part.type}"
49
- )
50
- converted_message_params.append(
51
- {"role": message_param.role, "content": converted_content}
52
- )
53
- return converted_message_params
@@ -1,27 +0,0 @@
1
- """Get the JSON output from a completion response."""
2
-
3
- from ..call_response import OpenAICallResponse
4
- from ..call_response_chunk import OpenAICallResponseChunk
5
-
6
-
7
- def get_json_output(
8
- response: OpenAICallResponse | OpenAICallResponseChunk, json_mode: bool
9
- ) -> str:
10
- """Get the JSON output from a completion response."""
11
- if isinstance(response, OpenAICallResponse):
12
- if json_mode and response.content:
13
- return response.content
14
- elif tool_calls := response.response.choices[0].message.tool_calls:
15
- return tool_calls[0].function.arguments
16
- raise ValueError("No tool call or JSON object found in response.")
17
- else:
18
- if json_mode:
19
- return response.content
20
- elif (
21
- (choices := response.chunk.choices)
22
- and (tool_calls := choices[0].delta.tool_calls)
23
- and (function := tool_calls[0].function)
24
- and (arguments := function.arguments) is not None
25
- ):
26
- return arguments
27
- return ""
@@ -1,125 +0,0 @@
1
- """Handles the stream of completion chunks."""
2
-
3
- from collections.abc import AsyncGenerator, Generator
4
-
5
- from openai.types.chat import ChatCompletionChunk, ChatCompletionMessageToolCall
6
- from openai.types.chat.chat_completion_message_tool_call import Function
7
-
8
- from ..call_response_chunk import OpenAICallResponseChunk
9
- from ..tool import OpenAITool
10
-
11
-
12
- def _handle_chunk(
13
- chunk: ChatCompletionChunk,
14
- current_tool_call: ChatCompletionMessageToolCall,
15
- current_tool_type: type[OpenAITool] | None,
16
- tool_types: list[type[OpenAITool]] | None,
17
- ) -> tuple[
18
- OpenAITool | None,
19
- ChatCompletionMessageToolCall,
20
- type[OpenAITool] | None,
21
- ]:
22
- """Handles a chunk of the stream."""
23
- if (
24
- not tool_types
25
- or not chunk.choices
26
- or not (tool_calls := chunk.choices[0].delta.tool_calls)
27
- ):
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 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 = ChatCompletionMessageToolCall(
36
- id=tool_call.id,
37
- function=Function(
38
- arguments="",
39
- name=tool_call.function.name if tool_call.function.name else "",
40
- ),
41
- type="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 (
53
- previous_tool_call.id
54
- and previous_tool_call.function.arguments
55
- and previous_tool_type is not None
56
- ):
57
- return (
58
- previous_tool_type.from_tool_call(previous_tool_call),
59
- current_tool_call,
60
- current_tool_type,
61
- )
62
-
63
- # Update arguments with each chunk
64
- if tool_call.function and tool_call.function.arguments:
65
- current_tool_call.function.arguments += tool_call.function.arguments
66
-
67
- return None, current_tool_call, current_tool_type
68
-
69
-
70
- def handle_stream(
71
- stream: Generator[ChatCompletionChunk, None, None],
72
- tool_types: list[type[OpenAITool]] | None,
73
- ) -> Generator[tuple[OpenAICallResponseChunk, OpenAITool | None], None, None]:
74
- """Iterator over the stream and constructs tools as they are streamed."""
75
- current_tool_call = ChatCompletionMessageToolCall(
76
- id="", function=Function(arguments="", name=""), type="function"
77
- )
78
- current_tool_type = None
79
- for chunk in stream:
80
- if not tool_types or not chunk.choices or not chunk.choices[0].delta.tool_calls:
81
- if current_tool_type:
82
- yield (
83
- OpenAICallResponseChunk(chunk=chunk),
84
- current_tool_type.from_tool_call(current_tool_call),
85
- )
86
- current_tool_type = None
87
- else:
88
- yield OpenAICallResponseChunk(chunk=chunk), None
89
- tool, current_tool_call, current_tool_type = _handle_chunk(
90
- chunk,
91
- current_tool_call,
92
- current_tool_type,
93
- tool_types,
94
- )
95
- if tool is not None:
96
- yield OpenAICallResponseChunk(chunk=chunk), tool
97
-
98
-
99
- async def handle_stream_async(
100
- stream: AsyncGenerator[ChatCompletionChunk, None],
101
- tool_types: list[type[OpenAITool]] | None,
102
- ) -> AsyncGenerator[tuple[OpenAICallResponseChunk, OpenAITool | None], None]:
103
- """Async iterator over the stream and constructs tools as they are streamed."""
104
- current_tool_call = ChatCompletionMessageToolCall(
105
- id="", function=Function(arguments="", name=""), type="function"
106
- )
107
- current_tool_type = None
108
- async for chunk in stream:
109
- if not tool_types or not chunk.choices[0].delta.tool_calls:
110
- if current_tool_type:
111
- yield (
112
- OpenAICallResponseChunk(chunk=chunk),
113
- current_tool_type.from_tool_call(current_tool_call),
114
- )
115
- current_tool_type = None
116
- else:
117
- yield OpenAICallResponseChunk(chunk=chunk), None
118
- tool, current_tool_call, current_tool_type = _handle_chunk(
119
- chunk,
120
- current_tool_call,
121
- current_tool_type,
122
- tool_types,
123
- )
124
- if tool is not None:
125
- yield OpenAICallResponseChunk(chunk=chunk), tool
@@ -1,62 +0,0 @@
1
- """This module contains the setup_call function for OpenAI tools."""
2
-
3
- import inspect
4
- from collections.abc import Awaitable, Callable
5
- from typing import Any, cast
6
-
7
- from openai import AsyncAzureOpenAI, AsyncOpenAI, AzureOpenAI, OpenAI
8
- from openai.types.chat import (
9
- ChatCompletion,
10
- ChatCompletionMessageParam,
11
- ChatCompletionUserMessageParam,
12
- )
13
-
14
- from ...base import BaseMessageParam, BaseTool, _utils
15
- from ..call_params import OpenAICallParams
16
- from ..dynamic_config import OpenAIDynamicConfig
17
- from ..tool import OpenAITool
18
- from ._convert_message_params import convert_message_params
19
-
20
-
21
- def setup_call(
22
- *,
23
- model: str,
24
- client: OpenAI | AsyncOpenAI | AzureOpenAI | AsyncAzureOpenAI | None,
25
- fn: Callable[..., OpenAIDynamicConfig | Awaitable[OpenAIDynamicConfig]],
26
- fn_args: dict[str, Any],
27
- dynamic_config: OpenAIDynamicConfig,
28
- tools: list[type[BaseTool] | Callable] | None,
29
- json_mode: bool,
30
- call_params: OpenAICallParams,
31
- extract: bool,
32
- ) -> tuple[
33
- Callable[..., ChatCompletion] | Callable[..., Awaitable[ChatCompletion]],
34
- str,
35
- list[ChatCompletionMessageParam],
36
- list[type[OpenAITool]] | None,
37
- dict[str, Any],
38
- ]:
39
- prompt_template, messages, tool_types, call_kwargs = _utils.setup_call(
40
- fn, fn_args, dynamic_config, tools, OpenAITool, call_params
41
- )
42
- messages = cast(list[BaseMessageParam | ChatCompletionMessageParam], messages)
43
- messages = convert_message_params(messages)
44
- if json_mode:
45
- call_kwargs["response_format"] = {"type": "json_object"}
46
- json_mode_content = _utils.json_mode_content(
47
- tool_types[0] if tool_types else None
48
- ).strip()
49
- messages.append(
50
- ChatCompletionUserMessageParam(role="user", content=json_mode_content)
51
- )
52
- call_kwargs.pop("tools", None)
53
- elif extract:
54
- assert tool_types, "At least one tool must be provided for extraction."
55
- call_kwargs["tool_choice"] = "required"
56
- call_kwargs |= {"model": model, "messages": messages}
57
-
58
- if client is None:
59
- client = AsyncOpenAI() if inspect.iscoroutinefunction(fn) else OpenAI()
60
- create = client.chat.completions.create
61
-
62
- return create, prompt_template, messages, tool_types, call_kwargs
@@ -1,54 +0,0 @@
1
- """usage docs: learn/calls.md#provider-specific-parameters"""
2
-
3
- from __future__ import annotations
4
-
5
- from openai.types.chat import (
6
- ChatCompletionStreamOptionsParam,
7
- ChatCompletionToolChoiceOptionParam,
8
- )
9
- from openai.types.chat.completion_create_params import ResponseFormat
10
- from typing_extensions import NotRequired
11
-
12
- from ..base import BaseCallParams
13
-
14
-
15
- class OpenAICallParams(BaseCallParams):
16
- """The parameters to use when calling the OpenAI API.
17
-
18
- [OpenAI API Reference](https://platform.openai.com/docs/api-reference/chat/create)
19
-
20
- Attributes:
21
- frequency_penalty: ...
22
- logit_bias: ...
23
- logprobs: ...
24
- max_tokens: ...
25
- n: ...
26
- parallel_tool_calls: ...
27
- presence_penalty: ...
28
- response_format: ...
29
- seed: ...
30
- stop: ...
31
- stream_options: ...
32
- temperature: ...
33
- tool_choice: ...
34
- top_logprobs: ...
35
- top_p: ...
36
- user: ...
37
- """
38
-
39
- frequency_penalty: NotRequired[float | None]
40
- logit_bias: NotRequired[dict[str, int] | None]
41
- logprobs: NotRequired[bool | None]
42
- max_tokens: NotRequired[int | None]
43
- n: NotRequired[int | None]
44
- parallel_tool_calls: NotRequired[bool]
45
- presence_penalty: NotRequired[float | None]
46
- response_format: NotRequired[ResponseFormat]
47
- seed: NotRequired[int | None]
48
- stop: NotRequired[str | list[str] | None]
49
- stream_options: NotRequired[ChatCompletionStreamOptionsParam | None]
50
- temperature: NotRequired[float | None]
51
- tool_choice: NotRequired[ChatCompletionToolChoiceOptionParam]
52
- top_logprobs: NotRequired[int | None]
53
- top_p: NotRequired[float | None]
54
- user: NotRequired[str]