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
mirascope/_stubs.py DELETED
@@ -1,363 +0,0 @@
1
- """Utilities for stubbing modules with missing optional dependencies."""
2
-
3
- import sys
4
- from collections.abc import MutableSequence
5
- from importlib.abc import Loader, MetaPathFinder
6
- from importlib.machinery import ModuleSpec
7
- from types import ModuleType
8
- from typing import Any
9
-
10
- # ruff: noqa: ANN401
11
-
12
- # Mapping of extra names to their import names
13
- # This mapping is automatically generated from pyproject.toml
14
- # To regenerate: uv run python scripts/generate_extra_imports.py --overwrite
15
- # BEGIN GENERATED - DO NOT EDIT MANUALLY
16
- EXTRA_IMPORTS: dict[str, list[str]] = {
17
- "anthropic": ["anthropic"],
18
- "api": ["pydantic_settings"],
19
- "google": [
20
- "google.genai",
21
- "PIL",
22
- "proto",
23
- ],
24
- "openai": ["openai"],
25
- "mcp": ["mcp"],
26
- "ops": [
27
- "opentelemetry.sdk",
28
- "opentelemetry",
29
- "opentelemetry.instrumentation",
30
- "opentelemetry.exporter.otlp",
31
- "opentelemetry.propagators.b3",
32
- "orjson",
33
- "opentelemetry.propagators.jaeger",
34
- "libcst",
35
- "packaging",
36
- ],
37
- "mlx": ["mlx_lm"],
38
- }
39
- # END GENERATED
40
-
41
-
42
- def _make_import_error(package_name: str, name: str) -> ImportError:
43
- """Create an ImportError with a helpful installation message.
44
-
45
- Args:
46
- package_name: The package/extra name (e.g., "ops", "api")
47
- name: The specific item being accessed (e.g., "trace", "settings")
48
-
49
- Returns:
50
- ImportError with installation instructions
51
- """
52
- return ImportError(
53
- f"The '{package_name}' packages are required to use {name}. "
54
- f"Install them with: `uv add 'mirascope[{package_name}]'`. "
55
- "Or use `uv add 'mirascope[all]'` to support all optional features."
56
- )
57
-
58
-
59
- class _StubMeta(type):
60
- """Metaclass for stub classes that fail on actual use.
61
-
62
- This metaclass allows stub classes to be used transparently in type hints,
63
- class definitions, and passed around as values, but fails with a helpful
64
- error when actually used (instantiated, methods called, attributes accessed).
65
- """
66
-
67
- _package_name: str
68
- _stub_name: str
69
-
70
- def __call__(cls, *args: Any, **kwargs: Any) -> Any:
71
- """Raise ImportError when trying to instantiate the stub class."""
72
- raise _make_import_error(cls._package_name, cls._stub_name)
73
-
74
- def __getattr__(cls, name: str) -> Any:
75
- """Raise ImportError when accessing class attributes (except private/dunder)."""
76
- # Allow private/dunder attributes to raise AttributeError normally
77
- if name.startswith("_"):
78
- raise AttributeError(name)
79
- raise _make_import_error(cls._package_name, cls._stub_name)
80
-
81
- def __instancecheck__(cls, instance: Any) -> bool:
82
- """Raise ImportError when checking isinstance()."""
83
- raise _make_import_error(cls._package_name, cls._stub_name)
84
-
85
- def __subclasscheck__(cls, subclass: Any) -> bool:
86
- """Allow the stub to be subclassed, but raise ImportError for issubclass checks.
87
-
88
- This allows code like `class MyTrace(Trace): pass` to work
89
- at definition time. The subclass will inherit _StubMeta, so using IT
90
- will also fail appropriately.
91
- """
92
- if subclass is cls:
93
- return True
94
- # For issubclass() checks with other classes, fail
95
- raise _make_import_error(cls._package_name, cls._stub_name)
96
-
97
-
98
- def _create_stub(package_name: str, name: str) -> type:
99
- """Create a universal stub that works as a class or callable.
100
-
101
- Args:
102
- package_name: The package/extra name (e.g., "ops", "api")
103
- name: The name of the item being stubbed (e.g., "trace", "settings")
104
-
105
- Returns:
106
- A stub class with _StubMeta metaclass
107
- """
108
- return _StubMeta(
109
- name,
110
- (),
111
- {
112
- "_package_name": package_name,
113
- "_stub_name": name,
114
- "__module__": f"mirascope.{package_name}",
115
- },
116
- )
117
-
118
-
119
- class _StubLoader(Loader):
120
- """Loader that creates stub modules for missing submodules."""
121
-
122
- def __init__(self, fullname: str, package_name: str) -> None:
123
- """Initialize the stub loader.
124
-
125
- Args:
126
- fullname: The full module name being loaded
127
- package_name: The package/extra name for error messages
128
- """
129
- self.fullname = fullname
130
- self.package_name = package_name
131
-
132
- def create_module(self, spec: ModuleSpec) -> ModuleType:
133
- """Create a stub module.
134
-
135
- Args:
136
- spec: The module spec
137
-
138
- Returns:
139
- A new _StubModule instance
140
- """
141
- return _StubModule(self.fullname, self.package_name)
142
-
143
- def exec_module(self, module: ModuleType) -> None:
144
- """Execute the module (no-op for stubs).
145
-
146
- Args:
147
- module: The module to execute
148
- """
149
- pass # Stub modules don't need execution
150
-
151
-
152
- class _StubFinder(MetaPathFinder):
153
- """Meta path finder that intercepts imports for stubbed modules."""
154
-
155
- def __init__(self) -> None:
156
- """Initialize the stub finder."""
157
- self.stubbed_modules: set[str] = set()
158
-
159
- def register_stub(self, module_path: str) -> None:
160
- """Register a module path as stubbed.
161
-
162
- Args:
163
- module_path: The full module path that's been stubbed
164
- """
165
- self.stubbed_modules.add(module_path)
166
-
167
- def find_spec(
168
- self, fullname: str, path: Any = None, target: Any = None
169
- ) -> ModuleSpec | None:
170
- """Find a module spec for stubbed submodules.
171
-
172
- Args:
173
- fullname: The full name of the module being imported
174
- path: The path to search (unused)
175
- target: The target module (unused)
176
-
177
- Returns:
178
- A ModuleSpec if this is a submodule of a stubbed module, None otherwise
179
- """
180
- # Check if this import is for a submodule of any stubbed module
181
- for stub_root in self.stubbed_modules:
182
- if fullname.startswith(f"{stub_root}."):
183
- # Extract the package name from the stub root
184
- # e.g., "mirascope.llm.providers.openai" -> find package_name
185
- if fullname in sys.modules and isinstance(
186
- sys.modules[fullname], _StubModule
187
- ):
188
- # Already stubbed
189
- return None
190
-
191
- # Get the package_name from the parent stub module
192
- parent_module = sys.modules.get(stub_root)
193
- if isinstance(parent_module, _StubModule):
194
- # Use the parent's package name
195
- package_name = parent_module._StubModule__package_name
196
- return ModuleSpec(
197
- fullname,
198
- _StubLoader(fullname, package_name),
199
- is_package=True,
200
- )
201
-
202
- return None
203
-
204
-
205
- # Global finder instance
206
- _finder = _StubFinder()
207
-
208
-
209
- class _StubModule(ModuleType):
210
- """A module that returns stubs for all attribute access.
211
-
212
- This allows the entire module to be stubbed, so any imports from it will
213
- work transparently for type checking but fail with helpful errors on actual use.
214
-
215
- For nested module imports like `from .openai.completions.provider import X`,
216
- this dynamically registers child stub modules in sys.modules when accessed.
217
-
218
- Each stub module instance can also act like a stub class - it can be called,
219
- subclassed, and used in isinstance/issubclass checks, all of which fail with
220
- helpful error messages.
221
- """
222
-
223
- def __init__(self, name: str, package_name: str) -> None:
224
- """Initialize the stub module.
225
-
226
- Args:
227
- name: The full module name (e.g., "mirascope.ops._internal.tracing")
228
- package_name: The package/extra name for error messages (e.g., "ops")
229
- """
230
- super().__init__(name)
231
- self.__package_name = package_name
232
- self.__stub_name = name.split(".")[-1] # Use last part for error messages
233
- self.__stubs: dict[str, Any] = {}
234
- # Set __path__ to make this look like a package to Python's import system
235
- # This allows nested imports like `from .openai.completions import X` to work
236
- self.__path__: MutableSequence[str] = []
237
-
238
- def __call__(self, *args: Any, **kwargs: Any) -> Any:
239
- """Raise ImportError when trying to instantiate/call the stub.
240
-
241
- Raises:
242
- ImportError: With installation instructions
243
- """
244
- raise _make_import_error(self.__package_name, self.__stub_name)
245
-
246
- def __getattr__(self, name: str) -> Any:
247
- """Return a stub for any accessed attribute.
248
-
249
- For nested imports like `from .openai.completions.provider import X`, the
250
- _StubFinder will create intermediate stub modules automatically. This method
251
- handles direct attribute access for both getting submodules and getting
252
- classes/functions from the stub.
253
-
254
- Args:
255
- name: The attribute name being accessed
256
-
257
- Returns:
258
- Either a stub module (if already in sys.modules) or a stub class
259
-
260
- Raises:
261
- AttributeError: For private/dunder attributes
262
- """
263
- if name.startswith("_"):
264
- raise AttributeError(name)
265
-
266
- # Check if we've already created a stub for this name
267
- if name in self.__stubs:
268
- return self.__stubs[name]
269
-
270
- # Check if there's a submodule already created by the finder
271
- full_name = f"{self.__name__}.{name}"
272
- if full_name in sys.modules:
273
- submodule = sys.modules[full_name]
274
- self.__stubs[name] = submodule
275
- return submodule
276
-
277
- # Otherwise return a stub class for direct attribute access
278
- stub_class = _create_stub(self.__package_name, name)
279
- self.__stubs[name] = stub_class
280
- return stub_class
281
-
282
- def __instancecheck__(self, instance: Any) -> bool:
283
- """Raise ImportError when checking isinstance().
284
-
285
- Raises:
286
- ImportError: With installation instructions
287
- """
288
- raise _make_import_error(self.__package_name, self.__stub_name)
289
-
290
- def __subclasscheck__(self, subclass: Any) -> bool:
291
- """Allow subclassing but raise ImportError for issubclass checks.
292
-
293
- Args:
294
- subclass: The class being checked
295
-
296
- Returns:
297
- True if checking against self
298
-
299
- Raises:
300
- ImportError: For issubclass checks with other classes
301
- """
302
- if subclass is self:
303
- return True
304
- raise _make_import_error(self.__package_name, self.__stub_name)
305
-
306
- def __dir__(self) -> list[str]:
307
- """Return empty list to avoid advertising stub names.
308
-
309
- Returns:
310
- Empty list
311
- """
312
- return []
313
-
314
-
315
- def stub_module_if_missing(
316
- module_path: str,
317
- package_name: str,
318
- ) -> bool:
319
- """Check if all packages for an extra are installed; if not, install a stub module.
320
-
321
- This must be called BEFORE importing from the module.
322
-
323
- Args:
324
- module_path: Full module path to stub (e.g., 'mirascope.ops._internal.tracing')
325
- package_name: The extra name (e.g., 'ops'). Must exist in EXTRA_IMPORTS.
326
-
327
- Returns:
328
- True if all packages for the extra are available, False if stubbed.
329
-
330
- Raises:
331
- KeyError: If package_name is not found in EXTRA_IMPORTS mapping.
332
- """
333
- if package_name not in EXTRA_IMPORTS:
334
- raise KeyError(
335
- f"Unknown extra '{package_name}'. "
336
- f"Available extras: {', '.join(EXTRA_IMPORTS.keys())}"
337
- )
338
-
339
- imports_to_check = EXTRA_IMPORTS[package_name]
340
-
341
- # Check if ALL imports for this extra are available
342
- all_available = True
343
- for import_name in imports_to_check:
344
- try:
345
- __import__(import_name)
346
- except ImportError:
347
- all_available = False
348
- break
349
-
350
- if all_available:
351
- return True
352
-
353
- # At least one import is missing, so stub the module
354
- sys.modules[module_path] = _StubModule(module_path, package_name)
355
-
356
- # Register with the finder to handle nested imports
357
- _finder.register_stub(module_path)
358
-
359
- # Ensure the finder is in sys.meta_path (only add once)
360
- if _finder not in sys.meta_path:
361
- sys.meta_path.insert(0, _finder)
362
-
363
- return False
mirascope/api/__init__.py DELETED
@@ -1,14 +0,0 @@
1
- """The Mirascope Cloud API client."""
2
-
3
- from .._stubs import stub_module_if_missing
4
-
5
- # Stub modules for missing optional dependencies BEFORE importing
6
- # This must happen before any imports from these modules
7
- stub_module_if_missing("mirascope.api", "api")
8
-
9
- # Now imports work regardless of which packages are installed
10
- # ruff: noqa: E402
11
- from .client import AsyncMirascope, Mirascope
12
- from .settings import get_settings, settings
13
-
14
- __all__ = ["AsyncMirascope", "Mirascope", "get_settings", "settings"]
@@ -1,207 +0,0 @@
1
- # Mirascope Python Library
2
-
3
- [![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Mirascope%2FPython)
4
- [![pypi](https://img.shields.io/pypi/v/mirascope)](https://pypi.python.org/pypi/mirascope)
5
-
6
- The Mirascope Python library provides convenient access to the Mirascope APIs from Python.
7
-
8
- ## Table of Contents
9
-
10
- - [Installation](#installation)
11
- - [Reference](#reference)
12
- - [Usage](#usage)
13
- - [Async Client](#async-client)
14
- - [Exception Handling](#exception-handling)
15
- - [Advanced](#advanced)
16
- - [Access Raw Response Data](#access-raw-response-data)
17
- - [Retries](#retries)
18
- - [Timeouts](#timeouts)
19
- - [Custom Client](#custom-client)
20
- - [Contributing](#contributing)
21
-
22
- ## Installation
23
-
24
- ```sh
25
- pip install mirascope
26
- ```
27
-
28
- ## Reference
29
-
30
- A full reference for this library is available [here](./reference.md).
31
-
32
- ## Usage
33
-
34
- Instantiate and use the client with the following:
35
-
36
- ```python
37
- from mirascope.api._generated import Mirascope
38
- from mirascope.api._generated.traces import (
39
- TracesCreateRequestResourceSpansItem,
40
- TracesCreateRequestResourceSpansItemScopeSpansItem,
41
- TracesCreateRequestResourceSpansItemScopeSpansItemSpansItem,
42
- )
43
-
44
- client = Mirascope()
45
- client.traces.create(
46
- resource_spans=[
47
- TracesCreateRequestResourceSpansItem(
48
- scope_spans=[
49
- TracesCreateRequestResourceSpansItemScopeSpansItem(
50
- spans=[
51
- TracesCreateRequestResourceSpansItemScopeSpansItemSpansItem(
52
- trace_id="traceId",
53
- span_id="spanId",
54
- name="name",
55
- start_time_unix_nano="startTimeUnixNano",
56
- end_time_unix_nano="endTimeUnixNano",
57
- )
58
- ],
59
- )
60
- ],
61
- )
62
- ],
63
- )
64
- ```
65
-
66
- ## Async Client
67
-
68
- The SDK also exports an `async` client so that you can make non-blocking calls to our API.
69
-
70
- ```python
71
- import asyncio
72
-
73
- from mirascope.api._generated import AsyncMirascope
74
- from mirascope.api._generated.traces import (
75
- TracesCreateRequestResourceSpansItem,
76
- TracesCreateRequestResourceSpansItemScopeSpansItem,
77
- TracesCreateRequestResourceSpansItemScopeSpansItemSpansItem,
78
- )
79
-
80
- client = AsyncMirascope()
81
-
82
-
83
- async def main() -> None:
84
- await client.traces.create(
85
- resource_spans=[
86
- TracesCreateRequestResourceSpansItem(
87
- scope_spans=[
88
- TracesCreateRequestResourceSpansItemScopeSpansItem(
89
- spans=[
90
- TracesCreateRequestResourceSpansItemScopeSpansItemSpansItem(
91
- trace_id="traceId",
92
- span_id="spanId",
93
- name="name",
94
- start_time_unix_nano="startTimeUnixNano",
95
- end_time_unix_nano="endTimeUnixNano",
96
- )
97
- ],
98
- )
99
- ],
100
- )
101
- ],
102
- )
103
-
104
-
105
- asyncio.run(main())
106
- ```
107
-
108
- ## Exception Handling
109
-
110
- When the API returns a non-success status code (4xx or 5xx response), a subclass of the following error
111
- will be thrown.
112
-
113
- ```python
114
- from mirascope.api._generated.core.api_error import ApiError
115
-
116
- try:
117
- client.traces.create(...)
118
- except ApiError as e:
119
- print(e.status_code)
120
- print(e.body)
121
- ```
122
-
123
- ## Advanced
124
-
125
- ### Access Raw Response Data
126
-
127
- The SDK provides access to raw response data, including headers, through the `.with_raw_response` property.
128
- The `.with_raw_response` property returns a "raw" client that can be used to access the `.headers` and `.data` attributes.
129
-
130
- ```python
131
- from mirascope.api._generated import Mirascope
132
-
133
- client = Mirascope(
134
- ...,
135
- )
136
- response = client.traces.with_raw_response.create(...)
137
- print(response.headers) # access the response headers
138
- print(response.data) # access the underlying object
139
- ```
140
-
141
- ### Retries
142
-
143
- The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long
144
- as the request is deemed retryable and the number of retry attempts has not grown larger than the configured
145
- retry limit (default: 2).
146
-
147
- A request is deemed retryable when any of the following HTTP status codes is returned:
148
-
149
- - [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout)
150
- - [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests)
151
- - [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors)
152
-
153
- Use the `max_retries` request option to configure this behavior.
154
-
155
- ```python
156
- client.traces.create(..., request_options={
157
- "max_retries": 1
158
- })
159
- ```
160
-
161
- ### Timeouts
162
-
163
- The SDK defaults to a 60 second timeout. You can configure this with a timeout option at the client or request level.
164
-
165
- ```python
166
-
167
- from mirascope.api._generated import Mirascope
168
-
169
- client = Mirascope(
170
- ...,
171
- timeout=20.0,
172
- )
173
-
174
-
175
- # Override timeout for a specific method
176
- client.traces.create(..., request_options={
177
- "timeout_in_seconds": 1
178
- })
179
- ```
180
-
181
- ### Custom Client
182
-
183
- You can override the `httpx` client to customize it for your use-case. Some common use-cases include support for proxies
184
- and transports.
185
-
186
- ```python
187
- import httpx
188
- from mirascope.api._generated import Mirascope
189
-
190
- client = Mirascope(
191
- ...,
192
- httpx_client=httpx.Client(
193
- proxies="http://my.test.proxy.example.com",
194
- transport=httpx.HTTPTransport(local_address="0.0.0.0"),
195
- ),
196
- )
197
- ```
198
-
199
- ## Contributing
200
-
201
- While we value open-source contributions to this SDK, this library is generated programmatically.
202
- Additions made directly to this library would have to be moved over to our generation code,
203
- otherwise they would be overwritten upon the next generated release. Feel free to open a PR as
204
- a proof of concept, but know that we will not be able to merge it as-is. We suggest opening
205
- an issue first to discuss with us!
206
-
207
- On the other hand, contributions to the README are always very welcome!