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.
- mirascope/__init__.py +3 -59
- mirascope/graphs/__init__.py +22 -0
- mirascope/{experimental/graphs → graphs}/finite_state_machine.py +70 -159
- mirascope/llm/__init__.py +206 -16
- mirascope/llm/agents/__init__.py +15 -0
- mirascope/llm/agents/agent.py +97 -0
- mirascope/llm/agents/agent_template.py +45 -0
- mirascope/llm/agents/decorator.py +176 -0
- mirascope/llm/calls/__init__.py +16 -0
- mirascope/llm/calls/base_call.py +33 -0
- mirascope/llm/calls/calls.py +315 -0
- mirascope/llm/calls/decorator.py +255 -0
- mirascope/llm/clients/__init__.py +34 -0
- mirascope/llm/clients/anthropic/__init__.py +11 -0
- mirascope/llm/clients/anthropic/_utils/__init__.py +13 -0
- mirascope/llm/clients/anthropic/_utils/decode.py +244 -0
- mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
- mirascope/llm/clients/anthropic/clients.py +819 -0
- mirascope/llm/clients/anthropic/model_ids.py +8 -0
- mirascope/llm/clients/base/__init__.py +15 -0
- mirascope/llm/clients/base/_utils.py +192 -0
- mirascope/llm/clients/base/client.py +1256 -0
- mirascope/llm/clients/base/kwargs.py +12 -0
- mirascope/llm/clients/base/params.py +93 -0
- mirascope/llm/clients/google/__init__.py +6 -0
- mirascope/llm/clients/google/_utils/__init__.py +13 -0
- mirascope/llm/clients/google/_utils/decode.py +231 -0
- mirascope/llm/clients/google/_utils/encode.py +279 -0
- mirascope/llm/clients/google/clients.py +853 -0
- mirascope/llm/clients/google/message.py +7 -0
- mirascope/llm/clients/google/model_ids.py +15 -0
- mirascope/llm/clients/openai/__init__.py +25 -0
- mirascope/llm/clients/openai/completions/__init__.py +9 -0
- mirascope/llm/clients/openai/completions/_utils/__init__.py +13 -0
- mirascope/llm/clients/openai/completions/_utils/decode.py +187 -0
- mirascope/llm/clients/openai/completions/_utils/encode.py +358 -0
- mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
- mirascope/llm/clients/openai/completions/clients.py +833 -0
- mirascope/llm/clients/openai/completions/model_ids.py +8 -0
- mirascope/llm/clients/openai/responses/__init__.py +9 -0
- mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
- mirascope/llm/clients/openai/responses/_utils/decode.py +194 -0
- mirascope/llm/clients/openai/responses/_utils/encode.py +333 -0
- mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
- mirascope/llm/clients/openai/responses/clients.py +832 -0
- mirascope/llm/clients/openai/responses/model_ids.py +8 -0
- mirascope/llm/clients/openai/shared/__init__.py +7 -0
- mirascope/llm/clients/openai/shared/_utils.py +55 -0
- mirascope/llm/clients/providers.py +175 -0
- mirascope/llm/content/__init__.py +70 -0
- mirascope/llm/content/audio.py +173 -0
- mirascope/llm/content/document.py +94 -0
- mirascope/llm/content/image.py +206 -0
- mirascope/llm/content/text.py +47 -0
- mirascope/llm/content/thought.py +58 -0
- mirascope/llm/content/tool_call.py +63 -0
- mirascope/llm/content/tool_output.py +26 -0
- mirascope/llm/context/__init__.py +6 -0
- mirascope/llm/context/_utils.py +28 -0
- mirascope/llm/context/context.py +24 -0
- mirascope/llm/exceptions.py +105 -0
- mirascope/llm/formatting/__init__.py +22 -0
- mirascope/llm/formatting/_utils.py +74 -0
- mirascope/llm/formatting/format.py +104 -0
- mirascope/llm/formatting/from_call_args.py +30 -0
- mirascope/llm/formatting/partial.py +58 -0
- mirascope/llm/formatting/types.py +109 -0
- mirascope/llm/mcp/__init__.py +5 -0
- mirascope/llm/mcp/client.py +118 -0
- mirascope/llm/messages/__init__.py +32 -0
- mirascope/llm/messages/message.py +182 -0
- mirascope/llm/models/__init__.py +16 -0
- mirascope/llm/models/models.py +1243 -0
- mirascope/llm/prompts/__init__.py +33 -0
- mirascope/llm/prompts/_utils.py +60 -0
- mirascope/llm/prompts/decorator.py +286 -0
- mirascope/llm/prompts/protocols.py +99 -0
- mirascope/llm/responses/__init__.py +57 -0
- mirascope/llm/responses/_utils.py +56 -0
- mirascope/llm/responses/base_response.py +91 -0
- mirascope/llm/responses/base_stream_response.py +697 -0
- mirascope/llm/responses/finish_reason.py +27 -0
- mirascope/llm/responses/response.py +345 -0
- mirascope/llm/responses/root_response.py +177 -0
- mirascope/llm/responses/stream_response.py +572 -0
- mirascope/llm/responses/streams.py +363 -0
- mirascope/llm/tools/__init__.py +40 -0
- mirascope/llm/tools/_utils.py +25 -0
- mirascope/llm/tools/decorator.py +175 -0
- mirascope/llm/tools/protocols.py +96 -0
- mirascope/llm/tools/tool_schema.py +246 -0
- mirascope/llm/tools/toolkit.py +152 -0
- mirascope/llm/tools/tools.py +169 -0
- mirascope/llm/types/__init__.py +22 -0
- mirascope/llm/types/dataclass.py +9 -0
- mirascope/llm/types/jsonable.py +44 -0
- mirascope/llm/types/type_vars.py +19 -0
- mirascope-2.0.0a0.dist-info/METADATA +117 -0
- mirascope-2.0.0a0.dist-info/RECORD +101 -0
- mirascope/beta/__init__.py +0 -3
- mirascope/beta/openai/__init__.py +0 -17
- mirascope/beta/openai/realtime/__init__.py +0 -13
- mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
- mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
- mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
- mirascope/beta/openai/realtime/realtime.py +0 -500
- mirascope/beta/openai/realtime/recording.py +0 -98
- mirascope/beta/openai/realtime/tool.py +0 -113
- mirascope/beta/rag/__init__.py +0 -24
- mirascope/beta/rag/base/__init__.py +0 -22
- mirascope/beta/rag/base/chunkers/__init__.py +0 -2
- mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
- mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
- mirascope/beta/rag/base/config.py +0 -8
- mirascope/beta/rag/base/document.py +0 -11
- mirascope/beta/rag/base/embedders.py +0 -35
- mirascope/beta/rag/base/embedding_params.py +0 -18
- mirascope/beta/rag/base/embedding_response.py +0 -30
- mirascope/beta/rag/base/query_results.py +0 -7
- mirascope/beta/rag/base/vectorstore_params.py +0 -18
- mirascope/beta/rag/base/vectorstores.py +0 -37
- mirascope/beta/rag/chroma/__init__.py +0 -11
- mirascope/beta/rag/chroma/types.py +0 -62
- mirascope/beta/rag/chroma/vectorstores.py +0 -121
- mirascope/beta/rag/cohere/__init__.py +0 -11
- mirascope/beta/rag/cohere/embedders.py +0 -87
- mirascope/beta/rag/cohere/embedding_params.py +0 -29
- mirascope/beta/rag/cohere/embedding_response.py +0 -29
- mirascope/beta/rag/cohere/py.typed +0 -0
- mirascope/beta/rag/openai/__init__.py +0 -11
- mirascope/beta/rag/openai/embedders.py +0 -144
- mirascope/beta/rag/openai/embedding_params.py +0 -18
- mirascope/beta/rag/openai/embedding_response.py +0 -14
- mirascope/beta/rag/openai/py.typed +0 -0
- mirascope/beta/rag/pinecone/__init__.py +0 -19
- mirascope/beta/rag/pinecone/types.py +0 -143
- mirascope/beta/rag/pinecone/vectorstores.py +0 -148
- mirascope/beta/rag/weaviate/__init__.py +0 -6
- mirascope/beta/rag/weaviate/types.py +0 -92
- mirascope/beta/rag/weaviate/vectorstores.py +0 -103
- mirascope/core/__init__.py +0 -109
- mirascope/core/anthropic/__init__.py +0 -31
- mirascope/core/anthropic/_call.py +0 -67
- mirascope/core/anthropic/_call_kwargs.py +0 -13
- mirascope/core/anthropic/_thinking.py +0 -70
- mirascope/core/anthropic/_utils/__init__.py +0 -16
- mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
- mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
- mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
- mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
- mirascope/core/anthropic/_utils/_message_param_converter.py +0 -154
- mirascope/core/anthropic/_utils/_setup_call.py +0 -146
- mirascope/core/anthropic/call_params.py +0 -44
- mirascope/core/anthropic/call_response.py +0 -226
- mirascope/core/anthropic/call_response_chunk.py +0 -152
- mirascope/core/anthropic/dynamic_config.py +0 -40
- mirascope/core/anthropic/py.typed +0 -0
- mirascope/core/anthropic/stream.py +0 -204
- mirascope/core/anthropic/tool.py +0 -101
- mirascope/core/azure/__init__.py +0 -31
- mirascope/core/azure/_call.py +0 -67
- mirascope/core/azure/_call_kwargs.py +0 -13
- mirascope/core/azure/_utils/__init__.py +0 -14
- mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/azure/_utils/_convert_message_params.py +0 -121
- mirascope/core/azure/_utils/_get_credential.py +0 -33
- mirascope/core/azure/_utils/_get_json_output.py +0 -27
- mirascope/core/azure/_utils/_handle_stream.py +0 -130
- mirascope/core/azure/_utils/_message_param_converter.py +0 -117
- mirascope/core/azure/_utils/_setup_call.py +0 -183
- mirascope/core/azure/call_params.py +0 -59
- mirascope/core/azure/call_response.py +0 -215
- mirascope/core/azure/call_response_chunk.py +0 -105
- mirascope/core/azure/dynamic_config.py +0 -30
- mirascope/core/azure/py.typed +0 -0
- mirascope/core/azure/stream.py +0 -147
- mirascope/core/azure/tool.py +0 -93
- mirascope/core/base/__init__.py +0 -86
- mirascope/core/base/_call_factory.py +0 -256
- mirascope/core/base/_create.py +0 -253
- mirascope/core/base/_extract.py +0 -175
- mirascope/core/base/_extract_with_tools.py +0 -189
- mirascope/core/base/_partial.py +0 -95
- mirascope/core/base/_utils/__init__.py +0 -92
- mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
- mirascope/core/base/_utils/_base_type.py +0 -26
- mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
- mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
- mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
- mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -178
- mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
- mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
- mirascope/core/base/_utils/_extract_tool_return.py +0 -42
- mirascope/core/base/_utils/_fn_is_async.py +0 -24
- mirascope/core/base/_utils/_format_template.py +0 -32
- mirascope/core/base/_utils/_get_audio_type.py +0 -18
- mirascope/core/base/_utils/_get_common_usage.py +0 -20
- mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
- mirascope/core/base/_utils/_get_document_type.py +0 -7
- mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
- mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
- mirascope/core/base/_utils/_get_fn_args.py +0 -23
- mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
- mirascope/core/base/_utils/_get_image_type.py +0 -26
- mirascope/core/base/_utils/_get_metadata.py +0 -17
- mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
- mirascope/core/base/_utils/_get_prompt_template.py +0 -28
- mirascope/core/base/_utils/_get_template_values.py +0 -51
- mirascope/core/base/_utils/_get_template_variables.py +0 -38
- mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
- mirascope/core/base/_utils/_is_prompt_template.py +0 -24
- mirascope/core/base/_utils/_json_mode_content.py +0 -17
- mirascope/core/base/_utils/_messages_decorator.py +0 -121
- mirascope/core/base/_utils/_parse_content_template.py +0 -323
- mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
- mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
- mirascope/core/base/_utils/_protocols.py +0 -901
- mirascope/core/base/_utils/_setup_call.py +0 -79
- mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
- mirascope/core/base/call_kwargs.py +0 -13
- mirascope/core/base/call_params.py +0 -36
- mirascope/core/base/call_response.py +0 -338
- mirascope/core/base/call_response_chunk.py +0 -130
- mirascope/core/base/dynamic_config.py +0 -82
- mirascope/core/base/from_call_args.py +0 -30
- mirascope/core/base/merge_decorators.py +0 -59
- mirascope/core/base/message_param.py +0 -175
- mirascope/core/base/messages.py +0 -116
- mirascope/core/base/metadata.py +0 -13
- mirascope/core/base/prompt.py +0 -497
- mirascope/core/base/response_model_config_dict.py +0 -9
- mirascope/core/base/stream.py +0 -479
- mirascope/core/base/stream_config.py +0 -11
- mirascope/core/base/structured_stream.py +0 -296
- mirascope/core/base/tool.py +0 -214
- mirascope/core/base/toolkit.py +0 -176
- mirascope/core/base/types.py +0 -344
- mirascope/core/bedrock/__init__.py +0 -34
- mirascope/core/bedrock/_call.py +0 -68
- mirascope/core/bedrock/_call_kwargs.py +0 -12
- mirascope/core/bedrock/_types.py +0 -104
- mirascope/core/bedrock/_utils/__init__.py +0 -14
- mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
- mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
- mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
- mirascope/core/bedrock/_utils/_message_param_converter.py +0 -172
- mirascope/core/bedrock/_utils/_setup_call.py +0 -258
- mirascope/core/bedrock/call_params.py +0 -38
- mirascope/core/bedrock/call_response.py +0 -248
- mirascope/core/bedrock/call_response_chunk.py +0 -111
- mirascope/core/bedrock/dynamic_config.py +0 -37
- mirascope/core/bedrock/py.typed +0 -0
- mirascope/core/bedrock/stream.py +0 -154
- mirascope/core/bedrock/tool.py +0 -100
- mirascope/core/cohere/__init__.py +0 -30
- mirascope/core/cohere/_call.py +0 -67
- mirascope/core/cohere/_call_kwargs.py +0 -11
- mirascope/core/cohere/_types.py +0 -20
- mirascope/core/cohere/_utils/__init__.py +0 -14
- mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
- mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
- mirascope/core/cohere/_utils/_get_json_output.py +0 -30
- mirascope/core/cohere/_utils/_handle_stream.py +0 -35
- mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
- mirascope/core/cohere/_utils/_setup_call.py +0 -150
- mirascope/core/cohere/call_params.py +0 -62
- mirascope/core/cohere/call_response.py +0 -205
- mirascope/core/cohere/call_response_chunk.py +0 -125
- mirascope/core/cohere/dynamic_config.py +0 -32
- mirascope/core/cohere/py.typed +0 -0
- mirascope/core/cohere/stream.py +0 -113
- mirascope/core/cohere/tool.py +0 -93
- mirascope/core/costs/__init__.py +0 -5
- mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
- mirascope/core/costs/_azure_calculate_cost.py +0 -11
- mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
- mirascope/core/costs/_cohere_calculate_cost.py +0 -44
- mirascope/core/costs/_gemini_calculate_cost.py +0 -67
- mirascope/core/costs/_google_calculate_cost.py +0 -427
- mirascope/core/costs/_groq_calculate_cost.py +0 -156
- mirascope/core/costs/_litellm_calculate_cost.py +0 -11
- mirascope/core/costs/_mistral_calculate_cost.py +0 -64
- mirascope/core/costs/_openai_calculate_cost.py +0 -416
- mirascope/core/costs/_vertex_calculate_cost.py +0 -67
- mirascope/core/costs/_xai_calculate_cost.py +0 -104
- mirascope/core/costs/calculate_cost.py +0 -86
- mirascope/core/gemini/__init__.py +0 -40
- mirascope/core/gemini/_call.py +0 -67
- mirascope/core/gemini/_call_kwargs.py +0 -12
- mirascope/core/gemini/_utils/__init__.py +0 -14
- mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
- mirascope/core/gemini/_utils/_get_json_output.py +0 -35
- mirascope/core/gemini/_utils/_handle_stream.py +0 -33
- mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
- mirascope/core/gemini/_utils/_setup_call.py +0 -149
- mirascope/core/gemini/call_params.py +0 -52
- mirascope/core/gemini/call_response.py +0 -216
- mirascope/core/gemini/call_response_chunk.py +0 -100
- mirascope/core/gemini/dynamic_config.py +0 -26
- mirascope/core/gemini/stream.py +0 -120
- mirascope/core/gemini/tool.py +0 -104
- mirascope/core/google/__init__.py +0 -29
- mirascope/core/google/_call.py +0 -67
- mirascope/core/google/_call_kwargs.py +0 -13
- mirascope/core/google/_utils/__init__.py +0 -14
- mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
- mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
- mirascope/core/google/_utils/_convert_message_params.py +0 -297
- mirascope/core/google/_utils/_get_json_output.py +0 -37
- mirascope/core/google/_utils/_handle_stream.py +0 -58
- mirascope/core/google/_utils/_message_param_converter.py +0 -200
- mirascope/core/google/_utils/_setup_call.py +0 -201
- mirascope/core/google/_utils/_validate_media_type.py +0 -58
- mirascope/core/google/call_params.py +0 -22
- mirascope/core/google/call_response.py +0 -255
- mirascope/core/google/call_response_chunk.py +0 -135
- mirascope/core/google/dynamic_config.py +0 -26
- mirascope/core/google/stream.py +0 -199
- mirascope/core/google/tool.py +0 -146
- mirascope/core/groq/__init__.py +0 -30
- mirascope/core/groq/_call.py +0 -67
- mirascope/core/groq/_call_kwargs.py +0 -13
- mirascope/core/groq/_utils/__init__.py +0 -14
- mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/groq/_utils/_convert_message_params.py +0 -112
- mirascope/core/groq/_utils/_get_json_output.py +0 -27
- mirascope/core/groq/_utils/_handle_stream.py +0 -123
- mirascope/core/groq/_utils/_message_param_converter.py +0 -89
- mirascope/core/groq/_utils/_setup_call.py +0 -132
- mirascope/core/groq/call_params.py +0 -52
- mirascope/core/groq/call_response.py +0 -213
- mirascope/core/groq/call_response_chunk.py +0 -104
- mirascope/core/groq/dynamic_config.py +0 -29
- mirascope/core/groq/py.typed +0 -0
- mirascope/core/groq/stream.py +0 -135
- mirascope/core/groq/tool.py +0 -80
- mirascope/core/litellm/__init__.py +0 -28
- mirascope/core/litellm/_call.py +0 -67
- mirascope/core/litellm/_utils/__init__.py +0 -5
- mirascope/core/litellm/_utils/_setup_call.py +0 -109
- mirascope/core/litellm/call_params.py +0 -10
- mirascope/core/litellm/call_response.py +0 -24
- mirascope/core/litellm/call_response_chunk.py +0 -14
- mirascope/core/litellm/dynamic_config.py +0 -8
- mirascope/core/litellm/py.typed +0 -0
- mirascope/core/litellm/stream.py +0 -86
- mirascope/core/litellm/tool.py +0 -13
- mirascope/core/mistral/__init__.py +0 -36
- mirascope/core/mistral/_call.py +0 -65
- mirascope/core/mistral/_call_kwargs.py +0 -19
- mirascope/core/mistral/_utils/__init__.py +0 -14
- mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
- mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
- mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
- mirascope/core/mistral/_utils/_get_json_output.py +0 -34
- mirascope/core/mistral/_utils/_handle_stream.py +0 -139
- mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
- mirascope/core/mistral/_utils/_setup_call.py +0 -164
- mirascope/core/mistral/call_params.py +0 -36
- mirascope/core/mistral/call_response.py +0 -205
- mirascope/core/mistral/call_response_chunk.py +0 -105
- mirascope/core/mistral/dynamic_config.py +0 -33
- mirascope/core/mistral/py.typed +0 -0
- mirascope/core/mistral/stream.py +0 -120
- mirascope/core/mistral/tool.py +0 -81
- mirascope/core/openai/__init__.py +0 -31
- mirascope/core/openai/_call.py +0 -67
- mirascope/core/openai/_call_kwargs.py +0 -13
- mirascope/core/openai/_utils/__init__.py +0 -14
- mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/openai/_utils/_convert_message_params.py +0 -148
- mirascope/core/openai/_utils/_get_json_output.py +0 -31
- mirascope/core/openai/_utils/_handle_stream.py +0 -138
- mirascope/core/openai/_utils/_message_param_converter.py +0 -105
- mirascope/core/openai/_utils/_setup_call.py +0 -155
- mirascope/core/openai/call_params.py +0 -92
- mirascope/core/openai/call_response.py +0 -273
- mirascope/core/openai/call_response_chunk.py +0 -139
- mirascope/core/openai/dynamic_config.py +0 -34
- mirascope/core/openai/py.typed +0 -0
- mirascope/core/openai/stream.py +0 -185
- mirascope/core/openai/tool.py +0 -101
- mirascope/core/py.typed +0 -0
- mirascope/core/vertex/__init__.py +0 -45
- mirascope/core/vertex/_call.py +0 -62
- mirascope/core/vertex/_call_kwargs.py +0 -12
- mirascope/core/vertex/_utils/__init__.py +0 -14
- mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
- mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
- mirascope/core/vertex/_utils/_get_json_output.py +0 -36
- mirascope/core/vertex/_utils/_handle_stream.py +0 -33
- mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
- mirascope/core/vertex/_utils/_setup_call.py +0 -160
- mirascope/core/vertex/call_params.py +0 -24
- mirascope/core/vertex/call_response.py +0 -206
- mirascope/core/vertex/call_response_chunk.py +0 -99
- mirascope/core/vertex/dynamic_config.py +0 -28
- mirascope/core/vertex/stream.py +0 -119
- mirascope/core/vertex/tool.py +0 -101
- mirascope/core/xai/__init__.py +0 -28
- mirascope/core/xai/_call.py +0 -67
- mirascope/core/xai/_utils/__init__.py +0 -5
- mirascope/core/xai/_utils/_setup_call.py +0 -113
- mirascope/core/xai/call_params.py +0 -10
- mirascope/core/xai/call_response.py +0 -16
- mirascope/core/xai/call_response_chunk.py +0 -14
- mirascope/core/xai/dynamic_config.py +0 -8
- mirascope/core/xai/py.typed +0 -0
- mirascope/core/xai/stream.py +0 -57
- mirascope/core/xai/tool.py +0 -13
- mirascope/experimental/graphs/__init__.py +0 -5
- mirascope/integrations/__init__.py +0 -16
- mirascope/integrations/_middleware_factory.py +0 -403
- mirascope/integrations/langfuse/__init__.py +0 -3
- mirascope/integrations/langfuse/_utils.py +0 -114
- mirascope/integrations/langfuse/_with_langfuse.py +0 -70
- mirascope/integrations/logfire/__init__.py +0 -3
- mirascope/integrations/logfire/_utils.py +0 -225
- mirascope/integrations/logfire/_with_logfire.py +0 -63
- mirascope/integrations/otel/__init__.py +0 -10
- mirascope/integrations/otel/_utils.py +0 -270
- mirascope/integrations/otel/_with_hyperdx.py +0 -60
- mirascope/integrations/otel/_with_otel.py +0 -59
- mirascope/integrations/tenacity.py +0 -14
- mirascope/llm/_call.py +0 -401
- mirascope/llm/_context.py +0 -384
- mirascope/llm/_override.py +0 -3639
- mirascope/llm/_protocols.py +0 -500
- mirascope/llm/_response_metaclass.py +0 -31
- mirascope/llm/call_response.py +0 -158
- mirascope/llm/call_response_chunk.py +0 -66
- mirascope/llm/stream.py +0 -162
- mirascope/llm/tool.py +0 -64
- mirascope/mcp/__init__.py +0 -7
- mirascope/mcp/_utils.py +0 -288
- mirascope/mcp/client.py +0 -167
- mirascope/mcp/server.py +0 -356
- mirascope/mcp/tools.py +0 -110
- mirascope/py.typed +0 -0
- mirascope/retries/__init__.py +0 -11
- mirascope/retries/fallback.py +0 -131
- mirascope/retries/tenacity.py +0 -50
- mirascope/tools/__init__.py +0 -37
- mirascope/tools/base.py +0 -98
- mirascope/tools/system/__init__.py +0 -0
- mirascope/tools/system/_docker_operation.py +0 -166
- mirascope/tools/system/_file_system.py +0 -267
- mirascope/tools/web/__init__.py +0 -0
- mirascope/tools/web/_duckduckgo.py +0 -111
- mirascope/tools/web/_httpx.py +0 -125
- mirascope/tools/web/_parse_url_content.py +0 -94
- mirascope/tools/web/_requests.py +0 -54
- mirascope/v0/__init__.py +0 -43
- mirascope/v0/anthropic.py +0 -54
- mirascope/v0/base/__init__.py +0 -12
- mirascope/v0/base/calls.py +0 -118
- mirascope/v0/base/extractors.py +0 -122
- mirascope/v0/base/ops_utils.py +0 -207
- mirascope/v0/base/prompts.py +0 -48
- mirascope/v0/base/types.py +0 -14
- mirascope/v0/base/utils.py +0 -21
- mirascope/v0/openai.py +0 -54
- mirascope-1.25.7.dist-info/METADATA +0 -169
- mirascope-1.25.7.dist-info/RECORD +0 -378
- {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/WHEEL +0 -0
- {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/licenses/LICENSE +0 -0
mirascope/llm/_context.py
DELETED
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
"""This module contains the context managers for LLM API calls."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import threading
|
|
6
|
-
from collections.abc import Callable
|
|
7
|
-
from dataclasses import dataclass
|
|
8
|
-
from enum import Enum
|
|
9
|
-
from types import TracebackType
|
|
10
|
-
from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast, overload
|
|
11
|
-
|
|
12
|
-
from pydantic import BaseModel
|
|
13
|
-
from typing_extensions import TypedDict
|
|
14
|
-
|
|
15
|
-
from ..core.base import BaseTool, BaseType, CommonCallParams
|
|
16
|
-
from ..core.base.stream_config import StreamConfig
|
|
17
|
-
from ..core.base.types import LocalProvider, Provider
|
|
18
|
-
|
|
19
|
-
_ResponseModelT = TypeVar("_ResponseModelT", bound=BaseModel | BaseType | Enum)
|
|
20
|
-
|
|
21
|
-
if TYPE_CHECKING:
|
|
22
|
-
from ..core.anthropic import AnthropicCallParams
|
|
23
|
-
from ..core.azure import AzureCallParams
|
|
24
|
-
from ..core.bedrock import BedrockCallParams
|
|
25
|
-
from ..core.cohere import CohereCallParams
|
|
26
|
-
from ..core.gemini import GeminiCallParams
|
|
27
|
-
from ..core.google import GoogleCallParams
|
|
28
|
-
from ..core.groq import GroqCallParams
|
|
29
|
-
from ..core.litellm import LiteLLMCallParams
|
|
30
|
-
from ..core.mistral import MistralCallParams
|
|
31
|
-
from ..core.openai import OpenAICallParams
|
|
32
|
-
from ..core.vertex import VertexCallParams
|
|
33
|
-
from ..core.xai import XAICallParams
|
|
34
|
-
else:
|
|
35
|
-
AnthropicCallParams = AzureCallParams = BedrockCallParams = CohereCallParams = (
|
|
36
|
-
GeminiCallParams
|
|
37
|
-
) = GoogleCallParams = GroqCallParams = LiteLLMCallParams = MistralCallParams = (
|
|
38
|
-
OpenAICallParams
|
|
39
|
-
) = VertexCallParams = XAICallParams = None
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class CallArgs(TypedDict):
|
|
43
|
-
"""TypedDict for call arguments."""
|
|
44
|
-
|
|
45
|
-
provider: Provider | LocalProvider
|
|
46
|
-
model: str
|
|
47
|
-
stream: bool | StreamConfig
|
|
48
|
-
tools: list[type[BaseTool] | Callable] | None
|
|
49
|
-
response_model: type[BaseModel] | type[BaseType] | type[Enum] | None
|
|
50
|
-
output_parser: Callable | None
|
|
51
|
-
json_mode: bool
|
|
52
|
-
client: Any | None
|
|
53
|
-
call_params: CommonCallParams | Any | None
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
# We use a thread-local variable to store the current context, so that it's thread-safe
|
|
57
|
-
_current_context_local = threading.local()
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@dataclass
|
|
61
|
-
class LLMContext:
|
|
62
|
-
"""Context for LLM API calls.
|
|
63
|
-
|
|
64
|
-
This class is used to store the context for LLM API calls, including both
|
|
65
|
-
setting overrides (provider, model, client, call_params) and
|
|
66
|
-
structural overrides (stream, tools, response_model, etc.).
|
|
67
|
-
"""
|
|
68
|
-
|
|
69
|
-
provider: Provider | LocalProvider | None = None
|
|
70
|
-
model: str | None = None
|
|
71
|
-
stream: bool | StreamConfig | None = None
|
|
72
|
-
tools: list[type[BaseTool] | Callable] | None = None
|
|
73
|
-
response_model: type[BaseModel] | type[BaseType] | type[Enum] | None = None
|
|
74
|
-
output_parser: Callable | None = None
|
|
75
|
-
json_mode: bool | None = None
|
|
76
|
-
client: Any | None = None
|
|
77
|
-
call_params: CommonCallParams | Any | None = None
|
|
78
|
-
|
|
79
|
-
def __enter__(self) -> LLMContext:
|
|
80
|
-
_current_context_local.context = self
|
|
81
|
-
return self
|
|
82
|
-
|
|
83
|
-
def __exit__(
|
|
84
|
-
self,
|
|
85
|
-
exc_type: type[BaseException] | None,
|
|
86
|
-
exc_val: BaseException | None,
|
|
87
|
-
exc_tb: TracebackType | None,
|
|
88
|
-
) -> Literal[False]:
|
|
89
|
-
if hasattr(_current_context_local, "context"):
|
|
90
|
-
del _current_context_local.context
|
|
91
|
-
return False # Don't suppress exceptions
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def get_current_context() -> LLMContext | None:
|
|
95
|
-
"""Get the current context for LLM API calls.
|
|
96
|
-
|
|
97
|
-
Returns:
|
|
98
|
-
The current context, or None if there is no context.
|
|
99
|
-
"""
|
|
100
|
-
if hasattr(_current_context_local, "context"):
|
|
101
|
-
return cast(LLMContext, _current_context_local.context)
|
|
102
|
-
return None
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def _context(
|
|
106
|
-
*,
|
|
107
|
-
provider: Provider | LocalProvider | None,
|
|
108
|
-
model: str | None,
|
|
109
|
-
stream: bool | StreamConfig | None = None,
|
|
110
|
-
tools: list[type[BaseTool] | Callable] | None = None,
|
|
111
|
-
response_model: type[_ResponseModelT] | None = None,
|
|
112
|
-
output_parser: Callable | None = None,
|
|
113
|
-
json_mode: bool | None = None,
|
|
114
|
-
client: Any | None = None, # noqa: ANN401
|
|
115
|
-
call_params: CommonCallParams | Any | None = None, # noqa: ANN401
|
|
116
|
-
) -> LLMContext:
|
|
117
|
-
"""Context manager for LLM API calls.
|
|
118
|
-
|
|
119
|
-
This is an internal method that allows both setting and structural overrides
|
|
120
|
-
for LLM functions.
|
|
121
|
-
|
|
122
|
-
Unfortunately we have not yet identified a way to properly type hint this because
|
|
123
|
-
providing no structural overrides means the return type is that of the original
|
|
124
|
-
function. Of course, the `apply` method could pass through the return type, but
|
|
125
|
-
we do not have a way to know whether it should be passthrough or not.
|
|
126
|
-
|
|
127
|
-
For now, we use `_context` simply to implement `override` fully. The public facing
|
|
128
|
-
`context` method only allows setting overrides.
|
|
129
|
-
|
|
130
|
-
Args:
|
|
131
|
-
provider: The provider to use for the LLM API call.
|
|
132
|
-
model: The model to use for the LLM API call.
|
|
133
|
-
stream: Whether to stream the response.
|
|
134
|
-
tools: The tools to use for the LLM API call.
|
|
135
|
-
response_model: The response model for the LLM API call.
|
|
136
|
-
output_parser: The output parser for the LLM API call.
|
|
137
|
-
json_mode: Whether to use JSON mode.
|
|
138
|
-
client: The client to use for the LLM API call.
|
|
139
|
-
call_params: The call parameters for the LLM API call.
|
|
140
|
-
|
|
141
|
-
Returns:
|
|
142
|
-
The context object that can be used to apply the context to a function.
|
|
143
|
-
"""
|
|
144
|
-
old_context: LLMContext | None = getattr(_current_context_local, "context", None)
|
|
145
|
-
if not old_context:
|
|
146
|
-
return LLMContext(
|
|
147
|
-
provider=provider,
|
|
148
|
-
model=model,
|
|
149
|
-
stream=stream,
|
|
150
|
-
tools=tools,
|
|
151
|
-
response_model=response_model,
|
|
152
|
-
output_parser=output_parser,
|
|
153
|
-
json_mode=json_mode,
|
|
154
|
-
client=client,
|
|
155
|
-
call_params=call_params,
|
|
156
|
-
)
|
|
157
|
-
else:
|
|
158
|
-
# Ensure we properly set nested context settings. For example, we need to make
|
|
159
|
-
# sure that calling override on an overridden function applies the context to
|
|
160
|
-
# the overridden function's already overridden settings.
|
|
161
|
-
return LLMContext(
|
|
162
|
-
provider=provider or old_context.provider,
|
|
163
|
-
model=model or old_context.model,
|
|
164
|
-
stream=stream or old_context.stream,
|
|
165
|
-
tools=tools or old_context.tools,
|
|
166
|
-
response_model=response_model or old_context.response_model,
|
|
167
|
-
output_parser=output_parser or old_context.output_parser,
|
|
168
|
-
json_mode=json_mode or old_context.json_mode,
|
|
169
|
-
client=client or old_context.client,
|
|
170
|
-
call_params=call_params or old_context.call_params,
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
def apply_context_overrides_to_call_args(
|
|
175
|
-
call_args: CallArgs, context_override: LLMContext | None = None
|
|
176
|
-
) -> CallArgs:
|
|
177
|
-
"""Apply any active context overrides to the call arguments.
|
|
178
|
-
|
|
179
|
-
Args:
|
|
180
|
-
call_args: The original call arguments.
|
|
181
|
-
context_override: Optional explicit context to use instead of the current thread context.
|
|
182
|
-
|
|
183
|
-
Returns:
|
|
184
|
-
The call arguments with any context overrides applied.
|
|
185
|
-
"""
|
|
186
|
-
context = context_override or get_current_context()
|
|
187
|
-
if not context:
|
|
188
|
-
return call_args
|
|
189
|
-
|
|
190
|
-
# Create a new dict with the original args
|
|
191
|
-
overridden_args = CallArgs(call_args)
|
|
192
|
-
|
|
193
|
-
# If any structural overrides are set, we have to force all others to take their
|
|
194
|
-
# default values so the type hints match.
|
|
195
|
-
if context.stream or context.response_model or context.output_parser:
|
|
196
|
-
overridden_args["stream"] = False
|
|
197
|
-
overridden_args["response_model"] = None
|
|
198
|
-
overridden_args["output_parser"] = None
|
|
199
|
-
if context.response_model:
|
|
200
|
-
overridden_args["tools"] = None
|
|
201
|
-
|
|
202
|
-
# Apply context overrides
|
|
203
|
-
if context.provider is not None:
|
|
204
|
-
overridden_args["provider"] = context.provider
|
|
205
|
-
if context.model is not None:
|
|
206
|
-
overridden_args["model"] = context.model
|
|
207
|
-
if context.stream is not None:
|
|
208
|
-
overridden_args["stream"] = context.stream
|
|
209
|
-
if context.tools is not None:
|
|
210
|
-
overridden_args["tools"] = context.tools
|
|
211
|
-
if context.response_model is not None:
|
|
212
|
-
overridden_args["response_model"] = context.response_model
|
|
213
|
-
if context.output_parser is not None:
|
|
214
|
-
overridden_args["output_parser"] = context.output_parser
|
|
215
|
-
if context.json_mode is not None:
|
|
216
|
-
overridden_args["json_mode"] = context.json_mode
|
|
217
|
-
if context.client is not None:
|
|
218
|
-
overridden_args["client"] = context.client
|
|
219
|
-
if context.call_params is not None:
|
|
220
|
-
overridden_args["call_params"] = context.call_params
|
|
221
|
-
|
|
222
|
-
return overridden_args
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
@overload
|
|
226
|
-
def context(
|
|
227
|
-
*,
|
|
228
|
-
provider: Literal["anthropic"],
|
|
229
|
-
model: str,
|
|
230
|
-
client: Any = None, # noqa: ANN401
|
|
231
|
-
call_params: CommonCallParams | AnthropicCallParams | None = None, # noqa: ANN401
|
|
232
|
-
) -> LLMContext: ...
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
@overload
|
|
236
|
-
def context(
|
|
237
|
-
*,
|
|
238
|
-
provider: Literal["azure"],
|
|
239
|
-
model: str,
|
|
240
|
-
client: Any = None, # noqa: ANN401
|
|
241
|
-
call_params: CommonCallParams | AzureCallParams | None = None, # noqa: ANN401
|
|
242
|
-
) -> LLMContext: ...
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
@overload
|
|
246
|
-
def context(
|
|
247
|
-
*,
|
|
248
|
-
provider: Literal["bedrock"],
|
|
249
|
-
model: str,
|
|
250
|
-
client: Any = None, # noqa: ANN401
|
|
251
|
-
call_params: CommonCallParams | BedrockCallParams | None = None, # noqa: ANN401
|
|
252
|
-
) -> LLMContext: ...
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
@overload
|
|
256
|
-
def context(
|
|
257
|
-
*,
|
|
258
|
-
provider: Literal["cohere"],
|
|
259
|
-
model: str,
|
|
260
|
-
client: Any = None, # noqa: ANN401
|
|
261
|
-
call_params: CommonCallParams | CohereCallParams | None = None, # noqa: ANN401
|
|
262
|
-
) -> LLMContext: ...
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
@overload
|
|
266
|
-
def context(
|
|
267
|
-
*,
|
|
268
|
-
provider: Literal["gemini"],
|
|
269
|
-
model: str,
|
|
270
|
-
client: Any = None, # noqa: ANN401
|
|
271
|
-
call_params: CommonCallParams | GeminiCallParams | None = None, # noqa: ANN401
|
|
272
|
-
) -> LLMContext: ...
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
@overload
|
|
276
|
-
def context(
|
|
277
|
-
*,
|
|
278
|
-
provider: Literal["google"],
|
|
279
|
-
model: str,
|
|
280
|
-
client: Any = None, # noqa: ANN401
|
|
281
|
-
call_params: CommonCallParams | GoogleCallParams | None = None, # noqa: ANN401
|
|
282
|
-
) -> LLMContext: ...
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
@overload
|
|
286
|
-
def context(
|
|
287
|
-
*,
|
|
288
|
-
provider: Literal["groq"],
|
|
289
|
-
model: str,
|
|
290
|
-
client: Any = None, # noqa: ANN401
|
|
291
|
-
call_params: CommonCallParams | GroqCallParams | None = None, # noqa: ANN401
|
|
292
|
-
) -> LLMContext: ...
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
@overload
|
|
296
|
-
def context(
|
|
297
|
-
*,
|
|
298
|
-
provider: Literal["litellm"],
|
|
299
|
-
model: str,
|
|
300
|
-
client: Any = None, # noqa: ANN401
|
|
301
|
-
call_params: CommonCallParams | LiteLLMCallParams | None = None, # noqa: ANN401
|
|
302
|
-
) -> LLMContext: ...
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
@overload
|
|
306
|
-
def context(
|
|
307
|
-
*,
|
|
308
|
-
provider: Literal["mistral"],
|
|
309
|
-
model: str,
|
|
310
|
-
client: Any = None, # noqa: ANN401
|
|
311
|
-
call_params: CommonCallParams | MistralCallParams | None = None, # noqa: ANN401
|
|
312
|
-
) -> LLMContext: ...
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
@overload
|
|
316
|
-
def context(
|
|
317
|
-
*,
|
|
318
|
-
provider: Literal["openai"],
|
|
319
|
-
model: str,
|
|
320
|
-
client: Any = None, # noqa: ANN401
|
|
321
|
-
call_params: CommonCallParams | OpenAICallParams | None = None, # noqa: ANN401
|
|
322
|
-
) -> LLMContext: ...
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
@overload
|
|
326
|
-
def context(
|
|
327
|
-
*,
|
|
328
|
-
provider: Literal["vertex"],
|
|
329
|
-
model: str,
|
|
330
|
-
client: Any = None, # noqa: ANN401
|
|
331
|
-
call_params: CommonCallParams | VertexCallParams | None = None, # noqa: ANN401
|
|
332
|
-
) -> LLMContext: ...
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
@overload
|
|
336
|
-
def context(
|
|
337
|
-
*,
|
|
338
|
-
provider: Literal["xai"],
|
|
339
|
-
model: str,
|
|
340
|
-
client: Any = None, # noqa: ANN401
|
|
341
|
-
call_params: CommonCallParams | XAICallParams | None = None, # noqa: ANN401
|
|
342
|
-
) -> LLMContext: ...
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
def context(
|
|
346
|
-
*,
|
|
347
|
-
provider: Provider | LocalProvider,
|
|
348
|
-
model: str,
|
|
349
|
-
client: Any | None = None,
|
|
350
|
-
call_params: CommonCallParams | Any | None = None, # noqa: ANN401
|
|
351
|
-
) -> LLMContext:
|
|
352
|
-
"""Context manager for LLM API calls.
|
|
353
|
-
|
|
354
|
-
This method only allows setting overrides (provider, model, client, call_params)
|
|
355
|
-
and does not allow structural overrides (stream, tools, response_model, etc.).
|
|
356
|
-
|
|
357
|
-
Example:
|
|
358
|
-
```python
|
|
359
|
-
@llm.call(provider="openai", model="gpt-4o-mini")
|
|
360
|
-
def recommend_book(genre: str) -> str:
|
|
361
|
-
return f"Recommend a {genre} book"
|
|
362
|
-
|
|
363
|
-
# Override the model for a specific call
|
|
364
|
-
with llm.context(provider="anthropic", model="claude-3-5-sonnet-20240620") as ctx:
|
|
365
|
-
response = recommend_book("fantasy") # Uses claude-3-5-sonnet
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
Args:
|
|
369
|
-
provider: The provider to use for the LLM API call.
|
|
370
|
-
model: The model to use for the LLM API call.
|
|
371
|
-
client: The client to use for the LLM API call.
|
|
372
|
-
call_params: The call parameters for the LLM API call.
|
|
373
|
-
|
|
374
|
-
Yields:
|
|
375
|
-
The context object.
|
|
376
|
-
"""
|
|
377
|
-
if (provider and not model) or (model and not provider):
|
|
378
|
-
raise ValueError(
|
|
379
|
-
"Provider and model must both be specified if either is specified."
|
|
380
|
-
)
|
|
381
|
-
|
|
382
|
-
return _context(
|
|
383
|
-
provider=provider, model=model, client=client, call_params=call_params
|
|
384
|
-
)
|