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/_call.py
DELETED
|
@@ -1,401 +0,0 @@
|
|
|
1
|
-
"""This module contains the `call` decorator for making provider-agnostic LLM API calls with a typed function."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from collections.abc import AsyncIterable, Awaitable, Callable, Iterable
|
|
6
|
-
from enum import Enum
|
|
7
|
-
from functools import wraps
|
|
8
|
-
from typing import Any, ParamSpec, TypeVar, cast, get_args
|
|
9
|
-
|
|
10
|
-
from pydantic import BaseModel
|
|
11
|
-
|
|
12
|
-
from ..core import BaseTool
|
|
13
|
-
from ..core.base import (
|
|
14
|
-
BaseCallResponse,
|
|
15
|
-
BaseCallResponseChunk,
|
|
16
|
-
BaseStream,
|
|
17
|
-
BaseType,
|
|
18
|
-
CommonCallParams,
|
|
19
|
-
)
|
|
20
|
-
from ..core.base._utils import fn_is_async
|
|
21
|
-
from ..core.base.stream_config import StreamConfig
|
|
22
|
-
from ..core.base.types import LocalProvider, Provider
|
|
23
|
-
from ._context import (
|
|
24
|
-
CallArgs,
|
|
25
|
-
apply_context_overrides_to_call_args,
|
|
26
|
-
get_current_context,
|
|
27
|
-
)
|
|
28
|
-
from ._protocols import (
|
|
29
|
-
AsyncLLMFunctionDecorator,
|
|
30
|
-
CallDecorator,
|
|
31
|
-
LLMFunctionDecorator,
|
|
32
|
-
SyncLLMFunctionDecorator,
|
|
33
|
-
)
|
|
34
|
-
from .call_response import CallResponse
|
|
35
|
-
from .stream import Stream
|
|
36
|
-
|
|
37
|
-
_P = ParamSpec("_P")
|
|
38
|
-
_R = TypeVar("_R")
|
|
39
|
-
_ParsedOutputT = TypeVar("_ParsedOutputT")
|
|
40
|
-
_ResponseModelT = TypeVar("_ResponseModelT", bound=BaseModel | BaseType | Enum)
|
|
41
|
-
_AsyncBaseDynamicConfigT = TypeVar("_AsyncBaseDynamicConfigT", contravariant=True)
|
|
42
|
-
_BaseDynamicConfigT = TypeVar("_BaseDynamicConfigT", contravariant=True)
|
|
43
|
-
|
|
44
|
-
_BaseCallResponseT = TypeVar(
|
|
45
|
-
"_BaseCallResponseT", covariant=True, bound=BaseCallResponse
|
|
46
|
-
)
|
|
47
|
-
_BaseCallResponseChunkT = TypeVar(
|
|
48
|
-
"_BaseCallResponseChunkT", covariant=True, bound=BaseCallResponseChunk
|
|
49
|
-
)
|
|
50
|
-
_BaseStreamT = TypeVar("_BaseStreamT", covariant=True)
|
|
51
|
-
_ResultT = TypeVar("_ResultT")
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _get_local_provider_call(
|
|
55
|
-
provider: LocalProvider,
|
|
56
|
-
client: Any | None, # noqa: ANN401
|
|
57
|
-
is_async: bool,
|
|
58
|
-
) -> tuple[Callable, Any | None]:
|
|
59
|
-
if provider == "ollama":
|
|
60
|
-
from ..core.openai import openai_call
|
|
61
|
-
|
|
62
|
-
if client:
|
|
63
|
-
return openai_call, client
|
|
64
|
-
if is_async:
|
|
65
|
-
from openai import AsyncOpenAI
|
|
66
|
-
|
|
67
|
-
client = AsyncOpenAI(api_key="ollama", base_url="http://localhost:11434/v1")
|
|
68
|
-
else:
|
|
69
|
-
from openai import OpenAI
|
|
70
|
-
|
|
71
|
-
client = OpenAI(api_key="ollama", base_url="http://localhost:11434/v1")
|
|
72
|
-
return openai_call, client
|
|
73
|
-
else: # provider == "vllm"
|
|
74
|
-
from ..core.openai import openai_call
|
|
75
|
-
|
|
76
|
-
if client:
|
|
77
|
-
return openai_call, client
|
|
78
|
-
|
|
79
|
-
if is_async:
|
|
80
|
-
from openai import AsyncOpenAI
|
|
81
|
-
|
|
82
|
-
client = AsyncOpenAI(api_key="ollama", base_url="http://localhost:8000/v1")
|
|
83
|
-
else:
|
|
84
|
-
from openai import OpenAI
|
|
85
|
-
|
|
86
|
-
client = OpenAI(api_key="ollama", base_url="http://localhost:8000/v1")
|
|
87
|
-
return openai_call, client
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def _get_provider_call(provider: Provider) -> Callable:
|
|
91
|
-
"""Returns the provider-specific call decorator based on the provider name."""
|
|
92
|
-
if provider == "anthropic":
|
|
93
|
-
from ..core.anthropic import anthropic_call
|
|
94
|
-
|
|
95
|
-
return anthropic_call
|
|
96
|
-
elif provider == "azure":
|
|
97
|
-
from ..core.azure import azure_call
|
|
98
|
-
|
|
99
|
-
return azure_call
|
|
100
|
-
elif provider == "bedrock":
|
|
101
|
-
from ..core.bedrock import bedrock_call
|
|
102
|
-
|
|
103
|
-
return bedrock_call
|
|
104
|
-
elif provider == "cohere":
|
|
105
|
-
from ..core.cohere import cohere_call
|
|
106
|
-
|
|
107
|
-
return cohere_call
|
|
108
|
-
elif provider == "gemini":
|
|
109
|
-
from ..core.gemini import gemini_call
|
|
110
|
-
|
|
111
|
-
return gemini_call
|
|
112
|
-
elif provider == "google":
|
|
113
|
-
from ..core.google import google_call
|
|
114
|
-
|
|
115
|
-
return google_call
|
|
116
|
-
elif provider == "groq":
|
|
117
|
-
from ..core.groq import groq_call
|
|
118
|
-
|
|
119
|
-
return groq_call
|
|
120
|
-
elif provider == "litellm":
|
|
121
|
-
from ..core.litellm import litellm_call
|
|
122
|
-
|
|
123
|
-
return litellm_call
|
|
124
|
-
elif provider == "mistral":
|
|
125
|
-
from ..core.mistral import mistral_call
|
|
126
|
-
|
|
127
|
-
return mistral_call
|
|
128
|
-
elif provider == "openai":
|
|
129
|
-
from ..core.openai import openai_call
|
|
130
|
-
|
|
131
|
-
return openai_call
|
|
132
|
-
elif provider == "vertex":
|
|
133
|
-
from ..core.vertex import vertex_call
|
|
134
|
-
|
|
135
|
-
return vertex_call
|
|
136
|
-
elif provider == "xai":
|
|
137
|
-
from ..core.xai import xai_call
|
|
138
|
-
|
|
139
|
-
return xai_call
|
|
140
|
-
raise ValueError(f"Unsupported provider: {provider}")
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def _wrap_result(
|
|
144
|
-
result: BaseCallResponse | BaseStream | _ResultT,
|
|
145
|
-
) -> CallResponse | Stream | _ResultT:
|
|
146
|
-
"""Wraps the result into a CallResponse or Stream instance.
|
|
147
|
-
|
|
148
|
-
Args:
|
|
149
|
-
result: The result returned by the provider-specific decorator.
|
|
150
|
-
|
|
151
|
-
Returns:
|
|
152
|
-
A `CallResponse` instance if `result` is a `BaseCallResponse`.
|
|
153
|
-
A `Stream` instance if `result` is a `BaseStream`.
|
|
154
|
-
|
|
155
|
-
Raises:
|
|
156
|
-
ValueError: If the result type is not supported.
|
|
157
|
-
"""
|
|
158
|
-
if isinstance(result, BaseCallResponse):
|
|
159
|
-
return CallResponse(response=result) # type: ignore
|
|
160
|
-
elif isinstance(result, BaseStream):
|
|
161
|
-
return Stream(stream=result) # type: ignore
|
|
162
|
-
else:
|
|
163
|
-
return result
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def _call(
|
|
167
|
-
provider: Provider | LocalProvider,
|
|
168
|
-
model: str,
|
|
169
|
-
*,
|
|
170
|
-
stream: bool | StreamConfig = False,
|
|
171
|
-
tools: list[type[BaseTool] | Callable] | None = None,
|
|
172
|
-
response_model: type[_ResponseModelT] | None = None,
|
|
173
|
-
output_parser: Callable[[_BaseCallResponseT], _ParsedOutputT]
|
|
174
|
-
| Callable[[_BaseCallResponseChunkT], _ParsedOutputT]
|
|
175
|
-
| Callable[[_ResponseModelT], _ParsedOutputT]
|
|
176
|
-
| None = None,
|
|
177
|
-
json_mode: bool = False,
|
|
178
|
-
client: Any = None, # noqa: ANN401
|
|
179
|
-
call_params: CommonCallParams | Any = None, # noqa: ANN401
|
|
180
|
-
) -> (
|
|
181
|
-
AsyncLLMFunctionDecorator[
|
|
182
|
-
_AsyncBaseDynamicConfigT,
|
|
183
|
-
_BaseCallResponseT
|
|
184
|
-
| _ParsedOutputT
|
|
185
|
-
| _BaseStreamT
|
|
186
|
-
| _ResponseModelT
|
|
187
|
-
| AsyncIterable[_ResponseModelT],
|
|
188
|
-
]
|
|
189
|
-
| SyncLLMFunctionDecorator[
|
|
190
|
-
_BaseDynamicConfigT,
|
|
191
|
-
_BaseCallResponseT
|
|
192
|
-
| _ParsedOutputT
|
|
193
|
-
| _BaseStreamT
|
|
194
|
-
| _ResponseModelT
|
|
195
|
-
| Iterable[_ResponseModelT],
|
|
196
|
-
]
|
|
197
|
-
| LLMFunctionDecorator[
|
|
198
|
-
_BaseDynamicConfigT,
|
|
199
|
-
_AsyncBaseDynamicConfigT,
|
|
200
|
-
_BaseCallResponseT
|
|
201
|
-
| _ParsedOutputT
|
|
202
|
-
| _BaseStreamT
|
|
203
|
-
| _ResponseModelT
|
|
204
|
-
| Iterable[_ResponseModelT],
|
|
205
|
-
_BaseCallResponseT
|
|
206
|
-
| _ParsedOutputT
|
|
207
|
-
| _BaseStreamT
|
|
208
|
-
| _ResponseModelT
|
|
209
|
-
| AsyncIterable[_ResponseModelT],
|
|
210
|
-
]
|
|
211
|
-
):
|
|
212
|
-
"""Decorator for defining a function that calls a language model."""
|
|
213
|
-
# Store original call args that will be used for each function call
|
|
214
|
-
original_call_args: CallArgs = {
|
|
215
|
-
"provider": provider,
|
|
216
|
-
"model": model,
|
|
217
|
-
"stream": stream,
|
|
218
|
-
"tools": tools,
|
|
219
|
-
"response_model": response_model,
|
|
220
|
-
"output_parser": output_parser,
|
|
221
|
-
"json_mode": json_mode,
|
|
222
|
-
"client": client,
|
|
223
|
-
"call_params": call_params,
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
def wrapper(
|
|
227
|
-
fn: Callable[_P, _R | Awaitable[_R]],
|
|
228
|
-
) -> Callable[
|
|
229
|
-
_P,
|
|
230
|
-
CallResponse
|
|
231
|
-
| Stream
|
|
232
|
-
| _ResponseModelT
|
|
233
|
-
| _ParsedOutputT
|
|
234
|
-
| (_ResponseModelT | CallResponse)
|
|
235
|
-
| Awaitable[CallResponse]
|
|
236
|
-
| Awaitable[Stream]
|
|
237
|
-
| Awaitable[_ResponseModelT]
|
|
238
|
-
| Awaitable[_ParsedOutputT]
|
|
239
|
-
| Awaitable[(_ResponseModelT | CallResponse)],
|
|
240
|
-
]:
|
|
241
|
-
fn.__mirascope_call__ = True # pyright: ignore [reportFunctionMemberAccess]
|
|
242
|
-
if fn_is_async(fn):
|
|
243
|
-
# Create a wrapper function that captures the current context when called
|
|
244
|
-
@wraps(fn)
|
|
245
|
-
def wrapper_with_context(
|
|
246
|
-
*args: _P.args, **kwargs: _P.kwargs
|
|
247
|
-
) -> Awaitable[
|
|
248
|
-
CallResponse
|
|
249
|
-
| Stream
|
|
250
|
-
| _ResponseModelT
|
|
251
|
-
| _ParsedOutputT
|
|
252
|
-
| (_ResponseModelT | CallResponse)
|
|
253
|
-
]:
|
|
254
|
-
# Capture the context at call time
|
|
255
|
-
current_context = get_current_context()
|
|
256
|
-
|
|
257
|
-
# Define an async function that uses the captured context
|
|
258
|
-
async def context_bound_inner_async() -> (
|
|
259
|
-
CallResponse
|
|
260
|
-
| Stream
|
|
261
|
-
| _ResponseModelT
|
|
262
|
-
| _ParsedOutputT
|
|
263
|
-
| (_ResponseModelT | CallResponse)
|
|
264
|
-
):
|
|
265
|
-
# Apply any context overrides to the original call args
|
|
266
|
-
effective_call_args = apply_context_overrides_to_call_args(
|
|
267
|
-
original_call_args, context_override=current_context
|
|
268
|
-
)
|
|
269
|
-
|
|
270
|
-
# Get the appropriate provider call function with the possibly overridden provider
|
|
271
|
-
effective_provider = effective_call_args["provider"]
|
|
272
|
-
effective_client = effective_call_args["client"]
|
|
273
|
-
|
|
274
|
-
if effective_provider in get_args(LocalProvider):
|
|
275
|
-
provider_call, effective_client = _get_local_provider_call(
|
|
276
|
-
cast(LocalProvider, effective_provider),
|
|
277
|
-
effective_client,
|
|
278
|
-
True,
|
|
279
|
-
)
|
|
280
|
-
effective_call_args["client"] = effective_client
|
|
281
|
-
else:
|
|
282
|
-
provider_call = _get_provider_call(
|
|
283
|
-
cast(Provider, effective_provider)
|
|
284
|
-
)
|
|
285
|
-
|
|
286
|
-
# Use the provider-specific call function with overridden args
|
|
287
|
-
call_kwargs = dict(effective_call_args)
|
|
288
|
-
del call_kwargs["provider"] # Not a parameter to provider_call
|
|
289
|
-
|
|
290
|
-
# Get decorated function using provider_call
|
|
291
|
-
decorated = provider_call(**call_kwargs)(fn)
|
|
292
|
-
|
|
293
|
-
# Call the decorated function and wrap the result
|
|
294
|
-
result = await decorated(*args, **kwargs)
|
|
295
|
-
return _wrap_result(result)
|
|
296
|
-
|
|
297
|
-
return context_bound_inner_async()
|
|
298
|
-
|
|
299
|
-
wrapper_with_context._original_call_args = original_call_args # pyright: ignore [reportAttributeAccessIssue]
|
|
300
|
-
wrapper_with_context._original_fn = fn # pyright: ignore [reportAttributeAccessIssue]
|
|
301
|
-
|
|
302
|
-
return wrapper_with_context # pyright: ignore [reportReturnType]
|
|
303
|
-
else:
|
|
304
|
-
|
|
305
|
-
@wraps(fn)
|
|
306
|
-
def inner(
|
|
307
|
-
*args: _P.args, **kwargs: _P.kwargs
|
|
308
|
-
) -> (
|
|
309
|
-
CallResponse
|
|
310
|
-
| Stream
|
|
311
|
-
| _ResponseModelT
|
|
312
|
-
| _ParsedOutputT
|
|
313
|
-
| (_ResponseModelT | CallResponse)
|
|
314
|
-
):
|
|
315
|
-
# Apply any context overrides to the original call args
|
|
316
|
-
effective_call_args = apply_context_overrides_to_call_args(
|
|
317
|
-
original_call_args
|
|
318
|
-
)
|
|
319
|
-
|
|
320
|
-
# Get the appropriate provider call function with the possibly overridden provider
|
|
321
|
-
effective_provider = effective_call_args["provider"]
|
|
322
|
-
effective_client = effective_call_args["client"]
|
|
323
|
-
|
|
324
|
-
if effective_provider in get_args(LocalProvider):
|
|
325
|
-
provider_call, effective_client = _get_local_provider_call(
|
|
326
|
-
cast(LocalProvider, effective_provider),
|
|
327
|
-
effective_client,
|
|
328
|
-
False,
|
|
329
|
-
)
|
|
330
|
-
effective_call_args["client"] = effective_client
|
|
331
|
-
else:
|
|
332
|
-
provider_call = _get_provider_call(
|
|
333
|
-
cast(Provider, effective_provider)
|
|
334
|
-
)
|
|
335
|
-
|
|
336
|
-
# Use the provider-specific call function with overridden args
|
|
337
|
-
call_kwargs = dict(effective_call_args)
|
|
338
|
-
del call_kwargs[
|
|
339
|
-
"provider"
|
|
340
|
-
] # Remove provider as it's not a parameter to provider_call
|
|
341
|
-
|
|
342
|
-
# Get decorated function using provider_call
|
|
343
|
-
decorated = provider_call(**call_kwargs)(fn)
|
|
344
|
-
|
|
345
|
-
# Call the decorated function and wrap the result
|
|
346
|
-
result = decorated(*args, **kwargs)
|
|
347
|
-
return _wrap_result(result)
|
|
348
|
-
|
|
349
|
-
inner._original_call_args = original_call_args # pyright: ignore [reportAttributeAccessIssue]
|
|
350
|
-
inner._original_fn = fn # pyright: ignore [reportAttributeAccessIssue]
|
|
351
|
-
|
|
352
|
-
return inner
|
|
353
|
-
|
|
354
|
-
return wrapper # pyright: ignore [reportReturnType]
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
call = cast(CallDecorator, _call)
|
|
358
|
-
"""A decorator for making provider-agnostic LLM API calls with a typed function.
|
|
359
|
-
|
|
360
|
-
usage docs: learn/calls.md
|
|
361
|
-
|
|
362
|
-
This decorator enables writing provider-agnostic code by wrapping a typed function
|
|
363
|
-
that can call any supported LLM provider's API. It parses the prompt template of
|
|
364
|
-
the wrapped function as messages and templates the input arguments into each message's
|
|
365
|
-
template.
|
|
366
|
-
|
|
367
|
-
Example:
|
|
368
|
-
|
|
369
|
-
```python
|
|
370
|
-
from ..llm import call
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
@call(provider="openai", model="gpt-4o-mini")
|
|
374
|
-
def recommend_book(genre: str) -> str:
|
|
375
|
-
return f"Recommend a {genre} book"
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
response = recommend_book("fantasy")
|
|
379
|
-
print(response.content)
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
Args:
|
|
383
|
-
provider (Provider | LocalProvider): The LLM provider to use
|
|
384
|
-
(e.g., "openai", "anthropic").
|
|
385
|
-
model (str): The model to use for the specified provider (e.g., "gpt-4o-mini").
|
|
386
|
-
stream (bool): Whether to stream the response from the API call.
|
|
387
|
-
tools (list[BaseTool | Callable]): The tools available for the LLM to use.
|
|
388
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
389
|
-
should be structured.
|
|
390
|
-
output_parser (Callable[[CallResponse | ResponseModelT], Any]): A function for
|
|
391
|
-
parsing the call response whose value will be returned in place of the
|
|
392
|
-
original call response.
|
|
393
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
394
|
-
client (object): An optional custom client to use in place of the default client.
|
|
395
|
-
call_params (CommonCallParams): Provider-specific parameters to use in the API call.
|
|
396
|
-
|
|
397
|
-
Returns:
|
|
398
|
-
decorator (Callable): A decorator that transforms a typed function into a
|
|
399
|
-
provider-agnostic LLM API call that returns standardized response types
|
|
400
|
-
regardless of the underlying provider used.
|
|
401
|
-
"""
|