mirascope 1.25.6__py3-none-any.whl → 2.0.0__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 (797) hide show
  1. mirascope/__init__.py +5 -52
  2. mirascope/_stubs.py +363 -0
  3. mirascope/api/__init__.py +14 -0
  4. mirascope/api/_generated/README.md +207 -0
  5. mirascope/api/_generated/__init__.py +440 -0
  6. mirascope/api/_generated/annotations/__init__.py +33 -0
  7. mirascope/api/_generated/annotations/client.py +506 -0
  8. mirascope/api/_generated/annotations/raw_client.py +1414 -0
  9. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  10. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
  12. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  13. mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
  14. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  15. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
  18. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  19. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
  21. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  22. mirascope/api/_generated/api_keys/__init__.py +17 -0
  23. mirascope/api/_generated/api_keys/client.py +530 -0
  24. mirascope/api/_generated/api_keys/raw_client.py +1236 -0
  25. mirascope/api/_generated/api_keys/types/__init__.py +15 -0
  26. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  28. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
  29. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  30. mirascope/api/_generated/client.py +211 -0
  31. mirascope/api/_generated/core/__init__.py +52 -0
  32. mirascope/api/_generated/core/api_error.py +23 -0
  33. mirascope/api/_generated/core/client_wrapper.py +46 -0
  34. mirascope/api/_generated/core/datetime_utils.py +28 -0
  35. mirascope/api/_generated/core/file.py +67 -0
  36. mirascope/api/_generated/core/force_multipart.py +16 -0
  37. mirascope/api/_generated/core/http_client.py +543 -0
  38. mirascope/api/_generated/core/http_response.py +55 -0
  39. mirascope/api/_generated/core/jsonable_encoder.py +100 -0
  40. mirascope/api/_generated/core/pydantic_utilities.py +255 -0
  41. mirascope/api/_generated/core/query_encoder.py +58 -0
  42. mirascope/api/_generated/core/remove_none_from_dict.py +11 -0
  43. mirascope/api/_generated/core/request_options.py +35 -0
  44. mirascope/api/_generated/core/serialization.py +276 -0
  45. mirascope/api/_generated/docs/__init__.py +4 -0
  46. mirascope/api/_generated/docs/client.py +91 -0
  47. mirascope/api/_generated/docs/raw_client.py +178 -0
  48. mirascope/api/_generated/environment.py +9 -0
  49. mirascope/api/_generated/environments/__init__.py +23 -0
  50. mirascope/api/_generated/environments/client.py +649 -0
  51. mirascope/api/_generated/environments/raw_client.py +1567 -0
  52. mirascope/api/_generated/environments/types/__init__.py +25 -0
  53. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  54. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
  55. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
  56. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
  57. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  58. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  59. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  60. mirascope/api/_generated/errors/__init__.py +25 -0
  61. mirascope/api/_generated/errors/bad_request_error.py +14 -0
  62. mirascope/api/_generated/errors/conflict_error.py +14 -0
  63. mirascope/api/_generated/errors/forbidden_error.py +11 -0
  64. mirascope/api/_generated/errors/internal_server_error.py +10 -0
  65. mirascope/api/_generated/errors/not_found_error.py +11 -0
  66. mirascope/api/_generated/errors/payment_required_error.py +15 -0
  67. mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
  68. mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
  69. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  70. mirascope/api/_generated/functions/__init__.py +39 -0
  71. mirascope/api/_generated/functions/client.py +647 -0
  72. mirascope/api/_generated/functions/raw_client.py +1890 -0
  73. mirascope/api/_generated/functions/types/__init__.py +53 -0
  74. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  75. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  76. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  77. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  78. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  79. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
  80. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
  81. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  82. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  83. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
  84. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
  85. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
  86. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  87. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  88. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  89. mirascope/api/_generated/health/__init__.py +7 -0
  90. mirascope/api/_generated/health/client.py +92 -0
  91. mirascope/api/_generated/health/raw_client.py +175 -0
  92. mirascope/api/_generated/health/types/__init__.py +8 -0
  93. mirascope/api/_generated/health/types/health_check_response.py +22 -0
  94. mirascope/api/_generated/health/types/health_check_response_status.py +5 -0
  95. mirascope/api/_generated/organization_invitations/__init__.py +33 -0
  96. mirascope/api/_generated/organization_invitations/client.py +546 -0
  97. mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
  98. mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
  99. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
  100. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
  101. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
  102. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
  103. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
  104. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
  105. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
  106. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
  107. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
  108. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
  109. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
  110. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
  111. mirascope/api/_generated/organization_memberships/__init__.py +19 -0
  112. mirascope/api/_generated/organization_memberships/client.py +302 -0
  113. mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
  114. mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
  115. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
  116. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
  117. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
  118. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
  119. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
  120. mirascope/api/_generated/organizations/__init__.py +51 -0
  121. mirascope/api/_generated/organizations/client.py +869 -0
  122. mirascope/api/_generated/organizations/raw_client.py +2593 -0
  123. mirascope/api/_generated/organizations/types/__init__.py +71 -0
  124. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
  125. mirascope/api/_generated/organizations/types/organizations_create_response.py +26 -0
  126. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +5 -0
  127. mirascope/api/_generated/organizations/types/organizations_get_response.py +26 -0
  128. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +5 -0
  129. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +26 -0
  130. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +5 -0
  131. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
  132. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
  133. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
  134. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
  135. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
  136. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
  137. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
  138. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
  139. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
  140. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
  141. mirascope/api/_generated/organizations/types/organizations_update_response.py +26 -0
  142. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +5 -0
  143. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
  144. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
  145. mirascope/api/_generated/project_memberships/__init__.py +25 -0
  146. mirascope/api/_generated/project_memberships/client.py +437 -0
  147. mirascope/api/_generated/project_memberships/raw_client.py +1039 -0
  148. mirascope/api/_generated/project_memberships/types/__init__.py +29 -0
  149. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
  150. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
  151. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
  152. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
  153. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
  154. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
  155. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
  156. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
  157. mirascope/api/_generated/projects/__init__.py +7 -0
  158. mirascope/api/_generated/projects/client.py +428 -0
  159. mirascope/api/_generated/projects/raw_client.py +1302 -0
  160. mirascope/api/_generated/projects/types/__init__.py +10 -0
  161. mirascope/api/_generated/projects/types/projects_create_response.py +25 -0
  162. mirascope/api/_generated/projects/types/projects_get_response.py +25 -0
  163. mirascope/api/_generated/projects/types/projects_list_response_item.py +25 -0
  164. mirascope/api/_generated/projects/types/projects_update_response.py +25 -0
  165. mirascope/api/_generated/reference.md +4915 -0
  166. mirascope/api/_generated/tags/__init__.py +19 -0
  167. mirascope/api/_generated/tags/client.py +504 -0
  168. mirascope/api/_generated/tags/raw_client.py +1288 -0
  169. mirascope/api/_generated/tags/types/__init__.py +17 -0
  170. mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
  171. mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
  172. mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
  173. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
  174. mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
  175. mirascope/api/_generated/token_cost/__init__.py +7 -0
  176. mirascope/api/_generated/token_cost/client.py +160 -0
  177. mirascope/api/_generated/token_cost/raw_client.py +264 -0
  178. mirascope/api/_generated/token_cost/types/__init__.py +8 -0
  179. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
  180. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
  181. mirascope/api/_generated/traces/__init__.py +97 -0
  182. mirascope/api/_generated/traces/client.py +1103 -0
  183. mirascope/api/_generated/traces/raw_client.py +2322 -0
  184. mirascope/api/_generated/traces/types/__init__.py +155 -0
  185. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +29 -0
  186. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +27 -0
  187. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +23 -0
  188. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +38 -0
  189. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +19 -0
  190. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +22 -0
  191. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +20 -0
  192. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +29 -0
  193. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +31 -0
  194. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +23 -0
  195. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +38 -0
  196. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +19 -0
  197. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +22 -0
  198. 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
  199. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +48 -0
  200. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +23 -0
  201. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +38 -0
  202. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +19 -0
  203. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +24 -0
  204. 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
  205. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +20 -0
  206. mirascope/api/_generated/traces/types/traces_create_response.py +24 -0
  207. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +22 -0
  208. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
  209. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  210. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  211. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
  212. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
  213. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  214. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
  215. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
  216. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
  217. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
  218. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
  219. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
  220. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
  221. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
  222. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
  223. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  224. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  225. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  226. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  227. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  228. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
  229. mirascope/api/_generated/types/__init__.py +85 -0
  230. mirascope/api/_generated/types/already_exists_error.py +22 -0
  231. mirascope/api/_generated/types/already_exists_error_tag.py +5 -0
  232. mirascope/api/_generated/types/bad_request_error_body.py +50 -0
  233. mirascope/api/_generated/types/click_house_error.py +22 -0
  234. mirascope/api/_generated/types/database_error.py +22 -0
  235. mirascope/api/_generated/types/database_error_tag.py +5 -0
  236. mirascope/api/_generated/types/date.py +3 -0
  237. mirascope/api/_generated/types/http_api_decode_error.py +27 -0
  238. mirascope/api/_generated/types/http_api_decode_error_tag.py +5 -0
  239. mirascope/api/_generated/types/immutable_resource_error.py +22 -0
  240. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  241. mirascope/api/_generated/types/issue.py +38 -0
  242. mirascope/api/_generated/types/issue_tag.py +10 -0
  243. mirascope/api/_generated/types/not_found_error_body.py +22 -0
  244. mirascope/api/_generated/types/not_found_error_tag.py +5 -0
  245. mirascope/api/_generated/types/number_from_string.py +3 -0
  246. mirascope/api/_generated/types/permission_denied_error.py +22 -0
  247. mirascope/api/_generated/types/permission_denied_error_tag.py +5 -0
  248. mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
  249. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
  250. mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
  251. mirascope/api/_generated/types/property_key.py +7 -0
  252. mirascope/api/_generated/types/property_key_key.py +25 -0
  253. mirascope/api/_generated/types/property_key_key_tag.py +5 -0
  254. mirascope/api/_generated/types/rate_limit_error.py +31 -0
  255. mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
  256. mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
  257. mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
  258. mirascope/api/_generated/types/stripe_error.py +20 -0
  259. mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
  260. mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
  261. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  262. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  263. mirascope/api/client.py +255 -0
  264. mirascope/api/settings.py +99 -0
  265. mirascope/llm/__init__.py +290 -15
  266. mirascope/llm/calls/__init__.py +17 -0
  267. mirascope/llm/calls/calls.py +341 -0
  268. mirascope/llm/calls/decorator.py +275 -0
  269. mirascope/llm/content/__init__.py +71 -0
  270. mirascope/llm/content/audio.py +173 -0
  271. mirascope/llm/content/document.py +94 -0
  272. mirascope/llm/content/image.py +206 -0
  273. mirascope/llm/content/text.py +47 -0
  274. mirascope/llm/content/thought.py +58 -0
  275. mirascope/llm/content/tool_call.py +69 -0
  276. mirascope/llm/content/tool_output.py +43 -0
  277. mirascope/llm/context/__init__.py +6 -0
  278. mirascope/llm/context/_utils.py +41 -0
  279. mirascope/llm/context/context.py +24 -0
  280. mirascope/llm/exceptions.py +360 -0
  281. mirascope/llm/formatting/__init__.py +39 -0
  282. mirascope/llm/formatting/format.py +293 -0
  283. mirascope/llm/formatting/from_call_args.py +30 -0
  284. mirascope/llm/formatting/output_parser.py +178 -0
  285. mirascope/llm/formatting/partial.py +131 -0
  286. mirascope/llm/formatting/primitives.py +192 -0
  287. mirascope/llm/formatting/types.py +66 -0
  288. mirascope/llm/mcp/__init__.py +5 -0
  289. mirascope/llm/mcp/mcp_client.py +130 -0
  290. mirascope/llm/messages/__init__.py +35 -0
  291. mirascope/llm/messages/_utils.py +34 -0
  292. mirascope/llm/messages/message.py +190 -0
  293. mirascope/llm/models/__init__.py +21 -0
  294. mirascope/llm/models/models.py +1419 -0
  295. mirascope/llm/models/params.py +72 -0
  296. mirascope/llm/models/thinking_config.py +61 -0
  297. mirascope/llm/prompts/__init__.py +34 -0
  298. mirascope/llm/prompts/_utils.py +31 -0
  299. mirascope/llm/prompts/decorator.py +226 -0
  300. mirascope/llm/prompts/prompts.py +487 -0
  301. mirascope/llm/prompts/protocols.py +65 -0
  302. mirascope/llm/providers/__init__.py +62 -0
  303. mirascope/llm/providers/anthropic/__init__.py +11 -0
  304. mirascope/llm/providers/anthropic/_utils/__init__.py +27 -0
  305. mirascope/llm/providers/anthropic/_utils/beta_decode.py +282 -0
  306. mirascope/llm/providers/anthropic/_utils/beta_encode.py +266 -0
  307. mirascope/llm/providers/anthropic/_utils/decode.py +288 -0
  308. mirascope/llm/providers/anthropic/_utils/encode.py +418 -0
  309. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  310. mirascope/llm/providers/anthropic/beta_provider.py +374 -0
  311. mirascope/llm/providers/anthropic/model_id.py +23 -0
  312. mirascope/llm/providers/anthropic/model_info.py +87 -0
  313. mirascope/llm/providers/anthropic/provider.py +479 -0
  314. mirascope/llm/providers/base/__init__.py +14 -0
  315. mirascope/llm/providers/base/_utils.py +253 -0
  316. mirascope/llm/providers/base/base_provider.py +1579 -0
  317. mirascope/llm/providers/base/kwargs.py +12 -0
  318. mirascope/llm/providers/google/__init__.py +6 -0
  319. mirascope/llm/providers/google/_utils/__init__.py +17 -0
  320. mirascope/llm/providers/google/_utils/decode.py +307 -0
  321. mirascope/llm/providers/google/_utils/encode.py +401 -0
  322. mirascope/llm/providers/google/_utils/errors.py +50 -0
  323. mirascope/llm/providers/google/message.py +7 -0
  324. mirascope/llm/providers/google/model_id.py +22 -0
  325. mirascope/llm/providers/google/model_info.py +63 -0
  326. mirascope/llm/providers/google/provider.py +492 -0
  327. mirascope/llm/providers/mirascope/__init__.py +5 -0
  328. mirascope/llm/providers/mirascope/_utils.py +73 -0
  329. mirascope/llm/providers/mirascope/provider.py +349 -0
  330. mirascope/llm/providers/mlx/__init__.py +9 -0
  331. mirascope/llm/providers/mlx/_utils.py +141 -0
  332. mirascope/llm/providers/mlx/encoding/__init__.py +8 -0
  333. mirascope/llm/providers/mlx/encoding/base.py +72 -0
  334. mirascope/llm/providers/mlx/encoding/transformers.py +150 -0
  335. mirascope/llm/providers/mlx/mlx.py +254 -0
  336. mirascope/llm/providers/mlx/model_id.py +17 -0
  337. mirascope/llm/providers/mlx/provider.py +452 -0
  338. mirascope/llm/providers/model_id.py +16 -0
  339. mirascope/llm/providers/ollama/__init__.py +7 -0
  340. mirascope/llm/providers/ollama/provider.py +71 -0
  341. mirascope/llm/providers/openai/__init__.py +15 -0
  342. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  343. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  344. mirascope/llm/providers/openai/completions/__init__.py +7 -0
  345. mirascope/llm/providers/openai/completions/_utils/__init__.py +15 -0
  346. mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
  347. mirascope/llm/providers/openai/completions/_utils/encode.py +376 -0
  348. mirascope/llm/providers/openai/completions/base_provider.py +542 -0
  349. mirascope/llm/providers/openai/completions/provider.py +22 -0
  350. mirascope/llm/providers/openai/model_id.py +31 -0
  351. mirascope/llm/providers/openai/model_info.py +303 -0
  352. mirascope/llm/providers/openai/provider.py +441 -0
  353. mirascope/llm/providers/openai/responses/__init__.py +5 -0
  354. mirascope/llm/providers/openai/responses/_utils/__init__.py +15 -0
  355. mirascope/llm/providers/openai/responses/_utils/decode.py +260 -0
  356. mirascope/llm/providers/openai/responses/_utils/encode.py +384 -0
  357. mirascope/llm/providers/openai/responses/provider.py +513 -0
  358. mirascope/llm/providers/provider_id.py +24 -0
  359. mirascope/llm/providers/provider_registry.py +299 -0
  360. mirascope/llm/providers/together/__init__.py +7 -0
  361. mirascope/llm/providers/together/provider.py +40 -0
  362. mirascope/llm/responses/__init__.py +65 -0
  363. mirascope/llm/responses/_utils.py +146 -0
  364. mirascope/llm/responses/base_response.py +103 -0
  365. mirascope/llm/responses/base_stream_response.py +820 -0
  366. mirascope/llm/responses/finish_reason.py +28 -0
  367. mirascope/llm/responses/response.py +366 -0
  368. mirascope/llm/responses/root_response.py +248 -0
  369. mirascope/llm/responses/stream_response.py +581 -0
  370. mirascope/llm/responses/streams.py +363 -0
  371. mirascope/llm/responses/usage.py +95 -0
  372. mirascope/llm/tools/__init__.py +47 -0
  373. mirascope/llm/tools/_utils.py +34 -0
  374. mirascope/llm/tools/decorator.py +184 -0
  375. mirascope/llm/tools/protocols.py +96 -0
  376. mirascope/llm/tools/tool_schema.py +314 -0
  377. mirascope/llm/tools/toolkit.py +160 -0
  378. mirascope/llm/tools/tools.py +263 -0
  379. mirascope/llm/types/__init__.py +22 -0
  380. mirascope/llm/types/dataclass.py +9 -0
  381. mirascope/llm/types/jsonable.py +44 -0
  382. mirascope/llm/types/type_vars.py +19 -0
  383. mirascope/ops/__init__.py +111 -0
  384. mirascope/ops/_internal/__init__.py +5 -0
  385. mirascope/ops/_internal/closure.py +1169 -0
  386. mirascope/ops/_internal/configuration.py +177 -0
  387. mirascope/ops/_internal/context.py +76 -0
  388. mirascope/ops/_internal/exporters/__init__.py +26 -0
  389. mirascope/ops/_internal/exporters/exporters.py +395 -0
  390. mirascope/ops/_internal/exporters/processors.py +104 -0
  391. mirascope/ops/_internal/exporters/types.py +165 -0
  392. mirascope/ops/_internal/exporters/utils.py +29 -0
  393. mirascope/ops/_internal/instrumentation/__init__.py +8 -0
  394. mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
  395. mirascope/ops/_internal/instrumentation/llm/common.py +530 -0
  396. mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
  397. mirascope/ops/_internal/instrumentation/llm/encode.py +238 -0
  398. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +38 -0
  399. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +31 -0
  400. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +38 -0
  401. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +18 -0
  402. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +100 -0
  403. mirascope/ops/_internal/instrumentation/llm/llm.py +161 -0
  404. mirascope/ops/_internal/instrumentation/llm/model.py +1798 -0
  405. mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
  406. mirascope/ops/_internal/instrumentation/llm/serialize.py +300 -0
  407. mirascope/ops/_internal/propagation.py +198 -0
  408. mirascope/ops/_internal/protocols.py +133 -0
  409. mirascope/ops/_internal/session.py +139 -0
  410. mirascope/ops/_internal/spans.py +232 -0
  411. mirascope/ops/_internal/traced_calls.py +375 -0
  412. mirascope/ops/_internal/traced_functions.py +523 -0
  413. mirascope/ops/_internal/tracing.py +353 -0
  414. mirascope/ops/_internal/types.py +13 -0
  415. mirascope/ops/_internal/utils.py +123 -0
  416. mirascope/ops/_internal/versioned_calls.py +512 -0
  417. mirascope/ops/_internal/versioned_functions.py +357 -0
  418. mirascope/ops/_internal/versioning.py +303 -0
  419. mirascope/ops/exceptions.py +21 -0
  420. mirascope-2.0.0.dist-info/METADATA +203 -0
  421. mirascope-2.0.0.dist-info/RECORD +423 -0
  422. {mirascope-1.25.6.dist-info → mirascope-2.0.0.dist-info}/WHEEL +1 -1
  423. {mirascope-1.25.6.dist-info → mirascope-2.0.0.dist-info}/licenses/LICENSE +1 -1
  424. mirascope/beta/__init__.py +0 -3
  425. mirascope/beta/openai/__init__.py +0 -17
  426. mirascope/beta/openai/realtime/__init__.py +0 -13
  427. mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
  428. mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
  429. mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
  430. mirascope/beta/openai/realtime/realtime.py +0 -500
  431. mirascope/beta/openai/realtime/recording.py +0 -98
  432. mirascope/beta/openai/realtime/tool.py +0 -113
  433. mirascope/beta/rag/__init__.py +0 -24
  434. mirascope/beta/rag/base/__init__.py +0 -22
  435. mirascope/beta/rag/base/chunkers/__init__.py +0 -2
  436. mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
  437. mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
  438. mirascope/beta/rag/base/config.py +0 -8
  439. mirascope/beta/rag/base/document.py +0 -11
  440. mirascope/beta/rag/base/embedders.py +0 -35
  441. mirascope/beta/rag/base/embedding_params.py +0 -18
  442. mirascope/beta/rag/base/embedding_response.py +0 -30
  443. mirascope/beta/rag/base/query_results.py +0 -7
  444. mirascope/beta/rag/base/vectorstore_params.py +0 -18
  445. mirascope/beta/rag/base/vectorstores.py +0 -37
  446. mirascope/beta/rag/chroma/__init__.py +0 -11
  447. mirascope/beta/rag/chroma/types.py +0 -62
  448. mirascope/beta/rag/chroma/vectorstores.py +0 -121
  449. mirascope/beta/rag/cohere/__init__.py +0 -11
  450. mirascope/beta/rag/cohere/embedders.py +0 -87
  451. mirascope/beta/rag/cohere/embedding_params.py +0 -29
  452. mirascope/beta/rag/cohere/embedding_response.py +0 -29
  453. mirascope/beta/rag/cohere/py.typed +0 -0
  454. mirascope/beta/rag/openai/__init__.py +0 -11
  455. mirascope/beta/rag/openai/embedders.py +0 -144
  456. mirascope/beta/rag/openai/embedding_params.py +0 -18
  457. mirascope/beta/rag/openai/embedding_response.py +0 -14
  458. mirascope/beta/rag/openai/py.typed +0 -0
  459. mirascope/beta/rag/pinecone/__init__.py +0 -19
  460. mirascope/beta/rag/pinecone/types.py +0 -143
  461. mirascope/beta/rag/pinecone/vectorstores.py +0 -148
  462. mirascope/beta/rag/weaviate/__init__.py +0 -6
  463. mirascope/beta/rag/weaviate/types.py +0 -92
  464. mirascope/beta/rag/weaviate/vectorstores.py +0 -103
  465. mirascope/core/__init__.py +0 -109
  466. mirascope/core/anthropic/__init__.py +0 -31
  467. mirascope/core/anthropic/_call.py +0 -67
  468. mirascope/core/anthropic/_call_kwargs.py +0 -13
  469. mirascope/core/anthropic/_thinking.py +0 -70
  470. mirascope/core/anthropic/_utils/__init__.py +0 -16
  471. mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
  472. mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  473. mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
  474. mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
  475. mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
  476. mirascope/core/anthropic/_utils/_message_param_converter.py +0 -142
  477. mirascope/core/anthropic/_utils/_setup_call.py +0 -146
  478. mirascope/core/anthropic/call_params.py +0 -44
  479. mirascope/core/anthropic/call_response.py +0 -226
  480. mirascope/core/anthropic/call_response_chunk.py +0 -152
  481. mirascope/core/anthropic/dynamic_config.py +0 -40
  482. mirascope/core/anthropic/py.typed +0 -0
  483. mirascope/core/anthropic/stream.py +0 -204
  484. mirascope/core/anthropic/tool.py +0 -101
  485. mirascope/core/azure/__init__.py +0 -31
  486. mirascope/core/azure/_call.py +0 -67
  487. mirascope/core/azure/_call_kwargs.py +0 -13
  488. mirascope/core/azure/_utils/__init__.py +0 -14
  489. mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
  490. mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  491. mirascope/core/azure/_utils/_convert_message_params.py +0 -121
  492. mirascope/core/azure/_utils/_get_credential.py +0 -33
  493. mirascope/core/azure/_utils/_get_json_output.py +0 -27
  494. mirascope/core/azure/_utils/_handle_stream.py +0 -130
  495. mirascope/core/azure/_utils/_message_param_converter.py +0 -117
  496. mirascope/core/azure/_utils/_setup_call.py +0 -183
  497. mirascope/core/azure/call_params.py +0 -59
  498. mirascope/core/azure/call_response.py +0 -215
  499. mirascope/core/azure/call_response_chunk.py +0 -105
  500. mirascope/core/azure/dynamic_config.py +0 -30
  501. mirascope/core/azure/py.typed +0 -0
  502. mirascope/core/azure/stream.py +0 -147
  503. mirascope/core/azure/tool.py +0 -93
  504. mirascope/core/base/__init__.py +0 -86
  505. mirascope/core/base/_call_factory.py +0 -256
  506. mirascope/core/base/_create.py +0 -253
  507. mirascope/core/base/_extract.py +0 -175
  508. mirascope/core/base/_extract_with_tools.py +0 -189
  509. mirascope/core/base/_partial.py +0 -95
  510. mirascope/core/base/_utils/__init__.py +0 -92
  511. mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
  512. mirascope/core/base/_utils/_base_type.py +0 -26
  513. mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
  514. mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
  515. mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
  516. mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -178
  517. mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
  518. mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
  519. mirascope/core/base/_utils/_extract_tool_return.py +0 -42
  520. mirascope/core/base/_utils/_fn_is_async.py +0 -24
  521. mirascope/core/base/_utils/_format_template.py +0 -32
  522. mirascope/core/base/_utils/_get_audio_type.py +0 -18
  523. mirascope/core/base/_utils/_get_common_usage.py +0 -20
  524. mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
  525. mirascope/core/base/_utils/_get_document_type.py +0 -7
  526. mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
  527. mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
  528. mirascope/core/base/_utils/_get_fn_args.py +0 -23
  529. mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
  530. mirascope/core/base/_utils/_get_image_type.py +0 -26
  531. mirascope/core/base/_utils/_get_metadata.py +0 -17
  532. mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
  533. mirascope/core/base/_utils/_get_prompt_template.py +0 -28
  534. mirascope/core/base/_utils/_get_template_values.py +0 -51
  535. mirascope/core/base/_utils/_get_template_variables.py +0 -38
  536. mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
  537. mirascope/core/base/_utils/_is_prompt_template.py +0 -24
  538. mirascope/core/base/_utils/_json_mode_content.py +0 -17
  539. mirascope/core/base/_utils/_messages_decorator.py +0 -121
  540. mirascope/core/base/_utils/_parse_content_template.py +0 -323
  541. mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
  542. mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
  543. mirascope/core/base/_utils/_protocols.py +0 -901
  544. mirascope/core/base/_utils/_setup_call.py +0 -79
  545. mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
  546. mirascope/core/base/call_kwargs.py +0 -13
  547. mirascope/core/base/call_params.py +0 -36
  548. mirascope/core/base/call_response.py +0 -338
  549. mirascope/core/base/call_response_chunk.py +0 -130
  550. mirascope/core/base/dynamic_config.py +0 -82
  551. mirascope/core/base/from_call_args.py +0 -30
  552. mirascope/core/base/merge_decorators.py +0 -59
  553. mirascope/core/base/message_param.py +0 -175
  554. mirascope/core/base/messages.py +0 -116
  555. mirascope/core/base/metadata.py +0 -13
  556. mirascope/core/base/prompt.py +0 -497
  557. mirascope/core/base/response_model_config_dict.py +0 -9
  558. mirascope/core/base/stream.py +0 -479
  559. mirascope/core/base/stream_config.py +0 -11
  560. mirascope/core/base/structured_stream.py +0 -296
  561. mirascope/core/base/tool.py +0 -214
  562. mirascope/core/base/toolkit.py +0 -176
  563. mirascope/core/base/types.py +0 -344
  564. mirascope/core/bedrock/__init__.py +0 -34
  565. mirascope/core/bedrock/_call.py +0 -68
  566. mirascope/core/bedrock/_call_kwargs.py +0 -12
  567. mirascope/core/bedrock/_types.py +0 -104
  568. mirascope/core/bedrock/_utils/__init__.py +0 -14
  569. mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
  570. mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  571. mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
  572. mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
  573. mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
  574. mirascope/core/bedrock/_utils/_message_param_converter.py +0 -172
  575. mirascope/core/bedrock/_utils/_setup_call.py +0 -258
  576. mirascope/core/bedrock/call_params.py +0 -38
  577. mirascope/core/bedrock/call_response.py +0 -248
  578. mirascope/core/bedrock/call_response_chunk.py +0 -111
  579. mirascope/core/bedrock/dynamic_config.py +0 -37
  580. mirascope/core/bedrock/py.typed +0 -0
  581. mirascope/core/bedrock/stream.py +0 -154
  582. mirascope/core/bedrock/tool.py +0 -100
  583. mirascope/core/cohere/__init__.py +0 -30
  584. mirascope/core/cohere/_call.py +0 -67
  585. mirascope/core/cohere/_call_kwargs.py +0 -11
  586. mirascope/core/cohere/_types.py +0 -20
  587. mirascope/core/cohere/_utils/__init__.py +0 -14
  588. mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
  589. mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
  590. mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
  591. mirascope/core/cohere/_utils/_get_json_output.py +0 -30
  592. mirascope/core/cohere/_utils/_handle_stream.py +0 -35
  593. mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
  594. mirascope/core/cohere/_utils/_setup_call.py +0 -150
  595. mirascope/core/cohere/call_params.py +0 -62
  596. mirascope/core/cohere/call_response.py +0 -205
  597. mirascope/core/cohere/call_response_chunk.py +0 -125
  598. mirascope/core/cohere/dynamic_config.py +0 -32
  599. mirascope/core/cohere/py.typed +0 -0
  600. mirascope/core/cohere/stream.py +0 -113
  601. mirascope/core/cohere/tool.py +0 -93
  602. mirascope/core/costs/__init__.py +0 -5
  603. mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
  604. mirascope/core/costs/_azure_calculate_cost.py +0 -11
  605. mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
  606. mirascope/core/costs/_cohere_calculate_cost.py +0 -44
  607. mirascope/core/costs/_gemini_calculate_cost.py +0 -67
  608. mirascope/core/costs/_google_calculate_cost.py +0 -427
  609. mirascope/core/costs/_groq_calculate_cost.py +0 -156
  610. mirascope/core/costs/_litellm_calculate_cost.py +0 -11
  611. mirascope/core/costs/_mistral_calculate_cost.py +0 -64
  612. mirascope/core/costs/_openai_calculate_cost.py +0 -416
  613. mirascope/core/costs/_vertex_calculate_cost.py +0 -67
  614. mirascope/core/costs/_xai_calculate_cost.py +0 -104
  615. mirascope/core/costs/calculate_cost.py +0 -86
  616. mirascope/core/gemini/__init__.py +0 -40
  617. mirascope/core/gemini/_call.py +0 -67
  618. mirascope/core/gemini/_call_kwargs.py +0 -12
  619. mirascope/core/gemini/_utils/__init__.py +0 -14
  620. mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
  621. mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  622. mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
  623. mirascope/core/gemini/_utils/_get_json_output.py +0 -35
  624. mirascope/core/gemini/_utils/_handle_stream.py +0 -33
  625. mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
  626. mirascope/core/gemini/_utils/_setup_call.py +0 -149
  627. mirascope/core/gemini/call_params.py +0 -52
  628. mirascope/core/gemini/call_response.py +0 -216
  629. mirascope/core/gemini/call_response_chunk.py +0 -100
  630. mirascope/core/gemini/dynamic_config.py +0 -26
  631. mirascope/core/gemini/stream.py +0 -120
  632. mirascope/core/gemini/tool.py +0 -104
  633. mirascope/core/google/__init__.py +0 -29
  634. mirascope/core/google/_call.py +0 -67
  635. mirascope/core/google/_call_kwargs.py +0 -13
  636. mirascope/core/google/_utils/__init__.py +0 -14
  637. mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
  638. mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
  639. mirascope/core/google/_utils/_convert_message_params.py +0 -297
  640. mirascope/core/google/_utils/_get_json_output.py +0 -37
  641. mirascope/core/google/_utils/_handle_stream.py +0 -58
  642. mirascope/core/google/_utils/_message_param_converter.py +0 -200
  643. mirascope/core/google/_utils/_setup_call.py +0 -201
  644. mirascope/core/google/_utils/_validate_media_type.py +0 -58
  645. mirascope/core/google/call_params.py +0 -22
  646. mirascope/core/google/call_response.py +0 -255
  647. mirascope/core/google/call_response_chunk.py +0 -135
  648. mirascope/core/google/dynamic_config.py +0 -26
  649. mirascope/core/google/stream.py +0 -199
  650. mirascope/core/google/tool.py +0 -146
  651. mirascope/core/groq/__init__.py +0 -30
  652. mirascope/core/groq/_call.py +0 -67
  653. mirascope/core/groq/_call_kwargs.py +0 -13
  654. mirascope/core/groq/_utils/__init__.py +0 -14
  655. mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
  656. mirascope/core/groq/_utils/_convert_message_params.py +0 -112
  657. mirascope/core/groq/_utils/_get_json_output.py +0 -27
  658. mirascope/core/groq/_utils/_handle_stream.py +0 -123
  659. mirascope/core/groq/_utils/_message_param_converter.py +0 -89
  660. mirascope/core/groq/_utils/_setup_call.py +0 -132
  661. mirascope/core/groq/call_params.py +0 -52
  662. mirascope/core/groq/call_response.py +0 -213
  663. mirascope/core/groq/call_response_chunk.py +0 -104
  664. mirascope/core/groq/dynamic_config.py +0 -29
  665. mirascope/core/groq/py.typed +0 -0
  666. mirascope/core/groq/stream.py +0 -135
  667. mirascope/core/groq/tool.py +0 -80
  668. mirascope/core/litellm/__init__.py +0 -28
  669. mirascope/core/litellm/_call.py +0 -67
  670. mirascope/core/litellm/_utils/__init__.py +0 -5
  671. mirascope/core/litellm/_utils/_setup_call.py +0 -109
  672. mirascope/core/litellm/call_params.py +0 -10
  673. mirascope/core/litellm/call_response.py +0 -24
  674. mirascope/core/litellm/call_response_chunk.py +0 -14
  675. mirascope/core/litellm/dynamic_config.py +0 -8
  676. mirascope/core/litellm/py.typed +0 -0
  677. mirascope/core/litellm/stream.py +0 -86
  678. mirascope/core/litellm/tool.py +0 -13
  679. mirascope/core/mistral/__init__.py +0 -36
  680. mirascope/core/mistral/_call.py +0 -65
  681. mirascope/core/mistral/_call_kwargs.py +0 -19
  682. mirascope/core/mistral/_utils/__init__.py +0 -14
  683. mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
  684. mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
  685. mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
  686. mirascope/core/mistral/_utils/_get_json_output.py +0 -34
  687. mirascope/core/mistral/_utils/_handle_stream.py +0 -139
  688. mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
  689. mirascope/core/mistral/_utils/_setup_call.py +0 -164
  690. mirascope/core/mistral/call_params.py +0 -36
  691. mirascope/core/mistral/call_response.py +0 -205
  692. mirascope/core/mistral/call_response_chunk.py +0 -105
  693. mirascope/core/mistral/dynamic_config.py +0 -33
  694. mirascope/core/mistral/py.typed +0 -0
  695. mirascope/core/mistral/stream.py +0 -120
  696. mirascope/core/mistral/tool.py +0 -81
  697. mirascope/core/openai/__init__.py +0 -31
  698. mirascope/core/openai/_call.py +0 -67
  699. mirascope/core/openai/_call_kwargs.py +0 -13
  700. mirascope/core/openai/_utils/__init__.py +0 -14
  701. mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
  702. mirascope/core/openai/_utils/_convert_message_params.py +0 -148
  703. mirascope/core/openai/_utils/_get_json_output.py +0 -31
  704. mirascope/core/openai/_utils/_handle_stream.py +0 -138
  705. mirascope/core/openai/_utils/_message_param_converter.py +0 -105
  706. mirascope/core/openai/_utils/_setup_call.py +0 -155
  707. mirascope/core/openai/call_params.py +0 -92
  708. mirascope/core/openai/call_response.py +0 -273
  709. mirascope/core/openai/call_response_chunk.py +0 -139
  710. mirascope/core/openai/dynamic_config.py +0 -34
  711. mirascope/core/openai/py.typed +0 -0
  712. mirascope/core/openai/stream.py +0 -185
  713. mirascope/core/openai/tool.py +0 -101
  714. mirascope/core/py.typed +0 -0
  715. mirascope/core/vertex/__init__.py +0 -45
  716. mirascope/core/vertex/_call.py +0 -62
  717. mirascope/core/vertex/_call_kwargs.py +0 -12
  718. mirascope/core/vertex/_utils/__init__.py +0 -14
  719. mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
  720. mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  721. mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
  722. mirascope/core/vertex/_utils/_get_json_output.py +0 -36
  723. mirascope/core/vertex/_utils/_handle_stream.py +0 -33
  724. mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
  725. mirascope/core/vertex/_utils/_setup_call.py +0 -160
  726. mirascope/core/vertex/call_params.py +0 -24
  727. mirascope/core/vertex/call_response.py +0 -206
  728. mirascope/core/vertex/call_response_chunk.py +0 -99
  729. mirascope/core/vertex/dynamic_config.py +0 -28
  730. mirascope/core/vertex/stream.py +0 -119
  731. mirascope/core/vertex/tool.py +0 -101
  732. mirascope/core/xai/__init__.py +0 -28
  733. mirascope/core/xai/_call.py +0 -67
  734. mirascope/core/xai/_utils/__init__.py +0 -5
  735. mirascope/core/xai/_utils/_setup_call.py +0 -113
  736. mirascope/core/xai/call_params.py +0 -10
  737. mirascope/core/xai/call_response.py +0 -16
  738. mirascope/core/xai/call_response_chunk.py +0 -14
  739. mirascope/core/xai/dynamic_config.py +0 -8
  740. mirascope/core/xai/py.typed +0 -0
  741. mirascope/core/xai/stream.py +0 -57
  742. mirascope/core/xai/tool.py +0 -13
  743. mirascope/experimental/graphs/__init__.py +0 -5
  744. mirascope/experimental/graphs/finite_state_machine.py +0 -714
  745. mirascope/integrations/__init__.py +0 -16
  746. mirascope/integrations/_middleware_factory.py +0 -403
  747. mirascope/integrations/langfuse/__init__.py +0 -3
  748. mirascope/integrations/langfuse/_utils.py +0 -114
  749. mirascope/integrations/langfuse/_with_langfuse.py +0 -70
  750. mirascope/integrations/logfire/__init__.py +0 -3
  751. mirascope/integrations/logfire/_utils.py +0 -225
  752. mirascope/integrations/logfire/_with_logfire.py +0 -63
  753. mirascope/integrations/otel/__init__.py +0 -10
  754. mirascope/integrations/otel/_utils.py +0 -270
  755. mirascope/integrations/otel/_with_hyperdx.py +0 -60
  756. mirascope/integrations/otel/_with_otel.py +0 -59
  757. mirascope/integrations/tenacity.py +0 -14
  758. mirascope/llm/_call.py +0 -401
  759. mirascope/llm/_context.py +0 -384
  760. mirascope/llm/_override.py +0 -3639
  761. mirascope/llm/_protocols.py +0 -500
  762. mirascope/llm/_response_metaclass.py +0 -31
  763. mirascope/llm/call_response.py +0 -158
  764. mirascope/llm/call_response_chunk.py +0 -66
  765. mirascope/llm/stream.py +0 -162
  766. mirascope/llm/tool.py +0 -64
  767. mirascope/mcp/__init__.py +0 -7
  768. mirascope/mcp/_utils.py +0 -288
  769. mirascope/mcp/client.py +0 -167
  770. mirascope/mcp/server.py +0 -356
  771. mirascope/mcp/tools.py +0 -110
  772. mirascope/py.typed +0 -0
  773. mirascope/retries/__init__.py +0 -11
  774. mirascope/retries/fallback.py +0 -131
  775. mirascope/retries/tenacity.py +0 -50
  776. mirascope/tools/__init__.py +0 -37
  777. mirascope/tools/base.py +0 -98
  778. mirascope/tools/system/__init__.py +0 -0
  779. mirascope/tools/system/_docker_operation.py +0 -166
  780. mirascope/tools/system/_file_system.py +0 -267
  781. mirascope/tools/web/__init__.py +0 -0
  782. mirascope/tools/web/_duckduckgo.py +0 -111
  783. mirascope/tools/web/_httpx.py +0 -125
  784. mirascope/tools/web/_parse_url_content.py +0 -94
  785. mirascope/tools/web/_requests.py +0 -54
  786. mirascope/v0/__init__.py +0 -43
  787. mirascope/v0/anthropic.py +0 -54
  788. mirascope/v0/base/__init__.py +0 -12
  789. mirascope/v0/base/calls.py +0 -118
  790. mirascope/v0/base/extractors.py +0 -122
  791. mirascope/v0/base/ops_utils.py +0 -207
  792. mirascope/v0/base/prompts.py +0 -48
  793. mirascope/v0/base/types.py +0 -14
  794. mirascope/v0/base/utils.py +0 -21
  795. mirascope/v0/openai.py +0 -54
  796. mirascope-1.25.6.dist-info/METADATA +0 -169
  797. mirascope-1.25.6.dist-info/RECORD +0 -378
@@ -0,0 +1,523 @@
1
+ """Tracing decorators for `mirascope.ops`."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC, abstractmethod
6
+ from collections.abc import Generator
7
+ from contextlib import contextmanager
8
+ from dataclasses import dataclass, field
9
+ from typing import Any, Generic, Literal, TypeVar
10
+
11
+ from opentelemetry.util.types import AttributeValue
12
+
13
+ from ...api.client import get_async_client, get_sync_client
14
+ from ...llm.context import Context, DepsT
15
+ from ...llm.responses.root_response import RootResponse
16
+ from .instrumentation.llm.serialize import attach_mirascope_response
17
+ from .protocols import (
18
+ AsyncContextFunction,
19
+ AsyncFunction,
20
+ AsyncSpanFunction,
21
+ SyncContextFunction,
22
+ SyncFunction,
23
+ SyncSpanFunction,
24
+ )
25
+ from .spans import Span
26
+ from .types import Jsonable, P, R
27
+ from .utils import (
28
+ PrimitiveType,
29
+ extract_arguments,
30
+ get_original_fn,
31
+ get_qualified_name,
32
+ json_dumps,
33
+ )
34
+
35
+ FunctionT = TypeVar(
36
+ "FunctionT",
37
+ bound="SyncFunction[..., Any] | AsyncFunction[..., Any]",
38
+ covariant=True,
39
+ )
40
+
41
+
42
+ def record_result_to_span(span: Span, result: object) -> None:
43
+ """Records the function result in the given span.
44
+
45
+ This is a shared helper function used by all traced function classes
46
+ to record results consistently.
47
+ """
48
+ if result is None:
49
+ return # NOTE: we treat `None` valued results as such through omission.
50
+ elif isinstance(result, PrimitiveType):
51
+ output: str | int | float | bool = result
52
+ elif isinstance(result, RootResponse):
53
+ output = result.pretty()
54
+ attach_mirascope_response(span, result)
55
+ else:
56
+ try:
57
+ output = json_dumps(result)
58
+ except (TypeError, ValueError):
59
+ output = repr(result)
60
+ span.set(**{"mirascope.trace.output": output})
61
+
62
+
63
+ @dataclass(kw_only=True, frozen=True)
64
+ class _BaseTrace(Generic[R]):
65
+ """Base class for trace results with shared functionality."""
66
+
67
+ result: R
68
+ """Return value produced by the traced call."""
69
+
70
+ span: Span
71
+ """Span associated with the traced call."""
72
+
73
+ @property
74
+ def span_id(self) -> str | None:
75
+ """Returns the ID of the span for the trace."""
76
+ return self.span.span_id
77
+
78
+ @property
79
+ def trace_id(self) -> str | None:
80
+ """Returns the ID of the trace."""
81
+ return self.span.trace_id
82
+
83
+
84
+ @dataclass(kw_only=True, frozen=True)
85
+ class Trace(_BaseTrace[R]):
86
+ """Result container returned by traced function calls.
87
+
88
+ Provides access to the function result and trace span metadata,
89
+ as well as per-call operations for annotation, tagging, and assignment.
90
+ """
91
+
92
+ def annotate(
93
+ self,
94
+ *,
95
+ label: Literal["pass", "fail"],
96
+ reasoning: str | None = None,
97
+ metadata: dict[str, Jsonable] | None = None,
98
+ ) -> None:
99
+ """Annotates the current trace span."""
100
+ if self.span.span_id is None or self.span.trace_id is None:
101
+ return
102
+
103
+ get_sync_client().annotations.create(
104
+ otel_span_id=self.span.span_id,
105
+ otel_trace_id=self.span.trace_id,
106
+ label=label,
107
+ reasoning=reasoning,
108
+ metadata=metadata,
109
+ )
110
+
111
+ def tag(self, *tags: str) -> None:
112
+ """Adds given tags to the current trace span."""
113
+ raise NotImplementedError("Trace.tag not yet implemented")
114
+
115
+ def assign(self, *emails: str) -> None:
116
+ """Assigns the trace to users with the given emails."""
117
+ raise NotImplementedError("Trace.assign not yet implemented")
118
+
119
+
120
+ @dataclass(kw_only=True, frozen=True)
121
+ class AsyncTrace(_BaseTrace[R]):
122
+ """Result container returned by async traced function calls.
123
+
124
+ Provides access to the function result and trace span metadata,
125
+ as well as per-call operations for annotation, tagging, and assignment.
126
+ """
127
+
128
+ async def annotate(
129
+ self,
130
+ *,
131
+ label: Literal["pass", "fail"],
132
+ reasoning: str | None = None,
133
+ metadata: dict[str, Jsonable] | None = None,
134
+ ) -> None:
135
+ """Annotates the current trace span."""
136
+ if self.span.span_id is None or self.span.trace_id is None:
137
+ return
138
+
139
+ await get_async_client().annotations.create(
140
+ otel_span_id=self.span.span_id,
141
+ otel_trace_id=self.span.trace_id,
142
+ label=label,
143
+ reasoning=reasoning,
144
+ metadata=metadata,
145
+ )
146
+
147
+ async def tag(self, *tags: str) -> None:
148
+ """Adds given tags to the current trace span."""
149
+ raise NotImplementedError("AsyncTrace.tag not yet implemented")
150
+
151
+ async def assign(self, *emails: str) -> None:
152
+ """Assigns the trace to users with the given emails."""
153
+ raise NotImplementedError("AsyncTrace.assign not yet implemented")
154
+
155
+
156
+ @dataclass(kw_only=True)
157
+ class _BaseFunction(Generic[P, R, FunctionT], ABC):
158
+ """Abstract base class for base functions to be traced."""
159
+
160
+ fn: FunctionT
161
+ """The function being traced."""
162
+
163
+ tags: tuple[str, ...]
164
+ """Tags to be associated with the trace span."""
165
+
166
+ metadata: dict[str, str] = field(default_factory=dict)
167
+ """Arbitrary key-value pairs for additional metadata."""
168
+
169
+ _qualified_name: str = field(init=False)
170
+ """Fully qualified name of the wrapped function."""
171
+
172
+ _module_name: str = field(init=False)
173
+ """Module name of the wrapped function."""
174
+
175
+ _is_async: bool = field(init=False)
176
+ """Whether the wrapped function is asynchronous."""
177
+
178
+ def __post_init__(self) -> None:
179
+ """Initialize additional attributes after dataclass init."""
180
+ self._qualified_name = get_qualified_name(self.fn)
181
+ original_fn = get_original_fn(self.fn)
182
+ self._module_name = getattr(original_fn, "__module__", "")
183
+
184
+
185
+ @dataclass(kw_only=True)
186
+ class _BaseTracedFunction(_BaseFunction[P, R, FunctionT]):
187
+ """Abstract base class for traced function wrappers."""
188
+
189
+ @contextmanager
190
+ def _span(self, *args: P.args, **kwargs: P.kwargs) -> Generator[Span, None, None]:
191
+ """Returns a span context manager populated with call attributes."""
192
+ arg_types, arg_values = extract_arguments(self.fn, *args, **kwargs)
193
+ with Span(self._qualified_name) as span:
194
+ attributes: dict[str, AttributeValue] = {
195
+ "mirascope.type": "trace",
196
+ "mirascope.fn.qualname": self._qualified_name,
197
+ "mirascope.fn.module": self._module_name,
198
+ "mirascope.fn.is_async": self._is_async,
199
+ "mirascope.trace.arg_types": json_dumps(arg_types),
200
+ "mirascope.trace.arg_values": json_dumps(arg_values),
201
+ }
202
+ if self.tags:
203
+ attributes["mirascope.trace.tags"] = self.tags
204
+ if self.metadata:
205
+ attributes["mirascope.trace.metadata"] = json_dumps(self.metadata)
206
+ span.set(**attributes)
207
+ yield span
208
+
209
+
210
+ @dataclass(kw_only=True)
211
+ class BaseSyncTracedFunction(_BaseTracedFunction[P, R, SyncFunction[P, R]]):
212
+ """Abstract base class for synchronous traced function wrappers."""
213
+
214
+ _is_async: bool = field(default=False, init=False)
215
+ """Whether the wrapped function is asynchronous."""
216
+
217
+ @abstractmethod
218
+ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
219
+ """Returns the result of the traced function directly."""
220
+ ...
221
+
222
+ @abstractmethod
223
+ def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> Trace[R]:
224
+ """Returns the trace containing the function result and span info."""
225
+ ...
226
+
227
+
228
+ @dataclass(kw_only=True)
229
+ class TracedFunction(BaseSyncTracedFunction[P, R]):
230
+ """Wrapper for synchronous functions with tracing capabilities.
231
+
232
+ Provides traced execution of synchronous functions, returning Trace
233
+ with access to span information.
234
+ """
235
+
236
+ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
237
+ """Returns the result of the traced function directly."""
238
+ with self._span(*args, **kwargs) as span:
239
+ result = self.fn(*args, **kwargs)
240
+ record_result_to_span(span, result)
241
+ return result
242
+
243
+ def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> Trace[R]:
244
+ """Returns the trace containing the function result and span info."""
245
+ with self._span(*args, **kwargs) as span:
246
+ result = self.fn(*args, **kwargs)
247
+ record_result_to_span(span, result)
248
+ return Trace(result=result, span=span)
249
+
250
+
251
+ @dataclass(kw_only=True)
252
+ class BaseAsyncTracedFunction(_BaseTracedFunction[P, R, AsyncFunction[P, R]]):
253
+ """Abstract base class for asynchronous traced function wrappers."""
254
+
255
+ _is_async: bool = field(default=True, init=False)
256
+ """Whether the wrapped function is asynchronous."""
257
+
258
+ @abstractmethod
259
+ async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
260
+ """Returns the result of the traced function directly."""
261
+ ...
262
+
263
+ @abstractmethod
264
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncTrace[R]:
265
+ """Returns the trace containing the function result and span info."""
266
+ ...
267
+
268
+
269
+ @dataclass(kw_only=True)
270
+ class AsyncTracedFunction(BaseAsyncTracedFunction[P, R]):
271
+ """Wrapper for asynchronous functions with tracing capabilities.
272
+
273
+ Provides traced execution of asynchronous functions, returning AsyncTrace
274
+ with access to span information.
275
+ """
276
+
277
+ async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
278
+ """Returns the result of the traced function directly."""
279
+ with self._span(*args, **kwargs) as span:
280
+ result = await self.fn(*args, **kwargs)
281
+ record_result_to_span(span, result)
282
+ return result
283
+
284
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncTrace[R]:
285
+ """Returns the trace containing the function result and span info."""
286
+ with self._span(*args, **kwargs) as span:
287
+ result = await self.fn(*args, **kwargs)
288
+ record_result_to_span(span, result)
289
+ return AsyncTrace(result=result, span=span)
290
+
291
+
292
+ @dataclass(kw_only=True)
293
+ class _BaseTracedContextFunction(
294
+ _BaseFunction[P, R, FunctionT], Generic[P, DepsT, R, FunctionT]
295
+ ):
296
+ """Abstract base class for traced function wrappers."""
297
+
298
+ _is_async: bool = field(default=False, init=False)
299
+ """Whether the wrapped function is asynchronous."""
300
+
301
+ @contextmanager
302
+ def _span(
303
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
304
+ ) -> Generator[Span, None, None]:
305
+ """Returns a span context manager populated with call attributes."""
306
+ arg_types, arg_values = extract_arguments(self.fn, ctx, *args, **kwargs)
307
+ with Span(name=self._qualified_name) as span:
308
+ attributes: dict[str, AttributeValue] = {
309
+ "mirascope.type": "trace",
310
+ "mirascope.fn.qualname": self._qualified_name,
311
+ "mirascope.fn.module": self.fn.__module__,
312
+ "mirascope.fn.is_async": self._is_async,
313
+ "mirascope.trace.arg_types": json_dumps(arg_types),
314
+ "mirascope.trace.arg_values": json_dumps(arg_values),
315
+ }
316
+ if self.tags:
317
+ attributes["mirascope.trace.tags"] = self.tags
318
+ if self.metadata:
319
+ attributes["mirascope.trace.metadata"] = json_dumps(self.metadata)
320
+ span.set(**attributes)
321
+ yield span
322
+
323
+
324
+ @dataclass(kw_only=True)
325
+ class BaseTracedSyncContextFunction(
326
+ _BaseTracedContextFunction[P, DepsT, R, SyncContextFunction[P, DepsT, R]]
327
+ ):
328
+ """Abstract base class for synchronous traced function wrappers."""
329
+
330
+ _is_async: bool = field(default=False, init=False)
331
+ """Whether the wrapped function is asynchronous."""
332
+
333
+ @abstractmethod
334
+ def __call__(self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs) -> R:
335
+ """Returns the result of the traced function directly."""
336
+ ...
337
+
338
+ @abstractmethod
339
+ def wrapped(
340
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
341
+ ) -> Trace[R]:
342
+ """Returns the trace containing the function result and span info."""
343
+ ...
344
+
345
+
346
+ @dataclass(kw_only=True)
347
+ class TracedContextFunction(BaseTracedSyncContextFunction[P, DepsT, R]):
348
+ """Wrapper for synchronous context functions with tracing capabilities.
349
+
350
+ Provides traced execution of synchronous functions that take a Context parameter,
351
+ returning Trace with access to span information.
352
+ """
353
+
354
+ def __call__(self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs) -> R:
355
+ """Returns the result of the traced function directly."""
356
+ with self._span(ctx, *args, **kwargs) as span:
357
+ result = self.fn(ctx, *args, **kwargs)
358
+ record_result_to_span(span, result)
359
+ return result
360
+
361
+ def wrapped(
362
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
363
+ ) -> Trace[R]:
364
+ """Returns the trace containing the function result and span info."""
365
+ with self._span(ctx, *args, **kwargs) as span:
366
+ result = self.fn(ctx, *args, **kwargs)
367
+ record_result_to_span(span, result)
368
+ return Trace(result=result, span=span)
369
+
370
+
371
+ @dataclass(kw_only=True)
372
+ class BaseTracedAsyncContextFunction(
373
+ _BaseTracedContextFunction[P, DepsT, R, AsyncContextFunction[P, DepsT, R]]
374
+ ):
375
+ """Abstract base class for synchronous traced function wrappers."""
376
+
377
+ _is_async: bool = field(default=True, init=False)
378
+ """Whether the wrapped function is asynchronous."""
379
+
380
+ @abstractmethod
381
+ async def __call__(
382
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
383
+ ) -> R:
384
+ """Returns the result of the traced function directly."""
385
+ ...
386
+
387
+ @abstractmethod
388
+ async def wrapped(
389
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
390
+ ) -> AsyncTrace[R]:
391
+ """Returns the trace containing the function result and span info."""
392
+ ...
393
+
394
+
395
+ @dataclass(kw_only=True)
396
+ class AsyncTracedContextFunction(BaseTracedAsyncContextFunction[P, DepsT, R]):
397
+ """Wrapper for asynchronous context functions with tracing capabilities.
398
+
399
+ Provides traced execution of asynchronous functions that take a Context parameter,
400
+ returning AsyncTrace with access to span information.
401
+ """
402
+
403
+ async def __call__(
404
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
405
+ ) -> R:
406
+ """Returns the result of the traced function directly."""
407
+ with self._span(ctx, *args, **kwargs) as span:
408
+ result = await self.fn(ctx, *args, **kwargs)
409
+ record_result_to_span(span, result)
410
+ return result
411
+
412
+ async def wrapped(
413
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
414
+ ) -> AsyncTrace[R]:
415
+ """Returns the trace containing the function result and span info."""
416
+ with self._span(ctx, *args, **kwargs) as span:
417
+ result = await self.fn(ctx, *args, **kwargs)
418
+ record_result_to_span(span, result)
419
+ return AsyncTrace(result=result, span=span)
420
+
421
+
422
+ @dataclass(kw_only=True)
423
+ class BaseSyncTracedSpanFunction(_BaseTracedFunction[P, R, SyncSpanFunction[P, R]]):
424
+ """Abstract base class for synchronous traced span function wrappers."""
425
+
426
+ _is_async: bool = field(default=False, init=False)
427
+ """Whether the wrapped function is asynchronous."""
428
+
429
+ @abstractmethod
430
+ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
431
+ """Returns the result of the traced function directly."""
432
+ ...
433
+
434
+ @abstractmethod
435
+ def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> Trace[R]:
436
+ """Returns the trace containing the function result and span info."""
437
+ ...
438
+
439
+
440
+ @dataclass(kw_only=True)
441
+ class TracedSpanFunction(BaseSyncTracedSpanFunction[P, R]):
442
+ """Wrapper for synchronous functions that receive Span as first parameter.
443
+
444
+ The external interface does NOT include `trace_ctx` - it is injected
445
+ automatically by the decorator when calling the inner function.
446
+
447
+ Example:
448
+ ```python
449
+ @ops.trace
450
+ def my_fn(trace_ctx: Span, arg: str) -> str:
451
+ trace_ctx.info(f"Processing: {arg}")
452
+ return arg.upper()
453
+
454
+ # Call without trace_ctx - it's injected
455
+ result = my_fn("hello") # Returns "HELLO"
456
+ ```
457
+ """
458
+
459
+ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
460
+ """Returns the result of the traced function directly."""
461
+ with self._span(*args, **kwargs) as span:
462
+ result = self.fn(span, *args, **kwargs)
463
+ record_result_to_span(span, result)
464
+ return result
465
+
466
+ def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> Trace[R]:
467
+ """Returns the trace containing the function result and span info."""
468
+ with self._span(*args, **kwargs) as span:
469
+ result = self.fn(span, *args, **kwargs)
470
+ record_result_to_span(span, result)
471
+ return Trace(result=result, span=span)
472
+
473
+
474
+ @dataclass(kw_only=True)
475
+ class BaseAsyncTracedSpanFunction(_BaseTracedFunction[P, R, AsyncSpanFunction[P, R]]):
476
+ """Abstract base class for asynchronous traced span function wrappers."""
477
+
478
+ _is_async: bool = field(default=True, init=False)
479
+ """Whether the wrapped function is asynchronous."""
480
+
481
+ @abstractmethod
482
+ async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
483
+ """Returns the result of the traced function directly."""
484
+ ...
485
+
486
+ @abstractmethod
487
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncTrace[R]:
488
+ """Returns the trace containing the function result and span info."""
489
+ ...
490
+
491
+
492
+ @dataclass(kw_only=True)
493
+ class AsyncTracedSpanFunction(BaseAsyncTracedSpanFunction[P, R]):
494
+ """Wrapper for asynchronous functions that receive Span as first parameter.
495
+
496
+ The external interface does NOT include `trace_ctx` - it is injected
497
+ automatically by the decorator when calling the inner function.
498
+
499
+ Example:
500
+ ```python
501
+ @ops.trace
502
+ async def my_fn(trace_ctx: Span, arg: str) -> str:
503
+ trace_ctx.info(f"Processing: {arg}")
504
+ return arg.upper()
505
+
506
+ # Call without trace_ctx - it's injected
507
+ result = await my_fn("hello") # Returns "HELLO"
508
+ ```
509
+ """
510
+
511
+ async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
512
+ """Returns the result of the traced function directly."""
513
+ with self._span(*args, **kwargs) as span:
514
+ result = await self.fn(span, *args, **kwargs)
515
+ record_result_to_span(span, result)
516
+ return result
517
+
518
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncTrace[R]:
519
+ """Returns the trace containing the function result and span info."""
520
+ with self._span(*args, **kwargs) as span:
521
+ result = await self.fn(span, *args, **kwargs)
522
+ record_result_to_span(span, result)
523
+ return AsyncTrace(result=result, span=span)