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

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