mirascope 1.24.1__tar.gz → 1.25.0__tar.gz
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-1.25.0/.claude/settings.local.json +10 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/PKG-INFO +1 -1
- mirascope-1.25.0/mirascope/core/anthropic/_thinking.py +70 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_setup_call.py +13 -1
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/call_params.py +3 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/call_response.py +23 -3
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/call_response_chunk.py +20 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/stream.py +57 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/call_response.py +24 -1
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/call_response_chunk.py +20 -2
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/stream.py +58 -2
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/mcp/_utils.py +14 -8
- {mirascope-1.24.1 → mirascope-1.25.0}/pyproject.toml +1 -1
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_setup_call.py +42 -0
- mirascope-1.25.0/tests/core/anthropic/test_call_response.py +314 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/test_call_response_chunk.py +40 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/test_stream.py +88 -1
- mirascope-1.25.0/tests/core/google/test_call_response.py +380 -0
- mirascope-1.25.0/tests/core/google/test_call_response_chunk.py +107 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/test_stream.py +125 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/mcp/test_client.py +3 -1
- {mirascope-1.24.1 → mirascope-1.25.0}/uv.lock +2525 -2525
- mirascope-1.24.1/tests/core/anthropic/test_call_response.py +0 -132
- mirascope-1.24.1/tests/core/google/test_call_response.py +0 -155
- mirascope-1.24.1/tests/core/google/test_call_response_chunk.py +0 -45
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/CODEOWNERS +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/workflows/label_issues.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/workflows/lint.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/workflows/release.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.github/workflows/tests.yml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.gitignore +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.pre-commit-config.yaml +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.vscode/extensions.json +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.vscode/launch.json +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/.vscode/settings.json +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/LICENSE +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/README.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/anthropic/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/azure/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/call_factory.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/merge_decorators.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/message_param.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/metadata.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/prompt.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/structured_stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/toolkit.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/base/types.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/bedrock/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/cohere/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/costs/calculate_cost.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/google/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/groq/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/litellm/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/mistral/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/openai/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/call_params.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/dynamic_config.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/core/xai/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/call.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/call_response.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/call_response_chunk.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/context.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/override.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/stream.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/llm/tool.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/mcp/client.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/retries/fallback.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/retries/tenacity.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/system/docker_operation.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/system/file_system.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/web/duckduckgo.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/web/httpx.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/web/parse_url_content.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/api_ref/tools/web/requests.md +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/_utils/_audio.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/_utils/_protocols.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/realtime.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/recording.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/openai/realtime/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/chunkers/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/chunkers/base_chunker.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/chunkers/text_chunker.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/document.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/embedders.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/embedding_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/embedding_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/query_results.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/vectorstore_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/base/vectorstores.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/chroma/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/chroma/types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/chroma/vectorstores.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/cohere/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/cohere/embedders.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/cohere/embedding_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/cohere/embedding_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/cohere/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/openai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/openai/embedders.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/openai/embedding_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/openai/embedding_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/openai/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/pinecone/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/pinecone/types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/pinecone/vectorstores.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/weaviate/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/weaviate/types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/beta/rag/weaviate/vectorstores.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/anthropic/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_get_credential.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/azure/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_call_factory.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_create.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_extract.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_extract_with_tools.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_partial.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_base_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_base_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_default_tool_docstring.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_extract_tool_return.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_fn_is_async.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_format_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_audio_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_common_usage.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_document_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_fn_args.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_image_dimensions.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_image_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_metadata.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_prompt_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_template_values.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_template_variables.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_is_prompt_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_json_mode_content.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_messages_decorator.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_parse_content_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_parse_prompt_messages.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_protocols.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/_utils/_setup_extract_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/from_call_args.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/merge_decorators.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/message_param.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/messages.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/metadata.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/prompt.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/response_model_config_dict.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/stream_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/structured_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/toolkit.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/base/types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/bedrock/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/cohere/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_anthropic_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_azure_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_bedrock_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_cohere_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_gemini_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_google_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_groq_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_litellm_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_mistral_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_openai_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_vertex_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/_xai_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/costs/calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/gemini/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/_utils/_validate_media_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/google/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/groq/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/litellm/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/mistral/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/openai/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_call_kwargs.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/vertex/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/_utils/_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/dynamic_config.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/core/xai/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/experimental/graphs/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/experimental/graphs/finite_state_machine.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/_middleware_factory.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/langfuse/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/langfuse/_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/langfuse/_with_langfuse.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/logfire/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/logfire/_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/logfire/_with_logfire.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/otel/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/otel/_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/otel/_with_hyperdx.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/otel/_with_otel.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/integrations/tenacity.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/_context.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/_override.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/_protocols.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/_response_metaclass.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/llm/tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/mcp/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/mcp/client.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/mcp/server.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/mcp/tools.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/py.typed +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/retries/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/retries/fallback.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/retries/tenacity.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/base.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/system/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/system/_docker_operation.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/system/_file_system.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/web/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/web/_duckduckgo.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/web/_httpx.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/web/_parse_url_content.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/tools/web/_requests.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/anthropic.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/calls.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/extractors.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/ops_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/prompts.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/types.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/base/utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/mirascope/v0/openai.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/conftest.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/anthropic/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_get_credential.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/azure/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_base_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_convert_base_model_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_convert_base_type_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_convert_function_to_base_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_convert_messages_to_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_extract_tool_return.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_format_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_audio_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_create_fn_or_async_create_fn.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_document_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_dynamic_configuration.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_fields_from_call_args.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_fn_args.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_image_dimensions.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_image_type.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_metadata.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_possible_user_message_param.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_prompt_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_template_values.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_template_variables.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_get_unsupported_tool_config_keys.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_json_mode_content.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_message_decorator.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_parse_content_template.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_parse_prompt_messages.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_pil_image_to_bytes.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/_utils/test_setup_extract_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/conftest.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_call_factory.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_create.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_extract.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_extract_with_tools.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_merge_decorators.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_partial.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_prompt.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_structured_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/base/test_toolkit.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/conftest.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/bedrock/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/cohere/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_anthropic_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_azure_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_bedrock_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_calculation_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_cohere_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_gemini_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_google_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_groq_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_mistral_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_openai_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_vertex_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/costs/test_xai_calculate_cost.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/gemini/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/google/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/groq/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/litellm/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/mistral/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/openai/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_convert_common_call_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_convert_message_params.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_get_json_output.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_handle_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_message_param_converter.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/vertex/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/_utils/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/_utils/test_setup_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/core/xai/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/langfuse/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/langfuse/test_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/langfuse/test_with_langfuse.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/logfire/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/logfire/test_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/logfire/test_with_logfire.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/otel/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/otel/test_utils.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/otel/test_with_hyperdx.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/otel/test_with_otel.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/integrations/test_middleware_factory.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_call.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_call_response.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_call_response_chunk.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_context.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_override.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_response_metaclass.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_stream.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/llm/test_tool.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/mcp/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/mcp/test_server.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/retries/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/retries/test_fallback.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/retries/test_tenacity.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/test_base.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/test_docker_operation_toolkit.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/test_filesystem_toolkit.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/web/__init__.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/web/test_duckduckgo.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/web/test_httpx.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/web/test_parse_url_content.py +0 -0
- {mirascope-1.24.1 → mirascope-1.25.0}/tests/tools/web/test_requests.py +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""Centralized thinking-related imports and compatibility handling for Anthropic."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
from typing_extensions import TypedDict
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# Always define the stubs with underscore names
|
|
10
|
+
class _ThinkingConfigParam(TypedDict):
|
|
11
|
+
type: Literal["enabled"]
|
|
12
|
+
budget_tokens: int
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class _ThinkingBlock(BaseModel):
|
|
16
|
+
signature: str
|
|
17
|
+
thinking: str
|
|
18
|
+
type: Literal["thinking"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class _ThinkingDelta(BaseModel):
|
|
22
|
+
thinking: str
|
|
23
|
+
type: Literal["thinking_delta"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class _SignatureDelta(BaseModel):
|
|
27
|
+
signature: str
|
|
28
|
+
type: Literal["signature_delta"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
HAS_THINKING_SUPPORT = True
|
|
32
|
+
|
|
33
|
+
# Define the public names based on what's available
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
# For static analysis, always use our stubs so types are consistent
|
|
36
|
+
ThinkingConfigParam = _ThinkingConfigParam
|
|
37
|
+
ThinkingBlock = _ThinkingBlock
|
|
38
|
+
ThinkingDelta = _ThinkingDelta
|
|
39
|
+
SignatureDelta = _SignatureDelta
|
|
40
|
+
else:
|
|
41
|
+
# At runtime, use real types if available, otherwise stubs
|
|
42
|
+
try:
|
|
43
|
+
from anthropic.types import ( # pyright: ignore [reportAttributeAccessIssue]
|
|
44
|
+
ThinkingBlock,
|
|
45
|
+
ThinkingDelta,
|
|
46
|
+
)
|
|
47
|
+
from anthropic.types.signature_delta import (
|
|
48
|
+
SignatureDelta, # pyright: ignore [reportMissingImports]
|
|
49
|
+
)
|
|
50
|
+
from anthropic.types.thinking_config_param import (
|
|
51
|
+
ThinkingConfigParam, # pyright: ignore [reportMissingImports]
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
HAS_THINKING_SUPPORT = True
|
|
55
|
+
|
|
56
|
+
except ImportError: # pragma: no cover
|
|
57
|
+
ThinkingConfigParam = _ThinkingConfigParam
|
|
58
|
+
ThinkingBlock = _ThinkingBlock
|
|
59
|
+
ThinkingDelta = _ThinkingDelta
|
|
60
|
+
SignatureDelta = _SignatureDelta
|
|
61
|
+
HAS_THINKING_SUPPORT = False
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
__all__ = [
|
|
65
|
+
"HAS_THINKING_SUPPORT",
|
|
66
|
+
"SignatureDelta",
|
|
67
|
+
"ThinkingBlock",
|
|
68
|
+
"ThinkingConfigParam",
|
|
69
|
+
"ThinkingDelta",
|
|
70
|
+
]
|
|
@@ -19,6 +19,7 @@ from ...base import BaseMessageParam, BaseTool, _utils
|
|
|
19
19
|
from ...base._utils import AsyncCreateFn, CreateFn
|
|
20
20
|
from ...base.stream_config import StreamConfig
|
|
21
21
|
from .._call_kwargs import AnthropicCallKwargs
|
|
22
|
+
from .._thinking import HAS_THINKING_SUPPORT
|
|
22
23
|
from ..call_params import AnthropicCallParams
|
|
23
24
|
from ..dynamic_config import AnthropicDynamicConfig, AsyncAnthropicDynamicConfig
|
|
24
25
|
from ..tool import AnthropicTool
|
|
@@ -95,6 +96,15 @@ def setup_call(
|
|
|
95
96
|
list[type[AnthropicTool]] | None,
|
|
96
97
|
AnthropicCallKwargs,
|
|
97
98
|
]:
|
|
99
|
+
thinking_enabled = call_params.get("thinking") is not None
|
|
100
|
+
|
|
101
|
+
# Validate thinking parameter before processing
|
|
102
|
+
if thinking_enabled and not HAS_THINKING_SUPPORT:
|
|
103
|
+
raise ValueError( # pragma: no cover
|
|
104
|
+
"Thinking parameter requires anthropic>=0.47.0. "
|
|
105
|
+
"Please upgrade: pip install 'anthropic>=0.47.0'"
|
|
106
|
+
)
|
|
107
|
+
|
|
98
108
|
prompt_template, messages, tool_types, base_call_kwargs = _utils.setup_call(
|
|
99
109
|
fn,
|
|
100
110
|
fn_args,
|
|
@@ -111,7 +121,9 @@ def setup_call(
|
|
|
111
121
|
if messages[0]["role"] == "system":
|
|
112
122
|
call_kwargs["system"] = messages.pop(0)["content"] # pyright: ignore [reportGeneralTypeIssues]
|
|
113
123
|
|
|
114
|
-
|
|
124
|
+
use_json_mode = json_mode or (response_model and thinking_enabled)
|
|
125
|
+
|
|
126
|
+
if use_json_mode:
|
|
115
127
|
json_mode_content = _utils.json_mode_content(response_model)
|
|
116
128
|
if isinstance(messages[-1]["content"], str):
|
|
117
129
|
messages[-1]["content"] += json_mode_content
|
|
@@ -11,6 +11,7 @@ from httpx import Timeout
|
|
|
11
11
|
from typing_extensions import NotRequired
|
|
12
12
|
|
|
13
13
|
from ..base import BaseCallParams
|
|
14
|
+
from ._thinking import ThinkingConfigParam
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class AnthropicCallParams(BaseCallParams):
|
|
@@ -21,6 +22,7 @@ class AnthropicCallParams(BaseCallParams):
|
|
|
21
22
|
Attributes:
|
|
22
23
|
max_tokens: ...
|
|
23
24
|
tool_choice: ...
|
|
25
|
+
thinking: ...
|
|
24
26
|
metadata: ...
|
|
25
27
|
stop_sequences: ...
|
|
26
28
|
temperature: ...
|
|
@@ -32,6 +34,7 @@ class AnthropicCallParams(BaseCallParams):
|
|
|
32
34
|
extra_headers: NotRequired[dict[str, str] | None]
|
|
33
35
|
max_tokens: int
|
|
34
36
|
tool_choice: NotRequired[ToolChoice | None]
|
|
37
|
+
thinking: NotRequired[ThinkingConfigParam | None]
|
|
35
38
|
metadata: NotRequired[Metadata | None]
|
|
36
39
|
stop_sequences: NotRequired[list[str] | None]
|
|
37
40
|
system: NotRequired[str | Iterable[TextBlockParam] | None]
|
|
@@ -71,9 +71,29 @@ class AnthropicCallResponse(
|
|
|
71
71
|
@computed_field
|
|
72
72
|
@property
|
|
73
73
|
def content(self) -> str:
|
|
74
|
-
"""Returns the
|
|
75
|
-
block
|
|
76
|
-
|
|
74
|
+
"""Returns the text content from the first text block."""
|
|
75
|
+
for block in self.response.content:
|
|
76
|
+
if block.type == "text":
|
|
77
|
+
return block.text
|
|
78
|
+
return ""
|
|
79
|
+
|
|
80
|
+
@computed_field
|
|
81
|
+
@property
|
|
82
|
+
def thinking(self) -> str | None:
|
|
83
|
+
"""Returns the thinking content from the first thinking block."""
|
|
84
|
+
for block in self.response.content:
|
|
85
|
+
if block.type == "thinking":
|
|
86
|
+
return block.thinking
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
@computed_field
|
|
90
|
+
@property
|
|
91
|
+
def signature(self) -> str | None:
|
|
92
|
+
"""Returns the signature from the first thinking block."""
|
|
93
|
+
for block in self.response.content:
|
|
94
|
+
if block.type == "thinking":
|
|
95
|
+
return block.signature
|
|
96
|
+
return None
|
|
77
97
|
|
|
78
98
|
@computed_field
|
|
79
99
|
@property
|
|
@@ -61,6 +61,26 @@ class AnthropicCallResponseChunk(
|
|
|
61
61
|
else ""
|
|
62
62
|
)
|
|
63
63
|
|
|
64
|
+
@property
|
|
65
|
+
def thinking(self) -> str:
|
|
66
|
+
"""Returns the thinking content from thinking deltas."""
|
|
67
|
+
return (
|
|
68
|
+
self.chunk.delta.thinking
|
|
69
|
+
if self.chunk.type == "content_block_delta"
|
|
70
|
+
and self.chunk.delta.type == "thinking_delta"
|
|
71
|
+
else ""
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def signature(self) -> str:
|
|
76
|
+
"""Returns the signature content from signature deltas."""
|
|
77
|
+
return (
|
|
78
|
+
self.chunk.delta.signature
|
|
79
|
+
if self.chunk.type == "content_block_delta"
|
|
80
|
+
and self.chunk.delta.type == "signature_delta"
|
|
81
|
+
else ""
|
|
82
|
+
)
|
|
83
|
+
|
|
64
84
|
@property
|
|
65
85
|
def finish_reasons(self) -> list[FinishReason] | None:
|
|
66
86
|
"""Returns the finish reason of the response."""
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
usage docs: learn/streams.md
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
from collections.abc import AsyncGenerator, Generator
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
6
9
|
from anthropic.types import (
|
|
7
10
|
Message,
|
|
8
11
|
MessageParam,
|
|
@@ -16,8 +19,11 @@ from anthropic.types.text_block_param import TextBlockParam
|
|
|
16
19
|
from anthropic.types.tool_use_block_param import ToolUseBlockParam
|
|
17
20
|
from pydantic import BaseModel
|
|
18
21
|
|
|
22
|
+
from ..base.call_kwargs import BaseCallKwargs
|
|
23
|
+
from ..base.metadata import Metadata
|
|
19
24
|
from ..base.stream import BaseStream
|
|
20
25
|
from ..base.types import CostMetadata
|
|
26
|
+
from ._thinking import ThinkingBlock
|
|
21
27
|
from .call_params import AnthropicCallParams
|
|
22
28
|
from .call_response import AnthropicCallResponse
|
|
23
29
|
from .call_response_chunk import AnthropicCallResponseChunk
|
|
@@ -64,6 +70,47 @@ class AnthropicStream(
|
|
|
64
70
|
|
|
65
71
|
_provider = "anthropic"
|
|
66
72
|
|
|
73
|
+
def __init__(
|
|
74
|
+
self,
|
|
75
|
+
*,
|
|
76
|
+
stream: Generator[
|
|
77
|
+
tuple[AnthropicCallResponseChunk, AnthropicTool | None], None, None
|
|
78
|
+
]
|
|
79
|
+
| AsyncGenerator[tuple[AnthropicCallResponseChunk, AnthropicTool | None], None],
|
|
80
|
+
metadata: Metadata,
|
|
81
|
+
tool_types: list[type[AnthropicTool]] | None,
|
|
82
|
+
call_response_type: type[AnthropicCallResponse],
|
|
83
|
+
model: str,
|
|
84
|
+
prompt_template: str | None,
|
|
85
|
+
fn_args: dict[str, Any],
|
|
86
|
+
dynamic_config: AsyncAnthropicDynamicConfig | AnthropicDynamicConfig,
|
|
87
|
+
messages: list[MessageParam],
|
|
88
|
+
call_params: AnthropicCallParams,
|
|
89
|
+
call_kwargs: BaseCallKwargs[ToolParam],
|
|
90
|
+
) -> None:
|
|
91
|
+
"""Initialize AnthropicStream with thinking content tracking."""
|
|
92
|
+
super().__init__(
|
|
93
|
+
stream=stream,
|
|
94
|
+
metadata=metadata,
|
|
95
|
+
tool_types=tool_types,
|
|
96
|
+
call_response_type=call_response_type,
|
|
97
|
+
model=model,
|
|
98
|
+
prompt_template=prompt_template,
|
|
99
|
+
fn_args=fn_args,
|
|
100
|
+
dynamic_config=dynamic_config,
|
|
101
|
+
messages=messages,
|
|
102
|
+
call_params=call_params,
|
|
103
|
+
call_kwargs=call_kwargs,
|
|
104
|
+
)
|
|
105
|
+
self.thinking = ""
|
|
106
|
+
self.signature = ""
|
|
107
|
+
|
|
108
|
+
def _update_properties(self, chunk: AnthropicCallResponseChunk) -> None:
|
|
109
|
+
"""Updates the properties of the stream, including thinking content."""
|
|
110
|
+
super()._update_properties(chunk)
|
|
111
|
+
self.thinking += chunk.thinking
|
|
112
|
+
self.signature += chunk.signature
|
|
113
|
+
|
|
67
114
|
def _construct_message_param(
|
|
68
115
|
self, tool_calls: list[ToolUseBlock] | None = None, content: str | None = None
|
|
69
116
|
) -> MessageParam:
|
|
@@ -102,6 +149,16 @@ class AnthropicStream(
|
|
|
102
149
|
|
|
103
150
|
content_blocks: list[ContentBlock] = []
|
|
104
151
|
|
|
152
|
+
# Add thinking block first if we have thinking content
|
|
153
|
+
if hasattr(self, "thinking") and self.thinking:
|
|
154
|
+
content_blocks.append(
|
|
155
|
+
ThinkingBlock( # pyright: ignore [reportArgumentType]
|
|
156
|
+
type="thinking",
|
|
157
|
+
thinking=self.thinking,
|
|
158
|
+
signature=getattr(self, "signature", ""),
|
|
159
|
+
)
|
|
160
|
+
)
|
|
161
|
+
|
|
105
162
|
if isinstance(self.message_param["content"], str):
|
|
106
163
|
content_blocks.append(
|
|
107
164
|
TextBlock(text=self.message_param["content"], type="text")
|
|
@@ -13,6 +13,7 @@ from google.genai.types import (
|
|
|
13
13
|
FunctionResponseDict,
|
|
14
14
|
GenerateContentResponse,
|
|
15
15
|
GenerateContentResponseUsageMetadata,
|
|
16
|
+
Part,
|
|
16
17
|
PartDict,
|
|
17
18
|
# Import manually SchemaDict to avoid Pydantic error
|
|
18
19
|
SchemaDict, # noqa: F401
|
|
@@ -72,11 +73,33 @@ class GoogleCallResponse(
|
|
|
72
73
|
|
|
73
74
|
_provider = "google"
|
|
74
75
|
|
|
76
|
+
def _parts(self) -> list[Part]:
|
|
77
|
+
"""Returns the parts of the 0th candidate."""
|
|
78
|
+
if (
|
|
79
|
+
not (candidates := self.response.candidates)
|
|
80
|
+
or not (content := candidates[0].content)
|
|
81
|
+
or not (parts := content.parts)
|
|
82
|
+
):
|
|
83
|
+
return []
|
|
84
|
+
return parts
|
|
85
|
+
|
|
75
86
|
@computed_field
|
|
76
87
|
@property
|
|
77
88
|
def content(self) -> str:
|
|
78
89
|
"""Returns the contained string content for the 0th choice."""
|
|
79
|
-
|
|
90
|
+
for part in self._parts():
|
|
91
|
+
if not part.thought and part.text:
|
|
92
|
+
return part.text
|
|
93
|
+
return ""
|
|
94
|
+
|
|
95
|
+
@computed_field
|
|
96
|
+
@property
|
|
97
|
+
def thinking(self) -> str | None:
|
|
98
|
+
"""Returns the thought content from the first thought part"""
|
|
99
|
+
for part in self._parts():
|
|
100
|
+
if part.thought and part.text:
|
|
101
|
+
return part.text
|
|
102
|
+
return None
|
|
80
103
|
|
|
81
104
|
@computed_field
|
|
82
105
|
@property
|
|
@@ -52,10 +52,28 @@ class GoogleCallResponseChunk(
|
|
|
52
52
|
not (candidates := self.chunk.candidates)
|
|
53
53
|
or not (content := candidates[0].content)
|
|
54
54
|
or not (parts := content.parts)
|
|
55
|
-
or not (text := parts[0].text)
|
|
56
55
|
):
|
|
57
56
|
return ""
|
|
58
|
-
|
|
57
|
+
|
|
58
|
+
for part in parts:
|
|
59
|
+
if not part.thought and part.text:
|
|
60
|
+
return part.text
|
|
61
|
+
return ""
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def thinking(self) -> str:
|
|
65
|
+
"""Returns the thinking content from thinking parts."""
|
|
66
|
+
if (
|
|
67
|
+
not (candidates := self.chunk.candidates)
|
|
68
|
+
or not (content := candidates[0].content)
|
|
69
|
+
or not (parts := content.parts)
|
|
70
|
+
):
|
|
71
|
+
return ""
|
|
72
|
+
|
|
73
|
+
for part in parts:
|
|
74
|
+
if part.thought and part.text:
|
|
75
|
+
return part.text
|
|
76
|
+
return ""
|
|
59
77
|
|
|
60
78
|
@property
|
|
61
79
|
def finish_reasons(self) -> list[GoogleFinishReason]:
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
usage docs: learn/streams.md
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from collections.abc import AsyncGenerator, Generator
|
|
7
|
+
from typing import Any, cast
|
|
7
8
|
|
|
8
9
|
from google.genai.types import (
|
|
9
10
|
Candidate,
|
|
@@ -19,6 +20,8 @@ from google.genai.types import (
|
|
|
19
20
|
Tool,
|
|
20
21
|
)
|
|
21
22
|
|
|
23
|
+
from ..base.call_kwargs import BaseCallKwargs
|
|
24
|
+
from ..base.metadata import Metadata
|
|
22
25
|
from ..base.stream import BaseStream
|
|
23
26
|
from ..base.types import CostMetadata
|
|
24
27
|
from .call_params import GoogleCallParams
|
|
@@ -64,6 +67,43 @@ class GoogleStream(
|
|
|
64
67
|
|
|
65
68
|
_provider = "google"
|
|
66
69
|
|
|
70
|
+
def __init__(
|
|
71
|
+
self,
|
|
72
|
+
*,
|
|
73
|
+
stream: Generator[tuple[GoogleCallResponseChunk, GoogleTool | None], None, None]
|
|
74
|
+
| AsyncGenerator[tuple[GoogleCallResponseChunk, GoogleTool | None], None],
|
|
75
|
+
metadata: Metadata,
|
|
76
|
+
tool_types: list[type[GoogleTool]] | None,
|
|
77
|
+
call_response_type: type[GoogleCallResponse],
|
|
78
|
+
model: str,
|
|
79
|
+
prompt_template: str | None,
|
|
80
|
+
fn_args: dict[str, Any],
|
|
81
|
+
dynamic_config: GoogleDynamicConfig,
|
|
82
|
+
messages: list[ContentListUnion | ContentListUnionDict],
|
|
83
|
+
call_params: GoogleCallParams,
|
|
84
|
+
call_kwargs: BaseCallKwargs[Tool],
|
|
85
|
+
) -> None:
|
|
86
|
+
"""Initialize GoogleStream with thinking content tracking."""
|
|
87
|
+
super().__init__(
|
|
88
|
+
stream=stream,
|
|
89
|
+
metadata=metadata,
|
|
90
|
+
tool_types=tool_types,
|
|
91
|
+
call_response_type=call_response_type,
|
|
92
|
+
model=model,
|
|
93
|
+
prompt_template=prompt_template,
|
|
94
|
+
fn_args=fn_args,
|
|
95
|
+
dynamic_config=dynamic_config,
|
|
96
|
+
messages=messages,
|
|
97
|
+
call_params=call_params,
|
|
98
|
+
call_kwargs=call_kwargs,
|
|
99
|
+
)
|
|
100
|
+
self.thinking = ""
|
|
101
|
+
|
|
102
|
+
def _update_properties(self, chunk: GoogleCallResponseChunk) -> None:
|
|
103
|
+
"""Updates the properties of the stream, including thinking content."""
|
|
104
|
+
super()._update_properties(chunk)
|
|
105
|
+
self.thinking += chunk.thinking
|
|
106
|
+
|
|
67
107
|
def _construct_message_param(
|
|
68
108
|
self, tool_calls: list[FunctionCall] | None = None, content: str | None = None
|
|
69
109
|
) -> ContentDict:
|
|
@@ -103,6 +143,22 @@ class GoogleStream(
|
|
|
103
143
|
total_token_count = int(candidates_token_count or 0) + int(
|
|
104
144
|
prompt_token_count or 0
|
|
105
145
|
)
|
|
146
|
+
|
|
147
|
+
parts: list[PartDict] = []
|
|
148
|
+
|
|
149
|
+
# Add thinking part first if we have thinking content
|
|
150
|
+
if self.thinking:
|
|
151
|
+
parts.append({"text": self.thinking, "thought": True})
|
|
152
|
+
|
|
153
|
+
for pd in self.message_param.get("parts") or []:
|
|
154
|
+
if pd.get("text") == "":
|
|
155
|
+
# These parts are generated based only on chunk content;
|
|
156
|
+
# thinking parts have empty content and are reconstructed separately.
|
|
157
|
+
# Skip this so the thinking parts aren't duplicated.
|
|
158
|
+
continue
|
|
159
|
+
else:
|
|
160
|
+
parts.append(pd)
|
|
161
|
+
|
|
106
162
|
response = GenerateContentResponse(
|
|
107
163
|
candidates=[
|
|
108
164
|
Candidate(
|
|
@@ -111,7 +167,7 @@ class GoogleStream(
|
|
|
111
167
|
else FinishReason.STOP,
|
|
112
168
|
content=Content(
|
|
113
169
|
role=self.message_param["role"], # pyright: ignore [reportTypedDictNotRequiredAccess]
|
|
114
|
-
parts=
|
|
170
|
+
parts=parts, # pyright: ignore [reportArgumentType]
|
|
115
171
|
),
|
|
116
172
|
)
|
|
117
173
|
],
|
|
@@ -22,6 +22,8 @@ from pydantic import BaseModel, ConfigDict, Field, create_model
|
|
|
22
22
|
from ..core import BaseMessageParam, BaseTool
|
|
23
23
|
from ..core.base import AudioPart, DocumentPart, ImagePart
|
|
24
24
|
|
|
25
|
+
_UNSET = object()
|
|
26
|
+
|
|
25
27
|
|
|
26
28
|
def create_tool_call(
|
|
27
29
|
name: str,
|
|
@@ -38,7 +40,8 @@ def create_tool_call(
|
|
|
38
40
|
"""
|
|
39
41
|
|
|
40
42
|
async def call(self: BaseTool) -> list[str | ImageContent | EmbeddedResource]:
|
|
41
|
-
|
|
43
|
+
args = {key: value for key, value in self.args.items() if value is not _UNSET}
|
|
44
|
+
result = await call_tool(name, args if args else None)
|
|
42
45
|
if result.isError:
|
|
43
46
|
raise RuntimeError(f"MCP Server returned error: {self._name()}")
|
|
44
47
|
return [
|
|
@@ -225,15 +228,18 @@ def create_tool_from_mcp_tool(tool: MCPTool) -> type[BaseTool]:
|
|
|
225
228
|
fields = {}
|
|
226
229
|
for field_name, field_schema in properties.items():
|
|
227
230
|
field_type = json_schema_to_python_type(field_schema)
|
|
231
|
+
if field_schema.get("nullable", False):
|
|
232
|
+
field_type = field_type | None
|
|
228
233
|
|
|
229
|
-
|
|
230
|
-
default
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
234
|
+
field_info = {
|
|
235
|
+
"default": field_schema.get(
|
|
236
|
+
"default", ... if field_name in required_fields else _UNSET
|
|
237
|
+
)
|
|
238
|
+
}
|
|
239
|
+
if description := field_schema.get("description", ""):
|
|
240
|
+
field_info["description"] = description
|
|
235
241
|
|
|
236
|
-
fields[field_name] = (
|
|
242
|
+
fields[field_name] = (field_type, Field(**field_info))
|
|
237
243
|
|
|
238
244
|
return create_model(snake_to_pascal(tool.name), __base__=BaseTool, **fields)
|
|
239
245
|
|
|
@@ -179,3 +179,45 @@ def test_setup_call_extract(
|
|
|
179
179
|
"type": "tool",
|
|
180
180
|
"name": tool_types[0]._name(),
|
|
181
181
|
}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
@patch(
|
|
185
|
+
"mirascope.core.anthropic._utils._setup_call.convert_message_params",
|
|
186
|
+
new_callable=MagicMock,
|
|
187
|
+
)
|
|
188
|
+
@patch("mirascope.core.anthropic._utils._setup_call._utils", new_callable=MagicMock)
|
|
189
|
+
def test_setup_call_thinking_with_response_model(
|
|
190
|
+
mock_utils: MagicMock,
|
|
191
|
+
mock_convert_message_params: MagicMock,
|
|
192
|
+
mock_base_setup_call: MagicMock,
|
|
193
|
+
) -> None:
|
|
194
|
+
"""Tests that response_model with thinking automatically uses JSON mode."""
|
|
195
|
+
mock_utils.setup_call = mock_base_setup_call
|
|
196
|
+
mock_utils.json_mode_content = MagicMock(return_value="\n\njson_instructions")
|
|
197
|
+
mock_base_setup_call.return_value[1] = [{"role": "user", "content": "test message"}]
|
|
198
|
+
mock_base_setup_call.return_value[2] = [
|
|
199
|
+
MagicMock(spec=AnthropicTool, __name__="tool")
|
|
200
|
+
]
|
|
201
|
+
mock_base_setup_call.return_value[3] = {"max_tokens": 1000}
|
|
202
|
+
mock_convert_message_params.side_effect = lambda x: x
|
|
203
|
+
|
|
204
|
+
_, _, messages, tool_types, call_kwargs = setup_call(
|
|
205
|
+
model="claude-3-5-sonnet-20240620",
|
|
206
|
+
client=None,
|
|
207
|
+
fn=MagicMock(),
|
|
208
|
+
fn_args={},
|
|
209
|
+
dynamic_config=None,
|
|
210
|
+
tools=None,
|
|
211
|
+
json_mode=False,
|
|
212
|
+
call_params={
|
|
213
|
+
"max_tokens": 1000,
|
|
214
|
+
"thinking": {"type": "enabled", "budget_tokens": 1000},
|
|
215
|
+
},
|
|
216
|
+
response_model=BaseModel,
|
|
217
|
+
stream=False,
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# Should automatically use JSON mode instead of forced tool calling
|
|
221
|
+
assert "tool_choice" not in call_kwargs
|
|
222
|
+
assert messages[-1]["content"] == "test message\n\njson_instructions" # type: ignore
|
|
223
|
+
mock_utils.json_mode_content.assert_called_once_with(BaseModel)
|