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
mirascope/llm/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- """LLM abstractions that aren't obstructions.
1
+ """The `llm` module for writing provider-agnostic LLM Generations.
2
2
 
3
3
  This module provides a unified interface for interacting with different LLM providers,
4
4
  including messages, tools, response formatting, and streaming. It allows you to write
@@ -8,25 +8,22 @@ code that works with multiple LLM providers without changing your application lo
8
8
  # TODO: Across the API, audit docstrings to ensure they are compliant Google-style docstrings
9
9
  # (Write some tooling to ensure this happens consistently + in CI)
10
10
 
11
- from contextlib import suppress
12
-
13
11
  from . import (
14
12
  calls,
13
+ clients,
15
14
  content,
16
15
  exceptions,
17
16
  formatting,
17
+ mcp,
18
18
  messages,
19
19
  models,
20
20
  prompts,
21
- providers,
22
21
  responses,
23
22
  tools,
24
23
  types,
25
24
  )
26
-
27
- with suppress(ImportError):
28
- from . import mcp
29
- from .calls import AsyncCall, AsyncContextCall, Call, CallDecorator, ContextCall, call
25
+ from .calls import call
26
+ from .clients import ModelId, Params, Provider, client, get_client
30
27
  from .content import (
31
28
  AssistantContentChunk,
32
29
  AssistantContentPart,
@@ -51,37 +48,23 @@ from .content import (
51
48
  URLImageSource,
52
49
  UserContentPart,
53
50
  )
54
- from .context import Context, DepsT
51
+ from .context import Context
55
52
  from .exceptions import (
56
53
  APIError,
57
54
  AuthenticationError,
58
55
  BadRequestError,
59
56
  ConnectionError,
60
- Error,
61
57
  FeatureNotSupportedError,
62
- MissingAPIKeyError,
63
- NoRegisteredProviderError,
58
+ FormattingModeNotSupportedError,
59
+ MirascopeError,
64
60
  NotFoundError,
65
- ParseError,
66
61
  PermissionError,
67
- ProviderError,
68
62
  RateLimitError,
69
- ResponseValidationError,
70
63
  ServerError,
71
64
  TimeoutError,
72
- ToolError,
73
- ToolExecutionError,
74
65
  ToolNotFoundError,
75
66
  )
76
- from .formatting import (
77
- Format,
78
- FormattableT,
79
- FormattingMode,
80
- OutputParser,
81
- Partial,
82
- format,
83
- output_parser,
84
- )
67
+ from .formatting import Format, FormattingMode, Partial, format
85
68
  from .messages import (
86
69
  AssistantContent,
87
70
  AssistantMessage,
@@ -91,32 +74,9 @@ from .messages import (
91
74
  UserContent,
92
75
  UserMessage,
93
76
  )
94
- from .models import (
95
- Model,
96
- Params,
97
- ThinkingConfig,
98
- ThinkingLevel,
99
- model,
100
- model_from_context,
101
- use_model,
102
- )
103
- from .prompts import (
104
- AsyncContextPrompt,
105
- AsyncPrompt,
106
- ContextPrompt,
107
- Prompt,
108
- PromptDecorator,
109
- prompt,
110
- )
111
- from .providers import (
112
- ModelId,
113
- Provider,
114
- ProviderId,
115
- register_provider,
116
- reset_provider_registry,
117
- )
77
+ from .models import Model, model, use_model
78
+ from .prompts import prompt
118
79
  from .responses import (
119
- AnyResponse,
120
80
  AsyncChunkIterator,
121
81
  AsyncContextResponse,
122
82
  AsyncContextStreamResponse,
@@ -132,52 +92,36 @@ from .responses import (
132
92
  FinishReason,
133
93
  RawMessageChunk,
134
94
  Response,
135
- RootResponse,
136
95
  Stream,
137
96
  StreamResponse,
138
97
  StreamResponseChunk,
139
98
  TextStream,
140
99
  ThoughtStream,
141
100
  ToolCallStream,
142
- Usage,
143
- UsageDeltaChunk,
144
101
  )
145
102
  from .tools import (
146
- AnyToolFn,
147
- AnyToolSchema,
148
103
  AsyncContextTool,
149
104
  AsyncContextToolkit,
150
105
  AsyncTool,
151
106
  AsyncToolkit,
152
- BaseToolkit,
153
107
  ContextTool,
154
108
  ContextToolkit,
155
109
  Tool,
156
110
  Toolkit,
157
- ToolkitT,
158
- ToolSchema,
159
111
  tool,
160
112
  )
161
- from .types import Jsonable
162
113
 
163
114
  __all__ = [
164
115
  "APIError",
165
- "AnyResponse",
166
- "AnyToolFn",
167
- "AnyToolSchema",
168
116
  "AssistantContent",
169
117
  "AssistantContentChunk",
170
118
  "AssistantContentPart",
171
119
  "AssistantMessage",
172
- "AsyncCall",
173
120
  "AsyncChunkIterator",
174
- "AsyncContextCall",
175
- "AsyncContextPrompt",
176
121
  "AsyncContextResponse",
177
122
  "AsyncContextStreamResponse",
178
123
  "AsyncContextTool",
179
124
  "AsyncContextToolkit",
180
- "AsyncPrompt",
181
125
  "AsyncResponse",
182
126
  "AsyncStream",
183
127
  "AsyncStreamResponse",
@@ -191,49 +135,30 @@ __all__ = [
191
135
  "BadRequestError",
192
136
  "Base64AudioSource",
193
137
  "Base64ImageSource",
194
- "BaseToolkit",
195
- "Call",
196
- "CallDecorator",
197
138
  "ChunkIterator",
198
139
  "ConnectionError",
199
140
  "Context",
200
- "ContextCall",
201
- "ContextPrompt",
202
141
  "ContextResponse",
203
142
  "ContextStreamResponse",
204
143
  "ContextTool",
205
144
  "ContextToolkit",
206
- "DepsT",
207
145
  "Document",
208
- "Error",
209
146
  "FeatureNotSupportedError",
210
147
  "FinishReason",
211
148
  "Format",
212
- "FormattableT",
213
149
  "FormattingMode",
150
+ "FormattingModeNotSupportedError",
214
151
  "Image",
215
- "Jsonable",
216
152
  "Message",
217
- "MissingAPIKeyError",
153
+ "MirascopeError",
218
154
  "Model",
219
- "ModelId",
220
- "NoRegisteredProviderError",
221
155
  "NotFoundError",
222
- "OutputParser",
223
156
  "Params",
224
- "ParseError",
225
157
  "Partial",
226
158
  "PermissionError",
227
- "Prompt",
228
- "PromptDecorator",
229
- "Provider",
230
- "ProviderError",
231
- "ProviderId",
232
159
  "RateLimitError",
233
160
  "RawMessageChunk",
234
161
  "Response",
235
- "ResponseValidationError",
236
- "RootResponse",
237
162
  "ServerError",
238
163
  "Stream",
239
164
  "StreamResponse",
@@ -245,8 +170,6 @@ __all__ = [
245
170
  "TextEndChunk",
246
171
  "TextStartChunk",
247
172
  "TextStream",
248
- "ThinkingConfig",
249
- "ThinkingLevel",
250
173
  "Thought",
251
174
  "ThoughtChunk",
252
175
  "ThoughtEndChunk",
@@ -259,36 +182,28 @@ __all__ = [
259
182
  "ToolCallEndChunk",
260
183
  "ToolCallStartChunk",
261
184
  "ToolCallStream",
262
- "ToolError",
263
- "ToolExecutionError",
264
185
  "ToolNotFoundError",
265
186
  "ToolOutput",
266
- "ToolSchema",
267
187
  "Toolkit",
268
- "ToolkitT",
269
188
  "URLImageSource",
270
- "Usage",
271
- "UsageDeltaChunk",
272
189
  "UserContent",
273
190
  "UserContentPart",
274
191
  "UserMessage",
275
192
  "call",
276
193
  "calls",
194
+ "client",
195
+ "clients",
277
196
  "content",
278
197
  "exceptions",
279
198
  "format",
280
199
  "formatting",
200
+ "get_client",
281
201
  "mcp",
282
202
  "messages",
283
203
  "model",
284
- "model_from_context",
285
204
  "models",
286
- "output_parser",
287
205
  "prompt",
288
206
  "prompts",
289
- "providers",
290
- "register_provider",
291
- "reset_provider_registry",
292
207
  "responses",
293
208
  "tool",
294
209
  "tools",
@@ -0,0 +1,15 @@
1
+ """The Agents module for creating and managing LLM agents."""
2
+
3
+ from .agent import Agent, AsyncAgent, BaseAgent
4
+ from .agent_template import AgentTemplate, AsyncAgentTemplate
5
+ from .decorator import AgentDecorator, agent
6
+
7
+ __all__ = [
8
+ "Agent",
9
+ "AgentDecorator",
10
+ "AgentTemplate",
11
+ "AsyncAgent",
12
+ "AsyncAgentTemplate",
13
+ "BaseAgent",
14
+ "agent",
15
+ ]
@@ -0,0 +1,97 @@
1
+ """The `Agent` class for LLM agents."""
2
+
3
+ from abc import ABC
4
+ from collections.abc import Sequence
5
+ from dataclasses import dataclass
6
+ from typing import Generic
7
+
8
+ from ..context import Context, DepsT
9
+ from ..formatting import FormattableT
10
+ from ..messages import UserContent
11
+ from ..models import Model
12
+ from ..responses import AsyncResponse, AsyncStreamResponse, Response, StreamResponse
13
+ from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
14
+
15
+
16
+ @dataclass
17
+ class BaseAgent(Generic[DepsT, FormattableT], ABC):
18
+ """Agent class for generating responses using LLMs with tools."""
19
+
20
+ ctx: Context[DepsT]
21
+ """The context for the agent, such as the history of messages."""
22
+
23
+ format: type[FormattableT] | None
24
+ """The response format for the generated response."""
25
+
26
+ model: Model
27
+ """The default model the agent will use if not specified through context."""
28
+
29
+
30
+ @dataclass
31
+ class Agent(BaseAgent[DepsT, FormattableT]):
32
+ """Agent class for generating responses using LLMs with tools."""
33
+
34
+ tools: Sequence[Tool | ContextTool[DepsT]] | None
35
+ """The tools available to the agent, if any."""
36
+
37
+ def __call__(
38
+ self,
39
+ content: UserContent,
40
+ *,
41
+ ctx: Context[DepsT] | None = None,
42
+ ) -> Response[FormattableT]:
43
+ """Generates a response by running the agent loop."""
44
+ raise NotImplementedError()
45
+
46
+ def call(
47
+ self,
48
+ content: UserContent,
49
+ *,
50
+ ctx: Context[DepsT] | None = None,
51
+ ) -> Response[FormattableT]:
52
+ """Generates a response by running the agent loop."""
53
+ raise NotImplementedError()
54
+
55
+ def stream(
56
+ self,
57
+ content: UserContent,
58
+ *,
59
+ ctx: Context[DepsT] | None = None,
60
+ ) -> StreamResponse[FormattableT]:
61
+ """Streams the response generated by running the agent loop."""
62
+ raise NotImplementedError()
63
+
64
+
65
+ @dataclass
66
+ class AsyncAgent(BaseAgent[DepsT, FormattableT]):
67
+ """Asynchronous agent class for generating responses using LLMs with tools."""
68
+
69
+ tools: Sequence[AsyncTool | AsyncContextTool[DepsT]] | None
70
+ """The tools available to the agent, if any."""
71
+
72
+ async def __call__(
73
+ self,
74
+ content: UserContent,
75
+ *,
76
+ ctx: Context[DepsT] | None = None,
77
+ ) -> AsyncResponse[FormattableT]:
78
+ """Generates a response by running the agent loop asynchronously."""
79
+ raise NotImplementedError()
80
+
81
+ async def call(
82
+ self,
83
+ content: UserContent,
84
+ *,
85
+ ctx: Context[DepsT] | None = None,
86
+ ) -> AsyncResponse[FormattableT]:
87
+ """Generates a response by running the agent loop asynchronously."""
88
+ raise NotImplementedError()
89
+
90
+ async def stream(
91
+ self,
92
+ content: UserContent,
93
+ *,
94
+ ctx: Context[DepsT] | None = None,
95
+ ) -> AsyncStreamResponse[FormattableT]:
96
+ """Streams the response generated by running the agent loop asynchronously."""
97
+ raise NotImplementedError()
@@ -0,0 +1,45 @@
1
+ from typing import Generic, overload
2
+
3
+ from ..context import DepsT
4
+ from ..formatting import FormattableT
5
+ from .agent import Agent, AsyncAgent
6
+
7
+
8
+ class AgentTemplate(Generic[DepsT, FormattableT]):
9
+ @overload
10
+ def __call__(
11
+ self: "AgentTemplate[None, FormattableT]",
12
+ ) -> Agent[None, FormattableT]:
13
+ """Create an Agent with no deps"""
14
+
15
+ @overload
16
+ def __call__(
17
+ self: "AgentTemplate[DepsT, FormattableT]", deps: DepsT
18
+ ) -> Agent[DepsT, FormattableT]:
19
+ """Create an Agent with deps"""
20
+
21
+ def __call__(
22
+ self: "AgentTemplate[None, FormattableT] | AgentTemplate[DepsT, FormattableT]",
23
+ deps: DepsT | None = None,
24
+ ) -> Agent[None, FormattableT] | Agent[DepsT, FormattableT]:
25
+ raise NotImplementedError()
26
+
27
+
28
+ class AsyncAgentTemplate(Generic[DepsT, FormattableT]):
29
+ @overload
30
+ async def __call__(
31
+ self: "AsyncAgentTemplate[None, FormattableT]",
32
+ ) -> AsyncAgent[None, FormattableT]:
33
+ """Create an AsyncAgent with no deps"""
34
+
35
+ @overload
36
+ async def __call__(
37
+ self: "AsyncAgentTemplate[DepsT, FormattableT]", deps: DepsT
38
+ ) -> AsyncAgent[DepsT, FormattableT]:
39
+ """Create an AsyncAgent with deps"""
40
+
41
+ async def __call__(
42
+ self: "AsyncAgentTemplate[None, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]",
43
+ deps: DepsT | None = None,
44
+ ) -> AsyncAgent[None, FormattableT] | AsyncAgent[DepsT, FormattableT]:
45
+ raise NotImplementedError()
@@ -0,0 +1,176 @@
1
+ """The `llm.agent` decorator for turning a function into an agent."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, Literal, Protocol, overload
6
+ from typing_extensions import TypeVar, Unpack
7
+
8
+ from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
9
+ from .agent_template import AgentTemplate, AsyncAgentTemplate
10
+
11
+ if TYPE_CHECKING:
12
+ from ..clients import (
13
+ AnthropicClient,
14
+ AnthropicModelId,
15
+ BaseClient,
16
+ GoogleClient,
17
+ GoogleModelId,
18
+ ModelId,
19
+ OpenAICompletionsClient,
20
+ OpenAICompletionsModelId,
21
+ Params,
22
+ Provider,
23
+ )
24
+
25
+ from ..context import Context, DepsT
26
+ from ..formatting import FormattableT
27
+ from ..types import P
28
+
29
+ AgentToolT = TypeVar(
30
+ "AgentToolT",
31
+ bound="Tool | AsyncTool | ContextTool[Any] | AsyncContextTool[Any] | None",
32
+ covariant=True,
33
+ default=None,
34
+ )
35
+
36
+
37
+ class SystemPrompt(Protocol[P]):
38
+ """Protocol for a prompt template function that returns a system prompt as a string (no context)."""
39
+
40
+ def __call__(self) -> str: ...
41
+
42
+
43
+ class ContextSystemPrompt(Protocol[P, DepsT]):
44
+ """Protocol for a prompt template function that returns a system prompt as a string (with context)."""
45
+
46
+ def __call__(self, ctx: Context[DepsT]) -> str: ...
47
+
48
+
49
+ class AsyncSystemPrompt(Protocol[P]):
50
+ """Protocol for an async prompt template function that returns a system prompt as a string (no context)."""
51
+
52
+ async def __call__(self) -> str: ...
53
+
54
+
55
+ class AsyncContextSystemPrompt(Protocol[P, DepsT]):
56
+ """Protocol for an async prompt template function that returns a system prompt as a string (with context)."""
57
+
58
+ async def __call__(self, ctx: Context[DepsT]) -> str: ...
59
+
60
+
61
+ class AgentDecorator(Protocol[P, AgentToolT, FormattableT]):
62
+ """Protocol for the `agent` decorator."""
63
+
64
+ @overload
65
+ def __call__(
66
+ self: AgentDecorator[
67
+ P,
68
+ None | Tool | ContextTool[DepsT],
69
+ FormattableT,
70
+ ],
71
+ fn: SystemPrompt[P] | ContextSystemPrompt[P, DepsT],
72
+ ) -> AgentTemplate[DepsT, FormattableT]:
73
+ """Decorator for creating a sync agent."""
74
+ ...
75
+
76
+ @overload
77
+ def __call__(
78
+ self: AgentDecorator[
79
+ P,
80
+ None | AsyncTool | AsyncContextTool[DepsT],
81
+ FormattableT,
82
+ ],
83
+ fn: AsyncSystemPrompt[P] | AsyncContextSystemPrompt[P, DepsT],
84
+ ) -> AsyncAgentTemplate[DepsT, FormattableT]:
85
+ """Decorator for creating an async agent."""
86
+ ...
87
+
88
+ def __call__(
89
+ self,
90
+ fn: SystemPrompt[P]
91
+ | ContextSystemPrompt[P, DepsT]
92
+ | AsyncSystemPrompt[P]
93
+ | AsyncContextSystemPrompt[P, DepsT],
94
+ ) -> AgentTemplate[DepsT, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]:
95
+ """Decorator for creating an agent."""
96
+ raise NotImplementedError()
97
+
98
+
99
+ @overload
100
+ def agent(
101
+ *,
102
+ provider: Literal["anthropic"],
103
+ model_id: AnthropicModelId,
104
+ tools: list[AgentToolT] | None = None,
105
+ format: type[FormattableT] | None = None,
106
+ client: AnthropicClient | None = None,
107
+ **params: Unpack[Params],
108
+ ) -> AgentDecorator[..., AgentToolT, FormattableT]:
109
+ """Decorator for creating an Anthropic agent."""
110
+ ...
111
+
112
+
113
+ @overload
114
+ def agent(
115
+ *,
116
+ provider: Literal["google"],
117
+ model_id: GoogleModelId,
118
+ tools: list[AgentToolT] | None = None,
119
+ format: type[FormattableT] | None = None,
120
+ client: GoogleClient | None = None,
121
+ **params: Unpack[Params],
122
+ ) -> AgentDecorator[..., AgentToolT, FormattableT]:
123
+ """Decorator for creating a Google agent."""
124
+ ...
125
+
126
+
127
+ @overload
128
+ def agent(
129
+ *,
130
+ provider: Literal["openai:completions"],
131
+ model_id: OpenAICompletionsModelId,
132
+ tools: list[AgentToolT] | None = None,
133
+ format: type[FormattableT] | None = None,
134
+ client: OpenAICompletionsClient | None = None,
135
+ **params: Unpack[Params],
136
+ ) -> AgentDecorator[..., AgentToolT, FormattableT]:
137
+ """Decorator for creating an OpenAI agent."""
138
+ ...
139
+
140
+
141
+ @overload
142
+ def agent(
143
+ *,
144
+ provider: Provider,
145
+ model_id: ModelId,
146
+ tools: list[AgentToolT] | None = None,
147
+ format: type[FormattableT] | None = None,
148
+ client: None = None,
149
+ **params: Unpack[Params],
150
+ ) -> AgentDecorator[..., AgentToolT, FormattableT]:
151
+ """Decorator for creating an agent using any registered model."""
152
+ ...
153
+
154
+
155
+ def agent(
156
+ *,
157
+ provider: Provider,
158
+ model_id: ModelId,
159
+ tools: list[AgentToolT] | None = None,
160
+ format: type[FormattableT] | None = None,
161
+ client: BaseClient | None = None,
162
+ **params: Unpack[Params],
163
+ ) -> AgentDecorator[..., AgentToolT, FormattableT]:
164
+ """Decorator for creating an agent or structured agent.
165
+
166
+ Args:
167
+ model_id: The model to use for the agent.
168
+ tools: The tools available to the agent.
169
+ format: The response format type for the agent.
170
+ client: The client to use for the agent.
171
+ **params: Additional parameters for the model.
172
+
173
+ Returns:
174
+ An of `AgentDecorator`.
175
+ """
176
+ raise NotImplementedError()
@@ -1,6 +1,6 @@
1
1
  """The `llm.calls` module."""
2
2
 
3
- from .calls import AsyncCall, AsyncContextCall, Call, CallT, ContextCall
3
+ from .calls import AsyncCall, AsyncContextCall, Call, ContextCall
4
4
  from .decorator import (
5
5
  CallDecorator,
6
6
  call,
@@ -11,7 +11,6 @@ __all__ = [
11
11
  "AsyncContextCall",
12
12
  "Call",
13
13
  "CallDecorator",
14
- "CallT",
15
14
  "ContextCall",
16
15
  "call",
17
16
  ]
@@ -0,0 +1,33 @@
1
+ """The `BaseCall` class for LLM calls."""
2
+
3
+ from abc import ABC
4
+ from dataclasses import dataclass
5
+ from typing import Generic
6
+
7
+ from ..formatting import Format, FormattableT
8
+ from ..models import Model, get_model_from_context
9
+ from ..prompts import PromptT
10
+ from ..tools import ToolkitT
11
+ from ..types import P
12
+
13
+
14
+ @dataclass
15
+ class BaseCall(Generic[P, PromptT, ToolkitT, FormattableT], ABC):
16
+ """A base class for generating responses using LLMs."""
17
+
18
+ default_model: Model
19
+ """The default model that will be used if no model is set in context."""
20
+
21
+ toolkit: ToolkitT
22
+ """The toolkit containing this call's tools."""
23
+
24
+ format: type[FormattableT] | Format[FormattableT] | None
25
+ """The response format for the generated response."""
26
+
27
+ fn: PromptT
28
+ """The Prompt function that generates the Prompt."""
29
+
30
+ @property
31
+ def model(self) -> Model:
32
+ """The model used for generating responses. May be overwritten via `with llm.model(...)."""
33
+ return get_model_from_context() or self.default_model