mirascope 2.0.0__py3-none-any.whl → 2.0.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. mirascope/__init__.py +2 -11
  2. mirascope/graphs/__init__.py +22 -0
  3. mirascope/graphs/finite_state_machine.py +625 -0
  4. mirascope/llm/__init__.py +15 -96
  5. mirascope/llm/agents/__init__.py +15 -0
  6. mirascope/llm/agents/agent.py +97 -0
  7. mirascope/llm/agents/agent_template.py +45 -0
  8. mirascope/llm/agents/decorator.py +176 -0
  9. mirascope/llm/calls/__init__.py +1 -2
  10. mirascope/llm/calls/base_call.py +33 -0
  11. mirascope/llm/calls/calls.py +58 -84
  12. mirascope/llm/calls/decorator.py +120 -140
  13. mirascope/llm/clients/__init__.py +34 -0
  14. mirascope/llm/clients/_missing_import_stubs.py +47 -0
  15. mirascope/llm/clients/anthropic/__init__.py +25 -0
  16. mirascope/llm/{providers/openai/completions → clients/anthropic}/_utils/__init__.py +0 -2
  17. mirascope/llm/{providers → clients}/anthropic/_utils/decode.py +22 -66
  18. mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
  19. mirascope/llm/clients/anthropic/clients.py +819 -0
  20. mirascope/llm/clients/anthropic/model_ids.py +8 -0
  21. mirascope/llm/{providers → clients}/base/__init__.py +5 -4
  22. mirascope/llm/{providers → clients}/base/_utils.py +17 -78
  23. mirascope/llm/{providers/base/base_provider.py → clients/base/client.py} +145 -468
  24. mirascope/llm/{models → clients/base}/params.py +37 -16
  25. mirascope/llm/clients/google/__init__.py +20 -0
  26. mirascope/llm/{providers/openai/responses → clients/google}/_utils/__init__.py +0 -2
  27. mirascope/llm/{providers → clients}/google/_utils/decode.py +22 -98
  28. mirascope/llm/{providers → clients}/google/_utils/encode.py +46 -168
  29. mirascope/llm/clients/google/clients.py +853 -0
  30. mirascope/llm/clients/google/model_ids.py +15 -0
  31. mirascope/llm/clients/openai/__init__.py +25 -0
  32. mirascope/llm/clients/openai/completions/__init__.py +28 -0
  33. mirascope/llm/{providers/google → clients/openai/completions}/_utils/__init__.py +0 -4
  34. mirascope/llm/{providers → clients}/openai/completions/_utils/decode.py +9 -74
  35. mirascope/llm/{providers → clients}/openai/completions/_utils/encode.py +52 -70
  36. mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
  37. mirascope/llm/clients/openai/completions/clients.py +833 -0
  38. mirascope/llm/clients/openai/completions/model_ids.py +8 -0
  39. mirascope/llm/clients/openai/responses/__init__.py +26 -0
  40. mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
  41. mirascope/llm/{providers → clients}/openai/responses/_utils/decode.py +14 -80
  42. mirascope/llm/{providers → clients}/openai/responses/_utils/encode.py +41 -92
  43. mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
  44. mirascope/llm/clients/openai/responses/clients.py +832 -0
  45. mirascope/llm/clients/openai/responses/model_ids.py +8 -0
  46. mirascope/llm/clients/openai/shared/__init__.py +7 -0
  47. mirascope/llm/clients/openai/shared/_utils.py +55 -0
  48. mirascope/llm/clients/providers.py +175 -0
  49. mirascope/llm/content/__init__.py +2 -3
  50. mirascope/llm/content/tool_call.py +0 -6
  51. mirascope/llm/content/tool_output.py +5 -22
  52. mirascope/llm/context/_utils.py +6 -19
  53. mirascope/llm/exceptions.py +43 -298
  54. mirascope/llm/formatting/__init__.py +2 -19
  55. mirascope/llm/formatting/_utils.py +74 -0
  56. mirascope/llm/formatting/format.py +30 -219
  57. mirascope/llm/formatting/from_call_args.py +2 -2
  58. mirascope/llm/formatting/partial.py +7 -80
  59. mirascope/llm/formatting/types.py +64 -21
  60. mirascope/llm/mcp/__init__.py +2 -2
  61. mirascope/llm/mcp/client.py +118 -0
  62. mirascope/llm/messages/__init__.py +0 -3
  63. mirascope/llm/messages/message.py +5 -13
  64. mirascope/llm/models/__init__.py +2 -7
  65. mirascope/llm/models/models.py +139 -315
  66. mirascope/llm/prompts/__init__.py +12 -13
  67. mirascope/llm/prompts/_utils.py +43 -14
  68. mirascope/llm/prompts/decorator.py +204 -144
  69. mirascope/llm/prompts/protocols.py +59 -25
  70. mirascope/llm/responses/__init__.py +1 -9
  71. mirascope/llm/responses/_utils.py +12 -102
  72. mirascope/llm/responses/base_response.py +6 -18
  73. mirascope/llm/responses/base_stream_response.py +50 -173
  74. mirascope/llm/responses/finish_reason.py +0 -1
  75. mirascope/llm/responses/response.py +13 -34
  76. mirascope/llm/responses/root_response.py +29 -100
  77. mirascope/llm/responses/stream_response.py +31 -40
  78. mirascope/llm/tools/__init__.py +2 -9
  79. mirascope/llm/tools/_utils.py +3 -12
  80. mirascope/llm/tools/decorator.py +16 -25
  81. mirascope/llm/tools/protocols.py +4 -4
  82. mirascope/llm/tools/tool_schema.py +19 -87
  83. mirascope/llm/tools/toolkit.py +27 -35
  84. mirascope/llm/tools/tools.py +41 -135
  85. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/METADATA +13 -90
  86. mirascope-2.0.0a1.dist-info/RECORD +102 -0
  87. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/WHEEL +1 -1
  88. {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/licenses/LICENSE +1 -1
  89. mirascope/_stubs.py +0 -363
  90. mirascope/api/__init__.py +0 -14
  91. mirascope/api/_generated/README.md +0 -207
  92. mirascope/api/_generated/__init__.py +0 -440
  93. mirascope/api/_generated/annotations/__init__.py +0 -33
  94. mirascope/api/_generated/annotations/client.py +0 -506
  95. mirascope/api/_generated/annotations/raw_client.py +0 -1414
  96. mirascope/api/_generated/annotations/types/__init__.py +0 -31
  97. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +0 -5
  98. mirascope/api/_generated/annotations/types/annotations_create_response.py +0 -48
  99. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +0 -5
  100. mirascope/api/_generated/annotations/types/annotations_get_response.py +0 -48
  101. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +0 -5
  102. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +0 -5
  103. mirascope/api/_generated/annotations/types/annotations_list_response.py +0 -21
  104. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +0 -50
  105. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +0 -5
  106. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +0 -5
  107. mirascope/api/_generated/annotations/types/annotations_update_response.py +0 -48
  108. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +0 -5
  109. mirascope/api/_generated/api_keys/__init__.py +0 -17
  110. mirascope/api/_generated/api_keys/client.py +0 -530
  111. mirascope/api/_generated/api_keys/raw_client.py +0 -1236
  112. mirascope/api/_generated/api_keys/types/__init__.py +0 -15
  113. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +0 -28
  114. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +0 -27
  115. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +0 -40
  116. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +0 -27
  117. mirascope/api/_generated/client.py +0 -211
  118. mirascope/api/_generated/core/__init__.py +0 -52
  119. mirascope/api/_generated/core/api_error.py +0 -23
  120. mirascope/api/_generated/core/client_wrapper.py +0 -46
  121. mirascope/api/_generated/core/datetime_utils.py +0 -28
  122. mirascope/api/_generated/core/file.py +0 -67
  123. mirascope/api/_generated/core/force_multipart.py +0 -16
  124. mirascope/api/_generated/core/http_client.py +0 -543
  125. mirascope/api/_generated/core/http_response.py +0 -55
  126. mirascope/api/_generated/core/jsonable_encoder.py +0 -100
  127. mirascope/api/_generated/core/pydantic_utilities.py +0 -255
  128. mirascope/api/_generated/core/query_encoder.py +0 -58
  129. mirascope/api/_generated/core/remove_none_from_dict.py +0 -11
  130. mirascope/api/_generated/core/request_options.py +0 -35
  131. mirascope/api/_generated/core/serialization.py +0 -276
  132. mirascope/api/_generated/docs/__init__.py +0 -4
  133. mirascope/api/_generated/docs/client.py +0 -91
  134. mirascope/api/_generated/docs/raw_client.py +0 -178
  135. mirascope/api/_generated/environment.py +0 -9
  136. mirascope/api/_generated/environments/__init__.py +0 -23
  137. mirascope/api/_generated/environments/client.py +0 -649
  138. mirascope/api/_generated/environments/raw_client.py +0 -1567
  139. mirascope/api/_generated/environments/types/__init__.py +0 -25
  140. mirascope/api/_generated/environments/types/environments_create_response.py +0 -24
  141. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +0 -60
  142. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +0 -24
  143. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +0 -22
  144. mirascope/api/_generated/environments/types/environments_get_response.py +0 -24
  145. mirascope/api/_generated/environments/types/environments_list_response_item.py +0 -24
  146. mirascope/api/_generated/environments/types/environments_update_response.py +0 -24
  147. mirascope/api/_generated/errors/__init__.py +0 -25
  148. mirascope/api/_generated/errors/bad_request_error.py +0 -14
  149. mirascope/api/_generated/errors/conflict_error.py +0 -14
  150. mirascope/api/_generated/errors/forbidden_error.py +0 -11
  151. mirascope/api/_generated/errors/internal_server_error.py +0 -10
  152. mirascope/api/_generated/errors/not_found_error.py +0 -11
  153. mirascope/api/_generated/errors/payment_required_error.py +0 -15
  154. mirascope/api/_generated/errors/service_unavailable_error.py +0 -14
  155. mirascope/api/_generated/errors/too_many_requests_error.py +0 -15
  156. mirascope/api/_generated/errors/unauthorized_error.py +0 -11
  157. mirascope/api/_generated/functions/__init__.py +0 -39
  158. mirascope/api/_generated/functions/client.py +0 -647
  159. mirascope/api/_generated/functions/raw_client.py +0 -1890
  160. mirascope/api/_generated/functions/types/__init__.py +0 -53
  161. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +0 -20
  162. mirascope/api/_generated/functions/types/functions_create_response.py +0 -37
  163. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +0 -20
  164. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +0 -39
  165. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +0 -20
  166. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +0 -53
  167. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +0 -22
  168. mirascope/api/_generated/functions/types/functions_get_response.py +0 -37
  169. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +0 -20
  170. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +0 -25
  171. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +0 -56
  172. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +0 -22
  173. mirascope/api/_generated/functions/types/functions_list_response.py +0 -21
  174. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +0 -41
  175. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +0 -20
  176. mirascope/api/_generated/health/__init__.py +0 -7
  177. mirascope/api/_generated/health/client.py +0 -92
  178. mirascope/api/_generated/health/raw_client.py +0 -175
  179. mirascope/api/_generated/health/types/__init__.py +0 -8
  180. mirascope/api/_generated/health/types/health_check_response.py +0 -22
  181. mirascope/api/_generated/health/types/health_check_response_status.py +0 -5
  182. mirascope/api/_generated/organization_invitations/__init__.py +0 -33
  183. mirascope/api/_generated/organization_invitations/client.py +0 -546
  184. mirascope/api/_generated/organization_invitations/raw_client.py +0 -1519
  185. mirascope/api/_generated/organization_invitations/types/__init__.py +0 -53
  186. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +0 -34
  187. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +0 -7
  188. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +0 -7
  189. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +0 -48
  190. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +0 -7
  191. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +0 -7
  192. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +0 -48
  193. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +0 -7
  194. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +0 -7
  195. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +0 -48
  196. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +0 -7
  197. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +0 -7
  198. mirascope/api/_generated/organization_memberships/__init__.py +0 -19
  199. mirascope/api/_generated/organization_memberships/client.py +0 -302
  200. mirascope/api/_generated/organization_memberships/raw_client.py +0 -736
  201. mirascope/api/_generated/organization_memberships/types/__init__.py +0 -27
  202. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +0 -33
  203. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +0 -7
  204. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +0 -7
  205. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +0 -31
  206. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +0 -7
  207. mirascope/api/_generated/organizations/__init__.py +0 -51
  208. mirascope/api/_generated/organizations/client.py +0 -869
  209. mirascope/api/_generated/organizations/raw_client.py +0 -2593
  210. mirascope/api/_generated/organizations/types/__init__.py +0 -71
  211. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +0 -24
  212. mirascope/api/_generated/organizations/types/organizations_create_response.py +0 -26
  213. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +0 -5
  214. mirascope/api/_generated/organizations/types/organizations_get_response.py +0 -26
  215. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +0 -5
  216. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +0 -26
  217. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +0 -5
  218. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +0 -7
  219. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +0 -47
  220. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +0 -33
  221. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +0 -7
  222. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +0 -24
  223. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +0 -53
  224. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +0 -7
  225. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +0 -26
  226. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +0 -34
  227. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +0 -7
  228. mirascope/api/_generated/organizations/types/organizations_update_response.py +0 -26
  229. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +0 -5
  230. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +0 -7
  231. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +0 -35
  232. mirascope/api/_generated/project_memberships/__init__.py +0 -25
  233. mirascope/api/_generated/project_memberships/client.py +0 -437
  234. mirascope/api/_generated/project_memberships/raw_client.py +0 -1039
  235. mirascope/api/_generated/project_memberships/types/__init__.py +0 -29
  236. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +0 -7
  237. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +0 -35
  238. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +0 -7
  239. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +0 -33
  240. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +0 -7
  241. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +0 -7
  242. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +0 -35
  243. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +0 -7
  244. mirascope/api/_generated/projects/__init__.py +0 -7
  245. mirascope/api/_generated/projects/client.py +0 -428
  246. mirascope/api/_generated/projects/raw_client.py +0 -1302
  247. mirascope/api/_generated/projects/types/__init__.py +0 -10
  248. mirascope/api/_generated/projects/types/projects_create_response.py +0 -25
  249. mirascope/api/_generated/projects/types/projects_get_response.py +0 -25
  250. mirascope/api/_generated/projects/types/projects_list_response_item.py +0 -25
  251. mirascope/api/_generated/projects/types/projects_update_response.py +0 -25
  252. mirascope/api/_generated/reference.md +0 -4915
  253. mirascope/api/_generated/tags/__init__.py +0 -19
  254. mirascope/api/_generated/tags/client.py +0 -504
  255. mirascope/api/_generated/tags/raw_client.py +0 -1288
  256. mirascope/api/_generated/tags/types/__init__.py +0 -17
  257. mirascope/api/_generated/tags/types/tags_create_response.py +0 -41
  258. mirascope/api/_generated/tags/types/tags_get_response.py +0 -41
  259. mirascope/api/_generated/tags/types/tags_list_response.py +0 -23
  260. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +0 -41
  261. mirascope/api/_generated/tags/types/tags_update_response.py +0 -41
  262. mirascope/api/_generated/token_cost/__init__.py +0 -7
  263. mirascope/api/_generated/token_cost/client.py +0 -160
  264. mirascope/api/_generated/token_cost/raw_client.py +0 -264
  265. mirascope/api/_generated/token_cost/types/__init__.py +0 -8
  266. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +0 -54
  267. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +0 -52
  268. mirascope/api/_generated/traces/__init__.py +0 -97
  269. mirascope/api/_generated/traces/client.py +0 -1103
  270. mirascope/api/_generated/traces/raw_client.py +0 -2322
  271. mirascope/api/_generated/traces/types/__init__.py +0 -155
  272. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +0 -29
  273. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +0 -27
  274. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +0 -23
  275. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +0 -38
  276. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +0 -19
  277. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +0 -22
  278. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +0 -20
  279. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +0 -29
  280. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +0 -31
  281. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +0 -23
  282. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +0 -38
  283. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +0 -19
  284. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +0 -22
  285. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +0 -22
  286. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +0 -48
  287. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +0 -23
  288. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +0 -38
  289. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +0 -19
  290. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +0 -24
  291. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +0 -22
  292. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +0 -20
  293. mirascope/api/_generated/traces/types/traces_create_response.py +0 -24
  294. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +0 -22
  295. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +0 -60
  296. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +0 -24
  297. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +0 -22
  298. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +0 -33
  299. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +0 -88
  300. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +0 -33
  301. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +0 -88
  302. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +0 -25
  303. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +0 -44
  304. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +0 -26
  305. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +0 -7
  306. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +0 -7
  307. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +0 -7
  308. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +0 -26
  309. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +0 -50
  310. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +0 -26
  311. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +0 -7
  312. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +0 -7
  313. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +0 -5
  314. mirascope/api/_generated/traces/types/traces_search_response.py +0 -26
  315. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +0 -50
  316. mirascope/api/_generated/types/__init__.py +0 -85
  317. mirascope/api/_generated/types/already_exists_error.py +0 -22
  318. mirascope/api/_generated/types/already_exists_error_tag.py +0 -5
  319. mirascope/api/_generated/types/bad_request_error_body.py +0 -50
  320. mirascope/api/_generated/types/click_house_error.py +0 -22
  321. mirascope/api/_generated/types/database_error.py +0 -22
  322. mirascope/api/_generated/types/database_error_tag.py +0 -5
  323. mirascope/api/_generated/types/date.py +0 -3
  324. mirascope/api/_generated/types/http_api_decode_error.py +0 -27
  325. mirascope/api/_generated/types/http_api_decode_error_tag.py +0 -5
  326. mirascope/api/_generated/types/immutable_resource_error.py +0 -22
  327. mirascope/api/_generated/types/internal_server_error_body.py +0 -49
  328. mirascope/api/_generated/types/issue.py +0 -38
  329. mirascope/api/_generated/types/issue_tag.py +0 -10
  330. mirascope/api/_generated/types/not_found_error_body.py +0 -22
  331. mirascope/api/_generated/types/not_found_error_tag.py +0 -5
  332. mirascope/api/_generated/types/number_from_string.py +0 -3
  333. mirascope/api/_generated/types/permission_denied_error.py +0 -22
  334. mirascope/api/_generated/types/permission_denied_error_tag.py +0 -5
  335. mirascope/api/_generated/types/plan_limit_exceeded_error.py +0 -32
  336. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +0 -7
  337. mirascope/api/_generated/types/pricing_unavailable_error.py +0 -23
  338. mirascope/api/_generated/types/property_key.py +0 -7
  339. mirascope/api/_generated/types/property_key_key.py +0 -25
  340. mirascope/api/_generated/types/property_key_key_tag.py +0 -5
  341. mirascope/api/_generated/types/rate_limit_error.py +0 -31
  342. mirascope/api/_generated/types/rate_limit_error_tag.py +0 -5
  343. mirascope/api/_generated/types/service_unavailable_error_body.py +0 -24
  344. mirascope/api/_generated/types/service_unavailable_error_tag.py +0 -7
  345. mirascope/api/_generated/types/stripe_error.py +0 -20
  346. mirascope/api/_generated/types/subscription_past_due_error.py +0 -31
  347. mirascope/api/_generated/types/subscription_past_due_error_tag.py +0 -7
  348. mirascope/api/_generated/types/unauthorized_error_body.py +0 -21
  349. mirascope/api/_generated/types/unauthorized_error_tag.py +0 -5
  350. mirascope/api/client.py +0 -255
  351. mirascope/api/settings.py +0 -99
  352. mirascope/llm/formatting/output_parser.py +0 -178
  353. mirascope/llm/formatting/primitives.py +0 -192
  354. mirascope/llm/mcp/mcp_client.py +0 -130
  355. mirascope/llm/messages/_utils.py +0 -34
  356. mirascope/llm/models/thinking_config.py +0 -61
  357. mirascope/llm/prompts/prompts.py +0 -487
  358. mirascope/llm/providers/__init__.py +0 -62
  359. mirascope/llm/providers/anthropic/__init__.py +0 -11
  360. mirascope/llm/providers/anthropic/_utils/__init__.py +0 -27
  361. mirascope/llm/providers/anthropic/_utils/beta_decode.py +0 -282
  362. mirascope/llm/providers/anthropic/_utils/beta_encode.py +0 -266
  363. mirascope/llm/providers/anthropic/_utils/encode.py +0 -418
  364. mirascope/llm/providers/anthropic/_utils/errors.py +0 -46
  365. mirascope/llm/providers/anthropic/beta_provider.py +0 -374
  366. mirascope/llm/providers/anthropic/model_id.py +0 -23
  367. mirascope/llm/providers/anthropic/model_info.py +0 -87
  368. mirascope/llm/providers/anthropic/provider.py +0 -479
  369. mirascope/llm/providers/google/__init__.py +0 -6
  370. mirascope/llm/providers/google/_utils/errors.py +0 -50
  371. mirascope/llm/providers/google/model_id.py +0 -22
  372. mirascope/llm/providers/google/model_info.py +0 -63
  373. mirascope/llm/providers/google/provider.py +0 -492
  374. mirascope/llm/providers/mirascope/__init__.py +0 -5
  375. mirascope/llm/providers/mirascope/_utils.py +0 -73
  376. mirascope/llm/providers/mirascope/provider.py +0 -349
  377. mirascope/llm/providers/mlx/__init__.py +0 -9
  378. mirascope/llm/providers/mlx/_utils.py +0 -141
  379. mirascope/llm/providers/mlx/encoding/__init__.py +0 -8
  380. mirascope/llm/providers/mlx/encoding/base.py +0 -72
  381. mirascope/llm/providers/mlx/encoding/transformers.py +0 -150
  382. mirascope/llm/providers/mlx/mlx.py +0 -254
  383. mirascope/llm/providers/mlx/model_id.py +0 -17
  384. mirascope/llm/providers/mlx/provider.py +0 -452
  385. mirascope/llm/providers/model_id.py +0 -16
  386. mirascope/llm/providers/ollama/__init__.py +0 -7
  387. mirascope/llm/providers/ollama/provider.py +0 -71
  388. mirascope/llm/providers/openai/__init__.py +0 -15
  389. mirascope/llm/providers/openai/_utils/__init__.py +0 -5
  390. mirascope/llm/providers/openai/_utils/errors.py +0 -46
  391. mirascope/llm/providers/openai/completions/__init__.py +0 -7
  392. mirascope/llm/providers/openai/completions/base_provider.py +0 -542
  393. mirascope/llm/providers/openai/completions/provider.py +0 -22
  394. mirascope/llm/providers/openai/model_id.py +0 -31
  395. mirascope/llm/providers/openai/model_info.py +0 -303
  396. mirascope/llm/providers/openai/provider.py +0 -441
  397. mirascope/llm/providers/openai/responses/__init__.py +0 -5
  398. mirascope/llm/providers/openai/responses/provider.py +0 -513
  399. mirascope/llm/providers/provider_id.py +0 -24
  400. mirascope/llm/providers/provider_registry.py +0 -299
  401. mirascope/llm/providers/together/__init__.py +0 -7
  402. mirascope/llm/providers/together/provider.py +0 -40
  403. mirascope/llm/responses/usage.py +0 -95
  404. mirascope/ops/__init__.py +0 -111
  405. mirascope/ops/_internal/__init__.py +0 -5
  406. mirascope/ops/_internal/closure.py +0 -1169
  407. mirascope/ops/_internal/configuration.py +0 -177
  408. mirascope/ops/_internal/context.py +0 -76
  409. mirascope/ops/_internal/exporters/__init__.py +0 -26
  410. mirascope/ops/_internal/exporters/exporters.py +0 -395
  411. mirascope/ops/_internal/exporters/processors.py +0 -104
  412. mirascope/ops/_internal/exporters/types.py +0 -165
  413. mirascope/ops/_internal/exporters/utils.py +0 -29
  414. mirascope/ops/_internal/instrumentation/__init__.py +0 -8
  415. mirascope/ops/_internal/instrumentation/llm/__init__.py +0 -8
  416. mirascope/ops/_internal/instrumentation/llm/common.py +0 -530
  417. mirascope/ops/_internal/instrumentation/llm/cost.py +0 -190
  418. mirascope/ops/_internal/instrumentation/llm/encode.py +0 -238
  419. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +0 -38
  420. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +0 -31
  421. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +0 -38
  422. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +0 -18
  423. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +0 -100
  424. mirascope/ops/_internal/instrumentation/llm/llm.py +0 -161
  425. mirascope/ops/_internal/instrumentation/llm/model.py +0 -1798
  426. mirascope/ops/_internal/instrumentation/llm/response.py +0 -521
  427. mirascope/ops/_internal/instrumentation/llm/serialize.py +0 -300
  428. mirascope/ops/_internal/propagation.py +0 -198
  429. mirascope/ops/_internal/protocols.py +0 -133
  430. mirascope/ops/_internal/session.py +0 -139
  431. mirascope/ops/_internal/spans.py +0 -232
  432. mirascope/ops/_internal/traced_calls.py +0 -375
  433. mirascope/ops/_internal/traced_functions.py +0 -523
  434. mirascope/ops/_internal/tracing.py +0 -353
  435. mirascope/ops/_internal/types.py +0 -13
  436. mirascope/ops/_internal/utils.py +0 -123
  437. mirascope/ops/_internal/versioned_calls.py +0 -512
  438. mirascope/ops/_internal/versioned_functions.py +0 -357
  439. mirascope/ops/_internal/versioning.py +0 -303
  440. mirascope/ops/exceptions.py +0 -21
  441. mirascope-2.0.0.dist-info/RECORD +0 -423
  442. /mirascope/llm/{providers → clients}/base/kwargs.py +0 -0
  443. /mirascope/llm/{providers → clients}/google/message.py +0 -0
@@ -1,479 +0,0 @@
1
- """Anthropic client implementation."""
2
-
3
- from __future__ import annotations
4
-
5
- from collections.abc import Sequence
6
- from typing import TYPE_CHECKING
7
- from typing_extensions import Unpack
8
-
9
- from anthropic import Anthropic, AsyncAnthropic
10
-
11
- from ...context import Context, DepsT
12
- from ...formatting import Format, FormattableT, OutputParser, resolve_format
13
- from ...messages import Message
14
- from ...responses import (
15
- AsyncContextResponse,
16
- AsyncContextStreamResponse,
17
- AsyncResponse,
18
- AsyncStreamResponse,
19
- ContextResponse,
20
- ContextStreamResponse,
21
- Response,
22
- StreamResponse,
23
- )
24
- from ...tools import (
25
- AnyToolSchema,
26
- AsyncContextTool,
27
- AsyncContextToolkit,
28
- AsyncTool,
29
- AsyncToolkit,
30
- BaseToolkit,
31
- ContextTool,
32
- ContextToolkit,
33
- Tool,
34
- Toolkit,
35
- )
36
- from ..base import BaseProvider, _utils as _base_utils
37
- from . import _utils
38
- from .beta_provider import AnthropicBetaProvider
39
- from .model_id import AnthropicModelId, model_name
40
- from .model_info import MODELS_WITHOUT_STRICT_STRUCTURED_OUTPUTS
41
-
42
- if TYPE_CHECKING:
43
- from ...models import Params
44
-
45
-
46
- def _should_use_beta(
47
- model_id: AnthropicModelId,
48
- format: type[FormattableT]
49
- | Format[FormattableT]
50
- | OutputParser[FormattableT]
51
- | None,
52
- tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
53
- ) -> bool:
54
- """Determine whether to use the beta API based on format mode or strict tools.
55
-
56
- If the format resolves to strict mode, or any tools have strict=True,
57
- and the model plausibly has strict structured output support, then we
58
- will use the beta provider.
59
- """
60
- if model_name(model_id) in MODELS_WITHOUT_STRICT_STRUCTURED_OUTPUTS:
61
- return False
62
-
63
- # Check if format requires strict mode
64
- resolved = resolve_format(format, default_mode=_utils.DEFAULT_FORMAT_MODE)
65
- if resolved is not None and resolved.mode == "strict":
66
- return True
67
-
68
- return _base_utils.has_strict_tools(tools)
69
-
70
-
71
- class AnthropicProvider(BaseProvider[Anthropic]):
72
- """The client for the Anthropic LLM model."""
73
-
74
- id = "anthropic"
75
- default_scope = "anthropic/"
76
- error_map = _utils.ANTHROPIC_ERROR_MAP
77
- _beta_provider: AnthropicBetaProvider
78
-
79
- def __init__(
80
- self, *, api_key: str | None = None, base_url: str | None = None
81
- ) -> None:
82
- """Initialize the Anthropic client."""
83
- self.client = Anthropic(api_key=api_key, base_url=base_url)
84
- self.async_client = AsyncAnthropic(api_key=api_key, base_url=base_url)
85
- self._beta_provider = AnthropicBetaProvider(api_key=api_key, base_url=base_url)
86
-
87
- def get_error_status(self, e: Exception) -> int | None:
88
- """Extract HTTP status code from Anthropic exception."""
89
- return getattr(e, "status_code", None)
90
-
91
- def _call(
92
- self,
93
- *,
94
- model_id: AnthropicModelId,
95
- messages: Sequence[Message],
96
- tools: Sequence[Tool] | Toolkit | None = None,
97
- format: type[FormattableT]
98
- | Format[FormattableT]
99
- | OutputParser[FormattableT]
100
- | None = None,
101
- **params: Unpack[Params],
102
- ) -> Response | Response[FormattableT]:
103
- """Generate an `llm.Response` by synchronously calling the Anthropic Messages API."""
104
- if _should_use_beta(model_id, format, tools):
105
- return self._beta_provider.call(
106
- model_id=model_id,
107
- messages=messages,
108
- tools=tools,
109
- format=format,
110
- **params,
111
- )
112
-
113
- input_messages, resolved_format, kwargs = _utils.encode_request(
114
- model_id=model_id,
115
- messages=messages,
116
- tools=tools,
117
- format=format,
118
- params=params,
119
- )
120
- anthropic_response = self.client.messages.create(**kwargs)
121
- include_thoughts = _utils.get_include_thoughts(params)
122
- assistant_message, finish_reason, usage = _utils.decode_response(
123
- anthropic_response, model_id, include_thoughts=include_thoughts
124
- )
125
- return Response(
126
- raw=anthropic_response,
127
- provider_id="anthropic",
128
- model_id=model_id,
129
- provider_model_name=model_name(model_id),
130
- params=params,
131
- tools=tools,
132
- input_messages=input_messages,
133
- assistant_message=assistant_message,
134
- finish_reason=finish_reason,
135
- usage=usage,
136
- format=resolved_format,
137
- )
138
-
139
- def _context_call(
140
- self,
141
- *,
142
- ctx: Context[DepsT],
143
- model_id: AnthropicModelId,
144
- messages: Sequence[Message],
145
- tools: Sequence[Tool | ContextTool[DepsT]]
146
- | ContextToolkit[DepsT]
147
- | None = None,
148
- format: type[FormattableT]
149
- | Format[FormattableT]
150
- | OutputParser[FormattableT]
151
- | None = None,
152
- **params: Unpack[Params],
153
- ) -> ContextResponse[DepsT, None] | ContextResponse[DepsT, FormattableT]:
154
- """Generate an `llm.ContextResponse` by synchronously calling the Anthropic Messages API."""
155
- if _should_use_beta(model_id, format, tools):
156
- return self._beta_provider.context_call(
157
- ctx=ctx,
158
- model_id=model_id,
159
- messages=messages,
160
- tools=tools,
161
- format=format,
162
- **params,
163
- )
164
-
165
- input_messages, resolved_format, kwargs = _utils.encode_request(
166
- model_id=model_id,
167
- messages=messages,
168
- tools=tools,
169
- format=format,
170
- params=params,
171
- )
172
- anthropic_response = self.client.messages.create(**kwargs)
173
- include_thoughts = _utils.get_include_thoughts(params)
174
- assistant_message, finish_reason, usage = _utils.decode_response(
175
- anthropic_response, model_id, include_thoughts=include_thoughts
176
- )
177
- return ContextResponse(
178
- raw=anthropic_response,
179
- provider_id="anthropic",
180
- model_id=model_id,
181
- provider_model_name=model_name(model_id),
182
- params=params,
183
- tools=tools,
184
- input_messages=input_messages,
185
- assistant_message=assistant_message,
186
- finish_reason=finish_reason,
187
- usage=usage,
188
- format=resolved_format,
189
- )
190
-
191
- async def _call_async(
192
- self,
193
- *,
194
- model_id: AnthropicModelId,
195
- messages: Sequence[Message],
196
- tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
197
- format: type[FormattableT]
198
- | Format[FormattableT]
199
- | OutputParser[FormattableT]
200
- | None = None,
201
- **params: Unpack[Params],
202
- ) -> AsyncResponse | AsyncResponse[FormattableT]:
203
- """Generate an `llm.AsyncResponse` by asynchronously calling the Anthropic Messages API."""
204
- if _should_use_beta(model_id, format, tools):
205
- return await self._beta_provider.call_async(
206
- model_id=model_id,
207
- messages=messages,
208
- tools=tools,
209
- format=format,
210
- **params,
211
- )
212
-
213
- input_messages, resolved_format, kwargs = _utils.encode_request(
214
- model_id=model_id,
215
- messages=messages,
216
- tools=tools,
217
- format=format,
218
- params=params,
219
- )
220
- anthropic_response = await self.async_client.messages.create(**kwargs)
221
- include_thoughts = _utils.get_include_thoughts(params)
222
- assistant_message, finish_reason, usage = _utils.decode_response(
223
- anthropic_response, model_id, include_thoughts=include_thoughts
224
- )
225
- return AsyncResponse(
226
- raw=anthropic_response,
227
- provider_id="anthropic",
228
- model_id=model_id,
229
- provider_model_name=model_name(model_id),
230
- params=params,
231
- tools=tools,
232
- input_messages=input_messages,
233
- assistant_message=assistant_message,
234
- finish_reason=finish_reason,
235
- usage=usage,
236
- format=resolved_format,
237
- )
238
-
239
- async def _context_call_async(
240
- self,
241
- *,
242
- ctx: Context[DepsT],
243
- model_id: AnthropicModelId,
244
- messages: Sequence[Message],
245
- tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
246
- | AsyncContextToolkit[DepsT]
247
- | None = None,
248
- format: type[FormattableT]
249
- | Format[FormattableT]
250
- | OutputParser[FormattableT]
251
- | None = None,
252
- **params: Unpack[Params],
253
- ) -> AsyncContextResponse[DepsT, None] | AsyncContextResponse[DepsT, FormattableT]:
254
- """Generate an `llm.AsyncContextResponse` by asynchronously calling the Anthropic Messages API."""
255
- if _should_use_beta(model_id, format, tools):
256
- return await self._beta_provider.context_call_async(
257
- ctx=ctx,
258
- model_id=model_id,
259
- messages=messages,
260
- tools=tools,
261
- format=format,
262
- **params,
263
- )
264
-
265
- input_messages, resolved_format, kwargs = _utils.encode_request(
266
- model_id=model_id,
267
- messages=messages,
268
- tools=tools,
269
- format=format,
270
- params=params,
271
- )
272
- anthropic_response = await self.async_client.messages.create(**kwargs)
273
- include_thoughts = _utils.get_include_thoughts(params)
274
- assistant_message, finish_reason, usage = _utils.decode_response(
275
- anthropic_response, model_id, include_thoughts=include_thoughts
276
- )
277
- return AsyncContextResponse(
278
- raw=anthropic_response,
279
- provider_id="anthropic",
280
- model_id=model_id,
281
- provider_model_name=model_name(model_id),
282
- params=params,
283
- tools=tools,
284
- input_messages=input_messages,
285
- assistant_message=assistant_message,
286
- finish_reason=finish_reason,
287
- usage=usage,
288
- format=resolved_format,
289
- )
290
-
291
- def _stream(
292
- self,
293
- *,
294
- model_id: AnthropicModelId,
295
- messages: Sequence[Message],
296
- tools: Sequence[Tool] | Toolkit | None = None,
297
- format: type[FormattableT]
298
- | Format[FormattableT]
299
- | OutputParser[FormattableT]
300
- | None = None,
301
- **params: Unpack[Params],
302
- ) -> StreamResponse | StreamResponse[FormattableT]:
303
- """Generate an `llm.StreamResponse` by synchronously streaming from the Anthropic Messages API."""
304
- if _should_use_beta(model_id, format, tools):
305
- return self._beta_provider.stream(
306
- model_id=model_id,
307
- messages=messages,
308
- tools=tools,
309
- format=format,
310
- **params,
311
- )
312
-
313
- input_messages, resolved_format, kwargs = _utils.encode_request(
314
- model_id=model_id,
315
- messages=messages,
316
- tools=tools,
317
- format=format,
318
- params=params,
319
- )
320
- anthropic_stream = self.client.messages.stream(**kwargs)
321
- include_thoughts = _utils.get_include_thoughts(params)
322
- chunk_iterator = _utils.decode_stream(
323
- anthropic_stream, include_thoughts=include_thoughts
324
- )
325
- return StreamResponse(
326
- provider_id="anthropic",
327
- model_id=model_id,
328
- provider_model_name=model_name(model_id),
329
- params=params,
330
- tools=tools,
331
- input_messages=input_messages,
332
- chunk_iterator=chunk_iterator,
333
- format=resolved_format,
334
- )
335
-
336
- def _context_stream(
337
- self,
338
- *,
339
- ctx: Context[DepsT],
340
- model_id: AnthropicModelId,
341
- messages: Sequence[Message],
342
- tools: Sequence[Tool | ContextTool[DepsT]]
343
- | ContextToolkit[DepsT]
344
- | None = None,
345
- format: type[FormattableT]
346
- | Format[FormattableT]
347
- | OutputParser[FormattableT]
348
- | None = None,
349
- **params: Unpack[Params],
350
- ) -> ContextStreamResponse[DepsT] | ContextStreamResponse[DepsT, FormattableT]:
351
- """Generate an `llm.ContextStreamResponse` by synchronously streaming from the Anthropic Messages API."""
352
- if _should_use_beta(model_id, format, tools):
353
- return self._beta_provider.context_stream(
354
- ctx=ctx,
355
- model_id=model_id,
356
- messages=messages,
357
- tools=tools,
358
- format=format,
359
- **params,
360
- )
361
-
362
- input_messages, resolved_format, kwargs = _utils.encode_request(
363
- model_id=model_id,
364
- messages=messages,
365
- tools=tools,
366
- format=format,
367
- params=params,
368
- )
369
- anthropic_stream = self.client.messages.stream(**kwargs)
370
- include_thoughts = _utils.get_include_thoughts(params)
371
- chunk_iterator = _utils.decode_stream(
372
- anthropic_stream, include_thoughts=include_thoughts
373
- )
374
- return ContextStreamResponse(
375
- provider_id="anthropic",
376
- model_id=model_id,
377
- provider_model_name=model_name(model_id),
378
- params=params,
379
- tools=tools,
380
- input_messages=input_messages,
381
- chunk_iterator=chunk_iterator,
382
- format=resolved_format,
383
- )
384
-
385
- async def _stream_async(
386
- self,
387
- *,
388
- model_id: AnthropicModelId,
389
- messages: Sequence[Message],
390
- tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
391
- format: type[FormattableT]
392
- | Format[FormattableT]
393
- | OutputParser[FormattableT]
394
- | None = None,
395
- **params: Unpack[Params],
396
- ) -> AsyncStreamResponse | AsyncStreamResponse[FormattableT]:
397
- """Generate an `llm.AsyncStreamResponse` by asynchronously streaming from the Anthropic Messages API."""
398
- if _should_use_beta(model_id, format, tools):
399
- return await self._beta_provider.stream_async(
400
- model_id=model_id,
401
- messages=messages,
402
- tools=tools,
403
- format=format,
404
- **params,
405
- )
406
- input_messages, resolved_format, kwargs = _utils.encode_request(
407
- model_id=model_id,
408
- messages=messages,
409
- tools=tools,
410
- format=format,
411
- params=params,
412
- )
413
- anthropic_stream = self.async_client.messages.stream(**kwargs)
414
- include_thoughts = _utils.get_include_thoughts(params)
415
- chunk_iterator = _utils.decode_async_stream(
416
- anthropic_stream, include_thoughts=include_thoughts
417
- )
418
- return AsyncStreamResponse(
419
- provider_id="anthropic",
420
- model_id=model_id,
421
- provider_model_name=model_name(model_id),
422
- params=params,
423
- tools=tools,
424
- input_messages=input_messages,
425
- chunk_iterator=chunk_iterator,
426
- format=resolved_format,
427
- )
428
-
429
- async def _context_stream_async(
430
- self,
431
- *,
432
- ctx: Context[DepsT],
433
- model_id: AnthropicModelId,
434
- messages: Sequence[Message],
435
- tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
436
- | AsyncContextToolkit[DepsT]
437
- | None = None,
438
- format: type[FormattableT]
439
- | Format[FormattableT]
440
- | OutputParser[FormattableT]
441
- | None = None,
442
- **params: Unpack[Params],
443
- ) -> (
444
- AsyncContextStreamResponse[DepsT]
445
- | AsyncContextStreamResponse[DepsT, FormattableT]
446
- ):
447
- """Generate an `llm.AsyncContextStreamResponse` by asynchronously streaming from the Anthropic Messages API."""
448
- if _should_use_beta(model_id, format, tools):
449
- return await self._beta_provider.context_stream_async(
450
- ctx=ctx,
451
- model_id=model_id,
452
- messages=messages,
453
- tools=tools,
454
- format=format,
455
- **params,
456
- )
457
-
458
- input_messages, resolved_format, kwargs = _utils.encode_request(
459
- model_id=model_id,
460
- messages=messages,
461
- tools=tools,
462
- format=format,
463
- params=params,
464
- )
465
- anthropic_stream = self.async_client.messages.stream(**kwargs)
466
- include_thoughts = _utils.get_include_thoughts(params)
467
- chunk_iterator = _utils.decode_async_stream(
468
- anthropic_stream, include_thoughts=include_thoughts
469
- )
470
- return AsyncContextStreamResponse(
471
- provider_id="anthropic",
472
- model_id=model_id,
473
- provider_model_name=model_name(model_id),
474
- params=params,
475
- tools=tools,
476
- input_messages=input_messages,
477
- chunk_iterator=chunk_iterator,
478
- format=resolved_format,
479
- )
@@ -1,6 +0,0 @@
1
- """Google client implementation."""
2
-
3
- from .model_id import GoogleModelId
4
- from .provider import GoogleProvider
5
-
6
- __all__ = ["GoogleModelId", "GoogleProvider"]
@@ -1,50 +0,0 @@
1
- """Google error handling utilities."""
2
-
3
- from google.genai.errors import (
4
- ClientError as GoogleClientError,
5
- ServerError as GoogleServerError,
6
- )
7
-
8
- from ....exceptions import (
9
- APIError,
10
- AuthenticationError,
11
- BadRequestError,
12
- NotFoundError,
13
- PermissionError,
14
- ProviderError,
15
- RateLimitError,
16
- ServerError,
17
- )
18
- from ...base import ProviderErrorMap
19
-
20
-
21
- def map_google_error(e: Exception) -> type[ProviderError]:
22
- """Map Google error to appropriate Mirascope error type.
23
-
24
- Google only provides ClientError (4xx) and ServerError (5xx) with status codes,
25
- so we map based on status code and message patterns.
26
- """
27
- if not isinstance(e, GoogleClientError | GoogleServerError):
28
- return ProviderError
29
-
30
- # Authentication errors (401) or 400 with "API key not valid"
31
- if e.code == 401 or (e.code == 400 and "API key not valid" in str(e)):
32
- return AuthenticationError
33
- if e.code == 403:
34
- return PermissionError
35
- if e.code == 404:
36
- return NotFoundError
37
- if e.code == 429:
38
- return RateLimitError
39
- if e.code in (400, 422):
40
- return BadRequestError
41
- if isinstance(e, GoogleServerError) and e.code >= 500:
42
- return ServerError
43
- return APIError
44
-
45
-
46
- # Shared error mapping for Google provider
47
- GOOGLE_ERROR_MAP: ProviderErrorMap = {
48
- GoogleClientError: map_google_error,
49
- GoogleServerError: map_google_error,
50
- }
@@ -1,22 +0,0 @@
1
- """Google registered LLM models."""
2
-
3
- from typing import TypeAlias, get_args
4
-
5
- from .model_info import GoogleKnownModels
6
-
7
- GoogleModelId: TypeAlias = GoogleKnownModels | str
8
- """The Google model ids registered with Mirascope."""
9
-
10
- GOOGLE_KNOWN_MODELS: set[str] = set(get_args(GoogleKnownModels))
11
-
12
-
13
- def model_name(model_id: GoogleModelId) -> str:
14
- """Extract the google model name from a full model ID.
15
-
16
- Args:
17
- model_id: Full model ID (e.g. "google/gemini-2.5-flash")
18
-
19
- Returns:
20
- Provider-specific model ID (e.g. "gemini-2.5-flash")
21
- """
22
- return model_id.removeprefix("google/")
@@ -1,63 +0,0 @@
1
- """Google model information.
2
-
3
- This file is auto-generated by scripts/model_features/codegen_google.py
4
- Do not edit manually - run the codegen script to update."""
5
-
6
- from typing import Literal
7
-
8
- GoogleKnownModels = Literal[
9
- "google/gemini-2.0-flash",
10
- "google/gemini-2.0-flash-001",
11
- "google/gemini-2.0-flash-exp",
12
- "google/gemini-2.0-flash-exp-image-generation",
13
- "google/gemini-2.0-flash-lite",
14
- "google/gemini-2.0-flash-lite-001",
15
- "google/gemini-2.0-flash-lite-preview",
16
- "google/gemini-2.0-flash-lite-preview-02-05",
17
- "google/gemini-2.5-flash",
18
- "google/gemini-2.5-flash-image",
19
- "google/gemini-2.5-flash-image-preview",
20
- "google/gemini-2.5-flash-lite",
21
- "google/gemini-2.5-flash-lite-preview-09-2025",
22
- "google/gemini-2.5-flash-preview-09-2025",
23
- "google/gemini-2.5-pro",
24
- "google/gemini-3-flash-preview",
25
- "google/gemini-3-pro-image-preview",
26
- "google/gemini-3-pro-preview",
27
- "google/gemini-flash-latest",
28
- "google/gemini-flash-lite-latest",
29
- "google/gemini-pro-latest",
30
- "google/gemini-robotics-er-1.5-preview",
31
- "google/gemma-3-12b-it",
32
- "google/gemma-3-1b-it",
33
- "google/gemma-3-27b-it",
34
- "google/gemma-3-4b-it",
35
- "google/gemma-3n-e2b-it",
36
- "google/gemma-3n-e4b-it",
37
- "google/nano-banana-pro-preview",
38
- ]
39
- """Valid Google model IDs."""
40
-
41
-
42
- MODELS_WITHOUT_STRUCTURED_OUTPUT_AND_TOOLS_SUPPORT: set[str] = {
43
- "gemini-2.5-flash",
44
- "gemini-2.5-flash-image",
45
- "gemini-2.5-flash-image-preview",
46
- "gemini-2.5-flash-lite",
47
- "gemini-2.5-flash-lite-preview-09-2025",
48
- "gemini-2.5-flash-preview-09-2025",
49
- "gemini-2.5-pro",
50
- "gemini-3-pro-image-preview",
51
- "gemini-flash-latest",
52
- "gemini-flash-lite-latest",
53
- "gemini-pro-latest",
54
- "gemini-robotics-er-1.5-preview",
55
- "gemma-3-12b-it",
56
- "gemma-3-1b-it",
57
- "gemma-3-27b-it",
58
- "gemma-3-4b-it",
59
- "gemma-3n-e2b-it",
60
- "gemma-3n-e4b-it",
61
- "nano-banana-pro-preview",
62
- }
63
- """Models that do not support structured outputs when tools are present."""