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