mirascope 2.0.0__py3-none-any.whl → 2.0.0a1__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 (443) hide show
  1. mirascope/__init__.py +2 -11
  2. mirascope/graphs/__init__.py +22 -0
  3. mirascope/graphs/finite_state_machine.py +625 -0
  4. mirascope/llm/__init__.py +15 -96
  5. mirascope/llm/agents/__init__.py +15 -0
  6. mirascope/llm/agents/agent.py +97 -0
  7. mirascope/llm/agents/agent_template.py +45 -0
  8. mirascope/llm/agents/decorator.py +176 -0
  9. mirascope/llm/calls/__init__.py +1 -2
  10. mirascope/llm/calls/base_call.py +33 -0
  11. mirascope/llm/calls/calls.py +58 -84
  12. mirascope/llm/calls/decorator.py +120 -140
  13. mirascope/llm/clients/__init__.py +34 -0
  14. mirascope/llm/clients/_missing_import_stubs.py +47 -0
  15. mirascope/llm/clients/anthropic/__init__.py +25 -0
  16. mirascope/llm/{providers/openai/completions → clients/anthropic}/_utils/__init__.py +0 -2
  17. mirascope/llm/{providers → clients}/anthropic/_utils/decode.py +22 -66
  18. mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
  19. mirascope/llm/clients/anthropic/clients.py +819 -0
  20. mirascope/llm/clients/anthropic/model_ids.py +8 -0
  21. mirascope/llm/{providers → clients}/base/__init__.py +5 -4
  22. mirascope/llm/{providers → clients}/base/_utils.py +17 -78
  23. mirascope/llm/{providers/base/base_provider.py → clients/base/client.py} +145 -468
  24. mirascope/llm/{models → clients/base}/params.py +37 -16
  25. mirascope/llm/clients/google/__init__.py +20 -0
  26. mirascope/llm/{providers/openai/responses → clients/google}/_utils/__init__.py +0 -2
  27. mirascope/llm/{providers → clients}/google/_utils/decode.py +22 -98
  28. mirascope/llm/{providers → clients}/google/_utils/encode.py +46 -168
  29. mirascope/llm/clients/google/clients.py +853 -0
  30. mirascope/llm/clients/google/model_ids.py +15 -0
  31. mirascope/llm/clients/openai/__init__.py +25 -0
  32. mirascope/llm/clients/openai/completions/__init__.py +28 -0
  33. mirascope/llm/{providers/google → clients/openai/completions}/_utils/__init__.py +0 -4
  34. mirascope/llm/{providers → clients}/openai/completions/_utils/decode.py +9 -74
  35. mirascope/llm/{providers → clients}/openai/completions/_utils/encode.py +52 -70
  36. mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
  37. mirascope/llm/clients/openai/completions/clients.py +833 -0
  38. mirascope/llm/clients/openai/completions/model_ids.py +8 -0
  39. mirascope/llm/clients/openai/responses/__init__.py +26 -0
  40. mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
  41. mirascope/llm/{providers → clients}/openai/responses/_utils/decode.py +14 -80
  42. mirascope/llm/{providers → clients}/openai/responses/_utils/encode.py +41 -92
  43. mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
  44. mirascope/llm/clients/openai/responses/clients.py +832 -0
  45. mirascope/llm/clients/openai/responses/model_ids.py +8 -0
  46. mirascope/llm/clients/openai/shared/__init__.py +7 -0
  47. mirascope/llm/clients/openai/shared/_utils.py +55 -0
  48. mirascope/llm/clients/providers.py +175 -0
  49. mirascope/llm/content/__init__.py +2 -3
  50. mirascope/llm/content/tool_call.py +0 -6
  51. mirascope/llm/content/tool_output.py +5 -22
  52. mirascope/llm/context/_utils.py +6 -19
  53. mirascope/llm/exceptions.py +43 -298
  54. mirascope/llm/formatting/__init__.py +2 -19
  55. mirascope/llm/formatting/_utils.py +74 -0
  56. mirascope/llm/formatting/format.py +30 -219
  57. mirascope/llm/formatting/from_call_args.py +2 -2
  58. mirascope/llm/formatting/partial.py +7 -80
  59. mirascope/llm/formatting/types.py +64 -21
  60. mirascope/llm/mcp/__init__.py +2 -2
  61. mirascope/llm/mcp/client.py +118 -0
  62. mirascope/llm/messages/__init__.py +0 -3
  63. mirascope/llm/messages/message.py +5 -13
  64. mirascope/llm/models/__init__.py +2 -7
  65. mirascope/llm/models/models.py +139 -315
  66. mirascope/llm/prompts/__init__.py +12 -13
  67. mirascope/llm/prompts/_utils.py +43 -14
  68. mirascope/llm/prompts/decorator.py +204 -144
  69. mirascope/llm/prompts/protocols.py +59 -25
  70. mirascope/llm/responses/__init__.py +1 -9
  71. mirascope/llm/responses/_utils.py +12 -102
  72. mirascope/llm/responses/base_response.py +6 -18
  73. mirascope/llm/responses/base_stream_response.py +50 -173
  74. mirascope/llm/responses/finish_reason.py +0 -1
  75. mirascope/llm/responses/response.py +13 -34
  76. mirascope/llm/responses/root_response.py +29 -100
  77. mirascope/llm/responses/stream_response.py +31 -40
  78. mirascope/llm/tools/__init__.py +2 -9
  79. mirascope/llm/tools/_utils.py +3 -12
  80. mirascope/llm/tools/decorator.py +16 -25
  81. mirascope/llm/tools/protocols.py +4 -4
  82. mirascope/llm/tools/tool_schema.py +19 -87
  83. mirascope/llm/tools/toolkit.py +27 -35
  84. mirascope/llm/tools/tools.py +41 -135
  85. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/METADATA +13 -90
  86. mirascope-2.0.0a1.dist-info/RECORD +102 -0
  87. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/WHEEL +1 -1
  88. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/licenses/LICENSE +1 -1
  89. mirascope/_stubs.py +0 -363
  90. mirascope/api/__init__.py +0 -14
  91. mirascope/api/_generated/README.md +0 -207
  92. mirascope/api/_generated/__init__.py +0 -440
  93. mirascope/api/_generated/annotations/__init__.py +0 -33
  94. mirascope/api/_generated/annotations/client.py +0 -506
  95. mirascope/api/_generated/annotations/raw_client.py +0 -1414
  96. mirascope/api/_generated/annotations/types/__init__.py +0 -31
  97. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +0 -5
  98. mirascope/api/_generated/annotations/types/annotations_create_response.py +0 -48
  99. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +0 -5
  100. mirascope/api/_generated/annotations/types/annotations_get_response.py +0 -48
  101. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +0 -5
  102. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +0 -5
  103. mirascope/api/_generated/annotations/types/annotations_list_response.py +0 -21
  104. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +0 -50
  105. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +0 -5
  106. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +0 -5
  107. mirascope/api/_generated/annotations/types/annotations_update_response.py +0 -48
  108. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +0 -5
  109. mirascope/api/_generated/api_keys/__init__.py +0 -17
  110. mirascope/api/_generated/api_keys/client.py +0 -530
  111. mirascope/api/_generated/api_keys/raw_client.py +0 -1236
  112. mirascope/api/_generated/api_keys/types/__init__.py +0 -15
  113. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +0 -28
  114. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +0 -27
  115. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +0 -40
  116. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +0 -27
  117. mirascope/api/_generated/client.py +0 -211
  118. mirascope/api/_generated/core/__init__.py +0 -52
  119. mirascope/api/_generated/core/api_error.py +0 -23
  120. mirascope/api/_generated/core/client_wrapper.py +0 -46
  121. mirascope/api/_generated/core/datetime_utils.py +0 -28
  122. mirascope/api/_generated/core/file.py +0 -67
  123. mirascope/api/_generated/core/force_multipart.py +0 -16
  124. mirascope/api/_generated/core/http_client.py +0 -543
  125. mirascope/api/_generated/core/http_response.py +0 -55
  126. mirascope/api/_generated/core/jsonable_encoder.py +0 -100
  127. mirascope/api/_generated/core/pydantic_utilities.py +0 -255
  128. mirascope/api/_generated/core/query_encoder.py +0 -58
  129. mirascope/api/_generated/core/remove_none_from_dict.py +0 -11
  130. mirascope/api/_generated/core/request_options.py +0 -35
  131. mirascope/api/_generated/core/serialization.py +0 -276
  132. mirascope/api/_generated/docs/__init__.py +0 -4
  133. mirascope/api/_generated/docs/client.py +0 -91
  134. mirascope/api/_generated/docs/raw_client.py +0 -178
  135. mirascope/api/_generated/environment.py +0 -9
  136. mirascope/api/_generated/environments/__init__.py +0 -23
  137. mirascope/api/_generated/environments/client.py +0 -649
  138. mirascope/api/_generated/environments/raw_client.py +0 -1567
  139. mirascope/api/_generated/environments/types/__init__.py +0 -25
  140. mirascope/api/_generated/environments/types/environments_create_response.py +0 -24
  141. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +0 -60
  142. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +0 -24
  143. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +0 -22
  144. mirascope/api/_generated/environments/types/environments_get_response.py +0 -24
  145. mirascope/api/_generated/environments/types/environments_list_response_item.py +0 -24
  146. mirascope/api/_generated/environments/types/environments_update_response.py +0 -24
  147. mirascope/api/_generated/errors/__init__.py +0 -25
  148. mirascope/api/_generated/errors/bad_request_error.py +0 -14
  149. mirascope/api/_generated/errors/conflict_error.py +0 -14
  150. mirascope/api/_generated/errors/forbidden_error.py +0 -11
  151. mirascope/api/_generated/errors/internal_server_error.py +0 -10
  152. mirascope/api/_generated/errors/not_found_error.py +0 -11
  153. mirascope/api/_generated/errors/payment_required_error.py +0 -15
  154. mirascope/api/_generated/errors/service_unavailable_error.py +0 -14
  155. mirascope/api/_generated/errors/too_many_requests_error.py +0 -15
  156. mirascope/api/_generated/errors/unauthorized_error.py +0 -11
  157. mirascope/api/_generated/functions/__init__.py +0 -39
  158. mirascope/api/_generated/functions/client.py +0 -647
  159. mirascope/api/_generated/functions/raw_client.py +0 -1890
  160. mirascope/api/_generated/functions/types/__init__.py +0 -53
  161. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +0 -20
  162. mirascope/api/_generated/functions/types/functions_create_response.py +0 -37
  163. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +0 -20
  164. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +0 -39
  165. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +0 -20
  166. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +0 -53
  167. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +0 -22
  168. mirascope/api/_generated/functions/types/functions_get_response.py +0 -37
  169. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +0 -20
  170. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +0 -25
  171. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +0 -56
  172. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +0 -22
  173. mirascope/api/_generated/functions/types/functions_list_response.py +0 -21
  174. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +0 -41
  175. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +0 -20
  176. mirascope/api/_generated/health/__init__.py +0 -7
  177. mirascope/api/_generated/health/client.py +0 -92
  178. mirascope/api/_generated/health/raw_client.py +0 -175
  179. mirascope/api/_generated/health/types/__init__.py +0 -8
  180. mirascope/api/_generated/health/types/health_check_response.py +0 -22
  181. mirascope/api/_generated/health/types/health_check_response_status.py +0 -5
  182. mirascope/api/_generated/organization_invitations/__init__.py +0 -33
  183. mirascope/api/_generated/organization_invitations/client.py +0 -546
  184. mirascope/api/_generated/organization_invitations/raw_client.py +0 -1519
  185. mirascope/api/_generated/organization_invitations/types/__init__.py +0 -53
  186. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +0 -34
  187. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +0 -7
  188. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +0 -7
  189. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +0 -48
  190. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +0 -7
  191. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +0 -7
  192. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +0 -48
  193. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +0 -7
  194. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +0 -7
  195. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +0 -48
  196. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +0 -7
  197. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +0 -7
  198. mirascope/api/_generated/organization_memberships/__init__.py +0 -19
  199. mirascope/api/_generated/organization_memberships/client.py +0 -302
  200. mirascope/api/_generated/organization_memberships/raw_client.py +0 -736
  201. mirascope/api/_generated/organization_memberships/types/__init__.py +0 -27
  202. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +0 -33
  203. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +0 -7
  204. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +0 -7
  205. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +0 -31
  206. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +0 -7
  207. mirascope/api/_generated/organizations/__init__.py +0 -51
  208. mirascope/api/_generated/organizations/client.py +0 -869
  209. mirascope/api/_generated/organizations/raw_client.py +0 -2593
  210. mirascope/api/_generated/organizations/types/__init__.py +0 -71
  211. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +0 -24
  212. mirascope/api/_generated/organizations/types/organizations_create_response.py +0 -26
  213. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +0 -5
  214. mirascope/api/_generated/organizations/types/organizations_get_response.py +0 -26
  215. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +0 -5
  216. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +0 -26
  217. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +0 -5
  218. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +0 -7
  219. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +0 -47
  220. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +0 -33
  221. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +0 -7
  222. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +0 -24
  223. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +0 -53
  224. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +0 -7
  225. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +0 -26
  226. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +0 -34
  227. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +0 -7
  228. mirascope/api/_generated/organizations/types/organizations_update_response.py +0 -26
  229. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +0 -5
  230. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +0 -7
  231. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +0 -35
  232. mirascope/api/_generated/project_memberships/__init__.py +0 -25
  233. mirascope/api/_generated/project_memberships/client.py +0 -437
  234. mirascope/api/_generated/project_memberships/raw_client.py +0 -1039
  235. mirascope/api/_generated/project_memberships/types/__init__.py +0 -29
  236. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +0 -7
  237. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +0 -35
  238. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +0 -7
  239. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +0 -33
  240. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +0 -7
  241. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +0 -7
  242. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +0 -35
  243. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +0 -7
  244. mirascope/api/_generated/projects/__init__.py +0 -7
  245. mirascope/api/_generated/projects/client.py +0 -428
  246. mirascope/api/_generated/projects/raw_client.py +0 -1302
  247. mirascope/api/_generated/projects/types/__init__.py +0 -10
  248. mirascope/api/_generated/projects/types/projects_create_response.py +0 -25
  249. mirascope/api/_generated/projects/types/projects_get_response.py +0 -25
  250. mirascope/api/_generated/projects/types/projects_list_response_item.py +0 -25
  251. mirascope/api/_generated/projects/types/projects_update_response.py +0 -25
  252. mirascope/api/_generated/reference.md +0 -4915
  253. mirascope/api/_generated/tags/__init__.py +0 -19
  254. mirascope/api/_generated/tags/client.py +0 -504
  255. mirascope/api/_generated/tags/raw_client.py +0 -1288
  256. mirascope/api/_generated/tags/types/__init__.py +0 -17
  257. mirascope/api/_generated/tags/types/tags_create_response.py +0 -41
  258. mirascope/api/_generated/tags/types/tags_get_response.py +0 -41
  259. mirascope/api/_generated/tags/types/tags_list_response.py +0 -23
  260. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +0 -41
  261. mirascope/api/_generated/tags/types/tags_update_response.py +0 -41
  262. mirascope/api/_generated/token_cost/__init__.py +0 -7
  263. mirascope/api/_generated/token_cost/client.py +0 -160
  264. mirascope/api/_generated/token_cost/raw_client.py +0 -264
  265. mirascope/api/_generated/token_cost/types/__init__.py +0 -8
  266. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +0 -54
  267. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +0 -52
  268. mirascope/api/_generated/traces/__init__.py +0 -97
  269. mirascope/api/_generated/traces/client.py +0 -1103
  270. mirascope/api/_generated/traces/raw_client.py +0 -2322
  271. mirascope/api/_generated/traces/types/__init__.py +0 -155
  272. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +0 -29
  273. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +0 -27
  274. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +0 -23
  275. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +0 -38
  276. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +0 -19
  277. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +0 -22
  278. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +0 -20
  279. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +0 -29
  280. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +0 -31
  281. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +0 -23
  282. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +0 -38
  283. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +0 -19
  284. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +0 -22
  285. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +0 -22
  286. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +0 -48
  287. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +0 -23
  288. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +0 -38
  289. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +0 -19
  290. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +0 -24
  291. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +0 -22
  292. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +0 -20
  293. mirascope/api/_generated/traces/types/traces_create_response.py +0 -24
  294. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +0 -22
  295. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +0 -60
  296. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +0 -24
  297. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +0 -22
  298. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +0 -33
  299. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +0 -88
  300. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +0 -33
  301. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +0 -88
  302. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +0 -25
  303. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +0 -44
  304. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +0 -26
  305. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +0 -7
  306. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +0 -7
  307. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +0 -7
  308. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +0 -26
  309. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +0 -50
  310. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +0 -26
  311. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +0 -7
  312. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +0 -7
  313. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +0 -5
  314. mirascope/api/_generated/traces/types/traces_search_response.py +0 -26
  315. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +0 -50
  316. mirascope/api/_generated/types/__init__.py +0 -85
  317. mirascope/api/_generated/types/already_exists_error.py +0 -22
  318. mirascope/api/_generated/types/already_exists_error_tag.py +0 -5
  319. mirascope/api/_generated/types/bad_request_error_body.py +0 -50
  320. mirascope/api/_generated/types/click_house_error.py +0 -22
  321. mirascope/api/_generated/types/database_error.py +0 -22
  322. mirascope/api/_generated/types/database_error_tag.py +0 -5
  323. mirascope/api/_generated/types/date.py +0 -3
  324. mirascope/api/_generated/types/http_api_decode_error.py +0 -27
  325. mirascope/api/_generated/types/http_api_decode_error_tag.py +0 -5
  326. mirascope/api/_generated/types/immutable_resource_error.py +0 -22
  327. mirascope/api/_generated/types/internal_server_error_body.py +0 -49
  328. mirascope/api/_generated/types/issue.py +0 -38
  329. mirascope/api/_generated/types/issue_tag.py +0 -10
  330. mirascope/api/_generated/types/not_found_error_body.py +0 -22
  331. mirascope/api/_generated/types/not_found_error_tag.py +0 -5
  332. mirascope/api/_generated/types/number_from_string.py +0 -3
  333. mirascope/api/_generated/types/permission_denied_error.py +0 -22
  334. mirascope/api/_generated/types/permission_denied_error_tag.py +0 -5
  335. mirascope/api/_generated/types/plan_limit_exceeded_error.py +0 -32
  336. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +0 -7
  337. mirascope/api/_generated/types/pricing_unavailable_error.py +0 -23
  338. mirascope/api/_generated/types/property_key.py +0 -7
  339. mirascope/api/_generated/types/property_key_key.py +0 -25
  340. mirascope/api/_generated/types/property_key_key_tag.py +0 -5
  341. mirascope/api/_generated/types/rate_limit_error.py +0 -31
  342. mirascope/api/_generated/types/rate_limit_error_tag.py +0 -5
  343. mirascope/api/_generated/types/service_unavailable_error_body.py +0 -24
  344. mirascope/api/_generated/types/service_unavailable_error_tag.py +0 -7
  345. mirascope/api/_generated/types/stripe_error.py +0 -20
  346. mirascope/api/_generated/types/subscription_past_due_error.py +0 -31
  347. mirascope/api/_generated/types/subscription_past_due_error_tag.py +0 -7
  348. mirascope/api/_generated/types/unauthorized_error_body.py +0 -21
  349. mirascope/api/_generated/types/unauthorized_error_tag.py +0 -5
  350. mirascope/api/client.py +0 -255
  351. mirascope/api/settings.py +0 -99
  352. mirascope/llm/formatting/output_parser.py +0 -178
  353. mirascope/llm/formatting/primitives.py +0 -192
  354. mirascope/llm/mcp/mcp_client.py +0 -130
  355. mirascope/llm/messages/_utils.py +0 -34
  356. mirascope/llm/models/thinking_config.py +0 -61
  357. mirascope/llm/prompts/prompts.py +0 -487
  358. mirascope/llm/providers/__init__.py +0 -62
  359. mirascope/llm/providers/anthropic/__init__.py +0 -11
  360. mirascope/llm/providers/anthropic/_utils/__init__.py +0 -27
  361. mirascope/llm/providers/anthropic/_utils/beta_decode.py +0 -282
  362. mirascope/llm/providers/anthropic/_utils/beta_encode.py +0 -266
  363. mirascope/llm/providers/anthropic/_utils/encode.py +0 -418
  364. mirascope/llm/providers/anthropic/_utils/errors.py +0 -46
  365. mirascope/llm/providers/anthropic/beta_provider.py +0 -374
  366. mirascope/llm/providers/anthropic/model_id.py +0 -23
  367. mirascope/llm/providers/anthropic/model_info.py +0 -87
  368. mirascope/llm/providers/anthropic/provider.py +0 -479
  369. mirascope/llm/providers/google/__init__.py +0 -6
  370. mirascope/llm/providers/google/_utils/errors.py +0 -50
  371. mirascope/llm/providers/google/model_id.py +0 -22
  372. mirascope/llm/providers/google/model_info.py +0 -63
  373. mirascope/llm/providers/google/provider.py +0 -492
  374. mirascope/llm/providers/mirascope/__init__.py +0 -5
  375. mirascope/llm/providers/mirascope/_utils.py +0 -73
  376. mirascope/llm/providers/mirascope/provider.py +0 -349
  377. mirascope/llm/providers/mlx/__init__.py +0 -9
  378. mirascope/llm/providers/mlx/_utils.py +0 -141
  379. mirascope/llm/providers/mlx/encoding/__init__.py +0 -8
  380. mirascope/llm/providers/mlx/encoding/base.py +0 -72
  381. mirascope/llm/providers/mlx/encoding/transformers.py +0 -150
  382. mirascope/llm/providers/mlx/mlx.py +0 -254
  383. mirascope/llm/providers/mlx/model_id.py +0 -17
  384. mirascope/llm/providers/mlx/provider.py +0 -452
  385. mirascope/llm/providers/model_id.py +0 -16
  386. mirascope/llm/providers/ollama/__init__.py +0 -7
  387. mirascope/llm/providers/ollama/provider.py +0 -71
  388. mirascope/llm/providers/openai/__init__.py +0 -15
  389. mirascope/llm/providers/openai/_utils/__init__.py +0 -5
  390. mirascope/llm/providers/openai/_utils/errors.py +0 -46
  391. mirascope/llm/providers/openai/completions/__init__.py +0 -7
  392. mirascope/llm/providers/openai/completions/base_provider.py +0 -542
  393. mirascope/llm/providers/openai/completions/provider.py +0 -22
  394. mirascope/llm/providers/openai/model_id.py +0 -31
  395. mirascope/llm/providers/openai/model_info.py +0 -303
  396. mirascope/llm/providers/openai/provider.py +0 -441
  397. mirascope/llm/providers/openai/responses/__init__.py +0 -5
  398. mirascope/llm/providers/openai/responses/provider.py +0 -513
  399. mirascope/llm/providers/provider_id.py +0 -24
  400. mirascope/llm/providers/provider_registry.py +0 -299
  401. mirascope/llm/providers/together/__init__.py +0 -7
  402. mirascope/llm/providers/together/provider.py +0 -40
  403. mirascope/llm/responses/usage.py +0 -95
  404. mirascope/ops/__init__.py +0 -111
  405. mirascope/ops/_internal/__init__.py +0 -5
  406. mirascope/ops/_internal/closure.py +0 -1169
  407. mirascope/ops/_internal/configuration.py +0 -177
  408. mirascope/ops/_internal/context.py +0 -76
  409. mirascope/ops/_internal/exporters/__init__.py +0 -26
  410. mirascope/ops/_internal/exporters/exporters.py +0 -395
  411. mirascope/ops/_internal/exporters/processors.py +0 -104
  412. mirascope/ops/_internal/exporters/types.py +0 -165
  413. mirascope/ops/_internal/exporters/utils.py +0 -29
  414. mirascope/ops/_internal/instrumentation/__init__.py +0 -8
  415. mirascope/ops/_internal/instrumentation/llm/__init__.py +0 -8
  416. mirascope/ops/_internal/instrumentation/llm/common.py +0 -530
  417. mirascope/ops/_internal/instrumentation/llm/cost.py +0 -190
  418. mirascope/ops/_internal/instrumentation/llm/encode.py +0 -238
  419. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +0 -38
  420. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +0 -31
  421. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +0 -38
  422. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +0 -18
  423. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +0 -100
  424. mirascope/ops/_internal/instrumentation/llm/llm.py +0 -161
  425. mirascope/ops/_internal/instrumentation/llm/model.py +0 -1798
  426. mirascope/ops/_internal/instrumentation/llm/response.py +0 -521
  427. mirascope/ops/_internal/instrumentation/llm/serialize.py +0 -300
  428. mirascope/ops/_internal/propagation.py +0 -198
  429. mirascope/ops/_internal/protocols.py +0 -133
  430. mirascope/ops/_internal/session.py +0 -139
  431. mirascope/ops/_internal/spans.py +0 -232
  432. mirascope/ops/_internal/traced_calls.py +0 -375
  433. mirascope/ops/_internal/traced_functions.py +0 -523
  434. mirascope/ops/_internal/tracing.py +0 -353
  435. mirascope/ops/_internal/types.py +0 -13
  436. mirascope/ops/_internal/utils.py +0 -123
  437. mirascope/ops/_internal/versioned_calls.py +0 -512
  438. mirascope/ops/_internal/versioned_functions.py +0 -357
  439. mirascope/ops/_internal/versioning.py +0 -303
  440. mirascope/ops/exceptions.py +0 -21
  441. mirascope-2.0.0.dist-info/RECORD +0 -423
  442. /mirascope/llm/{providers → clients}/base/kwargs.py +0 -0
  443. /mirascope/llm/{providers → clients}/google/message.py +0 -0
@@ -1,523 +0,0 @@
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)