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

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