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
@@ -14,24 +14,20 @@ from .tools import AsyncContextTool, AsyncTool, ContextTool, Tool
14
14
  class ToolDecorator:
15
15
  """Protocol for the tool decorator."""
16
16
 
17
- strict: bool | None = None
18
- """Whether to use strict tool calling, if supported by the provider.
19
-
20
- If set to None, then it will use the provider's default setting (usually the
21
- strictest possible).
22
- """
17
+ strict: bool
18
+ """Whether to use strict tool calling, if supported by the provider."""
23
19
 
24
20
  @overload
25
21
  def __call__( # pyright:ignore[reportOverlappingOverload]
26
22
  self, fn: ContextToolFn[DepsT, P, JsonableCovariantT]
27
- ) -> ContextTool[DepsT, JsonableCovariantT, P]:
23
+ ) -> ContextTool[DepsT, P, JsonableCovariantT]:
28
24
  """Call the decorator with a context function."""
29
25
  ...
30
26
 
31
27
  @overload
32
28
  def __call__( # pyright:ignore[reportOverlappingOverload]
33
29
  self, fn: AsyncContextToolFn[DepsT, P, JsonableCovariantT]
34
- ) -> AsyncContextTool[DepsT, JsonableCovariantT, P]:
30
+ ) -> AsyncContextTool[DepsT, P, JsonableCovariantT]:
35
31
  """Call the decorator with an async context function."""
36
32
  ...
37
33
 
@@ -56,8 +52,8 @@ class ToolDecorator:
56
52
  | ToolFn[P, JsonableCovariantT]
57
53
  | AsyncToolFn[P, JsonableCovariantT],
58
54
  ) -> (
59
- ContextTool[DepsT, JsonableCovariantT, P]
60
- | AsyncContextTool[DepsT, JsonableCovariantT, P]
55
+ ContextTool[DepsT, P, JsonableCovariantT]
56
+ | AsyncContextTool[DepsT, P, JsonableCovariantT]
61
57
  | Tool[P, JsonableCovariantT]
62
58
  | AsyncTool[P, JsonableCovariantT]
63
59
  ):
@@ -66,25 +62,21 @@ class ToolDecorator:
66
62
  is_async = _tool_utils.is_async_tool_fn(fn)
67
63
 
68
64
  if is_context and is_async:
69
- return AsyncContextTool[DepsT, JsonableCovariantT, P].from_function(
65
+ return AsyncContextTool[DepsT, P, JsonableCovariantT](
70
66
  fn, strict=self.strict
71
67
  )
72
68
  elif is_context:
73
- return ContextTool[DepsT, JsonableCovariantT, P].from_function(
74
- fn, strict=self.strict
75
- )
69
+ return ContextTool[DepsT, P, JsonableCovariantT](fn, strict=self.strict)
76
70
  elif is_async:
77
- return AsyncTool[P, JsonableCovariantT].from_function(
78
- fn, strict=self.strict
79
- )
71
+ return AsyncTool[P, JsonableCovariantT](fn, strict=self.strict)
80
72
  else:
81
- return Tool[P, JsonableCovariantT].from_function(fn, strict=self.strict)
73
+ return Tool[P, JsonableCovariantT](fn, strict=self.strict)
82
74
 
83
75
 
84
76
  @overload
85
77
  def tool( # pyright:ignore[reportOverlappingOverload]
86
78
  __fn: AsyncContextToolFn[DepsT, P, JsonableCovariantT],
87
- ) -> AsyncContextTool[DepsT, JsonableCovariantT, P]:
79
+ ) -> AsyncContextTool[DepsT, P, JsonableCovariantT]:
88
80
  """Overload for async context tool functions."""
89
81
  ...
90
82
 
@@ -92,7 +84,7 @@ def tool( # pyright:ignore[reportOverlappingOverload]
92
84
  @overload
93
85
  def tool( # pyright:ignore[reportOverlappingOverload]
94
86
  __fn: ContextToolFn[DepsT, P, JsonableCovariantT],
95
- ) -> ContextTool[DepsT, JsonableCovariantT, P]:
87
+ ) -> ContextTool[DepsT, P, JsonableCovariantT]:
96
88
  """Overload for context tool functions."""
97
89
  ...
98
90
 
@@ -110,7 +102,7 @@ def tool(__fn: ToolFn[P, JsonableCovariantT]) -> Tool[P, JsonableCovariantT]:
110
102
 
111
103
 
112
104
  @overload
113
- def tool(*, strict: bool | None = None) -> ToolDecorator:
105
+ def tool(*, strict: bool = False) -> ToolDecorator:
114
106
  """Overload for setting non-default arguments."""
115
107
  ...
116
108
 
@@ -122,10 +114,10 @@ def tool(
122
114
  | AsyncToolFn[P, JsonableCovariantT]
123
115
  | None = None,
124
116
  *,
125
- strict: bool | None = None,
117
+ strict: bool = False,
126
118
  ) -> (
127
- ContextTool[DepsT, JsonableCovariantT, P]
128
- | AsyncContextTool[DepsT, JsonableCovariantT, P]
119
+ ContextTool[DepsT, P, JsonableCovariantT]
120
+ | AsyncContextTool[DepsT, P, JsonableCovariantT]
129
121
  | Tool[P, JsonableCovariantT]
130
122
  | AsyncTool[P, JsonableCovariantT]
131
123
  | ToolDecorator
@@ -141,7 +133,6 @@ def tool(
141
133
 
142
134
  Args:
143
135
  strict: Whether the tool should use strict mode when supported by the model.
144
- If None, uses provider's default (usually as strict as possible).
145
136
 
146
137
  Returns:
147
138
  A decorator function that converts the function into a Tool or ContextTool.
@@ -52,7 +52,7 @@ class AsyncContextToolFn(Protocol[DepsT, P, JsonableCovariantT]):
52
52
  raise NotImplementedError()
53
53
 
54
54
 
55
- class KwargsCallable(Protocol[JsonableCovariantT]):
55
+ class _KwargsCallable(Protocol[JsonableCovariantT]):
56
56
  """Protocol for functions that can be called with `Any`-typed kwargs.
57
57
 
58
58
  Used internally to type-cast tool functions for compatibility with
@@ -62,7 +62,7 @@ class KwargsCallable(Protocol[JsonableCovariantT]):
62
62
  def __call__(self, **kwargs: dict[str, Any]) -> JsonableCovariantT: ...
63
63
 
64
64
 
65
- class AsyncKwargsCallable(Protocol[JsonableCovariantT]):
65
+ class _AsyncKwargsCallable(Protocol[JsonableCovariantT]):
66
66
  """Protocol for async functions that can be called with `Any`-typed kwargs.
67
67
 
68
68
  Used internally to type-cast async tool functions for compatibility with
@@ -72,7 +72,7 @@ class AsyncKwargsCallable(Protocol[JsonableCovariantT]):
72
72
  async def __call__(self, **kwargs: dict[str, Any]) -> JsonableCovariantT: ...
73
73
 
74
74
 
75
- class ContextKwargsCallable(Protocol[DepsT, JsonableCovariantT]):
75
+ class _ContextKwargsCallable(Protocol[DepsT, JsonableCovariantT]):
76
76
  """Protocol for context functions that can be called with `Any`-typed kwargs.
77
77
 
78
78
  Used internally to type-cast context tool functions for compatibility with
@@ -84,7 +84,7 @@ class ContextKwargsCallable(Protocol[DepsT, JsonableCovariantT]):
84
84
  ) -> JsonableCovariantT: ...
85
85
 
86
86
 
87
- class AsyncJsonKwargsCallable(Protocol[DepsT, JsonableCovariantT]):
87
+ class _AsyncJsonKwargsCallable(Protocol[DepsT, JsonableCovariantT]):
88
88
  """Protocol for async context functions that can be called with `Any`-typed kwargs.
89
89
 
90
90
  Used internally to type-cast async context tool functions for compatibility with
@@ -3,16 +3,13 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import inspect
6
+ from collections import namedtuple
6
7
  from dataclasses import dataclass
7
8
  from typing import (
8
9
  Annotated,
9
10
  Any,
10
11
  Generic,
11
- NamedTuple,
12
- TypeAlias,
13
- TypedDict,
14
12
  TypeVar,
15
- cast,
16
13
  get_args,
17
14
  get_origin,
18
15
  get_type_hints,
@@ -23,48 +20,16 @@ from pydantic import BaseModel, Field, create_model
23
20
  from pydantic.fields import FieldInfo
24
21
 
25
22
  from ..content import ToolCall
26
- from ..types import Jsonable
27
23
  from .protocols import AsyncContextToolFn, AsyncToolFn, ContextToolFn, ToolFn
28
24
 
29
- AnyToolFn: TypeAlias = (
30
- ToolFn[..., Jsonable]
31
- | AsyncToolFn[..., Jsonable]
32
- | ContextToolFn[Any, ..., Jsonable]
33
- | AsyncContextToolFn[Any, ..., Jsonable]
34
- )
35
-
36
25
  ToolFnT = TypeVar(
37
26
  "ToolFnT",
38
- bound=AnyToolFn,
27
+ bound=ToolFn | AsyncToolFn | ContextToolFn | AsyncContextToolFn,
39
28
  covariant=True,
40
29
  )
30
+ ToolSchemaT = TypeVar("ToolSchemaT", bound="ToolSchema")
41
31
 
42
- AnyToolSchema: TypeAlias = "ToolSchema[AnyToolFn]"
43
- ToolSchemaT = TypeVar("ToolSchemaT", bound=AnyToolSchema, covariant=True)
44
-
45
-
46
- ModelJsonSchema = TypedDict(
47
- "ModelJsonSchema",
48
- {
49
- "properties": dict[str, dict[str, Any]],
50
- "required": list[str],
51
- "$defs": dict[str, dict[str, Any]],
52
- },
53
- total=False,
54
- )
55
- """Type for Pydantic's model_json_schema() output.
56
-
57
- This TypedDict defines the structure of JSON schemas returned by Pydantic models,
58
- allowing us to avoid type casts when extracting schema components.
59
- """
60
-
61
-
62
- class DocstringArg(NamedTuple):
63
- """A parameter from a docstring."""
64
-
65
- name: str
66
- description: str
67
-
32
+ DocstringArg = namedtuple("DocstringArg", ["name", "description"])
68
33
 
69
34
  FORMAT_TOOL_NAME = "__mirascope_formatted_output_tool__"
70
35
  """Reserved name of the formatted output tool.
@@ -98,7 +63,7 @@ def _parse_docstring_params(docstring: str | None) -> ParsedDocstring:
98
63
  return ParsedDocstring(args=[])
99
64
 
100
65
  parsed = parse(docstring)
101
- args: list[DocstringArg] = []
66
+ args = []
102
67
 
103
68
  for param in parsed.params:
104
69
  if param.description:
@@ -157,12 +122,8 @@ class ToolSchema(Generic[ToolFnT]):
157
122
  it should **not be modified** after the ToolSchema is created.
158
123
  """
159
124
 
160
- strict: bool | None
161
- """Whether the tool should use strict mode when supported by the model.
162
-
163
- If set to None, will use the provider's default setting (usually as strict as
164
- possible).
165
- """
125
+ strict: bool
126
+ """Whether the tool should use strict mode when supported by the model."""
166
127
 
167
128
  def __hash__(self) -> int:
168
129
  if not hasattr(self, "_hash"):
@@ -179,36 +140,10 @@ class ToolSchema(Generic[ToolFnT]):
179
140
  def __init__(
180
141
  self,
181
142
  fn: ToolFnT,
182
- name: str,
183
- description: str,
184
- parameters: ToolParameterSchema,
185
143
  *,
186
- strict: bool | None = None,
187
- ) -> None:
188
- """Create a `ToolSchema` with the provided values.
189
-
190
- Args:
191
- fn: The function that implements the tool's functionality
192
- name: The name of the tool
193
- description: Description of what the tool does
194
- parameters: JSON Schema describing the parameters accepted by the tool
195
- strict: Whether the tool should use strict mode when supported.
196
- If None, uses provider's default (usually as strict as possible).
197
- """
198
- self.fn = fn
199
- self.name = name
200
- self.description = description
201
- self.parameters = parameters
202
- self.strict = strict
203
-
204
- @classmethod
205
- def from_function(
206
- cls,
207
- fn: AnyToolFn,
208
- *,
209
- strict: bool | None = None,
144
+ strict: bool = False,
210
145
  is_context_tool: bool = False,
211
- ) -> ToolSchema[AnyToolFn]:
146
+ ) -> None:
212
147
  """Create a `ToolSchema` by inspecting a function and its docstring.
213
148
 
214
149
  Uses Pydantic's create_model to dynamically build a model from the function
@@ -217,8 +152,7 @@ class ToolSchema(Generic[ToolFnT]):
217
152
 
218
153
  Args:
219
154
  fn: The function to extract schema from
220
- strict: Whether the tool should use strict mode when supported.
221
- If None, uses provider's default (usually as strict as possible).
155
+ strict: Whether the tool should use strict mode when supported
222
156
  is_context_tool: Whether this is a context tool (skips the context parameter)
223
157
 
224
158
  Returns:
@@ -236,7 +170,7 @@ class ToolSchema(Generic[ToolFnT]):
236
170
 
237
171
  param_descriptions = _parse_docstring_params(fn.__doc__)
238
172
 
239
- field_definitions: dict[str, tuple[Any, Any]] = {}
173
+ field_definitions = {}
240
174
  hints = get_type_hints(fn, include_extras=True)
241
175
 
242
176
  context_param_skipped = False
@@ -269,7 +203,7 @@ class ToolSchema(Generic[ToolFnT]):
269
203
  description=field_info.description,
270
204
  )
271
205
  else:
272
- docstring_description: str | None = None
206
+ docstring_description = None
273
207
  for arg in param_descriptions.args:
274
208
  if arg.name == param.name:
275
209
  docstring_description = arg.description
@@ -283,9 +217,9 @@ class ToolSchema(Generic[ToolFnT]):
283
217
 
284
218
  field_definitions[param.name] = (param_type, field_value)
285
219
 
286
- TempModel = create_model("TempModel", **cast(dict[str, Any], field_definitions))
220
+ TempModel = create_model("TempModel", **field_definitions)
287
221
 
288
- schema = cast(ModelJsonSchema, TempModel.model_json_schema())
222
+ schema = TempModel.model_json_schema()
289
223
 
290
224
  parameters = ToolParameterSchema(
291
225
  properties=schema.get("properties", {}),
@@ -295,13 +229,11 @@ class ToolSchema(Generic[ToolFnT]):
295
229
  if "$defs" in schema:
296
230
  parameters.defs = schema["$defs"]
297
231
 
298
- return cls(
299
- fn=cast(ToolFnT, fn),
300
- name=name,
301
- description=description,
302
- parameters=parameters,
303
- strict=strict,
304
- )
232
+ self.fn = fn
233
+ self.name = name
234
+ self.description = description
235
+ self.parameters = parameters
236
+ self.strict = strict
305
237
 
306
238
  def can_execute(self, tool_call: ToolCall) -> bool:
307
239
  """Check if a `ToolCall` can be executed by tools with this `ToolSchema`.
@@ -60,7 +60,7 @@ class BaseToolkit(Generic[ToolSchemaT]):
60
60
  """
61
61
  tool = self.tools_dict.get(tool_call.name, None)
62
62
  if not tool:
63
- raise ToolNotFoundError(tool_call.name)
63
+ raise ToolNotFoundError(f"Tool not found in toolkit: {tool_call.name}")
64
64
  return tool
65
65
 
66
66
 
@@ -75,14 +75,12 @@ class Toolkit(BaseToolkit[Tool]):
75
75
 
76
76
  Returns:
77
77
  The output from executing the `Tool`.
78
+
79
+ Raises:
80
+ ToolNotFoundError: If the requested tool is not found.
78
81
  """
79
- try:
80
- tool = self.get(tool_call)
81
- return tool.execute(tool_call)
82
- except ToolNotFoundError as e:
83
- return ToolOutput(
84
- id=tool_call.id, result=str(e), error=e, name=tool_call.name
85
- )
82
+ tool = self.get(tool_call)
83
+ return tool.execute(tool_call)
86
84
 
87
85
 
88
86
  class AsyncToolkit(BaseToolkit[AsyncTool]):
@@ -96,14 +94,12 @@ class AsyncToolkit(BaseToolkit[AsyncTool]):
96
94
 
97
95
  Returns:
98
96
  The output from executing the `AsyncTool`.
97
+
98
+ Raises:
99
+ ToolNotFoundError: If the requested tool is not found.
99
100
  """
100
- try:
101
- tool = self.get(tool_call)
102
- return await tool.execute(tool_call)
103
- except ToolNotFoundError as e:
104
- return ToolOutput(
105
- id=tool_call.id, result=str(e), error=e, name=tool_call.name
106
- )
101
+ tool = self.get(tool_call)
102
+ return await tool.execute(tool_call)
107
103
 
108
104
 
109
105
  class ContextToolkit(BaseToolkit[Tool | ContextTool[DepsT]], Generic[DepsT]):
@@ -118,17 +114,15 @@ class ContextToolkit(BaseToolkit[Tool | ContextTool[DepsT]], Generic[DepsT]):
118
114
 
119
115
  Returns:
120
116
  The output from executing the `ContextTool`.
117
+
118
+ Raises:
119
+ ToolNotFoundError: If the requested tool is not found.
121
120
  """
122
- try:
123
- tool = self.get(tool_call)
124
- if isinstance(tool, ContextTool):
125
- return tool.execute(ctx, tool_call)
126
- else:
127
- return tool.execute(tool_call)
128
- except ToolNotFoundError as e:
129
- return ToolOutput(
130
- id=tool_call.id, result=str(e), error=e, name=tool_call.name
131
- )
121
+ tool = self.get(tool_call)
122
+ if isinstance(tool, ContextTool):
123
+ return tool.execute(ctx, tool_call)
124
+ else:
125
+ return tool.execute(tool_call)
132
126
 
133
127
 
134
128
  class AsyncContextToolkit(
@@ -147,14 +141,12 @@ class AsyncContextToolkit(
147
141
 
148
142
  Returns:
149
143
  The output from executing the `AsyncContextTool`.
144
+
145
+ Raises:
146
+ ToolNotFoundError: If the requested tool is not found.
150
147
  """
151
- try:
152
- tool = self.get(tool_call)
153
- if isinstance(tool, AsyncContextTool):
154
- return await tool.execute(ctx, tool_call)
155
- else:
156
- return await tool.execute(tool_call)
157
- except ToolNotFoundError as e:
158
- return ToolOutput(
159
- id=tool_call.id, result=str(e), error=e, name=tool_call.name
160
- )
148
+ tool = self.get(tool_call)
149
+ if isinstance(tool, AsyncContextTool):
150
+ return await tool.execute(ctx, tool_call)
151
+ else:
152
+ return await tool.execute(tool_call)