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,118 +0,0 @@
1
- from collections.abc import AsyncGenerator, Callable, Generator
2
- from typing import Any, ClassVar, Generic, TypeVar
3
-
4
- from pydantic import model_validator
5
- from tenacity import AsyncRetrying, Retrying
6
- from typing_extensions import Self
7
-
8
- from ...core.base import (
9
- BaseCallResponse,
10
- BaseCallResponseChunk,
11
- BasePrompt,
12
- BaseTool,
13
- _utils,
14
- )
15
- from ...core.base.dynamic_config import DynamicConfigFull
16
- from .types import BaseCallParams
17
- from .utils import retry_decorator
18
-
19
- _BaseCallResponseT = TypeVar("_BaseCallResponseT", bound=BaseCallResponse)
20
- _BaseCallResponseChunkT = TypeVar(
21
- "_BaseCallResponseChunkT", bound=BaseCallResponseChunk
22
- )
23
- _BaseToolT = TypeVar("_BaseToolT", bound=BaseTool)
24
-
25
-
26
- class BaseCall(
27
- BasePrompt, Generic[_BaseCallResponseT, _BaseCallResponseChunkT, _BaseToolT]
28
- ):
29
- tags: ClassVar[list[str]] = []
30
- prompt_template: ClassVar[str] = ""
31
-
32
- call_params: ClassVar[BaseCallParams] = BaseCallParams(model="")
33
-
34
- _decorator: ClassVar[Callable] = lambda self: None
35
- _provider: ClassVar[str] = "NO PROVIDER"
36
-
37
- @model_validator(mode="after")
38
- def set_prompt_template(self) -> Self:
39
- self._prompt_template = self.prompt_template
40
- return self
41
-
42
- def dynamic_config(self) -> DynamicConfigFull:
43
- """Returns the dynamic configuration set from user provided information."""
44
- config: DynamicConfigFull = {
45
- "call_params": self.call_params.model_dump(exclude={"model", "tools"}),
46
- "tools": [
47
- tool
48
- if isinstance(tool, type)
49
- else _utils.convert_function_to_base_tool(tool, BaseTool)
50
- for tool in self.call_params.tools or []
51
- ],
52
- }
53
- if hasattr(self, "messages"):
54
- config["messages"] = self.messages() # pyright: ignore [reportAttributeAccessIssue]
55
- return config
56
-
57
- def dump(
58
- self,
59
- ) -> dict[str, Any]:
60
- """Dumps the contents of the prompt into a dictionary."""
61
- return {
62
- "tags": self.tags,
63
- "template": _utils.get_prompt_template(self),
64
- "inputs": self.model_dump(),
65
- }
66
-
67
- def call(
68
- self,
69
- retries: int | Retrying = 0,
70
- client: Any | None = None, # noqa: ANN401
71
- **kwargs: Any, # noqa: ANN401
72
- ) -> _BaseCallResponseT:
73
- """A call to an LLM."""
74
- return self.run(
75
- self.__class__._decorator(self.call_params.model, client=client),
76
- retry_decorator(retries),
77
- ) # pyright: ignore [reportReturnType]
78
-
79
- async def call_async(
80
- self,
81
- retries: int | AsyncRetrying = 0,
82
- client: Any | None = None, # noqa: ANN401
83
- **kwargs: Any, # noqa: ANN401
84
- ) -> _BaseCallResponseT:
85
- """An asynchronous call to an LLM."""
86
- return await self.run_async(
87
- self.__class__._decorator(self.call_params.model, client=client),
88
- retry_decorator(retries),
89
- ) # pyright: ignore [reportReturnType]
90
-
91
- def stream(
92
- self,
93
- retries: int | Retrying = 0,
94
- client: Any | None = None, # noqa: ANN401
95
- **kwargs: Any, # noqa: ANN401
96
- ) -> Generator[tuple[_BaseCallResponseChunkT, _BaseToolT], None, None]:
97
- """A call to an LLM that streams the response in chunks."""
98
- yield from self.run(
99
- self.__class__._decorator(
100
- self.call_params.model, stream=True, client=client
101
- ),
102
- retry_decorator(retries),
103
- ) # pyright: ignore [reportReturnType]
104
-
105
- async def stream_async(
106
- self,
107
- retries: int | AsyncRetrying = 0,
108
- client: Any | None = None, # noqa: ANN401
109
- **kwargs: Any, # noqa: ANN401
110
- ) -> AsyncGenerator[tuple[_BaseCallResponseChunkT, _BaseToolT], None]:
111
- """A asynchronous call to an LLM that streams the response in chunks."""
112
- async for chunk, tool in self.run_async( # pyright: ignore [reportGeneralTypeIssues]
113
- self.__class__._decorator(
114
- self.call_params.model, stream=True, client=client
115
- ),
116
- retry_decorator(retries),
117
- ):
118
- yield chunk, tool
@@ -1,122 +0,0 @@
1
- from collections.abc import AsyncGenerator, Callable, Generator
2
- from typing import Any, ClassVar, Generic, TypeVar
3
-
4
- from pydantic import BaseModel, model_validator
5
- from tenacity import AsyncRetrying, Retrying
6
- from typing_extensions import Self
7
-
8
- from ...core.base import BasePrompt, BaseTool, _utils
9
- from ...core.base.dynamic_config import DynamicConfigFull
10
- from .types import BaseCallParams
11
- from .utils import retry_decorator
12
-
13
- ExtractedType = _utils.BaseType | BaseModel
14
- _ExtractedTypeT = TypeVar("_ExtractedTypeT", bound=ExtractedType)
15
-
16
-
17
- class BaseExtractor(BasePrompt, Generic[_ExtractedTypeT]):
18
- extract_schema: type[_utils.BaseType] | type[BaseModel] | Callable
19
- tags: ClassVar[list[str]] = []
20
- prompt_template: ClassVar[str] = ""
21
-
22
- call_params: ClassVar[BaseCallParams] = BaseCallParams(model="")
23
-
24
- _decorator: ClassVar[Callable] = lambda self: None
25
- _provider: ClassVar[str] = "NO PROVIDER"
26
-
27
- @model_validator(mode="after")
28
- def set_prompt_template(self) -> Self:
29
- self._prompt_template = self.prompt_template
30
- return self
31
-
32
- def dynamic_config(self) -> DynamicConfigFull:
33
- """Returns the dynamic configuration set from user provided information."""
34
- config: DynamicConfigFull = {
35
- "call_params": self.call_params.model_dump(exclude={"model", "tools"}),
36
- "tools": [
37
- tool
38
- if isinstance(tool, type)
39
- else _utils.convert_function_to_base_tool(tool, BaseTool)
40
- for tool in self.call_params.tools or []
41
- ],
42
- }
43
- if hasattr(self, "messages"):
44
- config["messages"] = self.messages() # pyright: ignore [reportAttributeAccessIssue]
45
- return config
46
-
47
- def dump(
48
- self,
49
- ) -> dict[str, Any]:
50
- """Dumps the contents of the prompt into a dictionary."""
51
- return {
52
- "tags": self.tags,
53
- "template": _utils.get_prompt_template(self),
54
- "inputs": self.model_dump(),
55
- }
56
-
57
- def extract(
58
- self,
59
- retries: int | Retrying = 0,
60
- client: Any | None = None, # noqa: ANN401
61
- **kwargs: Any, # noqa: ANN401
62
- ) -> _ExtractedTypeT:
63
- """Extracts the `extract_schema` format from the response."""
64
- return self.run(
65
- self.__class__._decorator(
66
- self.call_params.model,
67
- response_model=self.extract_schema,
68
- client=client,
69
- ),
70
- retry_decorator(retries),
71
- )
72
-
73
- async def extract_async(
74
- self,
75
- retries: int | Retrying = 0,
76
- client: Any | None = None, # noqa: ANN401
77
- **kwargs: Any, # noqa: ANN401
78
- ) -> _ExtractedTypeT:
79
- """Asynchronously extracts the `extract_schema` format from the response."""
80
- return await self.run_async(
81
- self.__class__._decorator(
82
- self.call_params.model,
83
- response_model=self.extract_schema,
84
- client=client,
85
- ),
86
- retry_decorator(retries),
87
- )
88
-
89
- def stream(
90
- self,
91
- retries: int | Retrying = 0,
92
- client: Any | None = None, # noqa: ANN401
93
- **kwargs: Any, # noqa: ANN401
94
- ) -> Generator[_ExtractedTypeT, None, None]:
95
- """Streams the desired structured output from the response."""
96
- yield from self.run(
97
- self.__class__._decorator(
98
- self.call_params.model,
99
- response_model=self.extract_schema,
100
- stream=True,
101
- client=client,
102
- ),
103
- retry_decorator(retries),
104
- )
105
-
106
- async def stream_async(
107
- self,
108
- retries: int | AsyncRetrying = 0,
109
- client: Any | None = None, # noqa: ANN401
110
- **kwargs: Any, # noqa: ANN401
111
- ) -> AsyncGenerator[_ExtractedTypeT, None]:
112
- """Asynchronously streams the desired structured output from the response."""
113
- async for item in await self.run_async(
114
- self.__class__._decorator(
115
- self.call_params.model,
116
- response_model=self.extract_schema,
117
- stream=True,
118
- client=client,
119
- ),
120
- retry_decorator(retries),
121
- ):
122
- yield item
@@ -1,207 +0,0 @@
1
- import inspect
2
- from collections.abc import Awaitable, Callable, Generator
3
- from contextlib import AbstractContextManager
4
- from functools import wraps
5
- from typing import Any, TypeVar
6
-
7
- from pydantic import BaseModel
8
-
9
-
10
- def get_class_vars(self: BaseModel) -> dict[str, Any]:
11
- """Get the class variables of a `BaseModel` removing any dangerous variables."""
12
- class_vars = {}
13
- for classvars in self.__class_vars__:
14
- if classvars != "api_key":
15
- class_vars[classvars] = getattr(self.__class__, classvars)
16
- return class_vars
17
-
18
-
19
- F = TypeVar("F", bound=Callable[..., Any])
20
- DecoratorType = Callable[[F], F]
21
-
22
-
23
- def mirascope_span( # noqa: ANN201
24
- fn: Callable,
25
- *,
26
- handle_before_call: Callable[..., Any] | None = None,
27
- handle_before_call_async: Callable[..., Awaitable[Any]] | None = None,
28
- handle_after_call: Callable[..., Any] | None = None,
29
- handle_after_call_async: Callable[..., Awaitable[Any]] | None = None,
30
- decorator: DecoratorType | None = None,
31
- **custom_kwargs: Any, # noqa: ANN401
32
- ):
33
- """Wraps a pydantic class method."""
34
-
35
- async def run_after_call_handler(self, result, result_before_call, joined_kwargs): # noqa: ANN001, ANN202
36
- if handle_after_call_async is not None:
37
- await handle_after_call_async(
38
- self, fn, result, result_before_call, **joined_kwargs
39
- )
40
- elif handle_after_call is not None:
41
- handle_after_call(self, fn, result, result_before_call, **joined_kwargs)
42
-
43
- @wraps(fn)
44
- def wrapper(self: BaseModel, *args: Any, **kwargs: Any): # noqa: ANN202, ANN401
45
- """Wraps a pydantic class method that returns a value."""
46
- joined_kwargs = {**kwargs, **custom_kwargs}
47
- before_call = (
48
- handle_before_call(self, fn, **joined_kwargs)
49
- if handle_before_call is not None
50
- else None
51
- )
52
- if isinstance(before_call, AbstractContextManager):
53
- with before_call as result_before_call:
54
- result = fn(self, *args, **kwargs)
55
- if handle_after_call is not None:
56
- handle_after_call(
57
- self, fn, result, result_before_call, **joined_kwargs
58
- )
59
- return result
60
- else:
61
- result = fn(self, *args, **kwargs)
62
- if handle_after_call is not None:
63
- handle_after_call(self, fn, result, before_call, **joined_kwargs)
64
- return result
65
-
66
- @wraps(fn)
67
- async def wrapper_async(self: BaseModel, *args: Any, **kwargs: Any): # noqa: ANN202, ANN401
68
- """Wraps a pydantic async class method that returns a value."""
69
- joined_kwargs = {**kwargs, **custom_kwargs}
70
- before_call = None
71
- if handle_before_call_async is not None:
72
- before_call = await handle_before_call_async(self, fn, **joined_kwargs)
73
- elif handle_before_call is not None:
74
- before_call = handle_before_call(self, fn, **joined_kwargs)
75
-
76
- if isinstance(before_call, AbstractContextManager):
77
- with before_call as result_before_call:
78
- result = await fn(self, *args, **kwargs)
79
- await run_after_call_handler(
80
- self, result, result_before_call, joined_kwargs
81
- )
82
- return result
83
- else:
84
- result = await fn(self, *args, **kwargs)
85
- await run_after_call_handler(self, result, before_call, joined_kwargs)
86
- return result
87
-
88
- @wraps(fn)
89
- def wrapper_generator(self: BaseModel, *args: Any, **kwargs: Any): # noqa: ANN202, ANN401
90
- """Wraps a pydantic class method that returns a generator."""
91
- joined_kwargs = {**kwargs, **custom_kwargs}
92
- before_call = (
93
- handle_before_call(self, fn, **joined_kwargs)
94
- if handle_before_call is not None
95
- else None
96
- )
97
- if isinstance(before_call, AbstractContextManager):
98
- with before_call as result_before_call:
99
- result = fn(self, *args, **kwargs)
100
- output = []
101
- for value in result:
102
- output.append(value)
103
- yield value
104
- if handle_after_call is not None:
105
- handle_after_call(
106
- self, fn, output, result_before_call, **joined_kwargs
107
- )
108
- else:
109
- result = fn(self, *args, **kwargs)
110
- output = []
111
- for value in result:
112
- output.append(value)
113
- yield value
114
- if handle_after_call is not None:
115
- handle_after_call(self, fn, output, before_call, **joined_kwargs)
116
-
117
- @wraps(fn)
118
- async def wrapper_generator_async(self: BaseModel, *args: Any, **kwargs: Any): # noqa: ANN202, ANN401
119
- """Wraps a pydantic async class method that returns a generator."""
120
- joined_kwargs = {**kwargs, **custom_kwargs}
121
- before_call = None
122
- if handle_before_call_async is not None:
123
- before_call = await handle_before_call_async(self, fn, **joined_kwargs)
124
- elif handle_before_call is not None:
125
- before_call = handle_before_call(self, fn, **joined_kwargs)
126
- if isinstance(before_call, AbstractContextManager):
127
- with before_call as result_before_call:
128
- result = fn(self, *args, **kwargs)
129
- output = []
130
- async for value in result:
131
- output.append(value)
132
- yield value
133
- await run_after_call_handler(
134
- self, output, result_before_call, joined_kwargs
135
- )
136
- else:
137
- result = fn(self, *args, **kwargs)
138
- output = []
139
- async for value in result:
140
- output.append(value)
141
- yield value
142
- await run_after_call_handler(self, output, before_call, joined_kwargs)
143
-
144
- wrapper_function = wrapper
145
- if inspect.isasyncgenfunction(fn):
146
- wrapper_function = wrapper_generator_async
147
- elif inspect.iscoroutinefunction(fn):
148
- wrapper_function = wrapper_async
149
- elif inspect.isgeneratorfunction(fn):
150
- wrapper_function = wrapper_generator
151
- if decorator is not None:
152
- wrapper_function = decorator(wrapper_function)
153
- return wrapper_function
154
-
155
-
156
- def wrap_mirascope_class_functions( # noqa: ANN201
157
- cls: type[BaseModel],
158
- *,
159
- handle_before_call: Callable[..., Any] | None = None,
160
- handle_before_call_async: Callable[..., Awaitable[Any]] | None = None,
161
- handle_after_call: Callable[..., Any] | None = None,
162
- handle_after_call_async: Callable[..., Awaitable[Any]] | None = None,
163
- decorator: DecoratorType | None = None,
164
- **custom_kwargs: Any, # noqa: ANN401
165
- ):
166
- """Wraps Mirascope class functions with a decorator.
167
-
168
- Args:
169
- cls: The Mirascope class to wrap.
170
- handle_before_call: A function to call before the call to the wrapped function.
171
- handle_after_call: A function to call after the call to the wrapped function.
172
- custom_kwargs: Additional keyword arguments to pass to the decorator.
173
- """
174
-
175
- for name in get_class_functions(cls):
176
- setattr(
177
- cls,
178
- name,
179
- mirascope_span(
180
- getattr(cls, name),
181
- handle_before_call=handle_before_call,
182
- handle_before_call_async=handle_before_call_async,
183
- handle_after_call=handle_after_call,
184
- handle_after_call_async=handle_after_call_async,
185
- decorator=decorator,
186
- **custom_kwargs,
187
- ),
188
- )
189
- return cls
190
-
191
-
192
- def get_class_functions(cls: type[BaseModel]) -> Generator[str, None, None]:
193
- """Get the class functions of a `BaseModel`."""
194
- ignore_functions = [
195
- "copy",
196
- "dict",
197
- "dump",
198
- "json",
199
- "messages",
200
- "model_copy",
201
- "model_dump",
202
- "model_dump_json",
203
- "model_post_init",
204
- ]
205
- for name, _ in inspect.getmembers(cls, predicate=inspect.isfunction):
206
- if not name.startswith("_") and name not in ignore_functions:
207
- yield name
@@ -1,48 +0,0 @@
1
- from collections.abc import Callable
2
- from typing import TypeVar
3
-
4
- from .calls import BaseCall
5
-
6
- _BaseCallT = TypeVar("_BaseCallT", bound=BaseCall)
7
-
8
-
9
- def tags(args: list[str]) -> Callable[[type[_BaseCallT]], type[_BaseCallT]]:
10
- '''A decorator for adding tags to a `BasePrompt`.
11
-
12
- Adding this decorator to a `BasePrompt` updates the `_tags` class attribute to the
13
- given value. This is useful for adding metadata to a `BasePrompt` that can be used
14
- for logging or filtering.
15
-
16
- Example:
17
-
18
- ```python
19
- from mirascope import BasePrompt, tags
20
-
21
-
22
- @tags(["book_recommendation", "entertainment"])
23
- class BookRecommendationPrompt(BasePrompt):
24
- prompt_template = """
25
- SYSTEM:
26
- You are the world's greatest librarian.
27
-
28
- USER:
29
- I've recently read this book: {book_title}.
30
- What should I read next?
31
- """
32
-
33
- book_title: [str]
34
-
35
- print(BookRecommendationPrompt.dump()["tags"])
36
- #> ['book_recommendation', 'entertainment']
37
- ```
38
-
39
- Returns:
40
- The decorated class with `tags` class attribute set.
41
- '''
42
-
43
- def tags_fn(model_class: type[_BaseCallT]) -> type[_BaseCallT]:
44
- """Updates the `tags` class attribute to the given value."""
45
- model_class.tags = args
46
- return model_class
47
-
48
- return tags_fn
@@ -1,14 +0,0 @@
1
- from collections.abc import Callable
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
- from ...core.base import BaseTool
6
-
7
-
8
- class BaseCallParams(BaseModel):
9
- """The parameters with which to make a call."""
10
-
11
- model: str
12
- tools: list[type[BaseTool] | Callable] | None = None
13
-
14
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
@@ -1,21 +0,0 @@
1
- from collections.abc import Callable
2
-
3
- from tenacity import AsyncRetrying, Retrying, retry, stop_after_attempt
4
-
5
-
6
- def retry_decorator(retries: int | Retrying | AsyncRetrying) -> Callable:
7
- if isinstance(retries, int):
8
- if retries == 0:
9
- return lambda x: x
10
- return retry(stop=stop_after_attempt(retries))
11
- return retry(
12
- sleep=retries.sleep,
13
- stop=retries.stop,
14
- wait=retries.wait,
15
- before=retries.before,
16
- after=retries.after,
17
- before_sleep=retries.before_sleep,
18
- reraise=retries.reraise,
19
- retry_error_cls=retries.retry_error_cls,
20
- retry_error_callback=retries.retry_error_callback,
21
- )
mirascope/v0/openai.py DELETED
@@ -1,54 +0,0 @@
1
- """OpenAI modules for the v0 look-alike implementation."""
2
-
3
- from typing import ClassVar, Generic, TypeVar
4
-
5
- from openai.types.chat import ChatCompletionToolChoiceOptionParam
6
- from openai.types.chat.completion_create_params import ResponseFormat
7
- from pydantic import ConfigDict
8
-
9
- from ..core.openai import (
10
- OpenAICallResponse,
11
- OpenAICallResponseChunk,
12
- OpenAITool,
13
- openai_call,
14
- )
15
- from .base import BaseCall, BaseCallParams, BaseExtractor, ExtractedType
16
-
17
-
18
- class OpenAICallParams(BaseCallParams):
19
- """The parameters to use when calling the OpenAI API."""
20
-
21
- model: str
22
- frequency_penalty: float | None = None
23
- logit_bias: dict[str, int] | None = None
24
- logprobs: bool | None = None
25
- max_tokens: int | None = None
26
- n: int | None = None
27
- presence_penalty: float | None = None
28
- response_format: ResponseFormat | None = None
29
- seed: int | None = None
30
- stop: str | list[str] | None = None
31
- temperature: float | None = None
32
- tool_choice: ChatCompletionToolChoiceOptionParam | None = None
33
- top_logprobs: int | None = None
34
- top_p: float | None = None
35
- user: str | None = None
36
-
37
- model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow")
38
-
39
-
40
- class OpenAICall(BaseCall[OpenAICallResponse, OpenAICallResponseChunk, OpenAITool]):
41
- call_params: ClassVar[BaseCallParams] = OpenAICallParams(model="gpt-4o-mini")
42
-
43
- _decorator = openai_call
44
- _provider = "openai"
45
-
46
-
47
- T = TypeVar("T", bound=ExtractedType)
48
-
49
-
50
- class OpenAIExtractor(BaseExtractor[T], Generic[T]):
51
- call_params: ClassVar[BaseCallParams] = OpenAICallParams(model="gpt-4o-mini")
52
-
53
- _decorator = openai_call
54
- _provider = "openai"