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
@@ -1,113 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any, Literal
4
-
5
- import jiter
6
- from pydantic.json_schema import SkipJsonSchema
7
- from typing_extensions import NotRequired, TypedDict
8
-
9
- from ....core import BaseTool
10
- from ....core.base import GenerateJsonSchemaNoTitles, ToolConfig
11
-
12
-
13
- class OpenAIRealtimeToolConfig(ToolConfig, total=False):
14
- """A tool configuration for OpenAI-specific features."""
15
-
16
-
17
- class RealtimeToolParam(TypedDict, total=False):
18
- type: Literal["function"]
19
- """The type of the tool."""
20
-
21
- name: str
22
- """The name of the function."""
23
-
24
- description: str
25
- """The description of the function."""
26
-
27
- parameters: NotRequired[dict[str, Any]]
28
- """Parameters of the function in JSON Schema."""
29
-
30
-
31
- class FunctionCallArguments(TypedDict, total=False):
32
- call_id: str
33
- """The ID of the function call."""
34
-
35
- arguments: str
36
- """The arguments that the model called."""
37
-
38
-
39
- class OpenAIRealtimeTool(BaseTool):
40
- """A class for defining tools for OpenAI Realtime LLM calls.
41
-
42
- Example:
43
-
44
- ```python
45
- from mirascope.beta.openai import Realtime, OpenAIRealtimeTool, Context
46
-
47
- app = Realtime(
48
- "gpt-4o-realtime-preview-2024-10-01",
49
- modalities=["text"],
50
- )
51
-
52
- def format_book(title: str, author: str) -> str:
53
- return f"{title} by {author}"
54
-
55
- @app.sender(wait_for_text_response=True, tools=[format_book])
56
- async def send_genre(context: Context) -> str:
57
- genre = await async_input("Enter a genre: ")
58
- return f"Recommend a {genre} book"
59
-
60
- @app.receiver("text")
61
- async def receive_text(response: str, context: dict[str, Any]) -> None:
62
- print(f"AI(text): {response}", flush=True)
63
-
64
- @app.receiver("tool")
65
- def recommend_book(response: OpenAIRealtimeTool, context: Context) -> None:
66
- print(response.call())
67
- ```
68
- """
69
-
70
- __provider__ = "openai"
71
- __tool_config_type__ = OpenAIRealtimeToolConfig
72
-
73
- tool_call: SkipJsonSchema[FunctionCallArguments]
74
-
75
- @classmethod
76
- def tool_schema(cls) -> RealtimeToolParam:
77
- """Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
78
-
79
- Example:
80
- ```python
81
- from mirascope.beta.openai import OpenAITool
82
-
83
-
84
- def format_book(title: str, author: str) -> str:
85
- return f"{title} by {author}"
86
-
87
-
88
- tool_type = OpenAIRealtimeTool.type_from_fn(format_book)
89
- print(tool_type.tool_schema()) # prints the OpenAI-specific tool schema
90
- ```
91
- """
92
-
93
- tool = RealtimeToolParam(
94
- name=cls._name(), description=cls._description(), type="function"
95
- )
96
- model_schema = cls.model_json_schema(
97
- schema_generator=GenerateJsonSchemaNoTitles
98
- )
99
- if model_schema["properties"]:
100
- tool["parameters"] = model_schema
101
- return tool
102
-
103
- @classmethod
104
- def from_tool_call(cls, tool_call: FunctionCallArguments) -> OpenAIRealtimeTool:
105
- """Constructs an `OpenAITool` instance from a `tool_call`.
106
-
107
- Args:
108
- tool_call: The OpenAI tool call from which to construct this tool instance.
109
- """
110
- model_json = {"tool_call": tool_call.copy()}
111
- if args := tool_call.get("arguments", None):
112
- model_json |= jiter.from_json(args.encode())
113
- return cls.model_validate(model_json)
@@ -1,24 +0,0 @@
1
- """A module for interacting with Mirascope RAG."""
2
-
3
- from .base import (
4
- BaseChunker,
5
- BaseEmbedder,
6
- BaseEmbeddingParams,
7
- BaseEmbeddingResponse,
8
- BaseQueryResults,
9
- BaseVectorStore,
10
- BaseVectorStoreParams,
11
- Document,
12
- )
13
-
14
- __all__ = [
15
- "BaseChunker",
16
- "BaseEmbedder",
17
- "BaseEmbeddingParams",
18
- "BaseEmbeddingResponse",
19
- "BaseQueryResults",
20
- "BaseVectorStore",
21
- "BaseVectorStoreParams",
22
- "Document",
23
- "TextChunker",
24
- ]
@@ -1,22 +0,0 @@
1
- """A module for interacting with Mirascope RAG."""
2
-
3
- from .chunkers import BaseChunker, TextChunker
4
- from .document import Document
5
- from .embedders import BaseEmbedder
6
- from .embedding_params import BaseEmbeddingParams
7
- from .embedding_response import BaseEmbeddingResponse
8
- from .query_results import BaseQueryResults
9
- from .vectorstore_params import BaseVectorStoreParams
10
- from .vectorstores import BaseVectorStore
11
-
12
- __all__ = [
13
- "BaseChunker",
14
- "BaseEmbedder",
15
- "BaseEmbeddingParams",
16
- "BaseEmbeddingResponse",
17
- "BaseQueryResults",
18
- "BaseVectorStore",
19
- "BaseVectorStoreParams",
20
- "Document",
21
- "TextChunker",
22
- ]
@@ -1,2 +0,0 @@
1
- from .base_chunker import BaseChunker
2
- from .text_chunker import TextChunker
@@ -1,37 +0,0 @@
1
- """Chunkers for the RAG module."""
2
-
3
- from abc import ABC, abstractmethod
4
-
5
- from pydantic import BaseModel
6
-
7
- from ..document import Document
8
-
9
-
10
- class BaseChunker(BaseModel, ABC):
11
- """Base class for chunkers.
12
-
13
- Example:
14
-
15
- ```python
16
- from mirascope.rag import BaseChunker, Document
17
-
18
-
19
- class TextChunker(BaseChunker):
20
- chunk_size: int
21
- chunk_overlap: int
22
-
23
- def chunk(self, text: str) -> list[Document]:
24
- chunks: list[Document] = []
25
- start: int = 0
26
- while start < len(text):
27
- end: int = min(start + self.chunk_size, len(text))
28
- chunks.append(Document(text=text[start:end], id=str(uuid.uuid4())))
29
- start += self.chunk_size - self.chunk_overlap
30
- return chunks
31
- ```
32
- """
33
-
34
- @abstractmethod
35
- def chunk(self, text: str) -> list[Document]:
36
- """Returns a Document that contains an id, text, and optionally metadata."""
37
- ...
@@ -1,33 +0,0 @@
1
- """Text chunker for the RAG module"""
2
-
3
- import uuid
4
-
5
- from ..document import Document
6
- from .base_chunker import BaseChunker
7
-
8
-
9
- class TextChunker(BaseChunker):
10
- """A text chunker that splits a text into chunks of a certain size and overlaps.
11
-
12
- Example:
13
-
14
- ```python
15
- from mirascope.rag import TextChunker
16
-
17
- text_chunker = TextChunker(chunk_size=1000, chunk_overlap=200)
18
- chunks = text_chunker.chunk("This is a long text that I want to split into chunks.")
19
- print(chunks)
20
- ```
21
- """
22
-
23
- chunk_size: int
24
- chunk_overlap: int
25
-
26
- def chunk(self, text: str) -> list[Document]:
27
- chunks: list[Document] = []
28
- start: int = 0
29
- while start < len(text):
30
- end: int = min(start + self.chunk_size, len(text))
31
- chunks.append(Document(text=text[start:end], id=str(uuid.uuid4())))
32
- start += self.chunk_size - self.chunk_overlap
33
- return chunks
@@ -1,8 +0,0 @@
1
- from collections.abc import Callable
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class BaseConfig(BaseModel):
7
- llm_ops: list[Callable | str] = []
8
- client_wrappers: list[Callable | str] = []
@@ -1,11 +0,0 @@
1
- from typing import Any
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class Document(BaseModel):
7
- """A document to be added to the vectorstore."""
8
-
9
- id: str
10
- text: str
11
- metadata: dict[str, Any] | None = None
@@ -1,35 +0,0 @@
1
- """Embedders for the RAG module."""
2
-
3
- from abc import ABC, abstractmethod
4
- from typing import ClassVar, Generic, TypeVar
5
-
6
- from pydantic import BaseModel
7
-
8
- from .config import BaseConfig
9
- from .embedding_params import BaseEmbeddingParams
10
- from .embedding_response import BaseEmbeddingResponse
11
-
12
- BaseEmbeddingT = TypeVar("BaseEmbeddingT", bound=BaseEmbeddingResponse)
13
-
14
-
15
- class BaseEmbedder(BaseModel, Generic[BaseEmbeddingT], ABC):
16
- """The base class abstract interface for interacting with LLM embeddings."""
17
-
18
- api_key: ClassVar[str | None] = None
19
- base_url: ClassVar[str | None] = None
20
- embedding_params: ClassVar[BaseEmbeddingParams] = BaseEmbeddingParams(
21
- model="text-embedding-ada-002"
22
- )
23
- dimensions: int | None = None
24
- configuration: ClassVar[BaseConfig] = BaseConfig(llm_ops=[], client_wrappers=[])
25
- _provider: ClassVar[str] = "base"
26
-
27
- @abstractmethod
28
- def embed(self, input: list[str]) -> BaseEmbeddingT:
29
- """A call to the embedder with a single input"""
30
- ...
31
-
32
- @abstractmethod
33
- async def embed_async(self, input: list[str]) -> BaseEmbeddingT:
34
- """Asynchronously call the embedder with a single input"""
35
- ...
@@ -1,18 +0,0 @@
1
- from typing import Any
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
-
6
- class BaseEmbeddingParams(BaseModel):
7
- """The parameters with which to make an embedding."""
8
-
9
- model: str
10
-
11
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
12
-
13
- def kwargs(self) -> dict[str, Any]:
14
- """Returns all parameters for the embedder as a keyword arguments dictionary."""
15
- kwargs = {
16
- key: value for key, value in self.model_dump().items() if value is not None
17
- }
18
- return kwargs
@@ -1,30 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from typing import Any, Generic, TypeVar
3
-
4
- from pydantic import BaseModel, ConfigDict
5
-
6
- ResponseT = TypeVar("ResponseT", bound=Any)
7
-
8
-
9
- class BaseEmbeddingResponse(BaseModel, Generic[ResponseT], ABC):
10
- """A base abstract interface for LLM embedding responses.
11
-
12
- Attributes:
13
- response: The original response from whichever model response this wraps.
14
- """
15
-
16
- response: ResponseT
17
- start_time: float # The start time of the embedding in ms
18
- end_time: float # The end time of the embedding in ms
19
-
20
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
21
-
22
- @property
23
- @abstractmethod
24
- def embeddings(self) -> list[list[float]] | list[list[int]] | None:
25
- """Should return the embedding of the response.
26
-
27
- If there are multiple choices in a response, this method should select the 0th
28
- choice and return it's embedding.
29
- """
30
- ...
@@ -1,7 +0,0 @@
1
- from pydantic import BaseModel, ConfigDict
2
-
3
-
4
- class BaseQueryResults(BaseModel):
5
- """The results of a query."""
6
-
7
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
@@ -1,18 +0,0 @@
1
- from typing import Any
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
-
6
- class BaseVectorStoreParams(BaseModel):
7
- """The parameters with which to make a vectorstore."""
8
-
9
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
10
-
11
- def kwargs(
12
- self,
13
- ) -> dict[str, Any]:
14
- """Returns all parameters for the index as a keyword arguments dictionary."""
15
- kwargs = {
16
- key: value for key, value in self.model_dump().items() if value is not None
17
- }
18
- return kwargs
@@ -1,37 +0,0 @@
1
- """Vectorstores for the RAG module."""
2
-
3
- from abc import ABC, abstractmethod
4
- from typing import Any, ClassVar, Generic, TypeVar
5
-
6
- from pydantic import BaseModel
7
-
8
- from .chunkers import BaseChunker, TextChunker
9
- from .config import BaseConfig
10
- from .document import Document
11
- from .embedders import BaseEmbedder
12
- from .query_results import BaseQueryResults
13
- from .vectorstore_params import BaseVectorStoreParams
14
-
15
- BaseQueryResultsT = TypeVar("BaseQueryResultsT", bound=BaseQueryResults)
16
-
17
-
18
- class BaseVectorStore(BaseModel, Generic[BaseQueryResultsT], ABC):
19
- """The base class abstract interface for interacting with vectorstores."""
20
-
21
- api_key: ClassVar[str | None] = None
22
- index_name: ClassVar[str | None] = None
23
- chunker: ClassVar[BaseChunker] = TextChunker(chunk_size=1000, chunk_overlap=200)
24
- embedder: ClassVar[BaseEmbedder]
25
- vectorstore_params: ClassVar[BaseVectorStoreParams] = BaseVectorStoreParams()
26
- configuration: ClassVar[BaseConfig] = BaseConfig()
27
- _provider: ClassVar[str] = "base"
28
-
29
- @abstractmethod
30
- def retrieve(self, text: str, **kwargs: Any) -> BaseQueryResultsT: # noqa: ANN401
31
- """Queries the vectorstore for closest match"""
32
- ...
33
-
34
- @abstractmethod
35
- def add(self, text: str | list[Document], **kwargs: Any) -> None: # noqa: ANN401
36
- """Takes unstructured data and upserts into vectorstore"""
37
- ...
@@ -1,11 +0,0 @@
1
- """A module for interacting with Chroma vectorstores."""
2
-
3
- from .types import ChromaParams, ChromaQueryResult, ChromaSettings
4
- from .vectorstores import ChromaVectorStore
5
-
6
- __all__ = [
7
- "ChromaParams",
8
- "ChromaQueryResult",
9
- "ChromaSettings",
10
- "ChromaVectorStore",
11
- ]
@@ -1,62 +0,0 @@
1
- """Types for interacting with Chroma using Mirascope."""
2
-
3
- from typing import Any, Literal
4
-
5
- from chromadb import CollectionMetadata
6
- from chromadb.api.types import URI, Document, IDs, Loadable, Metadata
7
- from chromadb.config import DEFAULT_DATABASE, DEFAULT_TENANT, Settings
8
- from chromadb.types import Vector
9
- from pydantic import BaseModel, ConfigDict
10
-
11
- from ..base.vectorstore_params import BaseVectorStoreParams
12
-
13
-
14
- class ChromaParams(BaseVectorStoreParams):
15
- metadata: CollectionMetadata | None = None
16
- get_or_create: bool = False
17
-
18
-
19
- class ChromaQueryResult(BaseModel):
20
- ids: list[IDs]
21
- embeddings: list[list[Vector]] | None = None
22
- documents: list[list[Document]] | None = None
23
- uris: list[list[URI]] | None = None
24
- data: list[Loadable] | None = None
25
- metadatas: list[list[Metadata | None]] | None = None
26
- distances: list[list[float]] | None = None
27
-
28
- model_config = ConfigDict(arbitrary_types_allowed=True)
29
-
30
-
31
- class ChromaSettings(BaseModel):
32
- mode: Literal["http", "persistent", "ephemeral", "cloud"] = "persistent"
33
- path: str = "./chroma"
34
- host: str = "localhost"
35
- port: int = 8000
36
- ssl: bool = False
37
- headers: dict[str, str] | None = None
38
- settings: Settings | None = None
39
- tenant: str = DEFAULT_TENANT
40
- database: str = DEFAULT_DATABASE
41
- api_key: str | None = None
42
-
43
- model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
44
-
45
- def kwargs(self) -> dict[str, Any]:
46
- """Returns all parameters for the index as a keyword arguments dictionary."""
47
- if self.mode == "http":
48
- exclude = {"mode", "path", "api_key"}
49
- elif self.mode == "persistent":
50
- exclude = {"mode", "host", "port", "ssl", "headers", "api_key"}
51
- elif self.mode == "ephemeral":
52
- exclude = {"mode", "host", "port", "ssl", "headers", "path", "api_key"}
53
- elif self.mode == "cloud":
54
- exclude = {"mode", "path", "host", "port", "ssl", "headers"}
55
- else:
56
- exclude = {"mode"}
57
- kwargs = {
58
- key: value
59
- for key, value in self.model_dump(exclude=exclude).items()
60
- if value is not None
61
- }
62
- return kwargs
@@ -1,121 +0,0 @@
1
- """A module for calling Chroma's Client and Collection."""
2
-
3
- from functools import cached_property
4
- from typing import Any, ClassVar, cast
5
-
6
- from chromadb import (
7
- CloudClient,
8
- Collection,
9
- EphemeralClient,
10
- HttpClient,
11
- Metadata,
12
- PersistentClient,
13
- )
14
- from chromadb.api import ClientAPI
15
-
16
- from ..base.document import Document
17
- from ..base.vectorstores import BaseVectorStore
18
- from .types import ChromaParams, ChromaQueryResult, ChromaSettings
19
-
20
-
21
- class ChromaVectorStore(BaseVectorStore):
22
- """A vectorstore for Chroma.
23
-
24
- Example:
25
-
26
- ```python
27
- from mirascope.beta.rag.chroma import ChromaSettings, ChromaVectorStore
28
- from mirascope.beta.rag.openai import OpenAIEmbedder
29
- from mirascope.beta.rag import TextChunker
30
-
31
-
32
- # Local persistent storage
33
- class MyStore(ChromaVectorStore):
34
- embedder = OpenAIEmbedder()
35
- chunker = TextChunker(chunk_size=1000, chunk_overlap=200)
36
- index_name = "my-store-0001"
37
- client_settings = ChromaSettings()
38
-
39
- # Cloud mode with CloudClient authentication
40
- class MyCloudStore(ChromaVectorStore):
41
- embedder = OpenAIEmbedder()
42
- chunker = TextChunker(chunk_size=1000, chunk_overlap=200)
43
- index_name = "my-cloud-store-0001"
44
- client_settings = ChromaSettings(
45
- mode="cloud",
46
- api_key="your-api-key",
47
- tenant="your-tenant",
48
- database="your-database",
49
- )
50
-
51
- my_store = MyStore()
52
- with open(f"{PATH_TO_FILE}") as file:
53
- data = file.read()
54
- my_store.add(data)
55
- documents = my_store.retrieve("my question").documents
56
- print(documents)
57
- ```
58
- """
59
-
60
- vectorstore_params = ChromaParams(get_or_create=True)
61
- client_settings: ClassVar[ChromaSettings] = ChromaSettings(mode="persistent")
62
- _provider: ClassVar[str] = "chroma"
63
-
64
- def retrieve(
65
- self,
66
- text: str | list[str] | None = None,
67
- **kwargs: Any, # noqa: ANN401
68
- ) -> ChromaQueryResult:
69
- """Queries the vectorstore for closest match"""
70
- if text:
71
- if isinstance(text, str):
72
- text = [text]
73
- query_result = self._index.query(query_texts=text, **kwargs)
74
- else:
75
- query_result = self._index.query(**kwargs)
76
-
77
- return ChromaQueryResult.model_validate(query_result)
78
-
79
- def add(self, text: str | list[Document], **kwargs: Any) -> None: # noqa: ANN401
80
- """Takes unstructured data and upserts into vectorstore"""
81
- documents: list[Document]
82
- if isinstance(text, str):
83
- chunk = self.chunker.chunk
84
- documents = chunk(text)
85
- else:
86
- documents = text
87
-
88
- return self._index.upsert(
89
- ids=[document.id for document in documents],
90
- documents=[document.text for document in documents],
91
- metadatas=[cast(Metadata, document.metadata) for document in documents],
92
- **kwargs,
93
- )
94
-
95
- ############################# PRIVATE PROPERTIES #################################
96
-
97
- @cached_property
98
- def _client(self) -> ClientAPI:
99
- if self.client_settings.mode == "persistent":
100
- return PersistentClient(**self.client_settings.kwargs())
101
- elif self.client_settings.mode == "http":
102
- return HttpClient(**self.client_settings.kwargs())
103
- elif self.client_settings.mode == "ephemeral":
104
- return EphemeralClient(**self.client_settings.kwargs())
105
- elif self.client_settings.mode == "cloud":
106
- return CloudClient(**self.client_settings.kwargs())
107
- else:
108
- raise ValueError(f"Unsupported client mode: {self.client_settings.mode}")
109
-
110
- @cached_property
111
- def _index(self) -> Collection:
112
- vectorstore_params = self.vectorstore_params
113
- if self.index_name:
114
- vectorstore_params = self.vectorstore_params.model_copy(
115
- update={"name": self.index_name}
116
- )
117
-
118
- return self._client.create_collection(
119
- **vectorstore_params.kwargs(),
120
- embedding_function=self.embedder, # type: ignore[arg-type]
121
- )
@@ -1,11 +0,0 @@
1
- """A module for interacting with Cohere chat models."""
2
-
3
- from .embedders import CohereEmbedder
4
- from .embedding_params import CohereEmbeddingParams
5
- from .embedding_response import CohereEmbeddingResponse
6
-
7
- __all__ = [
8
- "CohereEmbedder",
9
- "CohereEmbeddingParams",
10
- "CohereEmbeddingResponse",
11
- ]