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
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
"""This module contains the `AzureCallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from collections.abc import Sequence
|
|
7
|
-
from functools import cached_property
|
|
8
|
-
from typing import cast
|
|
9
|
-
|
|
10
|
-
from azure.ai.inference.models import (
|
|
11
|
-
AssistantMessage,
|
|
12
|
-
ChatCompletions,
|
|
13
|
-
ChatCompletionsToolDefinition,
|
|
14
|
-
ChatRequestMessage,
|
|
15
|
-
CompletionsUsage,
|
|
16
|
-
ToolMessage,
|
|
17
|
-
UserMessage,
|
|
18
|
-
)
|
|
19
|
-
from pydantic import SerializeAsAny, SkipValidation, computed_field
|
|
20
|
-
|
|
21
|
-
from .. import BaseMessageParam
|
|
22
|
-
from ..base import BaseCallResponse, transform_tool_outputs
|
|
23
|
-
from ..base.types import CostMetadata, FinishReason
|
|
24
|
-
from ._utils._convert_finish_reason_to_common_finish_reasons import (
|
|
25
|
-
_convert_finish_reasons_to_common_finish_reasons,
|
|
26
|
-
)
|
|
27
|
-
from ._utils._message_param_converter import AzureMessageParamConverter
|
|
28
|
-
from .call_params import AzureCallParams
|
|
29
|
-
from .dynamic_config import AsyncAzureDynamicConfig, AzureDynamicConfig
|
|
30
|
-
from .tool import AzureTool
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class AzureCallResponse(
|
|
34
|
-
BaseCallResponse[
|
|
35
|
-
ChatCompletions,
|
|
36
|
-
AzureTool,
|
|
37
|
-
ChatCompletionsToolDefinition,
|
|
38
|
-
AsyncAzureDynamicConfig | AzureDynamicConfig,
|
|
39
|
-
ChatRequestMessage,
|
|
40
|
-
AzureCallParams,
|
|
41
|
-
UserMessage,
|
|
42
|
-
AzureMessageParamConverter,
|
|
43
|
-
]
|
|
44
|
-
):
|
|
45
|
-
"""A convenience wrapper around the Azure `ChatCompletion` response.
|
|
46
|
-
|
|
47
|
-
When calling the Azure API using a function decorated with `azure_call`, the
|
|
48
|
-
response will be an `AzureCallResponse` instance with properties that allow for
|
|
49
|
-
more convenience access to commonly used attributes.
|
|
50
|
-
|
|
51
|
-
Example:
|
|
52
|
-
|
|
53
|
-
```python
|
|
54
|
-
from mirascope.core import prompt_template
|
|
55
|
-
from mirascope.core.azure import azure_call
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
@azure_call("gpt-4o")
|
|
59
|
-
def recommend_book(genre: str) -> str:
|
|
60
|
-
return f"Recommend a {genre} book"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
response = recommend_book("fantasy") # response is an `AzureCallResponse` instance
|
|
64
|
-
print(response.content)
|
|
65
|
-
```
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
response: SkipValidation[ChatCompletions]
|
|
69
|
-
_message_converter: type[AzureMessageParamConverter] = AzureMessageParamConverter
|
|
70
|
-
|
|
71
|
-
_provider = "azure"
|
|
72
|
-
|
|
73
|
-
@computed_field
|
|
74
|
-
@property
|
|
75
|
-
def content(self) -> str:
|
|
76
|
-
"""Returns the content of the chat completion for the 0th choice."""
|
|
77
|
-
message = self.response.choices[0].message
|
|
78
|
-
return message.content if message.content is not None else ""
|
|
79
|
-
|
|
80
|
-
@computed_field
|
|
81
|
-
@property
|
|
82
|
-
def finish_reasons(self) -> list[str]:
|
|
83
|
-
"""Returns the finish reasons of the response."""
|
|
84
|
-
return [str(choice.finish_reason) for choice in self.response.choices]
|
|
85
|
-
|
|
86
|
-
@computed_field
|
|
87
|
-
@property
|
|
88
|
-
def model(self) -> str:
|
|
89
|
-
"""Returns the name of the response model."""
|
|
90
|
-
return self.response.model
|
|
91
|
-
|
|
92
|
-
@computed_field
|
|
93
|
-
@property
|
|
94
|
-
def id(self) -> str:
|
|
95
|
-
"""Returns the id of the response."""
|
|
96
|
-
return self.response.id
|
|
97
|
-
|
|
98
|
-
@property
|
|
99
|
-
def usage(self) -> CompletionsUsage | None:
|
|
100
|
-
"""Returns the usage of the chat completion."""
|
|
101
|
-
return self.response.usage
|
|
102
|
-
|
|
103
|
-
@computed_field
|
|
104
|
-
@property
|
|
105
|
-
def input_tokens(self) -> int | None:
|
|
106
|
-
"""Returns the number of input tokens."""
|
|
107
|
-
return self.usage.prompt_tokens if self.usage else None
|
|
108
|
-
|
|
109
|
-
@computed_field
|
|
110
|
-
@property
|
|
111
|
-
def cached_tokens(self) -> int | None:
|
|
112
|
-
"""Returns the number of cached tokens."""
|
|
113
|
-
return None
|
|
114
|
-
|
|
115
|
-
@computed_field
|
|
116
|
-
@property
|
|
117
|
-
def output_tokens(self) -> int | None:
|
|
118
|
-
"""Returns the number of output tokens."""
|
|
119
|
-
return self.usage.completion_tokens if self.usage else None
|
|
120
|
-
|
|
121
|
-
@computed_field
|
|
122
|
-
@cached_property
|
|
123
|
-
def message_param(self) -> SerializeAsAny[AssistantMessage]:
|
|
124
|
-
"""Returns the assistants's response as a message parameter."""
|
|
125
|
-
message_param = self.response.choices[0].message
|
|
126
|
-
return AssistantMessage(
|
|
127
|
-
content=message_param.content, tool_calls=message_param.tool_calls
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
@cached_property
|
|
131
|
-
def tools(self) -> list[AzureTool] | None:
|
|
132
|
-
"""Returns any available tool calls as their `AzureTool` definition.
|
|
133
|
-
|
|
134
|
-
Raises:
|
|
135
|
-
ValidationError: if a tool call doesn't match the tool's schema.
|
|
136
|
-
ValueError: if the model refused to response, in which case the error
|
|
137
|
-
message will be the refusal.
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
tool_calls = self.response.choices[0].message.tool_calls
|
|
141
|
-
if not self.tool_types or not tool_calls:
|
|
142
|
-
return None
|
|
143
|
-
|
|
144
|
-
extracted_tools = []
|
|
145
|
-
for tool_call in tool_calls:
|
|
146
|
-
for tool_type in self.tool_types:
|
|
147
|
-
if tool_call.function.name == tool_type._name():
|
|
148
|
-
extracted_tools.append(tool_type.from_tool_call(tool_call))
|
|
149
|
-
break
|
|
150
|
-
|
|
151
|
-
return extracted_tools
|
|
152
|
-
|
|
153
|
-
@cached_property
|
|
154
|
-
def tool(self) -> AzureTool | None:
|
|
155
|
-
"""Returns the 0th tool for the 0th choice message.
|
|
156
|
-
|
|
157
|
-
Raises:
|
|
158
|
-
ValidationError: if the tool call doesn't match the tool's schema.
|
|
159
|
-
ValueError: if the model refused to response, in which case the error
|
|
160
|
-
message will be the refusal.
|
|
161
|
-
"""
|
|
162
|
-
if tools := self.tools:
|
|
163
|
-
return tools[0]
|
|
164
|
-
return None
|
|
165
|
-
|
|
166
|
-
@classmethod
|
|
167
|
-
def _get_tool_message(cls, tool: AzureTool, output: str) -> ToolMessage:
|
|
168
|
-
"""Returns a tool message for the tool call."""
|
|
169
|
-
tool_message = ToolMessage(
|
|
170
|
-
content=output,
|
|
171
|
-
tool_call_id=tool.tool_call.id, # pyright: ignore [reportOptionalMemberAccess]
|
|
172
|
-
)
|
|
173
|
-
tool_message.name = tool._name() # pyright: ignore [reportCallIssue, reportAttributeAccessIssue]
|
|
174
|
-
return tool_message
|
|
175
|
-
|
|
176
|
-
@classmethod
|
|
177
|
-
@transform_tool_outputs
|
|
178
|
-
def tool_message_params(
|
|
179
|
-
cls, tools_and_outputs: Sequence[tuple[AzureTool, str]]
|
|
180
|
-
) -> list[ToolMessage]:
|
|
181
|
-
"""Returns the tool message parameters for tool call results.
|
|
182
|
-
|
|
183
|
-
Args:
|
|
184
|
-
tools_and_outputs: The sequence of tools and their outputs from which the tool
|
|
185
|
-
message parameters should be constructed.
|
|
186
|
-
|
|
187
|
-
Returns:
|
|
188
|
-
The list of constructed `ChatCompletionToolMessageParam` parameters.
|
|
189
|
-
"""
|
|
190
|
-
return [
|
|
191
|
-
cls._get_tool_message(tool, output) for tool, output in tools_and_outputs
|
|
192
|
-
]
|
|
193
|
-
|
|
194
|
-
@property
|
|
195
|
-
def common_finish_reasons(self) -> list[FinishReason] | None:
|
|
196
|
-
"""Provider-agnostic finish reasons."""
|
|
197
|
-
return _convert_finish_reasons_to_common_finish_reasons(
|
|
198
|
-
cast(list[str], self.finish_reasons)
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
@property
|
|
202
|
-
def common_message_param(self) -> BaseMessageParam:
|
|
203
|
-
return AzureMessageParamConverter.from_provider([self.message_param])[0]
|
|
204
|
-
|
|
205
|
-
@property
|
|
206
|
-
def common_user_message_param(self) -> BaseMessageParam | None:
|
|
207
|
-
if not self.user_message_param:
|
|
208
|
-
return None
|
|
209
|
-
return AzureMessageParamConverter.from_provider([self.user_message_param])[0]
|
|
210
|
-
|
|
211
|
-
@computed_field
|
|
212
|
-
@property
|
|
213
|
-
def cost_metadata(self) -> CostMetadata:
|
|
214
|
-
"""Get metadata required for cost calculation."""
|
|
215
|
-
return super().cost_metadata
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"""This module contains the `AzureCallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from typing import cast
|
|
7
|
-
|
|
8
|
-
from azure.ai.inference.models import (
|
|
9
|
-
CompletionsFinishReason,
|
|
10
|
-
CompletionsUsage,
|
|
11
|
-
StreamingChatCompletionsUpdate,
|
|
12
|
-
)
|
|
13
|
-
from pydantic import SkipValidation
|
|
14
|
-
|
|
15
|
-
from ..base import BaseCallResponseChunk
|
|
16
|
-
from ..base.types import CostMetadata, FinishReason
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class AzureCallResponseChunk(
|
|
20
|
-
BaseCallResponseChunk[StreamingChatCompletionsUpdate, CompletionsFinishReason]
|
|
21
|
-
):
|
|
22
|
-
"""A convenience wrapper around the Azure `ChatCompletionChunk` streamed chunks.
|
|
23
|
-
|
|
24
|
-
When calling the Azure API using a function decorated with `azure_call` and
|
|
25
|
-
`stream` set to `True`, the stream will contain `AzureResponseChunk` instances with
|
|
26
|
-
properties that allow for more convenient access to commonly used attributes.
|
|
27
|
-
|
|
28
|
-
Example:
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
from mirascope.core import prompt_template
|
|
32
|
-
from mirascope.core.azure import azure_call
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@azure_call("gpt-4o-mini", stream=True)
|
|
36
|
-
def recommend_book(genre: str) -> str:
|
|
37
|
-
return f"Recommend a {genre} book"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
stream = recommend_book("fantasy") # response is an `AzureStream`
|
|
41
|
-
for chunk, _ in stream:
|
|
42
|
-
print(chunk.content, end="", flush=True)
|
|
43
|
-
```
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
chunk: SkipValidation[StreamingChatCompletionsUpdate]
|
|
47
|
-
|
|
48
|
-
@property
|
|
49
|
-
def content(self) -> str:
|
|
50
|
-
"""Returns the content for the 0th choice delta."""
|
|
51
|
-
delta = None
|
|
52
|
-
if self.chunk.choices:
|
|
53
|
-
delta = self.chunk.choices[0].delta
|
|
54
|
-
return delta.content if delta is not None and delta.content else ""
|
|
55
|
-
|
|
56
|
-
@property
|
|
57
|
-
def finish_reasons(self) -> list[CompletionsFinishReason]:
|
|
58
|
-
"""Returns the finish reasons of the response."""
|
|
59
|
-
return [
|
|
60
|
-
finish_reason
|
|
61
|
-
if isinstance(finish_reason, CompletionsFinishReason)
|
|
62
|
-
else CompletionsFinishReason(finish_reason)
|
|
63
|
-
for choice in self.chunk.choices
|
|
64
|
-
if (finish_reason := choice.finish_reason)
|
|
65
|
-
]
|
|
66
|
-
|
|
67
|
-
@property
|
|
68
|
-
def model(self) -> str:
|
|
69
|
-
"""Returns the name of the response model."""
|
|
70
|
-
return self.chunk.model
|
|
71
|
-
|
|
72
|
-
@property
|
|
73
|
-
def id(self) -> str:
|
|
74
|
-
"""Returns the id of the response."""
|
|
75
|
-
return self.chunk.id
|
|
76
|
-
|
|
77
|
-
@property
|
|
78
|
-
def usage(self) -> CompletionsUsage | None:
|
|
79
|
-
"""Returns the usage of the chat completion."""
|
|
80
|
-
return self.chunk.usage
|
|
81
|
-
|
|
82
|
-
@property
|
|
83
|
-
def input_tokens(self) -> int | None:
|
|
84
|
-
"""Returns the number of input tokens."""
|
|
85
|
-
return self.usage.prompt_tokens if self.usage else None
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def cached_tokens(self) -> int:
|
|
89
|
-
"""Returns the number of cached tokens."""
|
|
90
|
-
return 0
|
|
91
|
-
|
|
92
|
-
@property
|
|
93
|
-
def output_tokens(self) -> int | None:
|
|
94
|
-
"""Returns the number of output tokens."""
|
|
95
|
-
return self.usage.completion_tokens if self.usage else None
|
|
96
|
-
|
|
97
|
-
@property
|
|
98
|
-
def cost_metadata(self) -> CostMetadata:
|
|
99
|
-
"""Returns the cost metadata."""
|
|
100
|
-
return super().cost_metadata
|
|
101
|
-
|
|
102
|
-
@property
|
|
103
|
-
def common_finish_reasons(self) -> list[FinishReason] | None:
|
|
104
|
-
"""Provider-agnostic finish reasons."""
|
|
105
|
-
return cast(list[FinishReason], self.finish_reasons)
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"""This module defines the function return type for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from azure.ai.inference import ChatCompletionsClient
|
|
4
|
-
from azure.ai.inference.aio import ChatCompletionsClient as AsyncChatCompletionsClient
|
|
5
|
-
from azure.ai.inference.models import ChatRequestMessage
|
|
6
|
-
|
|
7
|
-
from ..base import BaseDynamicConfig, BaseMessageParam
|
|
8
|
-
from .call_params import AzureCallParams
|
|
9
|
-
|
|
10
|
-
AsyncAzureDynamicConfig = BaseDynamicConfig[
|
|
11
|
-
ChatRequestMessage | BaseMessageParam, AzureCallParams, AsyncChatCompletionsClient
|
|
12
|
-
]
|
|
13
|
-
AzureDynamicConfig = BaseDynamicConfig[
|
|
14
|
-
ChatRequestMessage | BaseMessageParam, AzureCallParams, ChatCompletionsClient
|
|
15
|
-
]
|
|
16
|
-
"""The function return type for functions wrapped with the `azure_call` decorator.
|
|
17
|
-
|
|
18
|
-
Example:
|
|
19
|
-
|
|
20
|
-
```python
|
|
21
|
-
from mirascope.core import prompt_template
|
|
22
|
-
from mirascope.core.azure import AzureDynamicConfig, azure_call
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@azure_call("gpt-4o-mini")
|
|
26
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
27
|
-
def recommend_book(genre: str) -> AzureDynamicConfig:
|
|
28
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
29
|
-
```
|
|
30
|
-
"""
|
mirascope/core/azure/py.typed
DELETED
|
File without changes
|
mirascope/core/azure/stream.py
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"""The `AzureStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import datetime
|
|
7
|
-
|
|
8
|
-
from azure.ai.inference.models import (
|
|
9
|
-
AssistantMessage,
|
|
10
|
-
ChatChoice,
|
|
11
|
-
ChatCompletions,
|
|
12
|
-
ChatCompletionsToolCall,
|
|
13
|
-
ChatCompletionsToolDefinition,
|
|
14
|
-
ChatRequestMessage,
|
|
15
|
-
ChatResponseMessage,
|
|
16
|
-
CompletionsFinishReason,
|
|
17
|
-
CompletionsUsage,
|
|
18
|
-
FunctionCall,
|
|
19
|
-
ToolMessage,
|
|
20
|
-
UserMessage,
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
from ..base.stream import BaseStream
|
|
24
|
-
from ..base.types import CostMetadata
|
|
25
|
-
from .call_params import AzureCallParams
|
|
26
|
-
from .call_response import AzureCallResponse
|
|
27
|
-
from .call_response_chunk import AzureCallResponseChunk
|
|
28
|
-
from .dynamic_config import AsyncAzureDynamicConfig, AzureDynamicConfig
|
|
29
|
-
from .tool import AzureTool
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class AzureStream(
|
|
33
|
-
BaseStream[
|
|
34
|
-
AzureCallResponse,
|
|
35
|
-
AzureCallResponseChunk,
|
|
36
|
-
UserMessage,
|
|
37
|
-
AssistantMessage,
|
|
38
|
-
ToolMessage,
|
|
39
|
-
ChatRequestMessage,
|
|
40
|
-
AzureTool,
|
|
41
|
-
ChatCompletionsToolDefinition,
|
|
42
|
-
AsyncAzureDynamicConfig | AzureDynamicConfig,
|
|
43
|
-
AzureCallParams,
|
|
44
|
-
CompletionsFinishReason,
|
|
45
|
-
]
|
|
46
|
-
):
|
|
47
|
-
"""A class for convenience around streaming Azure LLM calls.
|
|
48
|
-
|
|
49
|
-
Example:
|
|
50
|
-
|
|
51
|
-
```python
|
|
52
|
-
from mirascope.core import prompt_template
|
|
53
|
-
from mirascope.core.azure import azure_call
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@azure_call("gpt-4o-mini", stream=True)
|
|
57
|
-
def recommend_book(genre: str) -> str:
|
|
58
|
-
return f"Recommend a {genre} book"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
stream = recommend_book("fantasy") # returns `AzureStream` instance
|
|
62
|
-
for chunk, _ in stream:
|
|
63
|
-
print(chunk.content, end="", flush=True)
|
|
64
|
-
```
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
_provider = "azure"
|
|
68
|
-
|
|
69
|
-
def _construct_message_param(
|
|
70
|
-
self,
|
|
71
|
-
tool_calls: list[ChatCompletionsToolCall] | None = None,
|
|
72
|
-
content: str | None = None,
|
|
73
|
-
) -> AssistantMessage:
|
|
74
|
-
"""Constructs the message parameter for the assistant."""
|
|
75
|
-
message_param = AssistantMessage(content=content)
|
|
76
|
-
if tool_calls:
|
|
77
|
-
message_param["tool_calls"] = [
|
|
78
|
-
ChatCompletionsToolCall(
|
|
79
|
-
function=FunctionCall(
|
|
80
|
-
arguments=tool_call.function.arguments,
|
|
81
|
-
name=tool_call.function.name,
|
|
82
|
-
),
|
|
83
|
-
id=tool_call.id,
|
|
84
|
-
)
|
|
85
|
-
for tool_call in tool_calls
|
|
86
|
-
]
|
|
87
|
-
return message_param
|
|
88
|
-
|
|
89
|
-
def construct_call_response(self) -> AzureCallResponse:
|
|
90
|
-
"""Constructs the call response from a consumed AzureStream.
|
|
91
|
-
|
|
92
|
-
Raises:
|
|
93
|
-
ValueError: if the stream has not yet been consumed.
|
|
94
|
-
"""
|
|
95
|
-
if not hasattr(self, "message_param"):
|
|
96
|
-
raise ValueError(
|
|
97
|
-
"No stream response, check if the stream has been consumed."
|
|
98
|
-
)
|
|
99
|
-
message = ChatResponseMessage(
|
|
100
|
-
role=self.message_param["role"],
|
|
101
|
-
content=self.message_param.get("content", ""),
|
|
102
|
-
tool_calls=self.message_param.get("tool_calls", []),
|
|
103
|
-
)
|
|
104
|
-
if not self.input_tokens and not self.output_tokens:
|
|
105
|
-
usage = CompletionsUsage(
|
|
106
|
-
completion_tokens=0, prompt_tokens=0, total_tokens=0
|
|
107
|
-
)
|
|
108
|
-
else:
|
|
109
|
-
usage = CompletionsUsage(
|
|
110
|
-
prompt_tokens=int(self.input_tokens or 0),
|
|
111
|
-
completion_tokens=int(self.output_tokens or 0),
|
|
112
|
-
total_tokens=int(self.input_tokens or 0) + int(self.output_tokens or 0),
|
|
113
|
-
)
|
|
114
|
-
completion = ChatCompletions(
|
|
115
|
-
id=self.id if self.id else "",
|
|
116
|
-
model=self.model,
|
|
117
|
-
choices=[
|
|
118
|
-
ChatChoice(
|
|
119
|
-
finish_reason=self.finish_reasons[0]
|
|
120
|
-
if self.finish_reasons
|
|
121
|
-
else "stop",
|
|
122
|
-
index=0,
|
|
123
|
-
message=message,
|
|
124
|
-
)
|
|
125
|
-
],
|
|
126
|
-
created=datetime.datetime.now(),
|
|
127
|
-
usage=usage,
|
|
128
|
-
)
|
|
129
|
-
return AzureCallResponse(
|
|
130
|
-
metadata=self.metadata,
|
|
131
|
-
response=completion,
|
|
132
|
-
tool_types=self.tool_types,
|
|
133
|
-
prompt_template=self.prompt_template,
|
|
134
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
135
|
-
dynamic_config=self.dynamic_config,
|
|
136
|
-
messages=self.messages,
|
|
137
|
-
call_params=self.call_params,
|
|
138
|
-
call_kwargs=self.call_kwargs,
|
|
139
|
-
user_message_param=self.user_message_param,
|
|
140
|
-
start_time=self.start_time,
|
|
141
|
-
end_time=self.end_time,
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
@property
|
|
145
|
-
def cost_metadata(self) -> CostMetadata:
|
|
146
|
-
"""Get metadata required for cost calculation."""
|
|
147
|
-
return super().cost_metadata
|
mirascope/core/azure/tool.py
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"""The `AzureTool` class for easy tool usage with Azure LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import jiter
|
|
9
|
-
from azure.ai.inference.models import (
|
|
10
|
-
ChatCompletionsToolCall,
|
|
11
|
-
ChatCompletionsToolDefinition,
|
|
12
|
-
FunctionDefinition,
|
|
13
|
-
)
|
|
14
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
15
|
-
|
|
16
|
-
from ..base import BaseTool, GenerateJsonSchemaNoTitles, ToolConfig
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class GenerateAzureStrictToolJsonSchema(GenerateJsonSchemaNoTitles):
|
|
20
|
-
_azure_strict = True
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class AzureToolConfig(ToolConfig, total=False):
|
|
24
|
-
"""A tool configuration for Azure-specific features."""
|
|
25
|
-
|
|
26
|
-
strict: bool
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class AzureTool(BaseTool):
|
|
30
|
-
"""A class for defining tools for Azure LLM calls.
|
|
31
|
-
|
|
32
|
-
Example:
|
|
33
|
-
|
|
34
|
-
```python
|
|
35
|
-
from mirascope.core import prompt_template
|
|
36
|
-
from mirascope.core.azure import azure_call
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def format_book(title: str, author: str) -> str:
|
|
40
|
-
return f"{title} by {author}"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@azure_call("gpt-4o-mini", tools=[format_book])
|
|
44
|
-
def recommend_book(genre: str) -> str:
|
|
45
|
-
return f"Recommend a {genre} book"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
response = recommend_book("fantasy")
|
|
49
|
-
if tool := response.tool: # returns an `AzureTool` instance
|
|
50
|
-
print(tool.call())
|
|
51
|
-
```
|
|
52
|
-
"""
|
|
53
|
-
|
|
54
|
-
__provider__ = "azure"
|
|
55
|
-
__tool_config_type__ = AzureToolConfig
|
|
56
|
-
|
|
57
|
-
tool_call: SkipJsonSchema[ChatCompletionsToolCall]
|
|
58
|
-
|
|
59
|
-
@classmethod
|
|
60
|
-
def tool_schema(cls) -> ChatCompletionsToolDefinition:
|
|
61
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
62
|
-
|
|
63
|
-
Example:
|
|
64
|
-
```python
|
|
65
|
-
from mirascope.core.azure import AzureTool
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def format_book(title: str, author: str) -> str:
|
|
69
|
-
return f"{title} by {author}"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
tool_type = AzureTool.type_from_fn(format_book)
|
|
73
|
-
print(tool_type.tool_schema()) # prints the Azure-specific tool schema
|
|
74
|
-
```
|
|
75
|
-
"""
|
|
76
|
-
fn = FunctionDefinition(name=cls._name(), description=cls._description())
|
|
77
|
-
schema_generator = GenerateJsonSchemaNoTitles
|
|
78
|
-
model_schema = cls.model_json_schema(schema_generator=schema_generator)
|
|
79
|
-
if model_schema["properties"]:
|
|
80
|
-
fn["parameters"] = model_schema
|
|
81
|
-
return ChatCompletionsToolDefinition(function=fn)
|
|
82
|
-
|
|
83
|
-
@classmethod
|
|
84
|
-
def from_tool_call(cls, tool_call: ChatCompletionsToolCall) -> AzureTool:
|
|
85
|
-
"""Constructs an `AzureTool` instance from a `tool_call`.
|
|
86
|
-
|
|
87
|
-
Args:
|
|
88
|
-
tool_call: The Azure tool call from which to construct this tool instance.
|
|
89
|
-
"""
|
|
90
|
-
model_json = {"tool_call": tool_call}
|
|
91
|
-
if args := tool_call.function.arguments:
|
|
92
|
-
model_json |= jiter.from_json(args.encode())
|
|
93
|
-
return cls.model_validate(model_json)
|
mirascope/core/base/__init__.py
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"""Mirascope Base Classes."""
|
|
2
|
-
|
|
3
|
-
from . import _partial, _utils
|
|
4
|
-
from ._call_factory import call_factory
|
|
5
|
-
from ._utils import BaseType
|
|
6
|
-
from .call_kwargs import BaseCallKwargs
|
|
7
|
-
from .call_params import BaseCallParams, CommonCallParams
|
|
8
|
-
from .call_response import BaseCallResponse, transform_tool_outputs
|
|
9
|
-
from .call_response_chunk import BaseCallResponseChunk
|
|
10
|
-
from .dynamic_config import BaseDynamicConfig
|
|
11
|
-
from .from_call_args import FromCallArgs
|
|
12
|
-
from .merge_decorators import merge_decorators
|
|
13
|
-
from .message_param import (
|
|
14
|
-
AudioPart,
|
|
15
|
-
AudioURLPart,
|
|
16
|
-
BaseMessageParam,
|
|
17
|
-
CacheControlPart,
|
|
18
|
-
DocumentPart,
|
|
19
|
-
DocumentURLPart,
|
|
20
|
-
ImagePart,
|
|
21
|
-
ImageURLPart,
|
|
22
|
-
TextPart,
|
|
23
|
-
ToolCallPart,
|
|
24
|
-
ToolResultPart,
|
|
25
|
-
)
|
|
26
|
-
from .messages import Messages
|
|
27
|
-
from .metadata import Metadata
|
|
28
|
-
from .prompt import BasePrompt, metadata, prompt_template
|
|
29
|
-
from .response_model_config_dict import ResponseModelConfigDict
|
|
30
|
-
from .stream import BaseStream
|
|
31
|
-
from .structured_stream import BaseStructuredStream
|
|
32
|
-
from .tool import BaseTool, GenerateJsonSchemaNoTitles, ToolConfig
|
|
33
|
-
from .toolkit import BaseToolKit, toolkit_tool
|
|
34
|
-
from .types import (
|
|
35
|
-
AudioSegment,
|
|
36
|
-
CostMetadata,
|
|
37
|
-
JsonableType,
|
|
38
|
-
LocalProvider,
|
|
39
|
-
Provider,
|
|
40
|
-
Usage,
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
__all__ = [
|
|
44
|
-
"AudioPart",
|
|
45
|
-
"AudioSegment",
|
|
46
|
-
"AudioURLPart",
|
|
47
|
-
"BaseCallKwargs",
|
|
48
|
-
"BaseCallParams",
|
|
49
|
-
"BaseCallResponse",
|
|
50
|
-
"BaseCallResponseChunk",
|
|
51
|
-
"BaseDynamicConfig",
|
|
52
|
-
"BaseMessageParam",
|
|
53
|
-
"BasePrompt",
|
|
54
|
-
"BaseStream",
|
|
55
|
-
"BaseStructuredStream",
|
|
56
|
-
"BaseTool",
|
|
57
|
-
"BaseToolKit",
|
|
58
|
-
"BaseType",
|
|
59
|
-
"CacheControlPart",
|
|
60
|
-
"CommonCallParams",
|
|
61
|
-
"CostMetadata",
|
|
62
|
-
"DocumentPart",
|
|
63
|
-
"DocumentURLPart",
|
|
64
|
-
"FromCallArgs",
|
|
65
|
-
"GenerateJsonSchemaNoTitles",
|
|
66
|
-
"ImagePart",
|
|
67
|
-
"ImageURLPart",
|
|
68
|
-
"JsonableType",
|
|
69
|
-
"LocalProvider",
|
|
70
|
-
"Messages",
|
|
71
|
-
"Metadata",
|
|
72
|
-
"ResponseModelConfigDict",
|
|
73
|
-
"TextPart",
|
|
74
|
-
"ToolCallPart",
|
|
75
|
-
"ToolConfig",
|
|
76
|
-
"ToolResultPart",
|
|
77
|
-
"Usage",
|
|
78
|
-
"_partial",
|
|
79
|
-
"_utils",
|
|
80
|
-
"call_factory",
|
|
81
|
-
"merge_decorators",
|
|
82
|
-
"metadata",
|
|
83
|
-
"prompt_template",
|
|
84
|
-
"toolkit_tool",
|
|
85
|
-
"transform_tool_outputs",
|
|
86
|
-
]
|