agno 2.0.5__tar.gz → 2.0.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.0.5 → agno-2.0.7}/PKG-INFO +4 -1
- {agno-2.0.5 → agno-2.0.7}/agno/agent/agent.py +67 -17
- {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/dynamo.py +7 -5
- {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/firestore.py +4 -2
- {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/gcs_json_db.py +4 -2
- {agno-2.0.5 → agno-2.0.7}/agno/db/json/json_db.py +8 -4
- {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/mongo.py +6 -4
- {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/mysql.py +2 -1
- {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/postgres.py +2 -1
- {agno-2.0.5 → agno-2.0.7}/agno/db/redis/redis.py +1 -1
- {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/singlestore.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/sqlite.py +1 -1
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/semantic.py +33 -6
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/openai.py +19 -11
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/knowledge.py +4 -3
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/website_reader.py +33 -16
- {agno-2.0.5 → agno-2.0.7}/agno/media.py +72 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/aimlapi/aimlapi.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/base.py +68 -12
- {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/cerebras_openai.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/deepinfra/deepinfra.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/deepseek/deepseek.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/fireworks/fireworks.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/internlm/internlm.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/langdb/langdb.py +4 -4
- {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/litellm_openai.py +2 -2
- agno-2.0.7/agno/models/llama_cpp/__init__.py +5 -0
- agno-2.0.7/agno/models/llama_cpp/llama_cpp.py +22 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/message.py +26 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/meta/llama_openai.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/nebius/nebius.py +2 -2
- agno-2.0.7/agno/models/nexus/__init__.py +3 -0
- agno-2.0.7/agno/models/nexus/nexus.py +22 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/nvidia/nvidia.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/openrouter/openrouter.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/perplexity/perplexity.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/portkey/portkey.py +3 -3
- {agno-2.0.5 → agno-2.0.7}/agno/models/response.py +2 -1
- {agno-2.0.5 → agno-2.0.7}/agno/models/sambanova/sambanova.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/together/together.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/vercel/v0.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/models/xai/xai.py +2 -2
- {agno-2.0.5 → agno-2.0.7}/agno/os/app.py +4 -10
- {agno-2.0.5 → agno-2.0.7}/agno/os/router.py +3 -2
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/evals.py +1 -1
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/memory.py +1 -1
- {agno-2.0.5 → agno-2.0.7}/agno/os/schema.py +3 -4
- {agno-2.0.5 → agno-2.0.7}/agno/os/utils.py +47 -12
- {agno-2.0.5 → agno-2.0.7}/agno/run/agent.py +20 -0
- {agno-2.0.5 → agno-2.0.7}/agno/run/team.py +18 -1
- {agno-2.0.5 → agno-2.0.7}/agno/run/workflow.py +10 -0
- {agno-2.0.5 → agno-2.0.7}/agno/team/team.py +58 -18
- {agno-2.0.5 → agno-2.0.7}/agno/tools/decorator.py +4 -2
- {agno-2.0.5 → agno-2.0.7}/agno/tools/e2b.py +14 -7
- agno-2.0.7/agno/tools/file_generation.py +350 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/function.py +2 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/mcp.py +1 -1
- {agno-2.0.5 → agno-2.0.7}/agno/tools/memori.py +1 -53
- {agno-2.0.5 → agno-2.0.7}/agno/utils/events.py +7 -1
- {agno-2.0.5 → agno-2.0.7}/agno/utils/gemini.py +24 -4
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/chroma/chromadb.py +66 -25
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lancedb/lance_db.py +15 -4
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/milvus/milvus.py +6 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/workflow.py +32 -0
- {agno-2.0.5 → agno-2.0.7}/agno.egg-info/PKG-INFO +4 -1
- {agno-2.0.5 → agno-2.0.7}/agno.egg-info/SOURCES.txt +5 -0
- {agno-2.0.5 → agno-2.0.7}/agno.egg-info/requires.txt +4 -0
- {agno-2.0.5 → agno-2.0.7}/pyproject.toml +4 -1
- {agno-2.0.5 → agno-2.0.7}/LICENSE +0 -0
- {agno-2.0.5 → agno-2.0.7}/README.md +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/agent/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/agent.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/api.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/evals.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/os.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/routes.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/agent.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/evals.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/os.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/response.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/team.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/workflows.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/settings.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/team.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/api/workflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/json/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/json/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/migrations/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/redis/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/redis/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/redis/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/evals.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/memory.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/metrics.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/db/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/debug.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/eval/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/eval/accuracy.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/eval/performance.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/eval/reliability.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/eval/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/exceptions.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/integrations/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/integrations/discord/client.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/content.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/document/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/types.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/knowledge/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/memory/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/memory/manager.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/anthropic/claude.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/aws/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/aws/bedrock.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/aws/claude.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/azure/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/cohere/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/cohere/chat.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/defaults.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/google/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/google/gemini.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/groq/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/groq/groq.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/ibm/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/internlm/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/langdb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/chat.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/meta/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/meta/llama.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/metrics.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/mistral/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/mistral/mistral.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/nebius/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/ollama/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/ollama/chat.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/openai/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/openai/chat.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/openai/like.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/openai/responses.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/portkey/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/together/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/vercel/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/vllm/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/vllm/vllm.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/models/xai/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/auth.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/config.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/mcp.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/health.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/home.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/routers/session/session.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/os/settings.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/py.typed +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/deepseek.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/default.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/groq.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/helpers.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/ollama.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/openai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/reasoning/step.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/run/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/run/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/run/cancel.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/run/messages.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/session/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/session/agent.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/session/summary.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/session/team.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/session/workflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/team/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/agentql.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/airflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/api.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/apify.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/arxiv.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/aws_lambda.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/aws_ses.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/baidusearch.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/bitbucket.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/brandfetch.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/bravesearch.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/brightdata.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/browserbase.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/calcom.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/calculator.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/cartesia.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/clickup.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/confluence.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/crawl4ai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/dalle.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/daytona.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/desi_vocal.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/discord.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/docker.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/duckdb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/duckduckgo.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/eleven_labs.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/email.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/evm.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/exa.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/fal.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/file.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/financial_datasets.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/firecrawl.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/giphy.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/github.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/gmail.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/google_bigquery.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/google_maps.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/googlecalendar.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/googlesearch.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/googlesheets.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/hackernews.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/jina.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/jira.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/knowledge.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/linear.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/linkup.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/local_file_system.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/lumalab.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/mem0.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/memory.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/gemini.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/groq.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/morph.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models/nebius.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/models_labs.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/moviepy_video.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/neo4j.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/newspaper.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/newspaper4k.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/openai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/openbb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/opencv.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/openweather.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/oxylabs.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/pandas.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/postgres.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/pubmed.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/python.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/reasoning.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/reddit.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/replicate.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/resend.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/scrapegraph.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/searxng.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/serpapi.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/serper.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/shell.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/slack.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/sleep.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/spider.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/sql.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/streamlit/components.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/tavily.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/telegram.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/todoist.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/tool_registry.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/toolkit.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/trafilatura.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/trello.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/twilio.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/user_control_flow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/valyu.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/visualization.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/webbrowser.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/webex.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/website.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/webtools.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/whatsapp.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/wikipedia.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/workflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/x.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/yfinance.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/youtube.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/zendesk.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/zep.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/tools/zoom.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/audio.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/certs.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/code_execution.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/common.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/dttm.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/enum.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/env.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/format_str.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/functions.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/http.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/json_schema.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/knowledge.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/location.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/log.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/mcp.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/media.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/merge_dict.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/message.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/aws_claude.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/claude.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/cohere.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/llama.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/mistral.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/models/watsonx.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/openai.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/pickle.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/pprint.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/agent.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/team.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/prompts.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/reasoning.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/response.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/response_iterator.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/safe_formatter.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/shell.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/streamlit.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/string.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/team.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/timer.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/tools.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/web.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/whatsapp.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/utils/yaml_io.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/base.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/distance.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/search.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/__init__.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/condition.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/loop.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/parallel.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/router.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/step.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/steps.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno/workflow/types.py +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.0.5 → agno-2.0.7}/agno.egg-info/top_level.txt +0 -0
- {agno-2.0.5 → agno-2.0.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.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
|
|
@@ -161,6 +161,8 @@ Requires-Dist: opencv-python; extra == "opencv"
|
|
|
161
161
|
Provides-Extra: psycopg
|
|
162
162
|
Requires-Dist: psycopg-binary; extra == "psycopg"
|
|
163
163
|
Requires-Dist: psycopg; extra == "psycopg"
|
|
164
|
+
Provides-Extra: reportlab
|
|
165
|
+
Requires-Dist: reportlab; extra == "reportlab"
|
|
164
166
|
Provides-Extra: todoist
|
|
165
167
|
Requires-Dist: todoist-api-python; extra == "todoist"
|
|
166
168
|
Provides-Extra: valyu
|
|
@@ -306,6 +308,7 @@ Requires-Dist: agno[mem0]; extra == "tools"
|
|
|
306
308
|
Requires-Dist: agno[memori]; extra == "tools"
|
|
307
309
|
Requires-Dist: agno[google_bigquery]; extra == "tools"
|
|
308
310
|
Requires-Dist: agno[psycopg]; extra == "tools"
|
|
311
|
+
Requires-Dist: agno[reportlab]; extra == "tools"
|
|
309
312
|
Requires-Dist: agno[trafilatura]; extra == "tools"
|
|
310
313
|
Requires-Dist: agno[neo4j]; extra == "tools"
|
|
311
314
|
Provides-Extra: storage
|
|
@@ -371,7 +371,7 @@ class Agent:
|
|
|
371
371
|
knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
|
|
372
372
|
references_format: Literal["json", "yaml"] = "json",
|
|
373
373
|
metadata: Optional[Dict[str, Any]] = None,
|
|
374
|
-
tools: Optional[
|
|
374
|
+
tools: Optional[Sequence[Union[Toolkit, Callable, Function, Dict]]] = None,
|
|
375
375
|
tool_call_limit: Optional[int] = None,
|
|
376
376
|
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
377
377
|
tool_hooks: Optional[List[Callable]] = None,
|
|
@@ -466,7 +466,7 @@ class Agent:
|
|
|
466
466
|
|
|
467
467
|
self.metadata = metadata
|
|
468
468
|
|
|
469
|
-
self.tools = tools
|
|
469
|
+
self.tools = list(tools) if tools else []
|
|
470
470
|
self.tool_call_limit = tool_call_limit
|
|
471
471
|
self.tool_choice = tool_choice
|
|
472
472
|
self.tool_hooks = tool_hooks
|
|
@@ -681,8 +681,8 @@ class Agent:
|
|
|
681
681
|
self.tools.append(tool)
|
|
682
682
|
self._rebuild_tools = True
|
|
683
683
|
|
|
684
|
-
def set_tools(self, tools:
|
|
685
|
-
self.tools = tools
|
|
684
|
+
def set_tools(self, tools: Sequence[Union[Toolkit, Callable, Function, Dict]]):
|
|
685
|
+
self.tools = list(tools) if tools else []
|
|
686
686
|
self._rebuild_tools = True
|
|
687
687
|
|
|
688
688
|
def _initialize_session(
|
|
@@ -762,6 +762,7 @@ class Agent:
|
|
|
762
762
|
tool_call_limit=self.tool_call_limit,
|
|
763
763
|
response_format=response_format,
|
|
764
764
|
run_response=run_response,
|
|
765
|
+
send_media_to_model=self.send_media_to_model,
|
|
765
766
|
)
|
|
766
767
|
|
|
767
768
|
# Check for cancellation after model call
|
|
@@ -1080,13 +1081,17 @@ class Agent:
|
|
|
1080
1081
|
# Initialize the Agent
|
|
1081
1082
|
self.initialize_agent(debug_mode=debug_mode)
|
|
1082
1083
|
|
|
1083
|
-
image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
|
|
1084
|
-
images=images, videos=videos, audios=audio
|
|
1084
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
|
|
1085
|
+
images=images, videos=videos, audios=audio, files=files
|
|
1085
1086
|
)
|
|
1086
1087
|
|
|
1087
1088
|
# Create RunInput to capture the original user input
|
|
1088
1089
|
run_input = RunInput(
|
|
1089
|
-
input_content=input,
|
|
1090
|
+
input_content=input,
|
|
1091
|
+
images=image_artifacts,
|
|
1092
|
+
videos=video_artifacts,
|
|
1093
|
+
audios=audio_artifacts,
|
|
1094
|
+
files=file_artifacts,
|
|
1090
1095
|
)
|
|
1091
1096
|
|
|
1092
1097
|
# Read existing session from database
|
|
@@ -1355,6 +1360,7 @@ class Agent:
|
|
|
1355
1360
|
tool_choice=self.tool_choice,
|
|
1356
1361
|
tool_call_limit=self.tool_call_limit,
|
|
1357
1362
|
response_format=response_format,
|
|
1363
|
+
send_media_to_model=self.send_media_to_model,
|
|
1358
1364
|
)
|
|
1359
1365
|
|
|
1360
1366
|
# Check for cancellation after model call
|
|
@@ -1713,13 +1719,17 @@ class Agent:
|
|
|
1713
1719
|
# Initialize the Agent
|
|
1714
1720
|
self.initialize_agent(debug_mode=debug_mode)
|
|
1715
1721
|
|
|
1716
|
-
image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
|
|
1717
|
-
images=images, videos=videos, audios=audio
|
|
1722
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
|
|
1723
|
+
images=images, videos=videos, audios=audio, files=files
|
|
1718
1724
|
)
|
|
1719
1725
|
|
|
1720
1726
|
# Create RunInput to capture the original user input
|
|
1721
1727
|
run_input = RunInput(
|
|
1722
|
-
input_content=input,
|
|
1728
|
+
input_content=input,
|
|
1729
|
+
images=image_artifacts,
|
|
1730
|
+
videos=video_artifacts,
|
|
1731
|
+
audios=audio_artifacts,
|
|
1732
|
+
files=file_artifacts,
|
|
1723
1733
|
)
|
|
1724
1734
|
|
|
1725
1735
|
# Read existing session from storage
|
|
@@ -3063,6 +3073,10 @@ class Agent:
|
|
|
3063
3073
|
for audio in model_response.audios:
|
|
3064
3074
|
self._add_audio(audio, run_response) # Generated audio go to run_response.audio
|
|
3065
3075
|
|
|
3076
|
+
if model_response.files is not None:
|
|
3077
|
+
for file in model_response.files:
|
|
3078
|
+
self._add_file(file, run_response) # Generated files go to run_response.files
|
|
3079
|
+
|
|
3066
3080
|
def _update_run_response(self, model_response: ModelResponse, run_response: RunOutput, run_messages: RunMessages):
|
|
3067
3081
|
# Handle structured outputs
|
|
3068
3082
|
if self.output_schema is not None and model_response.parsed is not None:
|
|
@@ -3088,6 +3102,8 @@ class Agent:
|
|
|
3088
3102
|
# Update the run_response citations with the model response citations
|
|
3089
3103
|
if model_response.citations is not None:
|
|
3090
3104
|
run_response.citations = model_response.citations
|
|
3105
|
+
if model_response.provider_data is not None:
|
|
3106
|
+
run_response.model_provider_data = model_response.provider_data
|
|
3091
3107
|
|
|
3092
3108
|
# Update the run_response tools with the model response tool_executions
|
|
3093
3109
|
if model_response.tool_executions is not None:
|
|
@@ -3125,7 +3141,8 @@ class Agent:
|
|
|
3125
3141
|
"""Calculate session metrics"""
|
|
3126
3142
|
session_metrics = self._get_session_metrics(session=session)
|
|
3127
3143
|
# Add the metrics for the current run to the session metrics
|
|
3128
|
-
|
|
3144
|
+
if run_response.metrics is not None:
|
|
3145
|
+
session_metrics += run_response.metrics
|
|
3129
3146
|
session_metrics.time_to_first_token = None
|
|
3130
3147
|
if session.session_data is not None:
|
|
3131
3148
|
session.session_data["session_metrics"] = session_metrics
|
|
@@ -3161,6 +3178,7 @@ class Agent:
|
|
|
3161
3178
|
tool_call_limit=self.tool_call_limit,
|
|
3162
3179
|
stream_model_response=stream_model_response,
|
|
3163
3180
|
run_response=run_response,
|
|
3181
|
+
send_media_to_model=self.send_media_to_model,
|
|
3164
3182
|
):
|
|
3165
3183
|
yield from self._handle_model_response_chunk(
|
|
3166
3184
|
session=session,
|
|
@@ -3237,6 +3255,7 @@ class Agent:
|
|
|
3237
3255
|
tool_call_limit=self.tool_call_limit,
|
|
3238
3256
|
stream_model_response=stream_model_response,
|
|
3239
3257
|
run_response=run_response,
|
|
3258
|
+
send_media_to_model=self.send_media_to_model,
|
|
3240
3259
|
) # type: ignore
|
|
3241
3260
|
|
|
3242
3261
|
async for model_response_event in model_response_stream: # type: ignore
|
|
@@ -3339,6 +3358,10 @@ class Agent:
|
|
|
3339
3358
|
model_response.reasoning_content += model_response_event.redacted_reasoning_content
|
|
3340
3359
|
run_response.reasoning_content = model_response.reasoning_content
|
|
3341
3360
|
|
|
3361
|
+
if model_response_event.provider_data is not None:
|
|
3362
|
+
# We get citations in one chunk
|
|
3363
|
+
run_response.model_provider_data = model_response.provider_data
|
|
3364
|
+
|
|
3342
3365
|
if model_response_event.citations is not None:
|
|
3343
3366
|
# We get citations in one chunk
|
|
3344
3367
|
run_response.citations = model_response_event.citations
|
|
@@ -3359,6 +3382,7 @@ class Agent:
|
|
|
3359
3382
|
or model_response_event.reasoning_content is not None
|
|
3360
3383
|
or model_response_event.redacted_reasoning_content is not None
|
|
3361
3384
|
or model_response_event.citations is not None
|
|
3385
|
+
or model_response_event.provider_data is not None
|
|
3362
3386
|
):
|
|
3363
3387
|
yield self._handle_event(
|
|
3364
3388
|
create_run_output_content_event(
|
|
@@ -3367,6 +3391,7 @@ class Agent:
|
|
|
3367
3391
|
reasoning_content=model_response_event.reasoning_content,
|
|
3368
3392
|
redacted_reasoning_content=model_response_event.redacted_reasoning_content,
|
|
3369
3393
|
citations=model_response_event.citations,
|
|
3394
|
+
model_provider_data=model_response_event.provider_data,
|
|
3370
3395
|
),
|
|
3371
3396
|
run_response,
|
|
3372
3397
|
workflow_context=workflow_context,
|
|
@@ -3800,7 +3825,9 @@ class Agent:
|
|
|
3800
3825
|
self._rebuild_tools = True
|
|
3801
3826
|
if self.search_session_history:
|
|
3802
3827
|
agent_tools.append(
|
|
3803
|
-
self._get_previous_sessions_messages_function(
|
|
3828
|
+
self._get_previous_sessions_messages_function(
|
|
3829
|
+
num_history_sessions=self.num_history_sessions, user_id=user_id
|
|
3830
|
+
)
|
|
3804
3831
|
)
|
|
3805
3832
|
self._rebuild_tools = True
|
|
3806
3833
|
|
|
@@ -4948,7 +4975,7 @@ class Agent:
|
|
|
4948
4975
|
# 1. If build_user_context is False or message is a list, return the message as is.
|
|
4949
4976
|
if not self.build_user_context:
|
|
4950
4977
|
return Message(
|
|
4951
|
-
role=self.user_message_role,
|
|
4978
|
+
role=self.user_message_role or "user",
|
|
4952
4979
|
content=input,
|
|
4953
4980
|
images=None if not self.send_media_to_model else images,
|
|
4954
4981
|
audio=None if not self.send_media_to_model else audio,
|
|
@@ -4961,7 +4988,7 @@ class Agent:
|
|
|
4961
4988
|
# If we have any media, return a message with empty content
|
|
4962
4989
|
if images is not None or audio is not None or videos is not None or files is not None:
|
|
4963
4990
|
return Message(
|
|
4964
|
-
role=self.user_message_role,
|
|
4991
|
+
role=self.user_message_role or "user",
|
|
4965
4992
|
content="",
|
|
4966
4993
|
images=None if not self.send_media_to_model else images,
|
|
4967
4994
|
audio=None if not self.send_media_to_model else audio,
|
|
@@ -5716,6 +5743,13 @@ class Agent:
|
|
|
5716
5743
|
run_response.audio = []
|
|
5717
5744
|
run_response.audio.append(audio)
|
|
5718
5745
|
|
|
5746
|
+
def _add_file(self, file: File, run_response: RunOutput) -> None:
|
|
5747
|
+
"""Add file to both the agent's stateful storage and the current run response"""
|
|
5748
|
+
# Add to run response
|
|
5749
|
+
if run_response.files is None:
|
|
5750
|
+
run_response.files = []
|
|
5751
|
+
run_response.files.append(file)
|
|
5752
|
+
|
|
5719
5753
|
###########################################################################
|
|
5720
5754
|
# Reasoning
|
|
5721
5755
|
###########################################################################
|
|
@@ -6779,11 +6813,14 @@ class Agent:
|
|
|
6779
6813
|
)
|
|
6780
6814
|
return "Successfully added to knowledge base"
|
|
6781
6815
|
|
|
6782
|
-
def _get_previous_sessions_messages_function(
|
|
6816
|
+
def _get_previous_sessions_messages_function(
|
|
6817
|
+
self, num_history_sessions: Optional[int] = 2, user_id: Optional[str] = None
|
|
6818
|
+
) -> Callable:
|
|
6783
6819
|
"""Factory function to create a get_previous_session_messages function.
|
|
6784
6820
|
|
|
6785
6821
|
Args:
|
|
6786
6822
|
num_history_sessions: The last n sessions to be taken from db
|
|
6823
|
+
user_id: The user ID to filter sessions by
|
|
6787
6824
|
|
|
6788
6825
|
Returns:
|
|
6789
6826
|
Callable: A function that retrieves messages from previous sessions
|
|
@@ -6802,7 +6839,9 @@ class Agent:
|
|
|
6802
6839
|
if self.db is None:
|
|
6803
6840
|
return "Previous session messages not available"
|
|
6804
6841
|
|
|
6805
|
-
selected_sessions = self.db.get_sessions(
|
|
6842
|
+
selected_sessions = self.db.get_sessions(
|
|
6843
|
+
session_type=SessionType.AGENT, limit=num_history_sessions, user_id=user_id
|
|
6844
|
+
)
|
|
6806
6845
|
|
|
6807
6846
|
all_messages = []
|
|
6808
6847
|
seen_message_pairs = set()
|
|
@@ -7199,6 +7238,7 @@ class Agent:
|
|
|
7199
7238
|
images: Optional[Sequence[Image]] = None,
|
|
7200
7239
|
videos: Optional[Sequence[Video]] = None,
|
|
7201
7240
|
audios: Optional[Sequence[Audio]] = None,
|
|
7241
|
+
files: Optional[Sequence[File]] = None,
|
|
7202
7242
|
) -> tuple:
|
|
7203
7243
|
"""Convert raw Image/Video/Audio objects - now unified, so just return as-is."""
|
|
7204
7244
|
# With unified classes, no conversion needed - just ensure IDs are set
|
|
@@ -7233,7 +7273,17 @@ class Agent:
|
|
|
7233
7273
|
aud.id = str(uuid4())
|
|
7234
7274
|
audio_list.append(aud)
|
|
7235
7275
|
|
|
7236
|
-
|
|
7276
|
+
file_list = None
|
|
7277
|
+
if files:
|
|
7278
|
+
file_list = []
|
|
7279
|
+
for file in files:
|
|
7280
|
+
if not file.id:
|
|
7281
|
+
from uuid import uuid4
|
|
7282
|
+
|
|
7283
|
+
file.id = str(uuid4())
|
|
7284
|
+
file_list.append(file)
|
|
7285
|
+
|
|
7286
|
+
return image_list, video_list, audio_list, file_list
|
|
7237
7287
|
|
|
7238
7288
|
def cli_app(
|
|
7239
7289
|
self,
|
|
@@ -181,7 +181,7 @@ class DynamoDb(BaseDb):
|
|
|
181
181
|
|
|
182
182
|
# --- Sessions ---
|
|
183
183
|
|
|
184
|
-
def delete_session(self, session_id: Optional[str] = None
|
|
184
|
+
def delete_session(self, session_id: Optional[str] = None) -> bool:
|
|
185
185
|
"""
|
|
186
186
|
Delete a session from the database.
|
|
187
187
|
|
|
@@ -236,7 +236,7 @@ class DynamoDb(BaseDb):
|
|
|
236
236
|
def get_session(
|
|
237
237
|
self,
|
|
238
238
|
session_id: str,
|
|
239
|
-
session_type:
|
|
239
|
+
session_type: SessionType,
|
|
240
240
|
user_id: Optional[str] = None,
|
|
241
241
|
deserialize: Optional[bool] = True,
|
|
242
242
|
) -> Optional[Union[Session, Dict[str, Any]]]:
|
|
@@ -245,7 +245,7 @@ class DynamoDb(BaseDb):
|
|
|
245
245
|
|
|
246
246
|
Args:
|
|
247
247
|
session_id (str): The ID of the session to get.
|
|
248
|
-
session_type (
|
|
248
|
+
session_type (SessionType): The type of session to get.
|
|
249
249
|
user_id (Optional[str]): The ID of the user to get the session for.
|
|
250
250
|
deserialize (Optional[bool]): Whether to deserialize the session.
|
|
251
251
|
|
|
@@ -268,7 +268,7 @@ class DynamoDb(BaseDb):
|
|
|
268
268
|
|
|
269
269
|
session = deserialize_from_dynamodb_item(item)
|
|
270
270
|
|
|
271
|
-
if
|
|
271
|
+
if session.get("session_type") != session_type.value:
|
|
272
272
|
return None
|
|
273
273
|
if user_id and session.get("user_id") != user_id:
|
|
274
274
|
return None
|
|
@@ -283,8 +283,10 @@ class DynamoDb(BaseDb):
|
|
|
283
283
|
return AgentSession.from_dict(session)
|
|
284
284
|
elif session_type == SessionType.TEAM:
|
|
285
285
|
return TeamSession.from_dict(session)
|
|
286
|
-
|
|
286
|
+
elif session_type == SessionType.WORKFLOW:
|
|
287
287
|
return WorkflowSession.from_dict(session)
|
|
288
|
+
else:
|
|
289
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
288
290
|
|
|
289
291
|
except Exception as e:
|
|
290
292
|
log_error(f"Failed to get session {session_id}: {e}")
|
|
@@ -242,8 +242,8 @@ class FirestoreDb(BaseDb):
|
|
|
242
242
|
|
|
243
243
|
Args:
|
|
244
244
|
session_id (str): The ID of the session to get.
|
|
245
|
+
session_type (SessionType): The type of session to get.
|
|
245
246
|
user_id (Optional[str]): The ID of the user to get the session for.
|
|
246
|
-
session_type (Optional[SessionType]): The type of session to get.
|
|
247
247
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
248
248
|
|
|
249
249
|
Returns:
|
|
@@ -281,8 +281,10 @@ class FirestoreDb(BaseDb):
|
|
|
281
281
|
return AgentSession.from_dict(session)
|
|
282
282
|
elif session_type == SessionType.TEAM:
|
|
283
283
|
return TeamSession.from_dict(session)
|
|
284
|
-
|
|
284
|
+
elif session_type == SessionType.WORKFLOW:
|
|
285
285
|
return WorkflowSession.from_dict(session)
|
|
286
|
+
else:
|
|
287
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
286
288
|
|
|
287
289
|
except Exception as e:
|
|
288
290
|
log_error(f"Exception reading session: {e}")
|
|
@@ -185,7 +185,7 @@ class GcsJsonDb(BaseDb):
|
|
|
185
185
|
def get_session(
|
|
186
186
|
self,
|
|
187
187
|
session_id: str,
|
|
188
|
-
session_type:
|
|
188
|
+
session_type: SessionType,
|
|
189
189
|
user_id: Optional[str] = None,
|
|
190
190
|
deserialize: Optional[bool] = True,
|
|
191
191
|
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession, Dict[str, Any]]]:
|
|
@@ -193,7 +193,7 @@ class GcsJsonDb(BaseDb):
|
|
|
193
193
|
|
|
194
194
|
Args:
|
|
195
195
|
session_id (str): The ID of the session to read.
|
|
196
|
-
session_type (
|
|
196
|
+
session_type (SessionType): The type of the session to read.
|
|
197
197
|
user_id (Optional[str]): The ID of the user to read the session for.
|
|
198
198
|
deserialize (Optional[bool]): Whether to deserialize the session.
|
|
199
199
|
|
|
@@ -226,6 +226,8 @@ class GcsJsonDb(BaseDb):
|
|
|
226
226
|
return TeamSession.from_dict(session_data)
|
|
227
227
|
elif session_type == SessionType.WORKFLOW:
|
|
228
228
|
return WorkflowSession.from_dict(session_data)
|
|
229
|
+
else:
|
|
230
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
229
231
|
|
|
230
232
|
return None
|
|
231
233
|
|
|
@@ -168,7 +168,7 @@ class JsonDb(BaseDb):
|
|
|
168
168
|
def get_session(
|
|
169
169
|
self,
|
|
170
170
|
session_id: str,
|
|
171
|
-
session_type:
|
|
171
|
+
session_type: SessionType,
|
|
172
172
|
user_id: Optional[str] = None,
|
|
173
173
|
deserialize: Optional[bool] = True,
|
|
174
174
|
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession, Dict[str, Any]]]:
|
|
@@ -176,7 +176,7 @@ class JsonDb(BaseDb):
|
|
|
176
176
|
|
|
177
177
|
Args:
|
|
178
178
|
session_id (str): The ID of the session to read.
|
|
179
|
-
session_type (
|
|
179
|
+
session_type (SessionType): The type of the session to read.
|
|
180
180
|
user_id (Optional[str]): The ID of the user to read the session for.
|
|
181
181
|
deserialize (Optional[bool]): Whether to deserialize the session.
|
|
182
182
|
|
|
@@ -208,8 +208,10 @@ class JsonDb(BaseDb):
|
|
|
208
208
|
return AgentSession.from_dict(session)
|
|
209
209
|
elif session_type == SessionType.TEAM:
|
|
210
210
|
return TeamSession.from_dict(session)
|
|
211
|
-
|
|
211
|
+
elif session_type == SessionType.WORKFLOW:
|
|
212
212
|
return WorkflowSession.from_dict(session)
|
|
213
|
+
else:
|
|
214
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
213
215
|
|
|
214
216
|
return None
|
|
215
217
|
|
|
@@ -338,8 +340,10 @@ class JsonDb(BaseDb):
|
|
|
338
340
|
return AgentSession.from_dict(session)
|
|
339
341
|
elif session_type == SessionType.TEAM:
|
|
340
342
|
return TeamSession.from_dict(session)
|
|
341
|
-
|
|
343
|
+
elif session_type == SessionType.WORKFLOW:
|
|
342
344
|
return WorkflowSession.from_dict(session)
|
|
345
|
+
else:
|
|
346
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
343
347
|
|
|
344
348
|
return None
|
|
345
349
|
|
|
@@ -253,8 +253,8 @@ class MongoDb(BaseDb):
|
|
|
253
253
|
|
|
254
254
|
Args:
|
|
255
255
|
session_id (str): The ID of the session to get.
|
|
256
|
+
session_type (SessionType): The type of session to get.
|
|
256
257
|
user_id (Optional[str]): The ID of the user to get the session for.
|
|
257
|
-
session_type (Optional[SessionType]): The type of session to get.
|
|
258
258
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
259
259
|
|
|
260
260
|
Returns:
|
|
@@ -285,12 +285,14 @@ class MongoDb(BaseDb):
|
|
|
285
285
|
if not deserialize:
|
|
286
286
|
return session
|
|
287
287
|
|
|
288
|
-
if session_type == SessionType.AGENT
|
|
288
|
+
if session_type == SessionType.AGENT:
|
|
289
289
|
return AgentSession.from_dict(session)
|
|
290
|
-
elif session_type == SessionType.TEAM
|
|
290
|
+
elif session_type == SessionType.TEAM:
|
|
291
291
|
return TeamSession.from_dict(session)
|
|
292
|
-
|
|
292
|
+
elif session_type == SessionType.WORKFLOW:
|
|
293
293
|
return WorkflowSession.from_dict(session)
|
|
294
|
+
else:
|
|
295
|
+
raise ValueError(f"Invalid session type: {session_type}")
|
|
294
296
|
|
|
295
297
|
except Exception as e:
|
|
296
298
|
log_error(f"Exception reading session: {e}")
|
|
@@ -350,8 +350,8 @@ class MySQLDb(BaseDb):
|
|
|
350
350
|
|
|
351
351
|
Args:
|
|
352
352
|
session_id (str): ID of the session to read.
|
|
353
|
+
session_type (SessionType): Type of session to get.
|
|
353
354
|
user_id (Optional[str]): User ID to filter by. Defaults to None.
|
|
354
|
-
session_type (Optional[SessionType]): Type of session to read. Defaults to None.
|
|
355
355
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
356
356
|
|
|
357
357
|
Returns:
|
|
@@ -415,6 +415,7 @@ class MySQLDb(BaseDb):
|
|
|
415
415
|
Get all sessions in the given table. Can filter by user_id and entity_id.
|
|
416
416
|
|
|
417
417
|
Args:
|
|
418
|
+
session_type (Optional[SessionType]): The type of sessions to get.
|
|
418
419
|
user_id (Optional[str]): The ID of the user to filter by.
|
|
419
420
|
entity_id (Optional[str]): The ID of the agent / workflow to filter by.
|
|
420
421
|
start_timestamp (Optional[int]): The start timestamp to filter by.
|
|
@@ -345,8 +345,8 @@ class PostgresDb(BaseDb):
|
|
|
345
345
|
|
|
346
346
|
Args:
|
|
347
347
|
session_id (str): ID of the session to read.
|
|
348
|
+
session_type (SessionType): Type of session to get.
|
|
348
349
|
user_id (Optional[str]): User ID to filter by. Defaults to None.
|
|
349
|
-
session_type (Optional[SessionType]): Type of session to read. Defaults to None.
|
|
350
350
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
351
351
|
|
|
352
352
|
Returns:
|
|
@@ -410,6 +410,7 @@ class PostgresDb(BaseDb):
|
|
|
410
410
|
Get all sessions in the given table. Can filter by user_id and entity_id.
|
|
411
411
|
|
|
412
412
|
Args:
|
|
413
|
+
session_type (Optional[SessionType]): The type of session to get.
|
|
413
414
|
user_id (Optional[str]): The ID of the user to filter by.
|
|
414
415
|
entity_id (Optional[str]): The ID of the agent / workflow to filter by.
|
|
415
416
|
start_timestamp (Optional[int]): The start timestamp to filter by.
|
|
@@ -300,8 +300,8 @@ class RedisDb(BaseDb):
|
|
|
300
300
|
|
|
301
301
|
Args:
|
|
302
302
|
session_id (str): The ID of the session to get.
|
|
303
|
+
session_type (SessionType): The type of session to get.
|
|
303
304
|
user_id (Optional[str]): The ID of the user to filter by.
|
|
304
|
-
session_type (Optional[SessionType]): The type of session to filter by.
|
|
305
305
|
|
|
306
306
|
Returns:
|
|
307
307
|
Optional[Union[AgentSession, TeamSession, WorkflowSession]]: The session if found, None otherwise.
|
|
@@ -431,8 +431,8 @@ class SingleStoreDb(BaseDb):
|
|
|
431
431
|
|
|
432
432
|
Args:
|
|
433
433
|
session_id (str): ID of the session to read.
|
|
434
|
+
session_type (SessionType): Type of session to get.
|
|
434
435
|
user_id (Optional[str]): User ID to filter by. Defaults to None.
|
|
435
|
-
session_type (Optional[SessionType]): Type of session to read. Defaults to None.
|
|
436
436
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
437
437
|
|
|
438
438
|
Returns:
|
|
@@ -496,7 +496,7 @@ class SingleStoreDb(BaseDb):
|
|
|
496
496
|
Get all sessions in the given table. Can filter by user_id and entity_id.
|
|
497
497
|
|
|
498
498
|
Args:
|
|
499
|
-
session_type (Optional[SessionType]): The type of session to filter by.
|
|
499
|
+
session_type (Optional[SessionType]): The type of session to filter by.
|
|
500
500
|
user_id (Optional[str]): The ID of the user to filter by.
|
|
501
501
|
component_id (Optional[str]): The ID of the agent / workflow to filter by.
|
|
502
502
|
session_name (Optional[str]): The name of the session to filter by.
|
|
@@ -333,8 +333,8 @@ class SqliteDb(BaseDb):
|
|
|
333
333
|
|
|
334
334
|
Args:
|
|
335
335
|
session_id (str): ID of the session to read.
|
|
336
|
+
session_type (SessionType): Type of session to get.
|
|
336
337
|
user_id (Optional[str]): User ID to filter by. Defaults to None.
|
|
337
|
-
session_type (Optional[SessionType]): Type of session to read. Defaults to None.
|
|
338
338
|
deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
|
|
339
339
|
|
|
340
340
|
Returns:
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import inspect
|
|
2
|
+
from typing import Any, Dict, List, Optional
|
|
2
3
|
|
|
3
4
|
from agno.knowledge.chunking.strategy import ChunkingStrategy
|
|
4
5
|
from agno.knowledge.document.base import Document
|
|
@@ -26,11 +27,37 @@ class SemanticChunking(ChunkingStrategy):
|
|
|
26
27
|
"Please install it using `pip install chonkie` to use SemanticChunking."
|
|
27
28
|
)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
chunk_size
|
|
32
|
-
threshold
|
|
33
|
-
|
|
30
|
+
# Build arguments dynamically based on chonkie's supported signature
|
|
31
|
+
params: Dict[str, Any] = {
|
|
32
|
+
"chunk_size": self.chunk_size,
|
|
33
|
+
"threshold": self.similarity_threshold,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
sig = inspect.signature(SemanticChunker)
|
|
38
|
+
param_names = set(sig.parameters.keys())
|
|
39
|
+
|
|
40
|
+
# Prefer passing a callable to avoid Chonkie initializing its own client
|
|
41
|
+
if "embedding_fn" in param_names:
|
|
42
|
+
params["embedding_fn"] = self.embedder.get_embedding # type: ignore[attr-defined]
|
|
43
|
+
# If chonkie allows specifying dimensions, provide them
|
|
44
|
+
if "embedding_dimensions" in param_names and getattr(self.embedder, "dimensions", None):
|
|
45
|
+
params["embedding_dimensions"] = self.embedder.dimensions # type: ignore[attr-defined]
|
|
46
|
+
elif "embedder" in param_names:
|
|
47
|
+
# Some versions may accept an embedder object directly
|
|
48
|
+
params["embedder"] = self.embedder
|
|
49
|
+
else:
|
|
50
|
+
# Fallback to model id
|
|
51
|
+
params["embedding_model"] = getattr(self.embedder, "id", None) or "text-embedding-3-small"
|
|
52
|
+
|
|
53
|
+
self.chunker = SemanticChunker(**params)
|
|
54
|
+
except Exception:
|
|
55
|
+
# As a final fallback, use the original behavior
|
|
56
|
+
self.chunker = SemanticChunker(
|
|
57
|
+
embedding_model=getattr(self.embedder, "id", None) or "text-embedding-3-small",
|
|
58
|
+
chunk_size=self.chunk_size,
|
|
59
|
+
threshold=self.similarity_threshold,
|
|
60
|
+
)
|
|
34
61
|
|
|
35
62
|
def chunk(self, document: Document) -> List[Document]:
|
|
36
63
|
"""Split document into semantic chunks using chonkie"""
|
|
@@ -78,21 +78,25 @@ class OpenAIEmbedder(Embedder):
|
|
|
78
78
|
return self.client.embeddings.create(**_request_params)
|
|
79
79
|
|
|
80
80
|
def get_embedding(self, text: str) -> List[float]:
|
|
81
|
-
response: CreateEmbeddingResponse = self.response(text=text)
|
|
82
81
|
try:
|
|
82
|
+
response: CreateEmbeddingResponse = self.response(text=text)
|
|
83
83
|
return response.data[0].embedding
|
|
84
84
|
except Exception as e:
|
|
85
85
|
logger.warning(e)
|
|
86
86
|
return []
|
|
87
87
|
|
|
88
88
|
def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
|
|
89
|
-
|
|
89
|
+
try:
|
|
90
|
+
response: CreateEmbeddingResponse = self.response(text=text)
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
embedding = response.data[0].embedding
|
|
93
|
+
usage = response.usage
|
|
94
|
+
if usage:
|
|
95
|
+
return embedding, usage.model_dump()
|
|
96
|
+
return embedding, None
|
|
97
|
+
except Exception as e:
|
|
98
|
+
logger.warning(e)
|
|
99
|
+
return [], None
|
|
96
100
|
|
|
97
101
|
async def async_get_embedding(self, text: str) -> List[float]:
|
|
98
102
|
req: Dict[str, Any] = {
|
|
@@ -127,10 +131,14 @@ class OpenAIEmbedder(Embedder):
|
|
|
127
131
|
if self.request_params:
|
|
128
132
|
req.update(self.request_params)
|
|
129
133
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
try:
|
|
135
|
+
response = await self.aclient.embeddings.create(**req)
|
|
136
|
+
embedding = response.data[0].embedding
|
|
137
|
+
usage = response.usage
|
|
138
|
+
return embedding, usage.model_dump() if usage else None
|
|
139
|
+
except Exception as e:
|
|
140
|
+
logger.warning(e)
|
|
141
|
+
return [], None
|
|
134
142
|
|
|
135
143
|
def get_embeddings_batch(self, texts: List[str], batch_size: int = 100) -> List[List[float]]:
|
|
136
144
|
"""
|
|
@@ -74,6 +74,8 @@ class Knowledge:
|
|
|
74
74
|
async def add_contents_async(self, *args, **kwargs) -> None:
|
|
75
75
|
if args and isinstance(args[0], list):
|
|
76
76
|
arguments = args[0]
|
|
77
|
+
upsert = kwargs.get("upsert", False)
|
|
78
|
+
skip_if_exists = kwargs.get("skip_if_exists", False)
|
|
77
79
|
for argument in arguments:
|
|
78
80
|
await self.add_content_async(
|
|
79
81
|
name=argument.get("name"),
|
|
@@ -85,8 +87,8 @@ class Knowledge:
|
|
|
85
87
|
reader=argument.get("reader"),
|
|
86
88
|
include=argument.get("include"),
|
|
87
89
|
exclude=argument.get("exclude"),
|
|
88
|
-
upsert=argument.get("upsert",
|
|
89
|
-
skip_if_exists=argument.get("skip_if_exists",
|
|
90
|
+
upsert=argument.get("upsert", upsert),
|
|
91
|
+
skip_if_exists=argument.get("skip_if_exists", skip_if_exists),
|
|
90
92
|
remote_content=argument.get("remote_content", None),
|
|
91
93
|
)
|
|
92
94
|
|
|
@@ -102,7 +104,6 @@ class Knowledge:
|
|
|
102
104
|
upsert = kwargs.get("upsert", False)
|
|
103
105
|
skip_if_exists = kwargs.get("skip_if_exists", False)
|
|
104
106
|
remote_content = kwargs.get("remote_content", None)
|
|
105
|
-
|
|
106
107
|
for path in paths:
|
|
107
108
|
await self.add_content_async(
|
|
108
109
|
name=name,
|