mirascope 1.25.7__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 (474) hide show
  1. mirascope/__init__.py +3 -59
  2. mirascope/graphs/__init__.py +22 -0
  3. mirascope/{experimental/graphs → graphs}/finite_state_machine.py +70 -159
  4. mirascope/llm/__init__.py +206 -16
  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 +16 -0
  10. mirascope/llm/calls/base_call.py +33 -0
  11. mirascope/llm/calls/calls.py +315 -0
  12. mirascope/llm/calls/decorator.py +255 -0
  13. mirascope/llm/clients/__init__.py +34 -0
  14. mirascope/llm/clients/anthropic/__init__.py +11 -0
  15. mirascope/llm/clients/anthropic/_utils/__init__.py +13 -0
  16. mirascope/llm/clients/anthropic/_utils/decode.py +244 -0
  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/clients/base/__init__.py +15 -0
  21. mirascope/llm/clients/base/_utils.py +192 -0
  22. mirascope/llm/clients/base/client.py +1256 -0
  23. mirascope/llm/clients/base/kwargs.py +12 -0
  24. mirascope/llm/clients/base/params.py +93 -0
  25. mirascope/llm/clients/google/__init__.py +6 -0
  26. mirascope/llm/clients/google/_utils/__init__.py +13 -0
  27. mirascope/llm/clients/google/_utils/decode.py +231 -0
  28. mirascope/llm/clients/google/_utils/encode.py +279 -0
  29. mirascope/llm/clients/google/clients.py +853 -0
  30. mirascope/llm/clients/google/message.py +7 -0
  31. mirascope/llm/clients/google/model_ids.py +15 -0
  32. mirascope/llm/clients/openai/__init__.py +25 -0
  33. mirascope/llm/clients/openai/completions/__init__.py +9 -0
  34. mirascope/llm/clients/openai/completions/_utils/__init__.py +13 -0
  35. mirascope/llm/clients/openai/completions/_utils/decode.py +187 -0
  36. mirascope/llm/clients/openai/completions/_utils/encode.py +358 -0
  37. mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
  38. mirascope/llm/clients/openai/completions/clients.py +833 -0
  39. mirascope/llm/clients/openai/completions/model_ids.py +8 -0
  40. mirascope/llm/clients/openai/responses/__init__.py +9 -0
  41. mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
  42. mirascope/llm/clients/openai/responses/_utils/decode.py +194 -0
  43. mirascope/llm/clients/openai/responses/_utils/encode.py +333 -0
  44. mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
  45. mirascope/llm/clients/openai/responses/clients.py +832 -0
  46. mirascope/llm/clients/openai/responses/model_ids.py +8 -0
  47. mirascope/llm/clients/openai/shared/__init__.py +7 -0
  48. mirascope/llm/clients/openai/shared/_utils.py +55 -0
  49. mirascope/llm/clients/providers.py +175 -0
  50. mirascope/llm/content/__init__.py +70 -0
  51. mirascope/llm/content/audio.py +173 -0
  52. mirascope/llm/content/document.py +94 -0
  53. mirascope/llm/content/image.py +206 -0
  54. mirascope/llm/content/text.py +47 -0
  55. mirascope/llm/content/thought.py +58 -0
  56. mirascope/llm/content/tool_call.py +63 -0
  57. mirascope/llm/content/tool_output.py +26 -0
  58. mirascope/llm/context/__init__.py +6 -0
  59. mirascope/llm/context/_utils.py +28 -0
  60. mirascope/llm/context/context.py +24 -0
  61. mirascope/llm/exceptions.py +105 -0
  62. mirascope/llm/formatting/__init__.py +22 -0
  63. mirascope/llm/formatting/_utils.py +74 -0
  64. mirascope/llm/formatting/format.py +104 -0
  65. mirascope/llm/formatting/from_call_args.py +30 -0
  66. mirascope/llm/formatting/partial.py +58 -0
  67. mirascope/llm/formatting/types.py +109 -0
  68. mirascope/llm/mcp/__init__.py +5 -0
  69. mirascope/llm/mcp/client.py +118 -0
  70. mirascope/llm/messages/__init__.py +32 -0
  71. mirascope/llm/messages/message.py +182 -0
  72. mirascope/llm/models/__init__.py +16 -0
  73. mirascope/llm/models/models.py +1243 -0
  74. mirascope/llm/prompts/__init__.py +33 -0
  75. mirascope/llm/prompts/_utils.py +60 -0
  76. mirascope/llm/prompts/decorator.py +286 -0
  77. mirascope/llm/prompts/protocols.py +99 -0
  78. mirascope/llm/responses/__init__.py +57 -0
  79. mirascope/llm/responses/_utils.py +56 -0
  80. mirascope/llm/responses/base_response.py +91 -0
  81. mirascope/llm/responses/base_stream_response.py +697 -0
  82. mirascope/llm/responses/finish_reason.py +27 -0
  83. mirascope/llm/responses/response.py +345 -0
  84. mirascope/llm/responses/root_response.py +177 -0
  85. mirascope/llm/responses/stream_response.py +572 -0
  86. mirascope/llm/responses/streams.py +363 -0
  87. mirascope/llm/tools/__init__.py +40 -0
  88. mirascope/llm/tools/_utils.py +25 -0
  89. mirascope/llm/tools/decorator.py +175 -0
  90. mirascope/llm/tools/protocols.py +96 -0
  91. mirascope/llm/tools/tool_schema.py +246 -0
  92. mirascope/llm/tools/toolkit.py +152 -0
  93. mirascope/llm/tools/tools.py +169 -0
  94. mirascope/llm/types/__init__.py +22 -0
  95. mirascope/llm/types/dataclass.py +9 -0
  96. mirascope/llm/types/jsonable.py +44 -0
  97. mirascope/llm/types/type_vars.py +19 -0
  98. mirascope-2.0.0a0.dist-info/METADATA +117 -0
  99. mirascope-2.0.0a0.dist-info/RECORD +101 -0
  100. mirascope/beta/__init__.py +0 -3
  101. mirascope/beta/openai/__init__.py +0 -17
  102. mirascope/beta/openai/realtime/__init__.py +0 -13
  103. mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
  104. mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
  105. mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
  106. mirascope/beta/openai/realtime/realtime.py +0 -500
  107. mirascope/beta/openai/realtime/recording.py +0 -98
  108. mirascope/beta/openai/realtime/tool.py +0 -113
  109. mirascope/beta/rag/__init__.py +0 -24
  110. mirascope/beta/rag/base/__init__.py +0 -22
  111. mirascope/beta/rag/base/chunkers/__init__.py +0 -2
  112. mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
  113. mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
  114. mirascope/beta/rag/base/config.py +0 -8
  115. mirascope/beta/rag/base/document.py +0 -11
  116. mirascope/beta/rag/base/embedders.py +0 -35
  117. mirascope/beta/rag/base/embedding_params.py +0 -18
  118. mirascope/beta/rag/base/embedding_response.py +0 -30
  119. mirascope/beta/rag/base/query_results.py +0 -7
  120. mirascope/beta/rag/base/vectorstore_params.py +0 -18
  121. mirascope/beta/rag/base/vectorstores.py +0 -37
  122. mirascope/beta/rag/chroma/__init__.py +0 -11
  123. mirascope/beta/rag/chroma/types.py +0 -62
  124. mirascope/beta/rag/chroma/vectorstores.py +0 -121
  125. mirascope/beta/rag/cohere/__init__.py +0 -11
  126. mirascope/beta/rag/cohere/embedders.py +0 -87
  127. mirascope/beta/rag/cohere/embedding_params.py +0 -29
  128. mirascope/beta/rag/cohere/embedding_response.py +0 -29
  129. mirascope/beta/rag/cohere/py.typed +0 -0
  130. mirascope/beta/rag/openai/__init__.py +0 -11
  131. mirascope/beta/rag/openai/embedders.py +0 -144
  132. mirascope/beta/rag/openai/embedding_params.py +0 -18
  133. mirascope/beta/rag/openai/embedding_response.py +0 -14
  134. mirascope/beta/rag/openai/py.typed +0 -0
  135. mirascope/beta/rag/pinecone/__init__.py +0 -19
  136. mirascope/beta/rag/pinecone/types.py +0 -143
  137. mirascope/beta/rag/pinecone/vectorstores.py +0 -148
  138. mirascope/beta/rag/weaviate/__init__.py +0 -6
  139. mirascope/beta/rag/weaviate/types.py +0 -92
  140. mirascope/beta/rag/weaviate/vectorstores.py +0 -103
  141. mirascope/core/__init__.py +0 -109
  142. mirascope/core/anthropic/__init__.py +0 -31
  143. mirascope/core/anthropic/_call.py +0 -67
  144. mirascope/core/anthropic/_call_kwargs.py +0 -13
  145. mirascope/core/anthropic/_thinking.py +0 -70
  146. mirascope/core/anthropic/_utils/__init__.py +0 -16
  147. mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
  148. mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  149. mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
  150. mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
  151. mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
  152. mirascope/core/anthropic/_utils/_message_param_converter.py +0 -154
  153. mirascope/core/anthropic/_utils/_setup_call.py +0 -146
  154. mirascope/core/anthropic/call_params.py +0 -44
  155. mirascope/core/anthropic/call_response.py +0 -226
  156. mirascope/core/anthropic/call_response_chunk.py +0 -152
  157. mirascope/core/anthropic/dynamic_config.py +0 -40
  158. mirascope/core/anthropic/py.typed +0 -0
  159. mirascope/core/anthropic/stream.py +0 -204
  160. mirascope/core/anthropic/tool.py +0 -101
  161. mirascope/core/azure/__init__.py +0 -31
  162. mirascope/core/azure/_call.py +0 -67
  163. mirascope/core/azure/_call_kwargs.py +0 -13
  164. mirascope/core/azure/_utils/__init__.py +0 -14
  165. mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
  166. mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  167. mirascope/core/azure/_utils/_convert_message_params.py +0 -121
  168. mirascope/core/azure/_utils/_get_credential.py +0 -33
  169. mirascope/core/azure/_utils/_get_json_output.py +0 -27
  170. mirascope/core/azure/_utils/_handle_stream.py +0 -130
  171. mirascope/core/azure/_utils/_message_param_converter.py +0 -117
  172. mirascope/core/azure/_utils/_setup_call.py +0 -183
  173. mirascope/core/azure/call_params.py +0 -59
  174. mirascope/core/azure/call_response.py +0 -215
  175. mirascope/core/azure/call_response_chunk.py +0 -105
  176. mirascope/core/azure/dynamic_config.py +0 -30
  177. mirascope/core/azure/py.typed +0 -0
  178. mirascope/core/azure/stream.py +0 -147
  179. mirascope/core/azure/tool.py +0 -93
  180. mirascope/core/base/__init__.py +0 -86
  181. mirascope/core/base/_call_factory.py +0 -256
  182. mirascope/core/base/_create.py +0 -253
  183. mirascope/core/base/_extract.py +0 -175
  184. mirascope/core/base/_extract_with_tools.py +0 -189
  185. mirascope/core/base/_partial.py +0 -95
  186. mirascope/core/base/_utils/__init__.py +0 -92
  187. mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
  188. mirascope/core/base/_utils/_base_type.py +0 -26
  189. mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
  190. mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
  191. mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
  192. mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -178
  193. mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
  194. mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
  195. mirascope/core/base/_utils/_extract_tool_return.py +0 -42
  196. mirascope/core/base/_utils/_fn_is_async.py +0 -24
  197. mirascope/core/base/_utils/_format_template.py +0 -32
  198. mirascope/core/base/_utils/_get_audio_type.py +0 -18
  199. mirascope/core/base/_utils/_get_common_usage.py +0 -20
  200. mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
  201. mirascope/core/base/_utils/_get_document_type.py +0 -7
  202. mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
  203. mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
  204. mirascope/core/base/_utils/_get_fn_args.py +0 -23
  205. mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
  206. mirascope/core/base/_utils/_get_image_type.py +0 -26
  207. mirascope/core/base/_utils/_get_metadata.py +0 -17
  208. mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
  209. mirascope/core/base/_utils/_get_prompt_template.py +0 -28
  210. mirascope/core/base/_utils/_get_template_values.py +0 -51
  211. mirascope/core/base/_utils/_get_template_variables.py +0 -38
  212. mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
  213. mirascope/core/base/_utils/_is_prompt_template.py +0 -24
  214. mirascope/core/base/_utils/_json_mode_content.py +0 -17
  215. mirascope/core/base/_utils/_messages_decorator.py +0 -121
  216. mirascope/core/base/_utils/_parse_content_template.py +0 -323
  217. mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
  218. mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
  219. mirascope/core/base/_utils/_protocols.py +0 -901
  220. mirascope/core/base/_utils/_setup_call.py +0 -79
  221. mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
  222. mirascope/core/base/call_kwargs.py +0 -13
  223. mirascope/core/base/call_params.py +0 -36
  224. mirascope/core/base/call_response.py +0 -338
  225. mirascope/core/base/call_response_chunk.py +0 -130
  226. mirascope/core/base/dynamic_config.py +0 -82
  227. mirascope/core/base/from_call_args.py +0 -30
  228. mirascope/core/base/merge_decorators.py +0 -59
  229. mirascope/core/base/message_param.py +0 -175
  230. mirascope/core/base/messages.py +0 -116
  231. mirascope/core/base/metadata.py +0 -13
  232. mirascope/core/base/prompt.py +0 -497
  233. mirascope/core/base/response_model_config_dict.py +0 -9
  234. mirascope/core/base/stream.py +0 -479
  235. mirascope/core/base/stream_config.py +0 -11
  236. mirascope/core/base/structured_stream.py +0 -296
  237. mirascope/core/base/tool.py +0 -214
  238. mirascope/core/base/toolkit.py +0 -176
  239. mirascope/core/base/types.py +0 -344
  240. mirascope/core/bedrock/__init__.py +0 -34
  241. mirascope/core/bedrock/_call.py +0 -68
  242. mirascope/core/bedrock/_call_kwargs.py +0 -12
  243. mirascope/core/bedrock/_types.py +0 -104
  244. mirascope/core/bedrock/_utils/__init__.py +0 -14
  245. mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
  246. mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  247. mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
  248. mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
  249. mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
  250. mirascope/core/bedrock/_utils/_message_param_converter.py +0 -172
  251. mirascope/core/bedrock/_utils/_setup_call.py +0 -258
  252. mirascope/core/bedrock/call_params.py +0 -38
  253. mirascope/core/bedrock/call_response.py +0 -248
  254. mirascope/core/bedrock/call_response_chunk.py +0 -111
  255. mirascope/core/bedrock/dynamic_config.py +0 -37
  256. mirascope/core/bedrock/py.typed +0 -0
  257. mirascope/core/bedrock/stream.py +0 -154
  258. mirascope/core/bedrock/tool.py +0 -100
  259. mirascope/core/cohere/__init__.py +0 -30
  260. mirascope/core/cohere/_call.py +0 -67
  261. mirascope/core/cohere/_call_kwargs.py +0 -11
  262. mirascope/core/cohere/_types.py +0 -20
  263. mirascope/core/cohere/_utils/__init__.py +0 -14
  264. mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
  265. mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
  266. mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
  267. mirascope/core/cohere/_utils/_get_json_output.py +0 -30
  268. mirascope/core/cohere/_utils/_handle_stream.py +0 -35
  269. mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
  270. mirascope/core/cohere/_utils/_setup_call.py +0 -150
  271. mirascope/core/cohere/call_params.py +0 -62
  272. mirascope/core/cohere/call_response.py +0 -205
  273. mirascope/core/cohere/call_response_chunk.py +0 -125
  274. mirascope/core/cohere/dynamic_config.py +0 -32
  275. mirascope/core/cohere/py.typed +0 -0
  276. mirascope/core/cohere/stream.py +0 -113
  277. mirascope/core/cohere/tool.py +0 -93
  278. mirascope/core/costs/__init__.py +0 -5
  279. mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
  280. mirascope/core/costs/_azure_calculate_cost.py +0 -11
  281. mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
  282. mirascope/core/costs/_cohere_calculate_cost.py +0 -44
  283. mirascope/core/costs/_gemini_calculate_cost.py +0 -67
  284. mirascope/core/costs/_google_calculate_cost.py +0 -427
  285. mirascope/core/costs/_groq_calculate_cost.py +0 -156
  286. mirascope/core/costs/_litellm_calculate_cost.py +0 -11
  287. mirascope/core/costs/_mistral_calculate_cost.py +0 -64
  288. mirascope/core/costs/_openai_calculate_cost.py +0 -416
  289. mirascope/core/costs/_vertex_calculate_cost.py +0 -67
  290. mirascope/core/costs/_xai_calculate_cost.py +0 -104
  291. mirascope/core/costs/calculate_cost.py +0 -86
  292. mirascope/core/gemini/__init__.py +0 -40
  293. mirascope/core/gemini/_call.py +0 -67
  294. mirascope/core/gemini/_call_kwargs.py +0 -12
  295. mirascope/core/gemini/_utils/__init__.py +0 -14
  296. mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
  297. mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  298. mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
  299. mirascope/core/gemini/_utils/_get_json_output.py +0 -35
  300. mirascope/core/gemini/_utils/_handle_stream.py +0 -33
  301. mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
  302. mirascope/core/gemini/_utils/_setup_call.py +0 -149
  303. mirascope/core/gemini/call_params.py +0 -52
  304. mirascope/core/gemini/call_response.py +0 -216
  305. mirascope/core/gemini/call_response_chunk.py +0 -100
  306. mirascope/core/gemini/dynamic_config.py +0 -26
  307. mirascope/core/gemini/stream.py +0 -120
  308. mirascope/core/gemini/tool.py +0 -104
  309. mirascope/core/google/__init__.py +0 -29
  310. mirascope/core/google/_call.py +0 -67
  311. mirascope/core/google/_call_kwargs.py +0 -13
  312. mirascope/core/google/_utils/__init__.py +0 -14
  313. mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
  314. mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
  315. mirascope/core/google/_utils/_convert_message_params.py +0 -297
  316. mirascope/core/google/_utils/_get_json_output.py +0 -37
  317. mirascope/core/google/_utils/_handle_stream.py +0 -58
  318. mirascope/core/google/_utils/_message_param_converter.py +0 -200
  319. mirascope/core/google/_utils/_setup_call.py +0 -201
  320. mirascope/core/google/_utils/_validate_media_type.py +0 -58
  321. mirascope/core/google/call_params.py +0 -22
  322. mirascope/core/google/call_response.py +0 -255
  323. mirascope/core/google/call_response_chunk.py +0 -135
  324. mirascope/core/google/dynamic_config.py +0 -26
  325. mirascope/core/google/stream.py +0 -199
  326. mirascope/core/google/tool.py +0 -146
  327. mirascope/core/groq/__init__.py +0 -30
  328. mirascope/core/groq/_call.py +0 -67
  329. mirascope/core/groq/_call_kwargs.py +0 -13
  330. mirascope/core/groq/_utils/__init__.py +0 -14
  331. mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
  332. mirascope/core/groq/_utils/_convert_message_params.py +0 -112
  333. mirascope/core/groq/_utils/_get_json_output.py +0 -27
  334. mirascope/core/groq/_utils/_handle_stream.py +0 -123
  335. mirascope/core/groq/_utils/_message_param_converter.py +0 -89
  336. mirascope/core/groq/_utils/_setup_call.py +0 -132
  337. mirascope/core/groq/call_params.py +0 -52
  338. mirascope/core/groq/call_response.py +0 -213
  339. mirascope/core/groq/call_response_chunk.py +0 -104
  340. mirascope/core/groq/dynamic_config.py +0 -29
  341. mirascope/core/groq/py.typed +0 -0
  342. mirascope/core/groq/stream.py +0 -135
  343. mirascope/core/groq/tool.py +0 -80
  344. mirascope/core/litellm/__init__.py +0 -28
  345. mirascope/core/litellm/_call.py +0 -67
  346. mirascope/core/litellm/_utils/__init__.py +0 -5
  347. mirascope/core/litellm/_utils/_setup_call.py +0 -109
  348. mirascope/core/litellm/call_params.py +0 -10
  349. mirascope/core/litellm/call_response.py +0 -24
  350. mirascope/core/litellm/call_response_chunk.py +0 -14
  351. mirascope/core/litellm/dynamic_config.py +0 -8
  352. mirascope/core/litellm/py.typed +0 -0
  353. mirascope/core/litellm/stream.py +0 -86
  354. mirascope/core/litellm/tool.py +0 -13
  355. mirascope/core/mistral/__init__.py +0 -36
  356. mirascope/core/mistral/_call.py +0 -65
  357. mirascope/core/mistral/_call_kwargs.py +0 -19
  358. mirascope/core/mistral/_utils/__init__.py +0 -14
  359. mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
  360. mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
  361. mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
  362. mirascope/core/mistral/_utils/_get_json_output.py +0 -34
  363. mirascope/core/mistral/_utils/_handle_stream.py +0 -139
  364. mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
  365. mirascope/core/mistral/_utils/_setup_call.py +0 -164
  366. mirascope/core/mistral/call_params.py +0 -36
  367. mirascope/core/mistral/call_response.py +0 -205
  368. mirascope/core/mistral/call_response_chunk.py +0 -105
  369. mirascope/core/mistral/dynamic_config.py +0 -33
  370. mirascope/core/mistral/py.typed +0 -0
  371. mirascope/core/mistral/stream.py +0 -120
  372. mirascope/core/mistral/tool.py +0 -81
  373. mirascope/core/openai/__init__.py +0 -31
  374. mirascope/core/openai/_call.py +0 -67
  375. mirascope/core/openai/_call_kwargs.py +0 -13
  376. mirascope/core/openai/_utils/__init__.py +0 -14
  377. mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
  378. mirascope/core/openai/_utils/_convert_message_params.py +0 -148
  379. mirascope/core/openai/_utils/_get_json_output.py +0 -31
  380. mirascope/core/openai/_utils/_handle_stream.py +0 -138
  381. mirascope/core/openai/_utils/_message_param_converter.py +0 -105
  382. mirascope/core/openai/_utils/_setup_call.py +0 -155
  383. mirascope/core/openai/call_params.py +0 -92
  384. mirascope/core/openai/call_response.py +0 -273
  385. mirascope/core/openai/call_response_chunk.py +0 -139
  386. mirascope/core/openai/dynamic_config.py +0 -34
  387. mirascope/core/openai/py.typed +0 -0
  388. mirascope/core/openai/stream.py +0 -185
  389. mirascope/core/openai/tool.py +0 -101
  390. mirascope/core/py.typed +0 -0
  391. mirascope/core/vertex/__init__.py +0 -45
  392. mirascope/core/vertex/_call.py +0 -62
  393. mirascope/core/vertex/_call_kwargs.py +0 -12
  394. mirascope/core/vertex/_utils/__init__.py +0 -14
  395. mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
  396. mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  397. mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
  398. mirascope/core/vertex/_utils/_get_json_output.py +0 -36
  399. mirascope/core/vertex/_utils/_handle_stream.py +0 -33
  400. mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
  401. mirascope/core/vertex/_utils/_setup_call.py +0 -160
  402. mirascope/core/vertex/call_params.py +0 -24
  403. mirascope/core/vertex/call_response.py +0 -206
  404. mirascope/core/vertex/call_response_chunk.py +0 -99
  405. mirascope/core/vertex/dynamic_config.py +0 -28
  406. mirascope/core/vertex/stream.py +0 -119
  407. mirascope/core/vertex/tool.py +0 -101
  408. mirascope/core/xai/__init__.py +0 -28
  409. mirascope/core/xai/_call.py +0 -67
  410. mirascope/core/xai/_utils/__init__.py +0 -5
  411. mirascope/core/xai/_utils/_setup_call.py +0 -113
  412. mirascope/core/xai/call_params.py +0 -10
  413. mirascope/core/xai/call_response.py +0 -16
  414. mirascope/core/xai/call_response_chunk.py +0 -14
  415. mirascope/core/xai/dynamic_config.py +0 -8
  416. mirascope/core/xai/py.typed +0 -0
  417. mirascope/core/xai/stream.py +0 -57
  418. mirascope/core/xai/tool.py +0 -13
  419. mirascope/experimental/graphs/__init__.py +0 -5
  420. mirascope/integrations/__init__.py +0 -16
  421. mirascope/integrations/_middleware_factory.py +0 -403
  422. mirascope/integrations/langfuse/__init__.py +0 -3
  423. mirascope/integrations/langfuse/_utils.py +0 -114
  424. mirascope/integrations/langfuse/_with_langfuse.py +0 -70
  425. mirascope/integrations/logfire/__init__.py +0 -3
  426. mirascope/integrations/logfire/_utils.py +0 -225
  427. mirascope/integrations/logfire/_with_logfire.py +0 -63
  428. mirascope/integrations/otel/__init__.py +0 -10
  429. mirascope/integrations/otel/_utils.py +0 -270
  430. mirascope/integrations/otel/_with_hyperdx.py +0 -60
  431. mirascope/integrations/otel/_with_otel.py +0 -59
  432. mirascope/integrations/tenacity.py +0 -14
  433. mirascope/llm/_call.py +0 -401
  434. mirascope/llm/_context.py +0 -384
  435. mirascope/llm/_override.py +0 -3639
  436. mirascope/llm/_protocols.py +0 -500
  437. mirascope/llm/_response_metaclass.py +0 -31
  438. mirascope/llm/call_response.py +0 -158
  439. mirascope/llm/call_response_chunk.py +0 -66
  440. mirascope/llm/stream.py +0 -162
  441. mirascope/llm/tool.py +0 -64
  442. mirascope/mcp/__init__.py +0 -7
  443. mirascope/mcp/_utils.py +0 -288
  444. mirascope/mcp/client.py +0 -167
  445. mirascope/mcp/server.py +0 -356
  446. mirascope/mcp/tools.py +0 -110
  447. mirascope/py.typed +0 -0
  448. mirascope/retries/__init__.py +0 -11
  449. mirascope/retries/fallback.py +0 -131
  450. mirascope/retries/tenacity.py +0 -50
  451. mirascope/tools/__init__.py +0 -37
  452. mirascope/tools/base.py +0 -98
  453. mirascope/tools/system/__init__.py +0 -0
  454. mirascope/tools/system/_docker_operation.py +0 -166
  455. mirascope/tools/system/_file_system.py +0 -267
  456. mirascope/tools/web/__init__.py +0 -0
  457. mirascope/tools/web/_duckduckgo.py +0 -111
  458. mirascope/tools/web/_httpx.py +0 -125
  459. mirascope/tools/web/_parse_url_content.py +0 -94
  460. mirascope/tools/web/_requests.py +0 -54
  461. mirascope/v0/__init__.py +0 -43
  462. mirascope/v0/anthropic.py +0 -54
  463. mirascope/v0/base/__init__.py +0 -12
  464. mirascope/v0/base/calls.py +0 -118
  465. mirascope/v0/base/extractors.py +0 -122
  466. mirascope/v0/base/ops_utils.py +0 -207
  467. mirascope/v0/base/prompts.py +0 -48
  468. mirascope/v0/base/types.py +0 -14
  469. mirascope/v0/base/utils.py +0 -21
  470. mirascope/v0/openai.py +0 -54
  471. mirascope-1.25.7.dist-info/METADATA +0 -169
  472. mirascope-1.25.7.dist-info/RECORD +0 -378
  473. {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/WHEEL +0 -0
  474. {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/licenses/LICENSE +0 -0
mirascope/llm/__init__.py CHANGED
@@ -1,22 +1,212 @@
1
- from ..core import CostMetadata, LocalProvider, Provider, calculate_cost
2
- from ._call import call
3
- from ._context import context
4
- from ._override import override
5
- from .call_response import CallResponse
6
- from .call_response_chunk import CallResponseChunk
7
- from .stream import Stream
8
- from .tool import Tool
1
+ """The `llm` module for writing provider-agnostic LLM Generations.
2
+
3
+ This module provides a unified interface for interacting with different LLM providers,
4
+ including messages, tools, response formatting, and streaming. It allows you to write
5
+ code that works with multiple LLM providers without changing your application logic.
6
+ """
7
+
8
+ # TODO: Across the API, audit docstrings to ensure they are compliant Google-style docstrings
9
+ # (Write some tooling to ensure this happens consistently + in CI)
10
+
11
+ from . import (
12
+ calls,
13
+ clients,
14
+ content,
15
+ exceptions,
16
+ formatting,
17
+ mcp,
18
+ messages,
19
+ models,
20
+ prompts,
21
+ responses,
22
+ tools,
23
+ types,
24
+ )
25
+ from .calls import call
26
+ from .clients import ModelId, Params, Provider, client, get_client
27
+ from .content import (
28
+ AssistantContentChunk,
29
+ AssistantContentPart,
30
+ Audio,
31
+ Base64AudioSource,
32
+ Base64ImageSource,
33
+ Document,
34
+ Image,
35
+ Text,
36
+ TextChunk,
37
+ TextEndChunk,
38
+ TextStartChunk,
39
+ Thought,
40
+ ThoughtChunk,
41
+ ThoughtEndChunk,
42
+ ThoughtStartChunk,
43
+ ToolCall,
44
+ ToolCallChunk,
45
+ ToolCallEndChunk,
46
+ ToolCallStartChunk,
47
+ ToolOutput,
48
+ URLImageSource,
49
+ UserContentPart,
50
+ )
51
+ from .context import Context
52
+ from .exceptions import (
53
+ APIError,
54
+ AuthenticationError,
55
+ BadRequestError,
56
+ ConnectionError,
57
+ FeatureNotSupportedError,
58
+ FormattingModeNotSupportedError,
59
+ MirascopeError,
60
+ NotFoundError,
61
+ PermissionError,
62
+ RateLimitError,
63
+ ServerError,
64
+ TimeoutError,
65
+ ToolNotFoundError,
66
+ )
67
+ from .formatting import Format, FormattingMode, Partial, format
68
+ from .messages import (
69
+ AssistantContent,
70
+ AssistantMessage,
71
+ Message,
72
+ SystemContent,
73
+ SystemMessage,
74
+ UserContent,
75
+ UserMessage,
76
+ )
77
+ from .models import Model, model, use_model
78
+ from .prompts import prompt
79
+ from .responses import (
80
+ AsyncChunkIterator,
81
+ AsyncContextResponse,
82
+ AsyncContextStreamResponse,
83
+ AsyncResponse,
84
+ AsyncStream,
85
+ AsyncStreamResponse,
86
+ AsyncTextStream,
87
+ AsyncThoughtStream,
88
+ AsyncToolCallStream,
89
+ ChunkIterator,
90
+ ContextResponse,
91
+ ContextStreamResponse,
92
+ FinishReason,
93
+ RawMessageChunk,
94
+ Response,
95
+ Stream,
96
+ StreamResponse,
97
+ StreamResponseChunk,
98
+ TextStream,
99
+ ThoughtStream,
100
+ ToolCallStream,
101
+ )
102
+ from .tools import (
103
+ AsyncContextTool,
104
+ AsyncContextToolkit,
105
+ AsyncTool,
106
+ AsyncToolkit,
107
+ ContextTool,
108
+ ContextToolkit,
109
+ Tool,
110
+ Toolkit,
111
+ tool,
112
+ )
9
113
 
10
114
  __all__ = [
11
- "CallResponse",
12
- "CallResponseChunk",
13
- "CostMetadata",
14
- "LocalProvider",
15
- "Provider",
115
+ "APIError",
116
+ "AssistantContent",
117
+ "AssistantContentChunk",
118
+ "AssistantContentPart",
119
+ "AssistantMessage",
120
+ "AsyncChunkIterator",
121
+ "AsyncContextResponse",
122
+ "AsyncContextStreamResponse",
123
+ "AsyncContextTool",
124
+ "AsyncContextToolkit",
125
+ "AsyncResponse",
126
+ "AsyncStream",
127
+ "AsyncStreamResponse",
128
+ "AsyncTextStream",
129
+ "AsyncThoughtStream",
130
+ "AsyncTool",
131
+ "AsyncToolCallStream",
132
+ "AsyncToolkit",
133
+ "Audio",
134
+ "AuthenticationError",
135
+ "BadRequestError",
136
+ "Base64AudioSource",
137
+ "Base64ImageSource",
138
+ "ChunkIterator",
139
+ "ConnectionError",
140
+ "Context",
141
+ "ContextResponse",
142
+ "ContextStreamResponse",
143
+ "ContextTool",
144
+ "ContextToolkit",
145
+ "Document",
146
+ "FeatureNotSupportedError",
147
+ "FinishReason",
148
+ "Format",
149
+ "FormattingMode",
150
+ "FormattingModeNotSupportedError",
151
+ "Image",
152
+ "Message",
153
+ "MirascopeError",
154
+ "Model",
155
+ "NotFoundError",
156
+ "Params",
157
+ "Partial",
158
+ "PermissionError",
159
+ "RateLimitError",
160
+ "RawMessageChunk",
161
+ "Response",
162
+ "ServerError",
16
163
  "Stream",
164
+ "StreamResponse",
165
+ "StreamResponseChunk",
166
+ "SystemContent",
167
+ "SystemMessage",
168
+ "Text",
169
+ "TextChunk",
170
+ "TextEndChunk",
171
+ "TextStartChunk",
172
+ "TextStream",
173
+ "Thought",
174
+ "ThoughtChunk",
175
+ "ThoughtEndChunk",
176
+ "ThoughtStartChunk",
177
+ "ThoughtStream",
178
+ "TimeoutError",
17
179
  "Tool",
18
- "calculate_cost",
180
+ "ToolCall",
181
+ "ToolCallChunk",
182
+ "ToolCallEndChunk",
183
+ "ToolCallStartChunk",
184
+ "ToolCallStream",
185
+ "ToolNotFoundError",
186
+ "ToolOutput",
187
+ "Toolkit",
188
+ "URLImageSource",
189
+ "UserContent",
190
+ "UserContentPart",
191
+ "UserMessage",
19
192
  "call",
20
- "context",
21
- "override",
193
+ "calls",
194
+ "client",
195
+ "clients",
196
+ "content",
197
+ "exceptions",
198
+ "format",
199
+ "formatting",
200
+ "get_client",
201
+ "mcp",
202
+ "messages",
203
+ "model",
204
+ "models",
205
+ "prompt",
206
+ "prompts",
207
+ "responses",
208
+ "tool",
209
+ "tools",
210
+ "types",
211
+ "use_model",
22
212
  ]
@@ -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()
@@ -0,0 +1,16 @@
1
+ """The `llm.calls` module."""
2
+
3
+ from .calls import AsyncCall, AsyncContextCall, Call, ContextCall
4
+ from .decorator import (
5
+ CallDecorator,
6
+ call,
7
+ )
8
+
9
+ __all__ = [
10
+ "AsyncCall",
11
+ "AsyncContextCall",
12
+ "Call",
13
+ "CallDecorator",
14
+ "ContextCall",
15
+ "call",
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