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,60 +0,0 @@
1
- """Mirascope x Logfire Integration."""
2
-
3
- from collections.abc import Callable
4
- from typing import ParamSpec, TypeVar
5
-
6
- from .._middleware_factory import middleware_factory
7
- from ._utils import (
8
- custom_context_manager,
9
- handle_call_response,
10
- handle_call_response_async,
11
- handle_response_model,
12
- handle_response_model_async,
13
- handle_stream,
14
- handle_stream_async,
15
- handle_structured_stream,
16
- handle_structured_stream_async,
17
- )
18
-
19
- _P = ParamSpec("_P")
20
- _R = TypeVar("_R")
21
-
22
-
23
- def with_logfire() -> Callable[[Callable[_P, _R]], Callable[_P, _R]]:
24
- """Wraps a Mirascope function with Logfire tracing.
25
-
26
- Example:
27
-
28
- ```python
29
- import logfire
30
- from mirascope.core import anthropic, prompt_template
31
- from mirascope.integrations.logfire import with_logfire
32
-
33
- logfire.configure()
34
-
35
-
36
- def format_book(title: str, author: str):
37
- return f"{title} by {author}"
38
-
39
-
40
- @with_logfire()
41
- @anthropic.call(model="claude-3-5-sonnet-20240620", tools=[format_book])
42
- @prompt_template("Recommend a {genre} book.")
43
- def recommend_book(genre: str):
44
- ...
45
-
46
-
47
- print(recommend_book("fantasy"))
48
- ```
49
- """
50
- return middleware_factory(
51
- custom_context_manager=custom_context_manager,
52
- handle_call_response=handle_call_response,
53
- handle_call_response_async=handle_call_response_async,
54
- handle_stream=handle_stream,
55
- handle_stream_async=handle_stream_async,
56
- handle_response_model=handle_response_model,
57
- handle_response_model_async=handle_response_model_async,
58
- handle_structured_stream=handle_structured_stream,
59
- handle_structured_stream_async=handle_structured_stream_async,
60
- )
@@ -1,5 +0,0 @@
1
- from ._utils import configure
2
- from ._with_hyperdx import with_hyperdx
3
- from ._with_otel import with_otel
4
-
5
- __all__ = ["configure", "with_hyperdx", "with_otel"]
@@ -1,268 +0,0 @@
1
- """Mirascope x OpenTelemetry Integration utils"""
2
-
3
- import json
4
- from collections.abc import Callable, Generator, Sequence
5
- from contextlib import contextmanager
6
- from typing import Any
7
-
8
- from opentelemetry.sdk.trace import SpanProcessor, TracerProvider
9
- from opentelemetry.sdk.trace.export import (
10
- ConsoleSpanExporter,
11
- SimpleSpanProcessor,
12
- )
13
- from opentelemetry.trace import (
14
- Tracer,
15
- get_tracer,
16
- set_tracer_provider,
17
- )
18
- from opentelemetry.trace.span import Span
19
- from opentelemetry.util.types import Attributes, AttributeValue
20
- from pydantic import BaseModel
21
-
22
- from mirascope.core.base._utils._base_type import BaseType
23
-
24
- from ...core.base import BaseCallResponse
25
- from ...core.base.stream import BaseStream
26
- from ...core.base.structured_stream import BaseStructuredStream
27
-
28
-
29
- def configure(
30
- processors: Sequence[SpanProcessor] | None = None,
31
- ) -> Tracer:
32
- """Configures the OpenTelemetry tracer, this function should only be called once.
33
-
34
- Args:
35
- processors: Optional[Sequence[SpanProcessor]]
36
- The span processors to use, if None, a console exporter will be used.
37
-
38
- Returns:
39
- The configured tracer.
40
- """
41
- provider = TracerProvider()
42
- if processors is None:
43
- provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
44
- else:
45
- for processor in processors:
46
- provider.add_span_processor(processor)
47
- # NOTE: Sets the global trace provider, should only be called once
48
- set_tracer_provider(provider)
49
- return get_tracer("otel")
50
-
51
-
52
- @contextmanager
53
- def custom_context_manager(
54
- fn: Callable,
55
- ) -> Generator[Span, Any, None]:
56
- tracer = get_tracer("otel")
57
- with tracer.start_as_current_span(f"{fn.__name__}") as span:
58
- yield span
59
-
60
-
61
- def get_call_response_attributes(result: BaseCallResponse) -> dict[str, AttributeValue]:
62
- max_tokens = getattr(result.call_params, "max_tokens", 0)
63
- temperature = getattr(result.call_params, "temperature", 0)
64
- top_p = getattr(result.call_params, "top_p", 0)
65
-
66
- return {
67
- "gen_ai.system": result.prompt_template if result.prompt_template else "",
68
- "gen_ai.request.model": result.call_kwargs.get("model", ""),
69
- "gen_ai.request.max_tokens": max_tokens,
70
- "gen_ai.request.temperature": temperature,
71
- "gen_ai.request.top_p": top_p,
72
- "gen_ai.response.model": result.model if result.model else "",
73
- "gen_ai.response.id": result.id if result.id else "",
74
- "gen_ai.response.finish_reasons": result.finish_reasons
75
- if result.finish_reasons
76
- else "",
77
- "gen_ai.usage.completion_tokens": result.output_tokens
78
- if result.output_tokens
79
- else "",
80
- "gen_ai.usage.prompt_tokens": result.input_tokens
81
- if result.input_tokens
82
- else "",
83
- }
84
-
85
-
86
- def set_call_response_event_attributes(result: BaseCallResponse, span: Span) -> None:
87
- prompt_attributes = {
88
- "gen_ai.prompt": json.dumps(result.user_message_param),
89
- }
90
- completion_attributes: Attributes = {
91
- "gen_ai.completion": json.dumps(result.message_param),
92
- }
93
- span.add_event(
94
- "gen_ai.content.prompt",
95
- attributes=prompt_attributes,
96
- )
97
- span.add_event(
98
- "gen_ai.content.completion",
99
- attributes=completion_attributes,
100
- )
101
-
102
-
103
- def handle_call_response(
104
- result: BaseCallResponse, fn: Callable, span: Span | None
105
- ) -> None:
106
- if span is None:
107
- return
108
-
109
- attributes = get_call_response_attributes(result)
110
- attributes["async"] = False
111
- span.set_attributes(attributes)
112
- set_call_response_event_attributes(result, span)
113
-
114
-
115
- def handle_stream(stream: BaseStream, fn: Callable, span: Span | None) -> None:
116
- if span is None:
117
- return
118
- constructed_call_response = stream.construct_call_response()
119
- attributes = get_call_response_attributes(constructed_call_response)
120
- attributes["async"] = False
121
- span.set_attributes(attributes)
122
- set_call_response_event_attributes(constructed_call_response, span)
123
-
124
-
125
- def handle_response_model(
126
- result: BaseModel | BaseType, fn: Callable, span: Span | None
127
- ) -> None:
128
- if span is None:
129
- return
130
- if isinstance(result, BaseModel):
131
- response: BaseCallResponse = result._response # type: ignore
132
- attributes = get_call_response_attributes(response)
133
- attributes["async"] = False
134
- span.set_attributes(attributes)
135
- prompt_attributes = {
136
- "gen_ai.prompt": json.dumps(response.user_message_param),
137
- }
138
- completion_attributes: Attributes = {
139
- "gen_ai.completion": result.model_dump_json(),
140
- }
141
- span.add_event(
142
- "gen_ai.content.prompt",
143
- attributes=prompt_attributes,
144
- )
145
- else:
146
- span.set_attributes({"async": False})
147
- if not isinstance(result, str | int | float | bool):
148
- result = str(result)
149
- completion_attributes: Attributes = {
150
- "gen_ai.completion": result,
151
- }
152
- span.add_event(
153
- "gen_ai.content.completion",
154
- attributes=completion_attributes,
155
- )
156
-
157
-
158
- def handle_structured_stream(
159
- result: BaseStructuredStream, fn: Callable, span: Span | None
160
- ) -> None:
161
- if span is None:
162
- return
163
- attributes = get_call_response_attributes(result.stream.construct_call_response())
164
- attributes["async"] = False
165
- span.set_attributes(attributes)
166
- prompt_attributes = {
167
- "gen_ai.prompt": json.dumps(result.stream.user_message_param),
168
- }
169
- if isinstance(result.constructed_response_model, BaseModel):
170
- completion = result.constructed_response_model.model_dump_json()
171
- else:
172
- completion = result.constructed_response_model
173
- completion_attributes: Attributes = {
174
- "gen_ai.completion": completion,
175
- }
176
- span.add_event(
177
- "gen_ai.content.prompt",
178
- attributes=prompt_attributes,
179
- )
180
- span.add_event(
181
- "gen_ai.content.completion",
182
- attributes=completion_attributes,
183
- )
184
-
185
-
186
- async def handle_call_response_async(
187
- result: BaseCallResponse, fn: Callable, span: Span | None
188
- ) -> None:
189
- if span is None:
190
- return
191
-
192
- attributes = get_call_response_attributes(result)
193
- attributes["async"] = True
194
- span.set_attributes(attributes)
195
- set_call_response_event_attributes(result, span)
196
-
197
-
198
- async def handle_stream_async(
199
- stream: BaseStream, fn: Callable, span: Span | None
200
- ) -> None:
201
- if span is None:
202
- return
203
- constructed_call_response = stream.construct_call_response()
204
- attributes = get_call_response_attributes(constructed_call_response)
205
- attributes["async"] = True
206
- span.set_attributes(attributes)
207
- set_call_response_event_attributes(constructed_call_response, span)
208
-
209
-
210
- async def handle_response_model_async(
211
- result: BaseModel | BaseType, fn: Callable, span: Span | None
212
- ) -> None:
213
- if span is None:
214
- return
215
- if isinstance(result, BaseModel):
216
- response: BaseCallResponse = result._response # type: ignore
217
- attributes = get_call_response_attributes(response)
218
- attributes["async"] = True
219
- span.set_attributes(attributes)
220
- prompt_attributes = {
221
- "gen_ai.prompt": json.dumps(response.user_message_param),
222
- }
223
- completion_attributes: Attributes = {
224
- "gen_ai.completion": result.model_dump_json(),
225
- }
226
- span.add_event(
227
- "gen_ai.content.prompt",
228
- attributes=prompt_attributes,
229
- )
230
- else:
231
- span.set_attributes({"async": True})
232
- if not isinstance(result, str | int | float | bool):
233
- result = str(result)
234
- completion_attributes: Attributes = {
235
- "gen_ai.completion": result,
236
- }
237
- span.add_event(
238
- "gen_ai.content.completion",
239
- attributes=completion_attributes,
240
- )
241
-
242
-
243
- async def handle_structured_stream_async(
244
- result: BaseStructuredStream, fn: Callable, span: Span | None
245
- ) -> None:
246
- if span is None:
247
- return
248
- attributes = get_call_response_attributes(result.stream.construct_call_response())
249
- attributes["async"] = True
250
- span.set_attributes(attributes)
251
- prompt_attributes = {
252
- "gen_ai.prompt": json.dumps(result.stream.user_message_param),
253
- }
254
- if isinstance(result.constructed_response_model, BaseModel):
255
- completion = result.constructed_response_model.model_dump_json()
256
- else:
257
- completion = result.constructed_response_model
258
- completion_attributes: Attributes = {
259
- "gen_ai.completion": completion,
260
- }
261
- span.add_event(
262
- "gen_ai.content.prompt",
263
- attributes=prompt_attributes,
264
- )
265
- span.add_event(
266
- "gen_ai.content.completion",
267
- attributes=completion_attributes,
268
- )
@@ -1,61 +0,0 @@
1
- """Mirascope x HyperDX Integration."""
2
-
3
- import os
4
- from collections.abc import Callable
5
- from typing import ParamSpec, TypeVar
6
-
7
- from opentelemetry import trace
8
- from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
9
- from opentelemetry.sdk.trace import TracerProvider
10
- from opentelemetry.sdk.trace.export import (
11
- BatchSpanProcessor,
12
- )
13
-
14
- from mirascope.integrations.otel._utils import configure
15
- from mirascope.integrations.otel._with_otel import with_otel
16
-
17
- _P = ParamSpec("_P")
18
- _R = TypeVar("_R")
19
-
20
-
21
- def with_hyperdx() -> Callable[[Callable[_P, _R]], Callable[_P, _R]]:
22
- """Decorator to wrap a function with hyperdx.
23
-
24
- Example:
25
-
26
- ```python
27
- import os
28
-
29
- from mirascope.core import anthropic, prompt_template
30
- from mirascope.integrations.otel import with_hyperdx
31
-
32
- os.environ["HYPERDX_API_KEY"] = "YOUR_API_KEY"
33
-
34
-
35
- def format_book(title: str, author: str):
36
- return f"{title} by {author}"
37
-
38
-
39
- @with_hyperdx()
40
- @anthropic.call(model="claude-3-5-sonnet-20240620", tools=[format_book])
41
- @prompt_template("Recommend a {genre} book.")
42
- def recommend_book(genre: str):
43
- ...
44
-
45
-
46
- print(recommend_book("fantasy"))
47
- ```
48
- """
49
- provider = trace.get_tracer_provider()
50
- if not isinstance(provider, TracerProvider):
51
- configure(
52
- processors=[
53
- BatchSpanProcessor(
54
- OTLPSpanExporter(
55
- endpoint="https://in-otel.hyperdx.io/v1/traces",
56
- headers={"authorization": os.getenv("HYPERDX_API_KEY", "")},
57
- )
58
- )
59
- ]
60
- )
61
- return with_otel()
@@ -1,60 +0,0 @@
1
- """Mirascope x OpenTelemetry Integration."""
2
-
3
- from collections.abc import Callable
4
- from typing import ParamSpec, TypeVar
5
-
6
- from .._middleware_factory import middleware_factory
7
- from ._utils import (
8
- custom_context_manager,
9
- handle_call_response,
10
- handle_call_response_async,
11
- handle_response_model,
12
- handle_response_model_async,
13
- handle_stream,
14
- handle_stream_async,
15
- handle_structured_stream,
16
- handle_structured_stream_async,
17
- )
18
-
19
- _P = ParamSpec("_P")
20
- _R = TypeVar("_R")
21
-
22
-
23
- def with_otel() -> Callable[[Callable[_P, _R]], Callable[_P, _R]]:
24
- """Wraps a Mirascope function with OpenTelemetry.
25
-
26
- Example:
27
-
28
- ```python
29
- from mirascope.core import anthropic, prompt_template
30
- from mirascope.integrations.otel import with_otel, configure
31
-
32
- configure()
33
-
34
-
35
- def format_book(title: str, author: str) -> str:
36
- return f"{title} by {author}"
37
-
38
-
39
- @with_otel()
40
- @anthropic.call(model="claude-3-5-sonnet-20240620", tools=[format_book])
41
- @prompt_template("Recommend a {genre} book.")
42
- def recommend_book(genre: str):
43
- ...
44
-
45
-
46
- print(recommend_book("fantasy"))
47
- ```
48
- """
49
-
50
- return middleware_factory(
51
- custom_context_manager=custom_context_manager,
52
- handle_call_response=handle_call_response,
53
- handle_call_response_async=handle_call_response_async,
54
- handle_stream=handle_stream,
55
- handle_stream_async=handle_stream_async,
56
- handle_response_model=handle_response_model,
57
- handle_response_model_async=handle_response_model_async,
58
- handle_structured_stream=handle_structured_stream,
59
- handle_structured_stream_async=handle_structured_stream_async,
60
- )
@@ -1,50 +0,0 @@
1
- """Mirascope x Tenacity Integration."""
2
-
3
- from collections.abc import Callable
4
-
5
- from tenacity import RetryCallState
6
-
7
-
8
- def collect_errors(
9
- *args: type[Exception],
10
- ) -> Callable[[RetryCallState], None]:
11
- """Collects specified errors into an `errors` keyword argument.
12
-
13
- Example:
14
-
15
- ```python
16
- from mirascope.integrations.tenacity import collect_errors
17
- from tenacity import retry, stop_after_attempt
18
-
19
- @retry(stop=stop_after_attempt(3), after=collect_errors(ValueError))
20
- def throw_value_error(*, errors: list[ValueError] | None = None):
21
- if errors:
22
- print(errors[-1])
23
- raise ValueError("Throwing Error")
24
-
25
-
26
- try:
27
- throw_value_error()
28
- # > Throwing Error
29
- # > Throwing Error
30
- except RetryError:
31
- ...
32
- ```
33
-
34
- Args:
35
- *args: The `Exception` types to catch.
36
- """
37
-
38
- def inner(retry_state: RetryCallState) -> None:
39
- """Collect errors into a `errors` kwarg of the wrapped function."""
40
- if (
41
- (outcome := retry_state.outcome)
42
- and (exception := outcome.exception())
43
- and type(exception) in args
44
- ):
45
- errors = retry_state.kwargs.pop("errors", [])
46
- retry_state.kwargs["errors"] = (
47
- errors + [exception] if errors else [exception]
48
- )
49
-
50
- return inner
mirascope/py.typed DELETED
File without changes
mirascope/v0/__init__.py DELETED
@@ -1,43 +0,0 @@
1
- import warnings
2
- from contextlib import suppress
3
-
4
- from . import base
5
-
6
- with suppress(ImportError):
7
- from . import anthropic
8
-
9
- with suppress(ImportError):
10
- from . import openai
11
-
12
-
13
- warnings.warn("""MIRASCOPE LOOK-ALIKE V0 INTERFACE USAGE
14
- You are using the `mirascope.v0` module, which implements look-alike interfaces.
15
- It is extremely important to note the following about these interfaces:
16
- - We provide no guarantee that we will support these interfaces. This includes any additional features or bugfixes.
17
- - We reserve the right to remove these interfaces from the library entirely.
18
- - These interfaces are an attempt at replicating the v0 interfaces, but they are built using v1 under the hood.
19
- - This means that you can access certain v1 features through these interfaces (such as multimodal prompt templates).
20
- - However, this also means that there are inevitable differences (e.g. `OpenAICallResponse` returned from `call` is the `v1` implementation).
21
-
22
- The goal of these interfaces is to make it possible to migrate from v0 to v1 without requiring a full migration.
23
- HOWEVER, there are a few key differences to note:
24
- - STREAMING:
25
- - Was annoying to replicate, so we have instead opted to support streaming with the v1 return typing.
26
- - The return type is a tuple[Chunk, Tool], so if you're not using tools, simply ignore the second item (e.g. `for chunk, _ in stream: ...`)
27
- - If you're using tools, simply access tools as they are streamed through the second tuple item (i.e. no more `OpenAIToolStream`)
28
- - BASE CONFIG:
29
- - Was also annoying to replicate, so we've opted not to replicate this.
30
- - To provide a custom client (e.g. `AzureOpenAI`), simply pass that client into your function (e.g. `book_recommender.call(client=AzureOpenAI(...))`) and we'll use it.
31
- - This means there is no longer a `BaseConfig` object on anything.
32
- - We currently only support the v0 look-alike interfaces for Anthropic and OpenAI.
33
- - The import structure may differ slightly. In particular, there are no submodules for `anthropic` or `openai`, so you should be importing directly from those modules (e.g. `from mirascope.v0.openai import OpenAICall`)
34
-
35
- Next steps:
36
- - We encourage you to try out the new v1 interface and mirgrate over. We think it's a big improvement, and we hope you will come to feel this way too.
37
- - We've written a migration guide to help with this process: https://mirascope.io/docs/latest/MIGRATE
38
- - We greatly appreciate any and all questions/comments/feedback, so if you have anything, send it our way!
39
- - We understand that some people may prefer the class approach from v0 interface design. You can achieve a very similar interface using v1, see https://mirascope.io/docs/latest/MIGRATE/#baseprompt
40
- - If there turns out to be sufficient desire for the class-based interfaces to be included in v1 as fully supported interfaces, we will potentially consider this.
41
- """)
42
-
43
- __all__ = ["anthropic", "base", "openai"]
mirascope/v0/anthropic.py DELETED
@@ -1,54 +0,0 @@
1
- """OpenAI modules for the v0 look-alike implementation."""
2
-
3
- from typing import ClassVar, Generic, Literal, TypeVar
4
-
5
- from anthropic.types.completion_create_params import Metadata
6
- from pydantic import ConfigDict
7
-
8
- from ..core.anthropic import (
9
- AnthropicCallResponse,
10
- AnthropicCallResponseChunk,
11
- AnthropicTool,
12
- anthropic_call,
13
- )
14
- from .base import BaseCall, BaseCallParams, BaseExtractor, ExtractedType
15
-
16
-
17
- class AnthropicCallParams(BaseCallParams):
18
- """The parameters to use when calling d Claud API with a prompt."""
19
-
20
- max_tokens: int = 1000
21
- model: str = "claude-3-haiku-20240307"
22
- metadata: Metadata | None = None
23
- stop_sequences: list[str] | None = None
24
- system: str | None = None
25
- temperature: float | None = None
26
- top_k: int | None = None
27
- top_p: float | None = None
28
-
29
- response_format: Literal["json"] | None = None
30
-
31
- model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow")
32
-
33
-
34
- class AnthropicCall(
35
- BaseCall[AnthropicCallResponse, AnthropicCallResponseChunk, AnthropicTool]
36
- ):
37
- call_params: ClassVar[BaseCallParams] = AnthropicCallParams(
38
- model="claude-3-5-sonnet-20240620"
39
- )
40
-
41
- _decorator = anthropic_call
42
- _provider = "anthropic"
43
-
44
-
45
- T = TypeVar("T", bound=ExtractedType)
46
-
47
-
48
- class AnthropicExtractor(BaseExtractor[T], Generic[T]):
49
- call_params: ClassVar[BaseCallParams] = AnthropicCallParams(
50
- model="claude-3-5-sonnet-20240620"
51
- )
52
-
53
- _decorator = anthropic_call
54
- _provider = "anthropic"
@@ -1,12 +0,0 @@
1
- from .calls import BaseCall
2
- from .extractors import BaseExtractor, ExtractedType
3
- from .prompts import tags
4
- from .types import BaseCallParams
5
-
6
- __all__ = [
7
- "BaseCall",
8
- "BaseCallParams",
9
- "BaseExtractor",
10
- "ExtractedType",
11
- "tags",
12
- ]