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
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
@@ -12,13 +12,13 @@ from contextlib import suppress
12
12
 
13
13
  from . import (
14
14
  calls,
15
+ clients,
15
16
  content,
16
17
  exceptions,
17
18
  formatting,
18
19
  messages,
19
20
  models,
20
21
  prompts,
21
- providers,
22
22
  responses,
23
23
  tools,
24
24
  types,
@@ -26,7 +26,8 @@ from . import (
26
26
 
27
27
  with suppress(ImportError):
28
28
  from . import mcp
29
- from .calls import AsyncCall, AsyncContextCall, Call, CallDecorator, ContextCall, call
29
+ from .calls import call
30
+ from .clients import ModelId, Params, Provider, client, get_client
30
31
  from .content import (
31
32
  AssistantContentChunk,
32
33
  AssistantContentPart,
@@ -51,37 +52,23 @@ from .content import (
51
52
  URLImageSource,
52
53
  UserContentPart,
53
54
  )
54
- from .context import Context, DepsT
55
+ from .context import Context
55
56
  from .exceptions import (
56
57
  APIError,
57
58
  AuthenticationError,
58
59
  BadRequestError,
59
60
  ConnectionError,
60
- Error,
61
61
  FeatureNotSupportedError,
62
- MissingAPIKeyError,
63
- NoRegisteredProviderError,
62
+ FormattingModeNotSupportedError,
63
+ MirascopeError,
64
64
  NotFoundError,
65
- ParseError,
66
65
  PermissionError,
67
- ProviderError,
68
66
  RateLimitError,
69
- ResponseValidationError,
70
67
  ServerError,
71
68
  TimeoutError,
72
- ToolError,
73
- ToolExecutionError,
74
69
  ToolNotFoundError,
75
70
  )
76
- from .formatting import (
77
- Format,
78
- FormattableT,
79
- FormattingMode,
80
- OutputParser,
81
- Partial,
82
- format,
83
- output_parser,
84
- )
71
+ from .formatting import Format, FormattingMode, Partial, format
85
72
  from .messages import (
86
73
  AssistantContent,
87
74
  AssistantMessage,
@@ -91,32 +78,9 @@ from .messages import (
91
78
  UserContent,
92
79
  UserMessage,
93
80
  )
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
- )
81
+ from .models import Model, model, use_model
82
+ from .prompts import prompt
118
83
  from .responses import (
119
- AnyResponse,
120
84
  AsyncChunkIterator,
121
85
  AsyncContextResponse,
122
86
  AsyncContextStreamResponse,
@@ -132,52 +96,36 @@ from .responses import (
132
96
  FinishReason,
133
97
  RawMessageChunk,
134
98
  Response,
135
- RootResponse,
136
99
  Stream,
137
100
  StreamResponse,
138
101
  StreamResponseChunk,
139
102
  TextStream,
140
103
  ThoughtStream,
141
104
  ToolCallStream,
142
- Usage,
143
- UsageDeltaChunk,
144
105
  )
145
106
  from .tools import (
146
- AnyToolFn,
147
- AnyToolSchema,
148
107
  AsyncContextTool,
149
108
  AsyncContextToolkit,
150
109
  AsyncTool,
151
110
  AsyncToolkit,
152
- BaseToolkit,
153
111
  ContextTool,
154
112
  ContextToolkit,
155
113
  Tool,
156
114
  Toolkit,
157
- ToolkitT,
158
- ToolSchema,
159
115
  tool,
160
116
  )
161
- from .types import Jsonable
162
117
 
163
118
  __all__ = [
164
119
  "APIError",
165
- "AnyResponse",
166
- "AnyToolFn",
167
- "AnyToolSchema",
168
120
  "AssistantContent",
169
121
  "AssistantContentChunk",
170
122
  "AssistantContentPart",
171
123
  "AssistantMessage",
172
- "AsyncCall",
173
124
  "AsyncChunkIterator",
174
- "AsyncContextCall",
175
- "AsyncContextPrompt",
176
125
  "AsyncContextResponse",
177
126
  "AsyncContextStreamResponse",
178
127
  "AsyncContextTool",
179
128
  "AsyncContextToolkit",
180
- "AsyncPrompt",
181
129
  "AsyncResponse",
182
130
  "AsyncStream",
183
131
  "AsyncStreamResponse",
@@ -191,49 +139,30 @@ __all__ = [
191
139
  "BadRequestError",
192
140
  "Base64AudioSource",
193
141
  "Base64ImageSource",
194
- "BaseToolkit",
195
- "Call",
196
- "CallDecorator",
197
142
  "ChunkIterator",
198
143
  "ConnectionError",
199
144
  "Context",
200
- "ContextCall",
201
- "ContextPrompt",
202
145
  "ContextResponse",
203
146
  "ContextStreamResponse",
204
147
  "ContextTool",
205
148
  "ContextToolkit",
206
- "DepsT",
207
149
  "Document",
208
- "Error",
209
150
  "FeatureNotSupportedError",
210
151
  "FinishReason",
211
152
  "Format",
212
- "FormattableT",
213
153
  "FormattingMode",
154
+ "FormattingModeNotSupportedError",
214
155
  "Image",
215
- "Jsonable",
216
156
  "Message",
217
- "MissingAPIKeyError",
157
+ "MirascopeError",
218
158
  "Model",
219
- "ModelId",
220
- "NoRegisteredProviderError",
221
159
  "NotFoundError",
222
- "OutputParser",
223
160
  "Params",
224
- "ParseError",
225
161
  "Partial",
226
162
  "PermissionError",
227
- "Prompt",
228
- "PromptDecorator",
229
- "Provider",
230
- "ProviderError",
231
- "ProviderId",
232
163
  "RateLimitError",
233
164
  "RawMessageChunk",
234
165
  "Response",
235
- "ResponseValidationError",
236
- "RootResponse",
237
166
  "ServerError",
238
167
  "Stream",
239
168
  "StreamResponse",
@@ -245,8 +174,6 @@ __all__ = [
245
174
  "TextEndChunk",
246
175
  "TextStartChunk",
247
176
  "TextStream",
248
- "ThinkingConfig",
249
- "ThinkingLevel",
250
177
  "Thought",
251
178
  "ThoughtChunk",
252
179
  "ThoughtEndChunk",
@@ -259,36 +186,28 @@ __all__ = [
259
186
  "ToolCallEndChunk",
260
187
  "ToolCallStartChunk",
261
188
  "ToolCallStream",
262
- "ToolError",
263
- "ToolExecutionError",
264
189
  "ToolNotFoundError",
265
190
  "ToolOutput",
266
- "ToolSchema",
267
191
  "Toolkit",
268
- "ToolkitT",
269
192
  "URLImageSource",
270
- "Usage",
271
- "UsageDeltaChunk",
272
193
  "UserContent",
273
194
  "UserContentPart",
274
195
  "UserMessage",
275
196
  "call",
276
197
  "calls",
198
+ "client",
199
+ "clients",
277
200
  "content",
278
201
  "exceptions",
279
202
  "format",
280
203
  "formatting",
204
+ "get_client",
281
205
  "mcp",
282
206
  "messages",
283
207
  "model",
284
- "model_from_context",
285
208
  "models",
286
- "output_parser",
287
209
  "prompt",
288
210
  "prompts",
289
- "providers",
290
- "register_provider",
291
- "reset_provider_registry",
292
211
  "responses",
293
212
  "tool",
294
213
  "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