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,28 +0,0 @@
|
|
|
1
|
-
"""This module defines the function return type for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from vertexai.generative_models import (
|
|
4
|
-
Content,
|
|
5
|
-
GenerativeModel,
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
from ..base import BaseDynamicConfig, BaseMessageParam
|
|
9
|
-
from .call_params import VertexCallParams
|
|
10
|
-
|
|
11
|
-
VertexDynamicConfig = BaseDynamicConfig[
|
|
12
|
-
Content | BaseMessageParam, VertexCallParams, GenerativeModel
|
|
13
|
-
]
|
|
14
|
-
"""The function return type for functions wrapped with the `vertex_call` decorator.
|
|
15
|
-
|
|
16
|
-
Example:
|
|
17
|
-
|
|
18
|
-
```python
|
|
19
|
-
from mirascope.core import prompt_template
|
|
20
|
-
from mirascope.core.vertex import VertexDynamicConfig, vertex_call
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@vertex_call("gemini-1.5-flash")
|
|
24
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
25
|
-
def recommend_book(genre: str) -> VertexDynamicConfig:
|
|
26
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
27
|
-
```
|
|
28
|
-
"""
|
mirascope/core/vertex/stream.py
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"""The `VertexStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from typing import cast
|
|
7
|
-
|
|
8
|
-
from google.cloud.aiplatform_v1beta1.types import FunctionCall
|
|
9
|
-
from vertexai.generative_models import (
|
|
10
|
-
Candidate,
|
|
11
|
-
Content,
|
|
12
|
-
FinishReason,
|
|
13
|
-
GenerationResponse,
|
|
14
|
-
Part,
|
|
15
|
-
Tool,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
from ..base.stream import BaseStream
|
|
19
|
-
from ..base.types import CostMetadata
|
|
20
|
-
from .call_params import VertexCallParams
|
|
21
|
-
from .call_response import VertexCallResponse
|
|
22
|
-
from .call_response_chunk import VertexCallResponseChunk
|
|
23
|
-
from .dynamic_config import VertexDynamicConfig
|
|
24
|
-
from .tool import VertexTool
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class VertexStream(
|
|
28
|
-
BaseStream[
|
|
29
|
-
VertexCallResponse,
|
|
30
|
-
VertexCallResponseChunk,
|
|
31
|
-
Content,
|
|
32
|
-
Content,
|
|
33
|
-
Content,
|
|
34
|
-
Content,
|
|
35
|
-
VertexTool,
|
|
36
|
-
Tool,
|
|
37
|
-
VertexDynamicConfig,
|
|
38
|
-
VertexCallParams,
|
|
39
|
-
FinishReason,
|
|
40
|
-
]
|
|
41
|
-
):
|
|
42
|
-
"""A class for convenience around streaming Vertex LLM calls.
|
|
43
|
-
|
|
44
|
-
Example:
|
|
45
|
-
|
|
46
|
-
```python
|
|
47
|
-
from mirascope.core import prompt_template
|
|
48
|
-
from mirascope.core.vertex import vertex_call
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
@vertex_call("gemini-1.5-flash", stream=True)
|
|
52
|
-
def recommend_book(genre: str) -> str:
|
|
53
|
-
return f"Recommend a {genre} book"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
stream = recommend_book("fantasy") # returns `VertexStream` instance
|
|
57
|
-
for chunk, _ in stream:
|
|
58
|
-
print(chunk.content, end="", flush=True)
|
|
59
|
-
```
|
|
60
|
-
"""
|
|
61
|
-
|
|
62
|
-
_provider = "vertex"
|
|
63
|
-
|
|
64
|
-
def _construct_message_param(
|
|
65
|
-
self,
|
|
66
|
-
tool_calls: list[FunctionCall] | None = None,
|
|
67
|
-
content: str | None = None,
|
|
68
|
-
) -> Content:
|
|
69
|
-
"""Constructs the message parameter for the assistant."""
|
|
70
|
-
return Content(
|
|
71
|
-
role="model",
|
|
72
|
-
parts=cast(list[Part], [Part.from_text(content)] + (tool_calls or [])), # pyright: ignore [reportArgumentType]
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
def construct_call_response(self) -> VertexCallResponse:
|
|
76
|
-
"""Constructs the call response from a consumed VertexStream.
|
|
77
|
-
|
|
78
|
-
Raises:
|
|
79
|
-
ValueError: if the stream has not yet been consumed.
|
|
80
|
-
"""
|
|
81
|
-
if not hasattr(self, "message_param"):
|
|
82
|
-
raise ValueError(
|
|
83
|
-
"No stream response, check if the stream has been consumed."
|
|
84
|
-
)
|
|
85
|
-
response = GenerationResponse.from_dict(
|
|
86
|
-
{
|
|
87
|
-
"candidates": [
|
|
88
|
-
Candidate.from_dict(
|
|
89
|
-
{
|
|
90
|
-
"finish_reason": self.finish_reasons[0]
|
|
91
|
-
if self.finish_reasons
|
|
92
|
-
else FinishReason.STOP,
|
|
93
|
-
"content": Content(
|
|
94
|
-
role=self.message_param.role,
|
|
95
|
-
parts=self.message_param.parts,
|
|
96
|
-
).to_dict(),
|
|
97
|
-
}
|
|
98
|
-
).to_dict()
|
|
99
|
-
]
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
return VertexCallResponse(
|
|
103
|
-
metadata=self.metadata,
|
|
104
|
-
response=response,
|
|
105
|
-
tool_types=self.tool_types,
|
|
106
|
-
prompt_template=self.prompt_template,
|
|
107
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
108
|
-
dynamic_config=self.dynamic_config,
|
|
109
|
-
messages=self.messages,
|
|
110
|
-
call_params=self.call_params,
|
|
111
|
-
call_kwargs=self.call_kwargs,
|
|
112
|
-
user_message_param=self.user_message_param,
|
|
113
|
-
start_time=self.start_time,
|
|
114
|
-
end_time=self.end_time,
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
@property
|
|
118
|
-
def cost_metadata(self) -> CostMetadata:
|
|
119
|
-
return super().cost_metadata
|
mirascope/core/vertex/tool.py
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"""The `VertexTool` class for easy tool usage with Google's Vertex LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
from google.cloud.aiplatform_v1beta1.types import FunctionCall
|
|
11
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
12
|
-
from vertexai.generative_models import FunctionDeclaration, Tool
|
|
13
|
-
|
|
14
|
-
from ..base import BaseTool
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class VertexTool(BaseTool):
|
|
18
|
-
"""A class for defining tools for Vertex LLM calls.
|
|
19
|
-
|
|
20
|
-
Example:
|
|
21
|
-
|
|
22
|
-
```python
|
|
23
|
-
from mirascope.core import prompt_template
|
|
24
|
-
from mirascope.core.vertex import vertex_call
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def format_book(title: str, author: str) -> str:
|
|
28
|
-
return f"{title} by {author}"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@vertex_call("gemini-1.5-flash", tools=[format_book])
|
|
32
|
-
def recommend_book(genre: str) -> str:
|
|
33
|
-
return f"Recommend a {genre} book"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
response = recommend_book("fantasy")
|
|
37
|
-
if tool := response.tool: # returns an `VertexTool` instance
|
|
38
|
-
print(tool.call())
|
|
39
|
-
```
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
__provider__ = "vertex"
|
|
43
|
-
|
|
44
|
-
tool_call: SkipJsonSchema[FunctionCall]
|
|
45
|
-
|
|
46
|
-
@classmethod
|
|
47
|
-
def tool_schema(cls) -> Tool:
|
|
48
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
49
|
-
|
|
50
|
-
Example:
|
|
51
|
-
```python
|
|
52
|
-
from mirascope.core.vertex import VertexTool
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def format_book(title: str, author: str) -> str:
|
|
56
|
-
return f"{title} by {author}"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
tool_type = VertexTool.type_from_fn(format_book)
|
|
60
|
-
print(tool_type.tool_schema()) # prints the Vertex-specific tool schema
|
|
61
|
-
```
|
|
62
|
-
"""
|
|
63
|
-
model_schema = cls.model_json_schema()
|
|
64
|
-
fn: dict[str, Any] = {"name": cls._name(), "description": cls._description()}
|
|
65
|
-
if model_schema["properties"]:
|
|
66
|
-
fn["parameters"] = model_schema
|
|
67
|
-
if model_schema["required"]:
|
|
68
|
-
fn["parameters"]["required"] = model_schema["required"]
|
|
69
|
-
if "parameters" in fn:
|
|
70
|
-
if "$defs" in fn["parameters"]:
|
|
71
|
-
raise ValueError(
|
|
72
|
-
"Unfortunately Google's Vertex API cannot handle nested structures "
|
|
73
|
-
"with $defs."
|
|
74
|
-
)
|
|
75
|
-
|
|
76
|
-
def handle_enum_schema(prop_schema: dict[str, Any]) -> dict[str, Any]:
|
|
77
|
-
if "enum" in prop_schema:
|
|
78
|
-
prop_schema["format"] = "enum"
|
|
79
|
-
return prop_schema
|
|
80
|
-
|
|
81
|
-
fn["parameters"]["properties"] = {
|
|
82
|
-
prop: {
|
|
83
|
-
key: value
|
|
84
|
-
for key, value in handle_enum_schema(prop_schema).items()
|
|
85
|
-
if key != "default"
|
|
86
|
-
}
|
|
87
|
-
for prop, prop_schema in fn["parameters"]["properties"].items()
|
|
88
|
-
}
|
|
89
|
-
return Tool(function_declarations=[FunctionDeclaration(**fn)])
|
|
90
|
-
|
|
91
|
-
@classmethod
|
|
92
|
-
def from_tool_call(cls, tool_call: FunctionCall) -> VertexTool:
|
|
93
|
-
"""Constructs an `VertexTool` instance from a `tool_call`.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
tool_call: The Vertex tool call from which to construct this tool instance.
|
|
97
|
-
"""
|
|
98
|
-
model_json = {"tool_call": tool_call}
|
|
99
|
-
if tool_call.args:
|
|
100
|
-
model_json |= dict(tool_call.args.items())
|
|
101
|
-
return cls.model_validate(model_json)
|
mirascope/core/xai/__init__.py
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"""The Mirascope xAI Module."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeAlias
|
|
4
|
-
|
|
5
|
-
from ..openai import OpenAIMessageParam
|
|
6
|
-
from ._call import xai_call
|
|
7
|
-
from ._call import xai_call as call
|
|
8
|
-
from .call_params import XAICallParams
|
|
9
|
-
from .call_response import XAICallResponse
|
|
10
|
-
from .call_response_chunk import XAICallResponseChunk
|
|
11
|
-
from .dynamic_config import AsyncXAIDynamicConfig, XAIDynamicConfig
|
|
12
|
-
from .stream import XAIStream
|
|
13
|
-
from .tool import XAITool
|
|
14
|
-
|
|
15
|
-
XAIMessageParam: TypeAlias = OpenAIMessageParam
|
|
16
|
-
|
|
17
|
-
__all__ = [
|
|
18
|
-
"AsyncXAIDynamicConfig",
|
|
19
|
-
"XAICallParams",
|
|
20
|
-
"XAICallResponse",
|
|
21
|
-
"XAICallResponseChunk",
|
|
22
|
-
"XAIDynamicConfig",
|
|
23
|
-
"XAIMessageParam",
|
|
24
|
-
"XAIStream",
|
|
25
|
-
"XAITool",
|
|
26
|
-
"call",
|
|
27
|
-
"xai_call",
|
|
28
|
-
]
|
mirascope/core/xai/_call.py
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"""The `xai_call` decorator for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from ..base import call_factory
|
|
4
|
-
from ..openai._utils import (
|
|
5
|
-
get_json_output,
|
|
6
|
-
handle_stream,
|
|
7
|
-
handle_stream_async,
|
|
8
|
-
)
|
|
9
|
-
from ._utils import setup_call
|
|
10
|
-
from .call_params import XAICallParams
|
|
11
|
-
from .call_response import XAICallResponse
|
|
12
|
-
from .call_response_chunk import XAICallResponseChunk
|
|
13
|
-
from .stream import XAIStream
|
|
14
|
-
from .tool import XAITool
|
|
15
|
-
|
|
16
|
-
xai_call = call_factory(
|
|
17
|
-
TCallResponse=XAICallResponse,
|
|
18
|
-
TCallResponseChunk=XAICallResponseChunk,
|
|
19
|
-
TToolType=XAITool,
|
|
20
|
-
TStream=XAIStream,
|
|
21
|
-
default_call_params=XAICallParams(),
|
|
22
|
-
setup_call=setup_call, # pyright: ignore [reportArgumentType]
|
|
23
|
-
get_json_output=get_json_output,
|
|
24
|
-
handle_stream=handle_stream, # pyright: ignore [reportArgumentType]
|
|
25
|
-
handle_stream_async=handle_stream_async, # pyright: ignore [reportArgumentType]
|
|
26
|
-
)
|
|
27
|
-
"""A decorator for calling the xAI API with a typed function.
|
|
28
|
-
|
|
29
|
-
usage docs: learn/calls.md
|
|
30
|
-
|
|
31
|
-
This decorator is used to wrap a typed function that calls the xAI API. It parses
|
|
32
|
-
the prompt template of the wrapped function as the messages array and templates the input
|
|
33
|
-
arguments for the function into each message's template.
|
|
34
|
-
|
|
35
|
-
Example:
|
|
36
|
-
|
|
37
|
-
```python
|
|
38
|
-
from mirascope.core import prompt_template
|
|
39
|
-
from mirascope.core.xai import xai_call
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@xai_call("grok-2-latest")
|
|
43
|
-
def recommend_book(genre: str) -> str:
|
|
44
|
-
return f"Recommend a {genre} book"
|
|
45
|
-
|
|
46
|
-
response = recommend_book("fantasy")
|
|
47
|
-
print(response.content)
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
model (str): The model to use in the API call.
|
|
52
|
-
stream (bool): Whether to stream the response from the API call.
|
|
53
|
-
tools (list[BaseTool | Callable]): The tools to use in the API call.
|
|
54
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
55
|
-
should be structured.
|
|
56
|
-
output_parser (Callable[[OpenAICallResponse | ResponseModelT], Any]): A function for
|
|
57
|
-
parsing the call response whose value will be returned in place of the original
|
|
58
|
-
call response.
|
|
59
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
60
|
-
client (None): xAI does not support a custom client.
|
|
61
|
-
call_params (OpenAICallParams): The `OpenAICallParams` call parameters to use in the
|
|
62
|
-
API call.
|
|
63
|
-
|
|
64
|
-
Returns:
|
|
65
|
-
decorator (Callable): The decorator for turning a typed function into a xAI
|
|
66
|
-
routed LLM API call.
|
|
67
|
-
"""
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"""This module contains the setup_call function for OpenAI tools."""
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
from collections.abc import Awaitable, Callable
|
|
5
|
-
from typing import Any, overload
|
|
6
|
-
|
|
7
|
-
from openai import AsyncOpenAI, OpenAI
|
|
8
|
-
from openai.types.chat import (
|
|
9
|
-
ChatCompletion,
|
|
10
|
-
ChatCompletionChunk,
|
|
11
|
-
ChatCompletionMessageParam,
|
|
12
|
-
)
|
|
13
|
-
from pydantic import BaseModel
|
|
14
|
-
|
|
15
|
-
from ...base import BaseTool
|
|
16
|
-
from ...base._utils import AsyncCreateFn, CreateFn, fn_is_async
|
|
17
|
-
from ...base.call_params import CommonCallParams
|
|
18
|
-
from ...base.stream_config import StreamConfig
|
|
19
|
-
from ...openai import (
|
|
20
|
-
AsyncOpenAIDynamicConfig,
|
|
21
|
-
OpenAICallParams,
|
|
22
|
-
OpenAIDynamicConfig,
|
|
23
|
-
OpenAITool,
|
|
24
|
-
)
|
|
25
|
-
from ...openai._call_kwargs import OpenAICallKwargs
|
|
26
|
-
from ...openai._utils import setup_call as setup_call_openai
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@overload
|
|
30
|
-
def setup_call(
|
|
31
|
-
*,
|
|
32
|
-
model: str,
|
|
33
|
-
client: AsyncOpenAI | None,
|
|
34
|
-
fn: Callable[..., Awaitable[AsyncOpenAIDynamicConfig]],
|
|
35
|
-
fn_args: dict[str, Any],
|
|
36
|
-
dynamic_config: AsyncOpenAIDynamicConfig,
|
|
37
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
38
|
-
json_mode: bool,
|
|
39
|
-
call_params: OpenAICallParams | CommonCallParams,
|
|
40
|
-
response_model: type[BaseModel] | None,
|
|
41
|
-
stream: bool | StreamConfig,
|
|
42
|
-
) -> tuple[
|
|
43
|
-
AsyncCreateFn[ChatCompletion, ChatCompletionChunk],
|
|
44
|
-
str | None,
|
|
45
|
-
list[ChatCompletionMessageParam],
|
|
46
|
-
list[type[OpenAITool]] | None,
|
|
47
|
-
OpenAICallKwargs,
|
|
48
|
-
]: ...
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
@overload
|
|
52
|
-
def setup_call(
|
|
53
|
-
*,
|
|
54
|
-
model: str,
|
|
55
|
-
client: OpenAI | None,
|
|
56
|
-
fn: Callable[..., OpenAIDynamicConfig],
|
|
57
|
-
fn_args: dict[str, Any],
|
|
58
|
-
dynamic_config: OpenAIDynamicConfig,
|
|
59
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
60
|
-
json_mode: bool,
|
|
61
|
-
call_params: OpenAICallParams | CommonCallParams,
|
|
62
|
-
response_model: type[BaseModel] | None,
|
|
63
|
-
stream: bool | StreamConfig,
|
|
64
|
-
) -> tuple[
|
|
65
|
-
CreateFn[ChatCompletion, ChatCompletionChunk],
|
|
66
|
-
str | None,
|
|
67
|
-
list[ChatCompletionMessageParam],
|
|
68
|
-
list[type[OpenAITool]] | None,
|
|
69
|
-
OpenAICallKwargs,
|
|
70
|
-
]: ...
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def setup_call(
|
|
74
|
-
*,
|
|
75
|
-
model: str,
|
|
76
|
-
client: OpenAI | AsyncOpenAI | None,
|
|
77
|
-
fn: Callable[..., OpenAIDynamicConfig]
|
|
78
|
-
| Callable[..., Awaitable[AsyncOpenAIDynamicConfig]],
|
|
79
|
-
fn_args: dict[str, Any],
|
|
80
|
-
dynamic_config: OpenAIDynamicConfig | AsyncOpenAIDynamicConfig,
|
|
81
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
82
|
-
json_mode: bool,
|
|
83
|
-
call_params: OpenAICallParams | CommonCallParams,
|
|
84
|
-
response_model: type[BaseModel] | None,
|
|
85
|
-
stream: bool | StreamConfig,
|
|
86
|
-
) -> tuple[
|
|
87
|
-
CreateFn[ChatCompletion, ChatCompletionChunk]
|
|
88
|
-
| AsyncCreateFn[ChatCompletion, ChatCompletionChunk],
|
|
89
|
-
str | None,
|
|
90
|
-
list[ChatCompletionMessageParam],
|
|
91
|
-
list[type[OpenAITool]] | None,
|
|
92
|
-
OpenAICallKwargs,
|
|
93
|
-
]:
|
|
94
|
-
if not client:
|
|
95
|
-
api_key = os.environ.get("XAI_API_KEY")
|
|
96
|
-
client = (
|
|
97
|
-
AsyncOpenAI(api_key=api_key, base_url="https://api.x.ai/v1")
|
|
98
|
-
if fn_is_async(fn)
|
|
99
|
-
else OpenAI(api_key=api_key, base_url="https://api.x.ai/v1")
|
|
100
|
-
)
|
|
101
|
-
create, prompt_template, messages, tool_types, call_kwargs = setup_call_openai(
|
|
102
|
-
model=model, # pyright: ignore [reportCallIssue]
|
|
103
|
-
client=client, # pyright: ignore [reportArgumentType]
|
|
104
|
-
fn=fn, # pyright: ignore [reportArgumentType]
|
|
105
|
-
fn_args=fn_args, # pyright: ignore [reportArgumentType]
|
|
106
|
-
dynamic_config=dynamic_config,
|
|
107
|
-
tools=tools,
|
|
108
|
-
json_mode=json_mode,
|
|
109
|
-
call_params=call_params,
|
|
110
|
-
response_model=response_model,
|
|
111
|
-
stream=stream,
|
|
112
|
-
)
|
|
113
|
-
return create, prompt_template, messages, tool_types, call_kwargs
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"""usage docs: learn/calls.md#provider-specific-parameters"""
|
|
2
|
-
|
|
3
|
-
from ..openai import OpenAICallParams
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class XAICallParams(OpenAICallParams):
|
|
7
|
-
"""A simple wrapper around `OpenAICallParams.`
|
|
8
|
-
|
|
9
|
-
Since xAI supports the OpenAI spec, we change nothing here.
|
|
10
|
-
"""
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""This module contains the `XAICallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from ..openai import OpenAICallResponse
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class XAICallResponse(OpenAICallResponse):
|
|
10
|
-
"""A simpler wrapper around `OpenAICallResponse`.
|
|
11
|
-
|
|
12
|
-
Everything is the same except the `cost` property, which has been updated to use
|
|
13
|
-
xAI's cost calculations so that cost tracking works for non-OpenAI models.
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
_provider = "xai"
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""This module contains the `XAICallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from ..openai import OpenAICallResponseChunk
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class XAICallResponseChunk(OpenAICallResponseChunk):
|
|
10
|
-
"""A simpler wrapper around `OpenAICallResponse`.
|
|
11
|
-
|
|
12
|
-
Everything is the same except the `cost` property, which has been updated to use
|
|
13
|
-
xAI's cost calculations so that cost tracking works for non-OpenAI models.
|
|
14
|
-
"""
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"""This module defines the function return type for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeAlias
|
|
4
|
-
|
|
5
|
-
from ..openai import AsyncOpenAIDynamicConfig, OpenAIDynamicConfig
|
|
6
|
-
|
|
7
|
-
AsyncXAIDynamicConfig: TypeAlias = AsyncOpenAIDynamicConfig
|
|
8
|
-
XAIDynamicConfig: TypeAlias = OpenAIDynamicConfig
|
mirascope/core/xai/py.typed
DELETED
|
File without changes
|
mirascope/core/xai/stream.py
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"""The `XAIStream` class for convenience around streaming xAI LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from collections.abc import AsyncGenerator, Generator
|
|
7
|
-
|
|
8
|
-
from ..openai import OpenAIStream
|
|
9
|
-
from .call_response import XAICallResponse
|
|
10
|
-
from .call_response_chunk import XAICallResponseChunk
|
|
11
|
-
from .tool import XAITool
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class XAIStream(OpenAIStream):
|
|
15
|
-
"""A simple wrapper around `OpenAIStream`.
|
|
16
|
-
|
|
17
|
-
Everything is the same except updates to the `construct_call_response` method and
|
|
18
|
-
the `cost` property so that cost is properly calculated using xAI's cost
|
|
19
|
-
calculation method. This ensures cost calculation works for non-OpenAI models.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
_provider = "xai"
|
|
23
|
-
|
|
24
|
-
def __iter__(
|
|
25
|
-
self,
|
|
26
|
-
) -> Generator[tuple[XAICallResponseChunk, XAITool | None], None, None]:
|
|
27
|
-
yield from super().__iter__() # pyright: ignore [reportReturnType]
|
|
28
|
-
|
|
29
|
-
def __aiter__(
|
|
30
|
-
self,
|
|
31
|
-
) -> AsyncGenerator[tuple[XAICallResponseChunk, XAITool | None], None]:
|
|
32
|
-
return super().__aiter__() # pyright: ignore [reportReturnType] # pragma: no cover
|
|
33
|
-
|
|
34
|
-
@property
|
|
35
|
-
def cost(self) -> float | None:
|
|
36
|
-
"""Returns the cost of the call."""
|
|
37
|
-
response = self.construct_call_response()
|
|
38
|
-
return response.cost
|
|
39
|
-
|
|
40
|
-
def construct_call_response(self) -> XAICallResponse:
|
|
41
|
-
openai_call_response = super().construct_call_response()
|
|
42
|
-
response = XAICallResponse(
|
|
43
|
-
metadata=openai_call_response.metadata,
|
|
44
|
-
response=openai_call_response.response,
|
|
45
|
-
tool_types=openai_call_response.tool_types,
|
|
46
|
-
prompt_template=openai_call_response.prompt_template,
|
|
47
|
-
fn_args=openai_call_response.fn_args,
|
|
48
|
-
dynamic_config=openai_call_response.dynamic_config,
|
|
49
|
-
messages=openai_call_response.messages,
|
|
50
|
-
call_params=openai_call_response.call_params,
|
|
51
|
-
call_kwargs=openai_call_response.call_kwargs,
|
|
52
|
-
user_message_param=openai_call_response.user_message_param,
|
|
53
|
-
start_time=openai_call_response.start_time,
|
|
54
|
-
end_time=openai_call_response.end_time,
|
|
55
|
-
)
|
|
56
|
-
response._model = self.model
|
|
57
|
-
return response
|
mirascope/core/xai/tool.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""The `XAITool` class for easy tool usage with xAI LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from ..openai import OpenAITool
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class XAITool(OpenAITool):
|
|
10
|
-
"""A simple wrapper around `OpenAITool`.
|
|
11
|
-
|
|
12
|
-
Since xAI supports the OpenAI spec, we change nothing here.
|
|
13
|
-
"""
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Integrations with third party libraries."""
|
|
2
|
-
|
|
3
|
-
from contextlib import suppress
|
|
4
|
-
|
|
5
|
-
from ._middleware_factory import middleware_factory
|
|
6
|
-
|
|
7
|
-
with suppress(ImportError):
|
|
8
|
-
from . import logfire as logfire
|
|
9
|
-
|
|
10
|
-
with suppress(ImportError):
|
|
11
|
-
from . import langfuse as langfuse
|
|
12
|
-
|
|
13
|
-
with suppress(ImportError):
|
|
14
|
-
from . import otel as otel
|
|
15
|
-
|
|
16
|
-
__all__ = ["langfuse", "logfire", "middleware_factory", "otel"]
|