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,418 +0,0 @@
1
- """Shared Anthropic encoding utilities."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- from collections.abc import Sequence
7
- from functools import lru_cache
8
- from typing import TYPE_CHECKING, Any, Literal, TypedDict, cast
9
- from typing_extensions import Required
10
-
11
- from anthropic import Omit, types as anthropic_types
12
-
13
- from ....content import ContentPart, ImageMimeType
14
- from ....exceptions import FeatureNotSupportedError
15
- from ....formatting import (
16
- Format,
17
- FormattableT,
18
- OutputParser,
19
- resolve_format,
20
- )
21
- from ....messages import AssistantMessage, Message, UserMessage
22
- from ....tools import FORMAT_TOOL_NAME, AnyToolSchema, BaseToolkit
23
- from ...base import _utils as _base_utils
24
- from ..model_id import AnthropicModelId, model_name
25
-
26
- if TYPE_CHECKING:
27
- from ....models import Params, ThinkingLevel
28
-
29
- DEFAULT_MAX_TOKENS = 16000
30
- # TODO: Change DEFAULT_FORMAT_MODE to strict when strict is no longer a beta feature.
31
- DEFAULT_FORMAT_MODE = "tool"
32
-
33
- # Thinking level to a float multiplier % of max tokens
34
- THINKING_LEVEL_TO_BUDGET_MULTIPLIER: dict[ThinkingLevel, float] = {
35
- "minimal": 0, # Will become 1024 (actual minimal value)
36
- "low": 0.2,
37
- "medium": 0.4,
38
- "high": 0.6,
39
- "max": 0.8,
40
- }
41
-
42
- AnthropicImageMimeType = Literal["image/jpeg", "image/png", "image/gif", "image/webp"]
43
-
44
-
45
- def encode_image_mime_type(mime_type: ImageMimeType) -> AnthropicImageMimeType:
46
- """Convert an ImageMimeType into anthropic supported mime type."""
47
- if mime_type in ("image/jpeg", "image/png", "image/gif", "image/webp"):
48
- return mime_type
49
- raise FeatureNotSupportedError(
50
- feature=f"Image with mime_type: {mime_type}", provider_id="anthropic"
51
- ) # pragma: no cover
52
-
53
-
54
- def compute_thinking_budget(
55
- level: ThinkingLevel,
56
- max_tokens: int,
57
- ) -> int:
58
- """Compute Anthropic token budget from ThinkingConfig level.
59
-
60
- Args:
61
- level: The thinking level from ThinkingConfig
62
- max_tokens: The max_tokens value for the request
63
-
64
- Returns:
65
- Token budget for thinking (0 to disable, positive for budget)
66
- """
67
-
68
- if level == "none":
69
- return 0
70
- elif level == "default":
71
- return -1 # Do not set thinking, leave to provider default
72
-
73
- multiplier: float = THINKING_LEVEL_TO_BUDGET_MULTIPLIER.get(level, 0.4)
74
- budget = int(multiplier * max_tokens)
75
- return max(1024, budget) # Always return at least 1024, minimum allowed budget
76
-
77
-
78
- class ProcessedParams(TypedDict, total=False):
79
- """Common parameters processed from Params."""
80
-
81
- temperature: float
82
- max_tokens: int
83
- top_p: float
84
- top_k: int
85
- stop_sequences: list[str]
86
- thinking: dict[str, Any]
87
- encode_thoughts_as_text: bool
88
-
89
-
90
- def process_params(params: Params, default_max_tokens: int) -> ProcessedParams:
91
- """Process common Anthropic parameters from Params.
92
-
93
- Returns a dict with processed parameters that can be merged into kwargs.
94
- """
95
- result: ProcessedParams = {
96
- "max_tokens": default_max_tokens,
97
- "encode_thoughts_as_text": False,
98
- }
99
-
100
- with _base_utils.ensure_all_params_accessed(
101
- params=params, provider_id="anthropic", unsupported_params=["seed"]
102
- ) as param_accessor:
103
- if param_accessor.temperature is not None:
104
- result["temperature"] = param_accessor.temperature
105
- if param_accessor.max_tokens is not None:
106
- result["max_tokens"] = param_accessor.max_tokens
107
- if param_accessor.top_p is not None:
108
- result["top_p"] = param_accessor.top_p
109
- if param_accessor.top_k is not None:
110
- result["top_k"] = param_accessor.top_k
111
- if param_accessor.stop_sequences is not None:
112
- result["stop_sequences"] = param_accessor.stop_sequences
113
- if param_accessor.thinking is not None:
114
- thinking_config = param_accessor.thinking
115
- level = thinking_config.get("level")
116
-
117
- # Compute token budget from level
118
- budget_tokens = compute_thinking_budget(level, result["max_tokens"])
119
- if budget_tokens == 0:
120
- result["thinking"] = {"type": "disabled"}
121
- elif budget_tokens > 0:
122
- result["thinking"] = {"type": "enabled", "budget_tokens": budget_tokens}
123
- else:
124
- # budget is -1, do not set thinking at all.
125
- pass
126
-
127
- # Handle encode_thoughts_as_text from ThinkingConfig
128
- if thinking_config.get("encode_thoughts_as_text"):
129
- result["encode_thoughts_as_text"] = True
130
-
131
- return result
132
-
133
-
134
- class MessageCreateKwargs(TypedDict, total=False):
135
- """Kwargs for Anthropic Message.create method."""
136
-
137
- model: Required[str]
138
- max_tokens: Required[int]
139
- messages: Sequence[anthropic_types.MessageParam]
140
- system: Sequence[anthropic_types.TextBlockParam] | Omit
141
- tools: Sequence[anthropic_types.ToolParam] | Omit
142
- tool_choice: anthropic_types.ToolChoiceParam | Omit
143
- temperature: float | Omit
144
- top_p: float | Omit
145
- top_k: int | Omit
146
- stop_sequences: list[str] | Omit
147
- thinking: anthropic_types.ThinkingConfigParam | Omit
148
-
149
-
150
- def encode_content(
151
- content: Sequence[ContentPart],
152
- encode_thoughts: bool,
153
- add_cache_control: bool,
154
- ) -> str | Sequence[anthropic_types.ContentBlockParam]:
155
- """Convert mirascope content to Anthropic content format."""
156
-
157
- if len(content) == 1 and content[0].type == "text":
158
- if not content[0].text:
159
- raise FeatureNotSupportedError(
160
- "empty message content",
161
- "anthropic",
162
- message="Anthropic does not support empty message content.",
163
- )
164
- if add_cache_control:
165
- return [
166
- anthropic_types.TextBlockParam(
167
- type="text",
168
- text=content[0].text,
169
- cache_control={"type": "ephemeral"},
170
- )
171
- ]
172
- return content[0].text
173
-
174
- blocks: list[anthropic_types.ContentBlockParam] = []
175
-
176
- # Find the last cacheable content part (text, image, tool_result, or tool_call)
177
- last_cacheable_index = -1
178
- if add_cache_control:
179
- for i in range(len(content) - 1, -1, -1):
180
- part = content[i]
181
- if part.type in ("text", "image", "tool_output", "tool_call"):
182
- if part.type == "text" and not part.text: # pragma: no cover
183
- continue # Skip empty text
184
- last_cacheable_index = i
185
- break
186
-
187
- for i, part in enumerate(content):
188
- should_add_cache = add_cache_control and i == last_cacheable_index
189
-
190
- if part.type == "text":
191
- if part.text:
192
- blocks.append(
193
- anthropic_types.TextBlockParam(
194
- type="text",
195
- text=part.text,
196
- cache_control={"type": "ephemeral"}
197
- if should_add_cache
198
- else None,
199
- )
200
- )
201
- elif part.type == "image":
202
- source: (
203
- anthropic_types.Base64ImageSourceParam
204
- | anthropic_types.URLImageSourceParam
205
- )
206
- if part.source.type == "base64_image_source":
207
- source = anthropic_types.Base64ImageSourceParam(
208
- type="base64",
209
- media_type=encode_image_mime_type(part.source.mime_type),
210
- data=part.source.data,
211
- )
212
- else: # url_image_source
213
- source = anthropic_types.URLImageSourceParam(
214
- type="url",
215
- url=part.source.url,
216
- )
217
- blocks.append(
218
- anthropic_types.ImageBlockParam(
219
- type="image",
220
- source=source,
221
- cache_control={"type": "ephemeral"} if should_add_cache else None,
222
- )
223
- )
224
- elif part.type == "audio":
225
- raise FeatureNotSupportedError(
226
- "audio input",
227
- "anthropic",
228
- message="Anthropic does not support audio inputs.",
229
- )
230
- elif part.type == "tool_output":
231
- blocks.append(
232
- anthropic_types.ToolResultBlockParam(
233
- type="tool_result",
234
- tool_use_id=part.id,
235
- content=str(part.result),
236
- cache_control={"type": "ephemeral"} if should_add_cache else None,
237
- )
238
- )
239
- elif part.type == "tool_call":
240
- blocks.append(
241
- anthropic_types.ToolUseBlockParam(
242
- type="tool_use",
243
- id=part.id,
244
- name=part.name,
245
- input=json.loads(part.args),
246
- cache_control={"type": "ephemeral"} if should_add_cache else None,
247
- )
248
- )
249
- elif part.type == "thought":
250
- if encode_thoughts:
251
- blocks.append(
252
- anthropic_types.TextBlockParam(
253
- type="text", text="**Thinking:** " + part.thought
254
- )
255
- )
256
- else:
257
- raise NotImplementedError(f"Unsupported content type: {part.type}")
258
-
259
- if not blocks:
260
- raise FeatureNotSupportedError(
261
- "empty message content",
262
- "anthropic",
263
- message="Anthropic does not support empty message content.",
264
- )
265
-
266
- return blocks
267
-
268
-
269
- def _encode_message(
270
- message: UserMessage | AssistantMessage,
271
- model_id: AnthropicModelId,
272
- encode_thoughts: bool,
273
- add_cache_control: bool = False,
274
- ) -> anthropic_types.MessageParam:
275
- """Convert user or assistant Message to Anthropic MessageParam format.
276
-
277
- Args:
278
- message: The message to encode
279
- model_id: The Anthropic model ID
280
- encode_thoughts: Whether to encode thought blocks as text
281
- add_cache_control: Whether to add cache_control to the last content block
282
- """
283
- if (
284
- message.role == "assistant"
285
- and message.provider_id == "anthropic"
286
- and message.model_id == model_id
287
- and message.raw_message
288
- and not encode_thoughts
289
- and not add_cache_control
290
- ):
291
- return cast(anthropic_types.MessageParam, message.raw_message)
292
-
293
- content = encode_content(message.content, encode_thoughts, add_cache_control)
294
-
295
- return {
296
- "role": message.role,
297
- "content": content,
298
- }
299
-
300
-
301
- def _encode_messages(
302
- messages: Sequence[UserMessage | AssistantMessage],
303
- model_id: AnthropicModelId,
304
- encode_thoughts_as_text: bool,
305
- ) -> Sequence[anthropic_types.MessageParam]:
306
- """Encode messages and add cache control for multi-turn conversations.
307
-
308
- If the conversation contains assistant messages (indicating multi-turn),
309
- adds cache_control to the last content block of the last message.
310
- """
311
- # Detect multi-turn conversations by checking for assistant messages
312
- has_assistant_message = any(msg.role == "assistant" for msg in messages)
313
-
314
- # Encode messages, adding cache_control to the last message if multi-turn
315
- encoded_messages: list[anthropic_types.MessageParam] = []
316
- for i, message in enumerate(messages):
317
- is_last = i == len(messages) - 1
318
- add_cache = has_assistant_message and is_last
319
- encoded_messages.append(
320
- _encode_message(message, model_id, encode_thoughts_as_text, add_cache)
321
- )
322
- return encoded_messages
323
-
324
-
325
- @lru_cache(maxsize=128)
326
- def convert_tool_to_tool_param(tool: AnyToolSchema) -> anthropic_types.ToolParam:
327
- """Convert a single Mirascope tool to Anthropic tool format with caching."""
328
- schema_dict = tool.parameters.model_dump(by_alias=True, exclude_none=True)
329
- schema_dict["type"] = "object"
330
- return anthropic_types.ToolParam(
331
- name=tool.name,
332
- description=tool.description,
333
- input_schema=schema_dict,
334
- )
335
-
336
-
337
- def encode_request(
338
- *,
339
- model_id: AnthropicModelId,
340
- messages: Sequence[Message],
341
- tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
342
- format: type[FormattableT]
343
- | Format[FormattableT]
344
- | OutputParser[FormattableT]
345
- | None,
346
- params: Params,
347
- ) -> tuple[Sequence[Message], Format[FormattableT] | None, MessageCreateKwargs]:
348
- """Prepares a request for the Anthropic messages.create method."""
349
-
350
- processed = process_params(params, DEFAULT_MAX_TOKENS)
351
- encode_thoughts_as_text = processed.pop("encode_thoughts_as_text", False)
352
- max_tokens = processed.pop("max_tokens", DEFAULT_MAX_TOKENS)
353
-
354
- kwargs: MessageCreateKwargs = MessageCreateKwargs(
355
- {"model": model_name(model_id), "max_tokens": max_tokens, **processed}
356
- )
357
-
358
- tools = tools.tools if isinstance(tools, BaseToolkit) else tools or []
359
-
360
- # Check for strict tools - the non-beta API doesn't support them
361
- if _base_utils.has_strict_tools(tools):
362
- raise FeatureNotSupportedError(
363
- feature="strict tools",
364
- provider_id="anthropic",
365
- model_id=model_id,
366
- message="Anthropic provider does not support strict tools. Try the beta provider.",
367
- )
368
-
369
- anthropic_tools = [convert_tool_to_tool_param(tool) for tool in tools]
370
- format = resolve_format(format, default_mode=DEFAULT_FORMAT_MODE)
371
- if format is not None:
372
- if format.mode == "strict":
373
- raise FeatureNotSupportedError(
374
- feature="formatting_mode:strict",
375
- provider_id="anthropic",
376
- model_id=model_id,
377
- )
378
- if format.mode == "tool":
379
- format_tool_schema = format.create_tool_schema()
380
- anthropic_tools.append(convert_tool_to_tool_param(format_tool_schema))
381
- if tools:
382
- kwargs["tool_choice"] = {"type": "any"}
383
- else:
384
- kwargs["tool_choice"] = {
385
- "type": "tool",
386
- "name": FORMAT_TOOL_NAME,
387
- "disable_parallel_tool_use": True,
388
- }
389
-
390
- if format.formatting_instructions:
391
- messages = _base_utils.add_system_instructions(
392
- messages, format.formatting_instructions
393
- )
394
-
395
- if anthropic_tools:
396
- # Add cache control to the last tool for prompt caching
397
- last_tool = anthropic_tools[-1]
398
- last_tool["cache_control"] = {"type": "ephemeral"}
399
- kwargs["tools"] = anthropic_tools
400
-
401
- system_message_content, remaining_messages = _base_utils.extract_system_message(
402
- messages
403
- )
404
-
405
- kwargs["messages"] = _encode_messages(
406
- remaining_messages, model_id, encode_thoughts_as_text
407
- )
408
-
409
- if system_message_content:
410
- kwargs["system"] = [
411
- anthropic_types.TextBlockParam(
412
- type="text",
413
- text=system_message_content,
414
- cache_control={"type": "ephemeral"},
415
- )
416
- ]
417
-
418
- return messages, format, kwargs
@@ -1,46 +0,0 @@
1
- """Anthropic error handling utilities."""
2
-
3
- from anthropic import (
4
- AnthropicError,
5
- APIConnectionError as AnthropicAPIConnectionError,
6
- APIResponseValidationError as AnthropicAPIResponseValidationError,
7
- APITimeoutError as AnthropicAPITimeoutError,
8
- AuthenticationError as AnthropicAuthenticationError,
9
- BadRequestError as AnthropicBadRequestError,
10
- ConflictError as AnthropicConflictError,
11
- InternalServerError as AnthropicInternalServerError,
12
- NotFoundError as AnthropicNotFoundError,
13
- PermissionDeniedError as AnthropicPermissionDeniedError,
14
- RateLimitError as AnthropicRateLimitError,
15
- UnprocessableEntityError as AnthropicUnprocessableEntityError,
16
- )
17
-
18
- from ....exceptions import (
19
- AuthenticationError,
20
- BadRequestError,
21
- ConnectionError,
22
- NotFoundError,
23
- PermissionError,
24
- ProviderError,
25
- RateLimitError,
26
- ResponseValidationError,
27
- ServerError,
28
- TimeoutError,
29
- )
30
- from ...base import ProviderErrorMap
31
-
32
- # Shared error mapping used by both AnthropicProvider and AnthropicBetaProvider
33
- ANTHROPIC_ERROR_MAP: ProviderErrorMap = {
34
- AnthropicAuthenticationError: AuthenticationError,
35
- AnthropicPermissionDeniedError: PermissionError,
36
- AnthropicBadRequestError: BadRequestError,
37
- AnthropicUnprocessableEntityError: BadRequestError,
38
- AnthropicNotFoundError: NotFoundError,
39
- AnthropicConflictError: BadRequestError,
40
- AnthropicRateLimitError: RateLimitError,
41
- AnthropicInternalServerError: ServerError,
42
- AnthropicAPITimeoutError: TimeoutError,
43
- AnthropicAPIConnectionError: ConnectionError,
44
- AnthropicAPIResponseValidationError: ResponseValidationError,
45
- AnthropicError: ProviderError, # Catch-all for unknown Anthropic errors
46
- }