agno 2.4.6__tar.gz → 2.4.7__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.
- {agno-2.4.6 → agno-2.4.7}/PKG-INFO +2 -2
- {agno-2.4.6 → agno-2.4.7}/agno/db/singlestore/singlestore.py +4 -5
- agno-2.4.7/agno/knowledge/embedder/aws_bedrock.py +562 -0
- agno-2.4.7/agno/knowledge/reranker/aws_bedrock.py +299 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/machine.py +5 -6
- {agno-2.4.6 → agno-2.4.7}/agno/run/workflow.py +3 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mcp/mcp.py +26 -1
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/lancedb/lance_db.py +9 -9
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/condition.py +135 -56
- {agno-2.4.6 → agno-2.4.7}/agno.egg-info/PKG-INFO +2 -2
- {agno-2.4.6 → agno-2.4.7}/agno.egg-info/SOURCES.txt +1 -0
- {agno-2.4.6 → agno-2.4.7}/agno.egg-info/requires.txt +1 -1
- {agno-2.4.6 → agno-2.4.7}/pyproject.toml +2 -2
- agno-2.4.6/agno/knowledge/embedder/aws_bedrock.py +0 -343
- {agno-2.4.6 → agno-2.4.7}/LICENSE +0 -0
- {agno-2.4.6 → agno-2.4.7}/README.md +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/agent/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/agent/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/agent/remote.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/api.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/evals.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/os.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/routes.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/evals.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/os.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/response.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/schemas/workflows.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/settings.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/api/workflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/a2a/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/a2a/client.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/a2a/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/a2a/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/client/os.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/cloud/aws/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/compression/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/compression/manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/culture/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/culture/manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/dynamo/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/firestore/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/firestore/firestore.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/firestore/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/firestore/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/in_memory/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/json/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/json/json_db.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/json/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/migrations/versions/v2_3_0.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mongo/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mongo/async_mongo.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mongo/mongo.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mongo/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mongo/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mysql/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mysql/async_mysql.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mysql/mysql.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mysql/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/mysql/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/postgres/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/postgres/async_postgres.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/postgres/postgres.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/postgres/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/postgres/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/redis/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/redis/redis.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/redis/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/redis/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/culture.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/evals.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/memory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/schemas/metrics.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/singlestore/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/sqlite/async_sqlite.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/sqlite/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/models.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/surrealdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/db/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/debug.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/accuracy.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/agent_as_judge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/performance.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/reliability.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/eval/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/exceptions.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/filters.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/guardrails/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/guardrails/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/guardrails/openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/guardrails/pii.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/hooks/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/hooks/decorator.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/integrations/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/integrations/discord/client.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/code.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/content.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/document/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/filesystem.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/protocol.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/excel_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/utils/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/utils/spreadsheet.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/remote_content/config.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/types.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/knowledge/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/config.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/curate.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/decision_log.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/entity_memory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/learned_knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/protocol.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/session_context.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/user_memory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/stores/user_profile.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/learn/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/media.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/strategies/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/memory/strategies/types.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/anthropic/claude.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/aws/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/aws/bedrock.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/aws/claude.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/azure/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cohere/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cohere/chat.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/defaults.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/google/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/google/gemini.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/google/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/groq/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/groq/groq.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/ibm/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/internlm/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/internlm/internlm.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/langdb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/langdb/langdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/litellm/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/litellm/chat.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/message.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/meta/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/meta/llama.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/metrics.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/mistral/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/mistral/mistral.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/moonshot/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/moonshot/moonshot.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/n1n/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/n1n/n1n.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nebius/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nebius/nebius.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nexus/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nexus/nexus.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/ollama/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/ollama/chat.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/ollama/responses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openai/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openai/chat.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openai/like.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openai/open_responses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openai/responses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/openrouter/responses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/portkey/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/portkey/portkey.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/requesty/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/requesty/requesty.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/response.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/together/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/together/together.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vercel/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vercel/v0.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vertexai/claude.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vllm/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/vllm/vllm.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/xai/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/models/xai/xai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/app.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/auth.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/config.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/managers.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/mcp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/middleware/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/middleware/jwt.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/middleware/trailing_slash.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/agents/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/agents/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/agents/schema.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/components/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/components/components.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/database.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/health.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/home.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/registry/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/registry/registry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/session/session.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/teams/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/teams/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/teams/schema.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/workflows/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/workflows/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/routers/workflows/schema.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/schema.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/scopes.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/settings.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/os/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/py.typed +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/anthropic.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/deepseek.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/default.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/gemini.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/groq.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/helpers.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/ollama.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/step.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/reasoning/vertexai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/registry/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/registry/registry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/remote/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/remote/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/cancel.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/cancellation_management/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/cancellation_management/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/messages.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/requirement.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/run/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/session/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/session/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/session/summary.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/session/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/session/workflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/agent_skills.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/errors.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/loaders/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/loaders/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/loaders/local.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/skill.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/skills/validator.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/table.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/team/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/team/remote.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/team/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/agentql.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/airflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/api.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/apify.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/arxiv.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/aws_lambda.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/aws_ses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/baidusearch.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/bitbucket.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/brandfetch.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/bravesearch.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/brightdata.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/browserbase.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/calcom.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/calculator.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/cartesia.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/clickup.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/confluence.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/crawl4ai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/dalle.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/daytona.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/decorator.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/desi_vocal.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/discord.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/docker.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/duckdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/duckduckgo.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/e2b.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/eleven_labs.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/email.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/evm.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/exa.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/fal.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/file.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/file_generation.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/financial_datasets.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/firecrawl.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/function.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/giphy.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/github.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/gmail.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/google_bigquery.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/google_drive.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/google_maps.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/googlecalendar.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/googlesheets.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/hackernews.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/jina.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/jira.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/linear.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/linkup.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/local_file_system.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/lumalab.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mcp/params.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mem0.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/memory.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/gemini.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/groq.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/morph.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models/nebius.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/models_labs.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/moviepy_video.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/nano_banana.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/neo4j.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/newspaper.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/newspaper4k.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/notion.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/openbb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/opencv.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/openweather.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/oxylabs.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/pandas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/parallel.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/postgres.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/pubmed.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/python.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/reasoning.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/reddit.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/redshift.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/replicate.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/resend.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/scrapegraph.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/searxng.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/seltz.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/serpapi.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/serper.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/shell.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/shopify.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/slack.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/sleep.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/spider.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/spotify.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/sql.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/streamlit/components.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/tavily.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/telegram.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/todoist.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/tool_registry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/toolkit.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/trafilatura.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/trello.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/twilio.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/unsplash.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/user_control_flow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/valyu.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/visualization.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/webbrowser.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/webex.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/websearch.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/website.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/webtools.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/whatsapp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/wikipedia.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/workflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/x.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/yfinance.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/youtube.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/zendesk.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/zep.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tools/zoom.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tracing/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tracing/exporter.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tracing/schemas.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/tracing/setup.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/audio.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/certs.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/code_execution.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/common.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/cryptography.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/dttm.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/enum.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/env.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/events.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/format_str.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/functions.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/gemini.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/hooks.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/http.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/json_schema.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/knowledge.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/location.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/log.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/mcp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/media.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/merge_dict.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/message.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/claude.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/cohere.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/llama.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/mistral.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/models/watsonx.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/openai.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/os.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/pickle.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/pprint.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/print_response/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/print_response/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/prompts.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/reasoning.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/remote.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/response.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/response_iterator.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/safe_formatter.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/serialize.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/shell.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/streamlit.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/string.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/team.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/timer.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/tokens.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/tools.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/web.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/whatsapp.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/utils/yaml_io.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/base.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/distance.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/search.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/__init__.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/agent.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/loop.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/parallel.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/remote.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/router.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/step.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/steps.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/types.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno/workflow/workflow.py +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.4.6 → agno-2.4.7}/agno.egg-info/top_level.txt +0 -0
- {agno-2.4.6 → agno-2.4.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.7
|
|
4
4
|
Summary: Agno: a lightweight library for building Multi-Agent Systems
|
|
5
5
|
Author-email: Ashpreet Bedi <ashpreet@agno.com>
|
|
6
6
|
Project-URL: homepage, https://agno.com
|
|
@@ -225,7 +225,7 @@ Requires-Dist: pgvector; extra == "pgvector"
|
|
|
225
225
|
Provides-Extra: chromadb
|
|
226
226
|
Requires-Dist: chromadb; extra == "chromadb"
|
|
227
227
|
Provides-Extra: lancedb
|
|
228
|
-
Requires-Dist: lancedb
|
|
228
|
+
Requires-Dist: lancedb>=0.26.0; extra == "lancedb"
|
|
229
229
|
Requires-Dist: tantivy; extra == "lancedb"
|
|
230
230
|
Provides-Extra: pylance
|
|
231
231
|
Requires-Dist: pylance; extra == "pylance"
|
|
@@ -173,8 +173,7 @@ class SingleStoreDb(BaseDb):
|
|
|
173
173
|
column_kwargs["unique"] = True
|
|
174
174
|
columns.append(Column(*column_args, **column_kwargs))
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
table = Table(table_name, self.metadata, *columns, schema=self.db_schema)
|
|
176
|
+
table = Table(table_name, self.metadata, *columns, schema=self.db_schema, extend_existing=True)
|
|
178
177
|
|
|
179
178
|
return table
|
|
180
179
|
|
|
@@ -240,8 +239,7 @@ class SingleStoreDb(BaseDb):
|
|
|
240
239
|
|
|
241
240
|
columns.append(Column(*column_args, **column_kwargs))
|
|
242
241
|
|
|
243
|
-
|
|
244
|
-
table = Table(table_name, self.metadata, *columns, schema=self.db_schema)
|
|
242
|
+
table = Table(table_name, self.metadata, *columns, schema=self.db_schema, extend_existing=True)
|
|
245
243
|
|
|
246
244
|
# Add multi-column unique constraints with table-specific names
|
|
247
245
|
for constraint in schema_unique_constraints:
|
|
@@ -396,7 +394,8 @@ class SingleStoreDb(BaseDb):
|
|
|
396
394
|
|
|
397
395
|
if table_type == "spans":
|
|
398
396
|
# Ensure traces table exists first (for foreign key)
|
|
399
|
-
|
|
397
|
+
if create_table_if_not_found:
|
|
398
|
+
self._get_table(table_type="traces", create_table_if_not_found=True)
|
|
400
399
|
self.spans_table = self._get_or_create_table(
|
|
401
400
|
table_name=self.span_table_name,
|
|
402
401
|
table_type="spans",
|
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from os import getenv
|
|
4
|
+
from typing import Any, Dict, List, Literal, Optional, Tuple
|
|
5
|
+
|
|
6
|
+
from agno.exceptions import AgnoError, ModelProviderError
|
|
7
|
+
from agno.knowledge.embedder.base import Embedder
|
|
8
|
+
from agno.utils.log import log_error, log_warning
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
from boto3 import client as AwsClient
|
|
12
|
+
from boto3.session import Session
|
|
13
|
+
from botocore.exceptions import ClientError
|
|
14
|
+
except ImportError:
|
|
15
|
+
log_error("`boto3` not installed. Please install it via `pip install boto3`.")
|
|
16
|
+
raise
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import aioboto3
|
|
20
|
+
except ImportError:
|
|
21
|
+
log_warning("`aioboto3` not installed. Async methods will not be available. Install via `pip install aioboto3`.")
|
|
22
|
+
aioboto3 = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Type aliases for clarity
|
|
26
|
+
InputType = Literal["search_document", "search_query", "classification", "clustering"]
|
|
27
|
+
EmbeddingType = Literal["float", "int8", "uint8", "binary", "ubinary"]
|
|
28
|
+
TruncateV3 = Literal["NONE", "START", "END"]
|
|
29
|
+
TruncateV4 = Literal["NONE", "LEFT", "RIGHT"]
|
|
30
|
+
OutputDimension = Literal[256, 512, 1024, 1536]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class AwsBedrockEmbedder(Embedder):
|
|
35
|
+
"""
|
|
36
|
+
AWS Bedrock embedder supporting Cohere Embed v3 and v4 models.
|
|
37
|
+
|
|
38
|
+
To use this embedder, you need to either:
|
|
39
|
+
1. Set the following environment variables:
|
|
40
|
+
- AWS_ACCESS_KEY_ID
|
|
41
|
+
- AWS_SECRET_ACCESS_KEY
|
|
42
|
+
- AWS_REGION
|
|
43
|
+
2. Or provide a boto3 Session object
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
id (str): The model ID to use. Default is 'cohere.embed-multilingual-v3'.
|
|
47
|
+
- v3 models: 'cohere.embed-multilingual-v3', 'cohere.embed-english-v3'
|
|
48
|
+
- v4 model: 'cohere.embed-v4:0'
|
|
49
|
+
dimensions (Optional[int]): The dimensions of the embeddings.
|
|
50
|
+
- v3: Fixed at 1024
|
|
51
|
+
- v4: Configurable via output_dimension (256, 512, 1024, 1536). Default 1536.
|
|
52
|
+
input_type (str): Prepends special tokens to differentiate types. Options:
|
|
53
|
+
'search_document', 'search_query', 'classification', 'clustering'. Default is 'search_query'.
|
|
54
|
+
truncate (Optional[str]): How to handle inputs longer than the maximum token length.
|
|
55
|
+
- v3: 'NONE', 'START', 'END'
|
|
56
|
+
- v4: 'NONE', 'LEFT', 'RIGHT'
|
|
57
|
+
embedding_types (Optional[List[str]]): Types of embeddings to return. Options:
|
|
58
|
+
'float', 'int8', 'uint8', 'binary', 'ubinary'. Default is ['float'].
|
|
59
|
+
output_dimension (Optional[int]): (v4 only) Vector length. Options: 256, 512, 1024, 1536.
|
|
60
|
+
Default is 1536 if unspecified.
|
|
61
|
+
max_tokens (Optional[int]): (v4 only) Truncation budget per input object.
|
|
62
|
+
The model supports up to ~128,000 tokens.
|
|
63
|
+
aws_region (Optional[str]): The AWS region to use.
|
|
64
|
+
aws_access_key_id (Optional[str]): The AWS access key ID to use.
|
|
65
|
+
aws_secret_access_key (Optional[str]): The AWS secret access key to use.
|
|
66
|
+
session (Optional[Session]): A boto3 Session object to use for authentication.
|
|
67
|
+
request_params (Optional[Dict[str, Any]]): Additional parameters to pass to the API requests.
|
|
68
|
+
client_params (Optional[Dict[str, Any]]): Additional parameters to pass to the boto3 client.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
id: str = "cohere.embed-multilingual-v3"
|
|
72
|
+
dimensions: int = 1024 # v3: 1024, v4: 1536 default (set in __post_init__)
|
|
73
|
+
input_type: InputType = "search_query"
|
|
74
|
+
truncate: Optional[str] = None # v3: 'NONE'|'START'|'END', v4: 'NONE'|'LEFT'|'RIGHT'
|
|
75
|
+
embedding_types: Optional[List[EmbeddingType]] = None # 'float', 'int8', 'uint8', etc.
|
|
76
|
+
|
|
77
|
+
# v4-specific parameters
|
|
78
|
+
output_dimension: Optional[OutputDimension] = None # 256, 512, 1024, 1536
|
|
79
|
+
max_tokens: Optional[int] = None # Up to 128000 for v4
|
|
80
|
+
|
|
81
|
+
aws_region: Optional[str] = None
|
|
82
|
+
aws_access_key_id: Optional[str] = None
|
|
83
|
+
aws_secret_access_key: Optional[str] = None
|
|
84
|
+
session: Optional[Session] = None
|
|
85
|
+
|
|
86
|
+
request_params: Optional[Dict[str, Any]] = None
|
|
87
|
+
client_params: Optional[Dict[str, Any]] = None
|
|
88
|
+
client: Optional[AwsClient] = None
|
|
89
|
+
|
|
90
|
+
def __post_init__(self):
|
|
91
|
+
if self.enable_batch:
|
|
92
|
+
log_warning("AwsBedrockEmbedder does not support batch embeddings, setting enable_batch to False")
|
|
93
|
+
self.enable_batch = False
|
|
94
|
+
|
|
95
|
+
# Set appropriate default dimensions based on model version
|
|
96
|
+
if self._is_v4_model():
|
|
97
|
+
# v4 default is 1536, but can be overridden by output_dimension
|
|
98
|
+
if self.output_dimension:
|
|
99
|
+
self.dimensions = self.output_dimension
|
|
100
|
+
else:
|
|
101
|
+
self.dimensions = 1536
|
|
102
|
+
else:
|
|
103
|
+
# v3 models are fixed at 1024
|
|
104
|
+
self.dimensions = 1024
|
|
105
|
+
|
|
106
|
+
def _is_v4_model(self) -> bool:
|
|
107
|
+
"""Check if the current model is a Cohere Embed v4 model."""
|
|
108
|
+
return "embed-v4" in self.id.lower()
|
|
109
|
+
|
|
110
|
+
def get_client(self) -> AwsClient:
|
|
111
|
+
"""
|
|
112
|
+
Returns an AWS Bedrock client.
|
|
113
|
+
|
|
114
|
+
Credentials are resolved in the following order:
|
|
115
|
+
1. Explicit session parameter
|
|
116
|
+
2. Explicit aws_access_key_id and aws_secret_access_key parameters
|
|
117
|
+
3. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
|
|
118
|
+
4. Default boto3 credential chain (~/.aws/credentials, SSO, IAM role, etc.)
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
AwsClient: An instance of the AWS Bedrock client.
|
|
122
|
+
"""
|
|
123
|
+
if self.client is not None:
|
|
124
|
+
return self.client
|
|
125
|
+
|
|
126
|
+
if self.session:
|
|
127
|
+
self.client = self.session.client("bedrock-runtime")
|
|
128
|
+
return self.client
|
|
129
|
+
|
|
130
|
+
# Try explicit credentials or environment variables
|
|
131
|
+
self.aws_access_key_id = self.aws_access_key_id or getenv("AWS_ACCESS_KEY_ID")
|
|
132
|
+
self.aws_secret_access_key = self.aws_secret_access_key or getenv("AWS_SECRET_ACCESS_KEY")
|
|
133
|
+
self.aws_region = self.aws_region or getenv("AWS_REGION")
|
|
134
|
+
|
|
135
|
+
if self.aws_access_key_id and self.aws_secret_access_key:
|
|
136
|
+
# Use explicit credentials
|
|
137
|
+
self.client = AwsClient(
|
|
138
|
+
service_name="bedrock-runtime",
|
|
139
|
+
region_name=self.aws_region,
|
|
140
|
+
aws_access_key_id=self.aws_access_key_id,
|
|
141
|
+
aws_secret_access_key=self.aws_secret_access_key,
|
|
142
|
+
**(self.client_params or {}),
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
# Fall back to default credential chain (SSO, credentials file, IAM role, etc.)
|
|
146
|
+
self.client = AwsClient(
|
|
147
|
+
service_name="bedrock-runtime",
|
|
148
|
+
region_name=self.aws_region,
|
|
149
|
+
**(self.client_params or {}),
|
|
150
|
+
)
|
|
151
|
+
return self.client
|
|
152
|
+
|
|
153
|
+
def get_async_client(self):
|
|
154
|
+
"""
|
|
155
|
+
Returns an async AWS Bedrock client using aioboto3.
|
|
156
|
+
|
|
157
|
+
Credentials are resolved in the following order:
|
|
158
|
+
1. Explicit session parameter
|
|
159
|
+
2. Explicit aws_access_key_id and aws_secret_access_key parameters
|
|
160
|
+
3. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
|
|
161
|
+
4. Default credential chain (~/.aws/credentials, SSO, IAM role, etc.)
|
|
162
|
+
|
|
163
|
+
Returns:
|
|
164
|
+
An aioboto3 bedrock-runtime client context manager.
|
|
165
|
+
"""
|
|
166
|
+
if aioboto3 is None:
|
|
167
|
+
raise AgnoError(
|
|
168
|
+
message="aioboto3 not installed. Please install it via `pip install aioboto3`.",
|
|
169
|
+
status_code=400,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
if self.session:
|
|
173
|
+
# Convert boto3 session to aioboto3 session
|
|
174
|
+
aio_session = aioboto3.Session(
|
|
175
|
+
aws_access_key_id=self.session.get_credentials().access_key,
|
|
176
|
+
aws_secret_access_key=self.session.get_credentials().secret_key,
|
|
177
|
+
aws_session_token=self.session.get_credentials().token,
|
|
178
|
+
region_name=self.session.region_name,
|
|
179
|
+
)
|
|
180
|
+
else:
|
|
181
|
+
# Try explicit credentials or environment variables
|
|
182
|
+
self.aws_access_key_id = self.aws_access_key_id or getenv("AWS_ACCESS_KEY_ID")
|
|
183
|
+
self.aws_secret_access_key = self.aws_secret_access_key or getenv("AWS_SECRET_ACCESS_KEY")
|
|
184
|
+
self.aws_region = self.aws_region or getenv("AWS_REGION")
|
|
185
|
+
|
|
186
|
+
if self.aws_access_key_id and self.aws_secret_access_key:
|
|
187
|
+
# Use explicit credentials
|
|
188
|
+
aio_session = aioboto3.Session(
|
|
189
|
+
aws_access_key_id=self.aws_access_key_id,
|
|
190
|
+
aws_secret_access_key=self.aws_secret_access_key,
|
|
191
|
+
region_name=self.aws_region,
|
|
192
|
+
)
|
|
193
|
+
else:
|
|
194
|
+
# Fall back to default credential chain (SSO, credentials file, IAM role, etc.)
|
|
195
|
+
aio_session = aioboto3.Session(region_name=self.aws_region)
|
|
196
|
+
|
|
197
|
+
return aio_session.client("bedrock-runtime", **(self.client_params or {}))
|
|
198
|
+
|
|
199
|
+
def _format_request_body(self, text: str) -> str:
|
|
200
|
+
"""
|
|
201
|
+
Format the request body for the embedder.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
text (str): The text to embed.
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
str: The formatted request body as a JSON string.
|
|
208
|
+
"""
|
|
209
|
+
request_body: Dict[str, Any] = {
|
|
210
|
+
"texts": [text],
|
|
211
|
+
"input_type": self.input_type,
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if self.truncate:
|
|
215
|
+
request_body["truncate"] = self.truncate
|
|
216
|
+
|
|
217
|
+
if self.embedding_types:
|
|
218
|
+
request_body["embedding_types"] = self.embedding_types
|
|
219
|
+
|
|
220
|
+
# v4-specific parameters
|
|
221
|
+
if self._is_v4_model():
|
|
222
|
+
if self.output_dimension:
|
|
223
|
+
request_body["output_dimension"] = self.output_dimension
|
|
224
|
+
if self.max_tokens:
|
|
225
|
+
request_body["max_tokens"] = self.max_tokens
|
|
226
|
+
|
|
227
|
+
# Add additional request parameters if provided
|
|
228
|
+
if self.request_params:
|
|
229
|
+
request_body.update(self.request_params)
|
|
230
|
+
|
|
231
|
+
return json.dumps(request_body)
|
|
232
|
+
|
|
233
|
+
def _format_multimodal_request_body(
|
|
234
|
+
self,
|
|
235
|
+
texts: Optional[List[str]] = None,
|
|
236
|
+
images: Optional[List[str]] = None,
|
|
237
|
+
inputs: Optional[List[Dict[str, Any]]] = None,
|
|
238
|
+
) -> str:
|
|
239
|
+
"""
|
|
240
|
+
Format a multimodal request body for v4 models.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
texts: List of text strings to embed (text-only mode)
|
|
244
|
+
images: List of base64 data URIs for images (image-only mode)
|
|
245
|
+
inputs: List of interleaved content items for mixed modality
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
str: The formatted request body as a JSON string.
|
|
249
|
+
"""
|
|
250
|
+
if not self._is_v4_model():
|
|
251
|
+
raise AgnoError(
|
|
252
|
+
message="Multimodal embeddings are only supported with Cohere Embed v4 models.",
|
|
253
|
+
status_code=400,
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
request_body: Dict[str, Any] = {
|
|
257
|
+
"input_type": self.input_type,
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
# Set the appropriate input field
|
|
261
|
+
if inputs:
|
|
262
|
+
request_body["inputs"] = inputs
|
|
263
|
+
elif images:
|
|
264
|
+
request_body["images"] = images
|
|
265
|
+
elif texts:
|
|
266
|
+
request_body["texts"] = texts
|
|
267
|
+
else:
|
|
268
|
+
raise AgnoError(
|
|
269
|
+
message="At least one of texts, images, or inputs must be provided.",
|
|
270
|
+
status_code=400,
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
if self.truncate:
|
|
274
|
+
request_body["truncate"] = self.truncate
|
|
275
|
+
|
|
276
|
+
if self.embedding_types:
|
|
277
|
+
request_body["embedding_types"] = self.embedding_types
|
|
278
|
+
|
|
279
|
+
if self.output_dimension:
|
|
280
|
+
request_body["output_dimension"] = self.output_dimension
|
|
281
|
+
|
|
282
|
+
if self.max_tokens:
|
|
283
|
+
request_body["max_tokens"] = self.max_tokens
|
|
284
|
+
|
|
285
|
+
if self.request_params:
|
|
286
|
+
request_body.update(self.request_params)
|
|
287
|
+
|
|
288
|
+
return json.dumps(request_body)
|
|
289
|
+
|
|
290
|
+
def _extract_embeddings(self, response_body: Dict[str, Any]) -> List[float]:
|
|
291
|
+
"""
|
|
292
|
+
Extract embeddings from the response body, handling both v3 and v4 formats.
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
response_body: The parsed response body from the API.
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
List[float]: The embedding vector.
|
|
299
|
+
"""
|
|
300
|
+
try:
|
|
301
|
+
if "embeddings" in response_body:
|
|
302
|
+
embeddings = response_body["embeddings"]
|
|
303
|
+
|
|
304
|
+
# Handle list format (single embedding type or v3 default)
|
|
305
|
+
if isinstance(embeddings, list):
|
|
306
|
+
return embeddings[0] if embeddings else []
|
|
307
|
+
|
|
308
|
+
# Handle dict format (multiple embedding types requested)
|
|
309
|
+
if isinstance(embeddings, dict):
|
|
310
|
+
# Prefer float embeddings
|
|
311
|
+
if "float" in embeddings:
|
|
312
|
+
return embeddings["float"][0]
|
|
313
|
+
# Fallback to first available type
|
|
314
|
+
for embedding_type in embeddings:
|
|
315
|
+
if embeddings[embedding_type]:
|
|
316
|
+
return embeddings[embedding_type][0]
|
|
317
|
+
|
|
318
|
+
log_warning("No embeddings found in response")
|
|
319
|
+
return []
|
|
320
|
+
except Exception as e:
|
|
321
|
+
log_warning(f"Error extracting embeddings: {e}")
|
|
322
|
+
return []
|
|
323
|
+
|
|
324
|
+
def response(self, text: str) -> Dict[str, Any]:
|
|
325
|
+
"""
|
|
326
|
+
Get embeddings from AWS Bedrock for the given text.
|
|
327
|
+
|
|
328
|
+
Args:
|
|
329
|
+
text (str): The text to embed.
|
|
330
|
+
|
|
331
|
+
Returns:
|
|
332
|
+
Dict[str, Any]: The response from the API.
|
|
333
|
+
"""
|
|
334
|
+
try:
|
|
335
|
+
body = self._format_request_body(text)
|
|
336
|
+
response = self.get_client().invoke_model(
|
|
337
|
+
modelId=self.id,
|
|
338
|
+
body=body,
|
|
339
|
+
contentType="application/json",
|
|
340
|
+
accept="application/json",
|
|
341
|
+
)
|
|
342
|
+
response_body = json.loads(response["body"].read().decode("utf-8"))
|
|
343
|
+
return response_body
|
|
344
|
+
except ClientError as e:
|
|
345
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
346
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
347
|
+
except Exception as e:
|
|
348
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
349
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
350
|
+
|
|
351
|
+
def get_embedding(self, text: str) -> List[float]:
|
|
352
|
+
"""
|
|
353
|
+
Get embeddings for the given text.
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
text (str): The text to embed.
|
|
357
|
+
|
|
358
|
+
Returns:
|
|
359
|
+
List[float]: The embedding vector.
|
|
360
|
+
"""
|
|
361
|
+
response = self.response(text=text)
|
|
362
|
+
return self._extract_embeddings(response)
|
|
363
|
+
|
|
364
|
+
def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict[str, Any]]]:
|
|
365
|
+
"""
|
|
366
|
+
Get embeddings and usage information for the given text.
|
|
367
|
+
|
|
368
|
+
Args:
|
|
369
|
+
text (str): The text to embed.
|
|
370
|
+
|
|
371
|
+
Returns:
|
|
372
|
+
Tuple[List[float], Optional[Dict[str, Any]]]: The embedding vector and usage information.
|
|
373
|
+
"""
|
|
374
|
+
response = self.response(text=text)
|
|
375
|
+
embedding = self._extract_embeddings(response)
|
|
376
|
+
usage = response.get("usage")
|
|
377
|
+
return embedding, usage
|
|
378
|
+
|
|
379
|
+
def get_image_embedding(self, image_data_uri: str) -> List[float]:
|
|
380
|
+
"""
|
|
381
|
+
Get embeddings for an image (v4 only).
|
|
382
|
+
|
|
383
|
+
Args:
|
|
384
|
+
image_data_uri (str): Base64 data URI of the image
|
|
385
|
+
(e.g., "data:image/png;base64,...")
|
|
386
|
+
|
|
387
|
+
Returns:
|
|
388
|
+
List[float]: The embedding vector.
|
|
389
|
+
"""
|
|
390
|
+
if not self._is_v4_model():
|
|
391
|
+
raise AgnoError(
|
|
392
|
+
message="Image embeddings are only supported with Cohere Embed v4 models.",
|
|
393
|
+
status_code=400,
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
try:
|
|
397
|
+
body = self._format_multimodal_request_body(images=[image_data_uri])
|
|
398
|
+
response = self.get_client().invoke_model(
|
|
399
|
+
modelId=self.id,
|
|
400
|
+
body=body,
|
|
401
|
+
contentType="application/json",
|
|
402
|
+
accept="application/json",
|
|
403
|
+
)
|
|
404
|
+
response_body = json.loads(response["body"].read().decode("utf-8"))
|
|
405
|
+
return self._extract_embeddings(response_body)
|
|
406
|
+
except ClientError as e:
|
|
407
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
408
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
409
|
+
except Exception as e:
|
|
410
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
411
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
412
|
+
|
|
413
|
+
def get_multimodal_embedding(
|
|
414
|
+
self,
|
|
415
|
+
content: List[Dict[str, str]],
|
|
416
|
+
) -> List[float]:
|
|
417
|
+
"""
|
|
418
|
+
Get embeddings for interleaved text and image content (v4 only).
|
|
419
|
+
|
|
420
|
+
Args:
|
|
421
|
+
content: List of content parts, each being either:
|
|
422
|
+
- {"type": "text", "text": "..."}
|
|
423
|
+
- {"type": "image_url", "image_url": "data:image/png;base64,..."}
|
|
424
|
+
|
|
425
|
+
Returns:
|
|
426
|
+
List[float]: The embedding vector.
|
|
427
|
+
|
|
428
|
+
Example:
|
|
429
|
+
embedder.get_multimodal_embedding([
|
|
430
|
+
{"type": "text", "text": "Product description"},
|
|
431
|
+
{"type": "image_url", "image_url": "data:image/png;base64,..."}
|
|
432
|
+
])
|
|
433
|
+
"""
|
|
434
|
+
if not self._is_v4_model():
|
|
435
|
+
raise AgnoError(
|
|
436
|
+
message="Multimodal embeddings are only supported with Cohere Embed v4 models.",
|
|
437
|
+
status_code=400,
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
try:
|
|
441
|
+
inputs = [{"content": content}]
|
|
442
|
+
body = self._format_multimodal_request_body(inputs=inputs)
|
|
443
|
+
response = self.get_client().invoke_model(
|
|
444
|
+
modelId=self.id,
|
|
445
|
+
body=body,
|
|
446
|
+
contentType="application/json",
|
|
447
|
+
accept="application/json",
|
|
448
|
+
)
|
|
449
|
+
response_body = json.loads(response["body"].read().decode("utf-8"))
|
|
450
|
+
return self._extract_embeddings(response_body)
|
|
451
|
+
except ClientError as e:
|
|
452
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
453
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
454
|
+
except Exception as e:
|
|
455
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
456
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
457
|
+
|
|
458
|
+
async def async_get_embedding(self, text: str) -> List[float]:
|
|
459
|
+
"""
|
|
460
|
+
Async version of get_embedding() using native aioboto3 async client.
|
|
461
|
+
"""
|
|
462
|
+
try:
|
|
463
|
+
body = self._format_request_body(text)
|
|
464
|
+
async with self.get_async_client() as client:
|
|
465
|
+
response = await client.invoke_model(
|
|
466
|
+
modelId=self.id,
|
|
467
|
+
body=body,
|
|
468
|
+
contentType="application/json",
|
|
469
|
+
accept="application/json",
|
|
470
|
+
)
|
|
471
|
+
response_body = json.loads((await response["body"].read()).decode("utf-8"))
|
|
472
|
+
return self._extract_embeddings(response_body)
|
|
473
|
+
except ClientError as e:
|
|
474
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
475
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
476
|
+
except Exception as e:
|
|
477
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
478
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
479
|
+
|
|
480
|
+
async def async_get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict[str, Any]]]:
|
|
481
|
+
"""
|
|
482
|
+
Async version of get_embedding_and_usage() using native aioboto3 async client.
|
|
483
|
+
"""
|
|
484
|
+
try:
|
|
485
|
+
body = self._format_request_body(text)
|
|
486
|
+
async with self.get_async_client() as client:
|
|
487
|
+
response = await client.invoke_model(
|
|
488
|
+
modelId=self.id,
|
|
489
|
+
body=body,
|
|
490
|
+
contentType="application/json",
|
|
491
|
+
accept="application/json",
|
|
492
|
+
)
|
|
493
|
+
response_body = json.loads((await response["body"].read()).decode("utf-8"))
|
|
494
|
+
embedding = self._extract_embeddings(response_body)
|
|
495
|
+
usage = response_body.get("usage")
|
|
496
|
+
return embedding, usage
|
|
497
|
+
except ClientError as e:
|
|
498
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
499
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
500
|
+
except Exception as e:
|
|
501
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
502
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
503
|
+
|
|
504
|
+
async def async_get_image_embedding(self, image_data_uri: str) -> List[float]:
|
|
505
|
+
"""
|
|
506
|
+
Async version of get_image_embedding() (v4 only).
|
|
507
|
+
"""
|
|
508
|
+
if not self._is_v4_model():
|
|
509
|
+
raise AgnoError(
|
|
510
|
+
message="Image embeddings are only supported with Cohere Embed v4 models.",
|
|
511
|
+
status_code=400,
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
try:
|
|
515
|
+
body = self._format_multimodal_request_body(images=[image_data_uri])
|
|
516
|
+
async with self.get_async_client() as client:
|
|
517
|
+
response = await client.invoke_model(
|
|
518
|
+
modelId=self.id,
|
|
519
|
+
body=body,
|
|
520
|
+
contentType="application/json",
|
|
521
|
+
accept="application/json",
|
|
522
|
+
)
|
|
523
|
+
response_body = json.loads((await response["body"].read()).decode("utf-8"))
|
|
524
|
+
return self._extract_embeddings(response_body)
|
|
525
|
+
except ClientError as e:
|
|
526
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
527
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
528
|
+
except Exception as e:
|
|
529
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
530
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
531
|
+
|
|
532
|
+
async def async_get_multimodal_embedding(
|
|
533
|
+
self,
|
|
534
|
+
content: List[Dict[str, str]],
|
|
535
|
+
) -> List[float]:
|
|
536
|
+
"""
|
|
537
|
+
Async version of get_multimodal_embedding() (v4 only).
|
|
538
|
+
"""
|
|
539
|
+
if not self._is_v4_model():
|
|
540
|
+
raise AgnoError(
|
|
541
|
+
message="Multimodal embeddings are only supported with Cohere Embed v4 models.",
|
|
542
|
+
status_code=400,
|
|
543
|
+
)
|
|
544
|
+
|
|
545
|
+
try:
|
|
546
|
+
inputs = [{"content": content}]
|
|
547
|
+
body = self._format_multimodal_request_body(inputs=inputs)
|
|
548
|
+
async with self.get_async_client() as client:
|
|
549
|
+
response = await client.invoke_model(
|
|
550
|
+
modelId=self.id,
|
|
551
|
+
body=body,
|
|
552
|
+
contentType="application/json",
|
|
553
|
+
accept="application/json",
|
|
554
|
+
)
|
|
555
|
+
response_body = json.loads((await response["body"].read()).decode("utf-8"))
|
|
556
|
+
return self._extract_embeddings(response_body)
|
|
557
|
+
except ClientError as e:
|
|
558
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
559
|
+
raise ModelProviderError(message=str(e.response), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|
|
560
|
+
except Exception as e:
|
|
561
|
+
log_error(f"Unexpected error calling Bedrock API: {str(e)}")
|
|
562
|
+
raise ModelProviderError(message=str(e), model_name="AwsBedrockEmbedder", model_id=self.id) from e
|