agno 2.0.6__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.6 → agno-2.0.7}/PKG-INFO +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno/agent/agent.py +15 -1
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/semantic.py +33 -6
- {agno-2.0.6 → agno-2.0.7}/agno/media.py +2 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/base.py +38 -9
- 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.6 → agno-2.0.7}/agno/models/nexus/__init__.py +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno/models/nexus/nexus.py +2 -5
- {agno-2.0.6 → agno-2.0.7}/agno/os/app.py +4 -10
- {agno-2.0.6 → agno-2.0.7}/agno/os/router.py +3 -4
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/evals/evals.py +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/memory/memory.py +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno/os/schema.py +3 -4
- {agno-2.0.6 → agno-2.0.7}/agno/os/utils.py +47 -12
- {agno-2.0.6 → agno-2.0.7}/agno/run/agent.py +4 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/team.py +3 -1
- {agno-2.0.6 → agno-2.0.7}/agno/team/team.py +21 -11
- {agno-2.0.6 → agno-2.0.7}/agno/tools/decorator.py +4 -2
- {agno-2.0.6 → agno-2.0.7}/agno/tools/mcp.py +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno/tools/memori.py +1 -53
- {agno-2.0.6 → agno-2.0.7}/agno/utils/events.py +7 -1
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/workflow.py +28 -0
- {agno-2.0.6 → agno-2.0.7}/agno.egg-info/PKG-INFO +1 -1
- {agno-2.0.6 → agno-2.0.7}/agno.egg-info/SOURCES.txt +2 -0
- {agno-2.0.6 → agno-2.0.7}/pyproject.toml +1 -1
- {agno-2.0.6 → agno-2.0.7}/LICENSE +0 -0
- {agno-2.0.6 → agno-2.0.7}/README.md +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/agent/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/agent.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/api.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/evals.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/os.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/routes.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/agent.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/evals.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/os.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/response.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/team.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/schemas/workflows.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/settings.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/team.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/api/workflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/cloud/aws/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/dynamo/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/firestore/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/firestore/firestore.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/firestore/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/firestore/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/in_memory/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/json/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/json/json_db.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/json/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/migrations/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mongo/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mongo/mongo.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mongo/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mongo/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mysql/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mysql/mysql.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mysql/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/mysql/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/postgres/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/postgres/postgres.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/postgres/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/postgres/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/redis/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/redis/redis.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/redis/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/redis/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/schemas/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/schemas/evals.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/schemas/memory.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/schemas/metrics.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/singlestore/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/sqlite/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/db/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/debug.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/eval/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/eval/accuracy.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/eval/performance.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/eval/reliability.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/eval/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/exceptions.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/integrations/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/integrations/discord/client.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/content.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/document/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/knowledge.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/types.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/knowledge/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/memory/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/memory/manager.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/anthropic/claude.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/aws/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/aws/bedrock.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/aws/claude.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/azure/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/cohere/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/cohere/chat.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/defaults.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/google/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/google/gemini.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/groq/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/groq/groq.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/ibm/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/internlm/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/internlm/internlm.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/langdb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/langdb/langdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/litellm/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/litellm/chat.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/message.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/meta/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/meta/llama.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/metrics.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/mistral/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/mistral/mistral.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/nebius/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/nebius/nebius.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/ollama/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/ollama/chat.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openai/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openai/chat.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openai/like.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openai/responses.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/portkey/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/portkey/portkey.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/response.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/together/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/together/together.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/vercel/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/vercel/v0.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/vllm/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/vllm/vllm.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/xai/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/models/xai/xai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/auth.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/config.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/mcp.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/health.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/home.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/routers/session/session.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/os/settings.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/py.typed +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/deepseek.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/default.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/groq.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/helpers.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/ollama.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/reasoning/step.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/cancel.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/messages.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/run/workflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/session/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/session/agent.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/session/summary.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/session/team.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/session/workflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/team/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/agentql.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/airflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/api.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/apify.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/arxiv.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/aws_lambda.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/aws_ses.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/baidusearch.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/bitbucket.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/brandfetch.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/bravesearch.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/brightdata.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/browserbase.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/calcom.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/calculator.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/cartesia.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/clickup.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/confluence.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/crawl4ai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/dalle.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/daytona.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/desi_vocal.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/discord.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/docker.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/duckdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/duckduckgo.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/e2b.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/eleven_labs.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/email.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/evm.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/exa.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/fal.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/file.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/file_generation.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/financial_datasets.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/firecrawl.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/function.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/giphy.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/github.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/gmail.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/google_bigquery.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/google_maps.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/googlecalendar.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/googlesearch.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/googlesheets.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/hackernews.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/jina.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/jira.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/knowledge.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/linear.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/linkup.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/local_file_system.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/lumalab.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/mem0.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/memory.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/gemini.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/groq.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/morph.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models/nebius.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/models_labs.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/moviepy_video.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/neo4j.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/newspaper.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/newspaper4k.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/openbb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/opencv.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/openweather.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/oxylabs.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/pandas.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/postgres.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/pubmed.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/python.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/reasoning.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/reddit.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/replicate.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/resend.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/scrapegraph.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/searxng.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/serpapi.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/serper.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/shell.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/slack.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/sleep.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/spider.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/sql.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/streamlit/components.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/tavily.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/telegram.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/todoist.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/tool_registry.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/toolkit.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/trafilatura.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/trello.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/twilio.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/user_control_flow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/valyu.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/visualization.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/webbrowser.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/webex.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/website.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/webtools.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/whatsapp.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/wikipedia.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/workflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/x.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/yfinance.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/youtube.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/zendesk.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/zep.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/tools/zoom.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/audio.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/certs.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/code_execution.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/common.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/dttm.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/enum.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/env.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/format_str.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/functions.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/gemini.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/http.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/json_schema.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/knowledge.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/location.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/log.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/mcp.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/media.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/merge_dict.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/message.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/aws_claude.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/claude.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/cohere.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/llama.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/mistral.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/models/watsonx.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/openai.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/pickle.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/pprint.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/print_response/agent.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/print_response/team.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/prompts.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/reasoning.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/response.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/response_iterator.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/safe_formatter.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/shell.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/streamlit.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/string.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/team.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/timer.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/tools.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/web.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/whatsapp.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/utils/yaml_io.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/base.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/distance.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/search.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/__init__.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/condition.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/loop.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/parallel.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/router.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/step.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/steps.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno/workflow/types.py +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno.egg-info/requires.txt +0 -0
- {agno-2.0.6 → agno-2.0.7}/agno.egg-info/top_level.txt +0 -0
- {agno-2.0.6 → agno-2.0.7}/setup.cfg +0 -0
|
@@ -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
|
|
@@ -1359,6 +1360,7 @@ class Agent:
|
|
|
1359
1360
|
tool_choice=self.tool_choice,
|
|
1360
1361
|
tool_call_limit=self.tool_call_limit,
|
|
1361
1362
|
response_format=response_format,
|
|
1363
|
+
send_media_to_model=self.send_media_to_model,
|
|
1362
1364
|
)
|
|
1363
1365
|
|
|
1364
1366
|
# Check for cancellation after model call
|
|
@@ -3100,6 +3102,8 @@ class Agent:
|
|
|
3100
3102
|
# Update the run_response citations with the model response citations
|
|
3101
3103
|
if model_response.citations is not None:
|
|
3102
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
|
|
3103
3107
|
|
|
3104
3108
|
# Update the run_response tools with the model response tool_executions
|
|
3105
3109
|
if model_response.tool_executions is not None:
|
|
@@ -3174,6 +3178,7 @@ class Agent:
|
|
|
3174
3178
|
tool_call_limit=self.tool_call_limit,
|
|
3175
3179
|
stream_model_response=stream_model_response,
|
|
3176
3180
|
run_response=run_response,
|
|
3181
|
+
send_media_to_model=self.send_media_to_model,
|
|
3177
3182
|
):
|
|
3178
3183
|
yield from self._handle_model_response_chunk(
|
|
3179
3184
|
session=session,
|
|
@@ -3250,6 +3255,7 @@ class Agent:
|
|
|
3250
3255
|
tool_call_limit=self.tool_call_limit,
|
|
3251
3256
|
stream_model_response=stream_model_response,
|
|
3252
3257
|
run_response=run_response,
|
|
3258
|
+
send_media_to_model=self.send_media_to_model,
|
|
3253
3259
|
) # type: ignore
|
|
3254
3260
|
|
|
3255
3261
|
async for model_response_event in model_response_stream: # type: ignore
|
|
@@ -3352,6 +3358,10 @@ class Agent:
|
|
|
3352
3358
|
model_response.reasoning_content += model_response_event.redacted_reasoning_content
|
|
3353
3359
|
run_response.reasoning_content = model_response.reasoning_content
|
|
3354
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
|
+
|
|
3355
3365
|
if model_response_event.citations is not None:
|
|
3356
3366
|
# We get citations in one chunk
|
|
3357
3367
|
run_response.citations = model_response_event.citations
|
|
@@ -3372,6 +3382,7 @@ class Agent:
|
|
|
3372
3382
|
or model_response_event.reasoning_content is not None
|
|
3373
3383
|
or model_response_event.redacted_reasoning_content is not None
|
|
3374
3384
|
or model_response_event.citations is not None
|
|
3385
|
+
or model_response_event.provider_data is not None
|
|
3375
3386
|
):
|
|
3376
3387
|
yield self._handle_event(
|
|
3377
3388
|
create_run_output_content_event(
|
|
@@ -3380,6 +3391,7 @@ class Agent:
|
|
|
3380
3391
|
reasoning_content=model_response_event.reasoning_content,
|
|
3381
3392
|
redacted_reasoning_content=model_response_event.redacted_reasoning_content,
|
|
3382
3393
|
citations=model_response_event.citations,
|
|
3394
|
+
model_provider_data=model_response_event.provider_data,
|
|
3383
3395
|
),
|
|
3384
3396
|
run_response,
|
|
3385
3397
|
workflow_context=workflow_context,
|
|
@@ -3813,7 +3825,9 @@ class Agent:
|
|
|
3813
3825
|
self._rebuild_tools = True
|
|
3814
3826
|
if self.search_session_history:
|
|
3815
3827
|
agent_tools.append(
|
|
3816
|
-
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
|
+
)
|
|
3817
3831
|
)
|
|
3818
3832
|
self._rebuild_tools = True
|
|
3819
3833
|
|
|
@@ -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"""
|
|
@@ -371,6 +371,8 @@ class File(BaseModel):
|
|
|
371
371
|
"application/pdf",
|
|
372
372
|
"application/json",
|
|
373
373
|
"application/x-javascript",
|
|
374
|
+
"application/json",
|
|
375
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
374
376
|
"text/javascript",
|
|
375
377
|
"application/x-python",
|
|
376
378
|
"text/x-python",
|
|
@@ -196,6 +196,7 @@ class Model(ABC):
|
|
|
196
196
|
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
197
197
|
tool_call_limit: Optional[int] = None,
|
|
198
198
|
run_response: Optional[RunOutput] = None,
|
|
199
|
+
send_media_to_model: bool = True,
|
|
199
200
|
) -> ModelResponse:
|
|
200
201
|
"""
|
|
201
202
|
Generate a response from the model.
|
|
@@ -301,7 +302,11 @@ class Model(ABC):
|
|
|
301
302
|
|
|
302
303
|
if any(msg.images or msg.videos or msg.audio or msg.files for msg in function_call_results):
|
|
303
304
|
# Handle function call media
|
|
304
|
-
self._handle_function_call_media(
|
|
305
|
+
self._handle_function_call_media(
|
|
306
|
+
messages=messages,
|
|
307
|
+
function_call_results=function_call_results,
|
|
308
|
+
send_media_to_model=send_media_to_model,
|
|
309
|
+
)
|
|
305
310
|
|
|
306
311
|
for function_call_result in function_call_results:
|
|
307
312
|
function_call_result.log(metrics=True)
|
|
@@ -339,6 +344,7 @@ class Model(ABC):
|
|
|
339
344
|
functions: Optional[Dict[str, Function]] = None,
|
|
340
345
|
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
341
346
|
tool_call_limit: Optional[int] = None,
|
|
347
|
+
send_media_to_model: bool = True,
|
|
342
348
|
) -> ModelResponse:
|
|
343
349
|
"""
|
|
344
350
|
Generate an asynchronous response from the model.
|
|
@@ -441,7 +447,11 @@ class Model(ABC):
|
|
|
441
447
|
|
|
442
448
|
if any(msg.images or msg.videos or msg.audio or msg.files for msg in function_call_results):
|
|
443
449
|
# Handle function call media
|
|
444
|
-
self._handle_function_call_media(
|
|
450
|
+
self._handle_function_call_media(
|
|
451
|
+
messages=messages,
|
|
452
|
+
function_call_results=function_call_results,
|
|
453
|
+
send_media_to_model=send_media_to_model,
|
|
454
|
+
)
|
|
445
455
|
|
|
446
456
|
for function_call_result in function_call_results:
|
|
447
457
|
function_call_result.log(metrics=True)
|
|
@@ -689,6 +699,7 @@ class Model(ABC):
|
|
|
689
699
|
tool_call_limit: Optional[int] = None,
|
|
690
700
|
stream_model_response: bool = True,
|
|
691
701
|
run_response: Optional[RunOutput] = None,
|
|
702
|
+
send_media_to_model: bool = True,
|
|
692
703
|
) -> Iterator[Union[ModelResponse, RunOutputEvent, TeamRunOutputEvent]]:
|
|
693
704
|
"""
|
|
694
705
|
Generate a streaming response from the model.
|
|
@@ -778,7 +789,11 @@ class Model(ABC):
|
|
|
778
789
|
|
|
779
790
|
# Handle function call media
|
|
780
791
|
if any(msg.images or msg.videos or msg.audio for msg in function_call_results):
|
|
781
|
-
self._handle_function_call_media(
|
|
792
|
+
self._handle_function_call_media(
|
|
793
|
+
messages=messages,
|
|
794
|
+
function_call_results=function_call_results,
|
|
795
|
+
send_media_to_model=send_media_to_model,
|
|
796
|
+
)
|
|
782
797
|
|
|
783
798
|
for function_call_result in function_call_results:
|
|
784
799
|
function_call_result.log(metrics=True)
|
|
@@ -848,6 +863,7 @@ class Model(ABC):
|
|
|
848
863
|
tool_call_limit: Optional[int] = None,
|
|
849
864
|
stream_model_response: bool = True,
|
|
850
865
|
run_response: Optional[RunOutput] = None,
|
|
866
|
+
send_media_to_model: bool = True,
|
|
851
867
|
) -> AsyncIterator[Union[ModelResponse, RunOutputEvent, TeamRunOutputEvent]]:
|
|
852
868
|
"""
|
|
853
869
|
Generate an asynchronous streaming response from the model.
|
|
@@ -937,7 +953,11 @@ class Model(ABC):
|
|
|
937
953
|
|
|
938
954
|
# Handle function call media
|
|
939
955
|
if any(msg.images or msg.videos or msg.audio for msg in function_call_results):
|
|
940
|
-
self._handle_function_call_media(
|
|
956
|
+
self._handle_function_call_media(
|
|
957
|
+
messages=messages,
|
|
958
|
+
function_call_results=function_call_results,
|
|
959
|
+
send_media_to_model=send_media_to_model,
|
|
960
|
+
)
|
|
941
961
|
|
|
942
962
|
for function_call_result in function_call_results:
|
|
943
963
|
function_call_result.log(metrics=True)
|
|
@@ -1041,7 +1061,13 @@ class Model(ABC):
|
|
|
1041
1061
|
if model_response_delta.extra is not None:
|
|
1042
1062
|
if stream_data.extra is None:
|
|
1043
1063
|
stream_data.extra = {}
|
|
1044
|
-
|
|
1064
|
+
for key in model_response_delta.extra:
|
|
1065
|
+
if isinstance(model_response_delta.extra[key], list):
|
|
1066
|
+
if not stream_data.extra.get(key):
|
|
1067
|
+
stream_data.extra[key] = []
|
|
1068
|
+
stream_data.extra[key].extend(model_response_delta.extra[key])
|
|
1069
|
+
else:
|
|
1070
|
+
stream_data.extra[key] = model_response_delta.extra[key]
|
|
1045
1071
|
|
|
1046
1072
|
if should_yield:
|
|
1047
1073
|
yield model_response_delta
|
|
@@ -1708,7 +1734,9 @@ class Model(ABC):
|
|
|
1708
1734
|
if len(function_call_results) > 0:
|
|
1709
1735
|
messages.extend(function_call_results)
|
|
1710
1736
|
|
|
1711
|
-
def _handle_function_call_media(
|
|
1737
|
+
def _handle_function_call_media(
|
|
1738
|
+
self, messages: List[Message], function_call_results: List[Message], send_media_to_model: bool = True
|
|
1739
|
+
) -> None:
|
|
1712
1740
|
"""
|
|
1713
1741
|
Handle media artifacts from function calls by adding follow-up user messages for generated media if needed.
|
|
1714
1742
|
"""
|
|
@@ -1739,9 +1767,10 @@ class Model(ABC):
|
|
|
1739
1767
|
all_files.extend(result_message.files)
|
|
1740
1768
|
result_message.files = None
|
|
1741
1769
|
|
|
1742
|
-
#
|
|
1743
|
-
|
|
1744
|
-
|
|
1770
|
+
# Only add media message if we should send media to model
|
|
1771
|
+
if send_media_to_model and (all_images or all_videos or all_audio or all_files):
|
|
1772
|
+
# If we have media artifacts, add a follow-up "user" message instead of a "tool"
|
|
1773
|
+
# message with the media artifacts which throws error for some models
|
|
1745
1774
|
media_message = Message(
|
|
1746
1775
|
role="user",
|
|
1747
1776
|
content="Take note of the following content",
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from agno.models.openai.like import OpenAILike
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class LlamaCpp(OpenAILike):
|
|
8
|
+
"""
|
|
9
|
+
A class for interacting with LLMs using Llama CPP.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
id (str): The id of the Llama CPP model. Default is "ggml-org/gpt-oss-20b-GGUF".
|
|
13
|
+
name (str): The name of this chat model instance. Default is "LlamaCpp".
|
|
14
|
+
provider (str): The provider of the model. Default is "LlamaCpp".
|
|
15
|
+
base_url (str): The base url to which the requests are sent.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
id: str = "ggml-org/gpt-oss-20b-GGUF"
|
|
19
|
+
name: str = "LlamaCpp"
|
|
20
|
+
provider: str = "LlamaCpp"
|
|
21
|
+
|
|
22
|
+
base_url: str = "http://127.0.0.1:8080/v1"
|
|
@@ -6,13 +6,12 @@ from agno.models.openai.like import OpenAILike
|
|
|
6
6
|
@dataclass
|
|
7
7
|
class Nexus(OpenAILike):
|
|
8
8
|
"""
|
|
9
|
-
A class for interacting with
|
|
9
|
+
A class for interacting with LLMs using Nexus.
|
|
10
10
|
|
|
11
11
|
Attributes:
|
|
12
|
-
id (str): The id of the Nexus model to use. Default is "
|
|
12
|
+
id (str): The id of the Nexus model to use. Default is "openai/gpt-4".
|
|
13
13
|
name (str): The name of this chat model instance. Default is "Nexus"
|
|
14
14
|
provider (str): The provider of the model. Default is "Nexus".
|
|
15
|
-
api_key (str): The api key to authorize request to Nexus.
|
|
16
15
|
base_url (str): The base url to which the requests are sent.
|
|
17
16
|
"""
|
|
18
17
|
|
|
@@ -21,5 +20,3 @@ class Nexus(OpenAILike):
|
|
|
21
20
|
provider: str = "Nexus"
|
|
22
21
|
|
|
23
22
|
base_url: str = "http://localhost:8000/llm/v1/"
|
|
24
|
-
|
|
25
|
-
supports_native_structured_outputs: bool = False
|
|
@@ -9,7 +9,6 @@ from fastapi.responses import JSONResponse
|
|
|
9
9
|
from fastapi.routing import APIRoute
|
|
10
10
|
from rich import box
|
|
11
11
|
from rich.panel import Panel
|
|
12
|
-
from starlette.middleware.cors import CORSMiddleware
|
|
13
12
|
from starlette.requests import Request
|
|
14
13
|
|
|
15
14
|
from agno.agent.agent import Agent
|
|
@@ -37,6 +36,7 @@ from agno.os.routers.memory import get_memory_router
|
|
|
37
36
|
from agno.os.routers.metrics import get_metrics_router
|
|
38
37
|
from agno.os.routers.session import get_session_router
|
|
39
38
|
from agno.os.settings import AgnoAPISettings
|
|
39
|
+
from agno.os.utils import update_cors_middleware
|
|
40
40
|
from agno.team.team import Team
|
|
41
41
|
from agno.utils.log import logger
|
|
42
42
|
from agno.utils.string import generate_id, generate_id_from_name
|
|
@@ -286,14 +286,8 @@ class AgentOS:
|
|
|
286
286
|
|
|
287
287
|
self.fastapi_app.middleware("http")(general_exception_handler)
|
|
288
288
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
allow_origins=self.settings.cors_origin_list, # type: ignore
|
|
292
|
-
allow_credentials=True,
|
|
293
|
-
allow_methods=["*"],
|
|
294
|
-
allow_headers=["*"],
|
|
295
|
-
expose_headers=["*"],
|
|
296
|
-
)
|
|
289
|
+
# Update CORS middleware
|
|
290
|
+
update_cors_middleware(self.fastapi_app, self.settings.cors_origin_list) # type: ignore
|
|
297
291
|
|
|
298
292
|
return self.fastapi_app
|
|
299
293
|
|
|
@@ -368,7 +362,7 @@ class AgentOS:
|
|
|
368
362
|
for route in self.fastapi_app.routes:
|
|
369
363
|
for conflict in conflicts:
|
|
370
364
|
if isinstance(route, APIRoute):
|
|
371
|
-
if route.path == conflict["path"] and list(route.methods) == list(conflict["methods"]):
|
|
365
|
+
if route.path == conflict["path"] and list(route.methods) == list(conflict["methods"]): # type: ignore
|
|
372
366
|
self.fastapi_app.routes.pop(self.fastapi_app.routes.index(route))
|
|
373
367
|
|
|
374
368
|
self.fastapi_app.include_router(router)
|
|
@@ -731,10 +731,9 @@ def get_base_router(
|
|
|
731
731
|
]:
|
|
732
732
|
# Process document files
|
|
733
733
|
try:
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
)
|
|
734
|
+
input_file = process_document(file)
|
|
735
|
+
if input_file is not None:
|
|
736
|
+
input_files.append(input_file)
|
|
738
737
|
except Exception as e:
|
|
739
738
|
log_error(f"Error processing file {file.filename}: {e}")
|
|
740
739
|
continue
|
|
@@ -380,7 +380,7 @@ def parse_eval_types_filter(
|
|
|
380
380
|
eval_types: Optional[str] = Query(
|
|
381
381
|
default=None,
|
|
382
382
|
description="Comma-separated eval types (accuracy,performance,reliability)",
|
|
383
|
-
|
|
383
|
+
examples=["accuracy,performance"],
|
|
384
384
|
),
|
|
385
385
|
) -> Optional[List[EvalType]]:
|
|
386
386
|
"""Parse comma-separated eval types into EvalType enums for filtering evaluation runs."""
|
|
@@ -396,7 +396,7 @@ def parse_topics(
|
|
|
396
396
|
topics: Optional[List[str]] = Query(
|
|
397
397
|
default=None,
|
|
398
398
|
description="Comma-separated list of topics to filter by",
|
|
399
|
-
|
|
399
|
+
examples=["preferences,technical,communication_style"],
|
|
400
400
|
),
|
|
401
401
|
) -> Optional[List[str]]:
|
|
402
402
|
"""Parse comma-separated topics into a list for filtering memories by topic."""
|
|
@@ -461,11 +461,8 @@ class TeamResponse(BaseModel):
|
|
|
461
461
|
"stream_member_events": False,
|
|
462
462
|
}
|
|
463
463
|
|
|
464
|
-
if team.model is None:
|
|
465
|
-
raise ValueError("Team model is required")
|
|
466
|
-
|
|
467
464
|
team.determine_tools_for_model(
|
|
468
|
-
model=team.model,
|
|
465
|
+
model=team.model, # type: ignore
|
|
469
466
|
session=TeamSession(session_id=str(uuid4()), session_data={}),
|
|
470
467
|
run_response=TeamRunOutput(run_id=str(uuid4())),
|
|
471
468
|
async_mode=True,
|
|
@@ -763,6 +760,7 @@ class TeamSessionDetailSchema(BaseModel):
|
|
|
763
760
|
session_state: Optional[dict]
|
|
764
761
|
metrics: Optional[dict]
|
|
765
762
|
team_data: Optional[dict]
|
|
763
|
+
chat_history: Optional[List[dict]]
|
|
766
764
|
created_at: Optional[datetime]
|
|
767
765
|
updated_at: Optional[datetime]
|
|
768
766
|
total_tokens: Optional[int]
|
|
@@ -784,6 +782,7 @@ class TeamSessionDetailSchema(BaseModel):
|
|
|
784
782
|
if session.session_data
|
|
785
783
|
else None,
|
|
786
784
|
metrics=session.session_data.get("session_metrics", {}) if session.session_data else None,
|
|
785
|
+
chat_history=[message.to_dict() for message in session.get_chat_history()],
|
|
787
786
|
created_at=datetime.fromtimestamp(session.created_at, tz=timezone.utc) if session.created_at else None,
|
|
788
787
|
updated_at=datetime.fromtimestamp(session.updated_at, tz=timezone.utc) if session.updated_at else None,
|
|
789
788
|
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from typing import Any, Callable, Dict, List, Optional, Union
|
|
2
2
|
|
|
3
|
-
from fastapi import HTTPException, UploadFile
|
|
3
|
+
from fastapi import FastAPI, HTTPException, UploadFile
|
|
4
|
+
from starlette.middleware.cors import CORSMiddleware
|
|
4
5
|
|
|
5
6
|
from agno.agent.agent import Agent
|
|
6
7
|
from agno.db.base import BaseDb
|
|
@@ -109,27 +110,21 @@ def process_image(file: UploadFile) -> Image:
|
|
|
109
110
|
content = file.file.read()
|
|
110
111
|
if not content:
|
|
111
112
|
raise HTTPException(status_code=400, detail="Empty file")
|
|
112
|
-
return Image(content=content)
|
|
113
|
+
return Image(content=content, format=extract_format(file), mime_type=file.content_type)
|
|
113
114
|
|
|
114
115
|
|
|
115
116
|
def process_audio(file: UploadFile) -> Audio:
|
|
116
117
|
content = file.file.read()
|
|
117
118
|
if not content:
|
|
118
119
|
raise HTTPException(status_code=400, detail="Empty file")
|
|
119
|
-
format =
|
|
120
|
-
if file.filename and "." in file.filename:
|
|
121
|
-
format = file.filename.split(".")[-1].lower()
|
|
122
|
-
elif file.content_type:
|
|
123
|
-
format = file.content_type.split("/")[-1]
|
|
124
|
-
|
|
125
|
-
return Audio(content=content, format=format)
|
|
120
|
+
return Audio(content=content, format=extract_format(file), mime_type=file.content_type)
|
|
126
121
|
|
|
127
122
|
|
|
128
123
|
def process_video(file: UploadFile) -> Video:
|
|
129
124
|
content = file.file.read()
|
|
130
125
|
if not content:
|
|
131
126
|
raise HTTPException(status_code=400, detail="Empty file")
|
|
132
|
-
return Video(content=content, format=file.content_type)
|
|
127
|
+
return Video(content=content, format=extract_format(file), mime_type=file.content_type)
|
|
133
128
|
|
|
134
129
|
|
|
135
130
|
def process_document(file: UploadFile) -> Optional[FileMedia]:
|
|
@@ -137,13 +132,23 @@ def process_document(file: UploadFile) -> Optional[FileMedia]:
|
|
|
137
132
|
content = file.file.read()
|
|
138
133
|
if not content:
|
|
139
134
|
raise HTTPException(status_code=400, detail="Empty file")
|
|
140
|
-
|
|
141
|
-
|
|
135
|
+
return FileMedia(
|
|
136
|
+
content=content, filename=file.filename, format=extract_format(file), mime_type=file.content_type
|
|
137
|
+
)
|
|
142
138
|
except Exception as e:
|
|
143
139
|
logger.error(f"Error processing document {file.filename}: {e}")
|
|
144
140
|
return None
|
|
145
141
|
|
|
146
142
|
|
|
143
|
+
def extract_format(file: UploadFile):
|
|
144
|
+
format = None
|
|
145
|
+
if file.filename and "." in file.filename:
|
|
146
|
+
format = file.filename.split(".")[-1].lower()
|
|
147
|
+
elif file.content_type:
|
|
148
|
+
format = file.content_type.split("/")[-1]
|
|
149
|
+
return format
|
|
150
|
+
|
|
151
|
+
|
|
147
152
|
def format_tools(agent_tools: List[Union[Dict[str, Any], Toolkit, Function, Callable]]):
|
|
148
153
|
formatted_tools = []
|
|
149
154
|
if agent_tools is not None:
|
|
@@ -260,3 +265,33 @@ def _generate_schema_from_params(params: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
260
265
|
schema["required"] = required
|
|
261
266
|
|
|
262
267
|
return schema
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def update_cors_middleware(app: FastAPI, new_origins: list):
|
|
271
|
+
existing_origins: List[str] = []
|
|
272
|
+
|
|
273
|
+
# TODO: Allow more options where CORS is properly merged and user can disable this behaviour
|
|
274
|
+
|
|
275
|
+
# Extract existing origins from current CORS middleware
|
|
276
|
+
for middleware in app.user_middleware:
|
|
277
|
+
if middleware.cls == CORSMiddleware:
|
|
278
|
+
if hasattr(middleware, "kwargs"):
|
|
279
|
+
existing_origins = middleware.kwargs.get("allow_origins", [])
|
|
280
|
+
break
|
|
281
|
+
# Merge origins
|
|
282
|
+
merged_origins = list(set(new_origins + existing_origins))
|
|
283
|
+
final_origins = [origin for origin in merged_origins if origin != "*"]
|
|
284
|
+
|
|
285
|
+
# Remove existing CORS
|
|
286
|
+
app.user_middleware = [m for m in app.user_middleware if m.cls != CORSMiddleware]
|
|
287
|
+
app.middleware_stack = None
|
|
288
|
+
|
|
289
|
+
# Add updated CORS
|
|
290
|
+
app.add_middleware(
|
|
291
|
+
CORSMiddleware,
|
|
292
|
+
allow_origins=final_origins,
|
|
293
|
+
allow_credentials=True,
|
|
294
|
+
allow_methods=["*"],
|
|
295
|
+
allow_headers=["*"],
|
|
296
|
+
expose_headers=["*"],
|
|
297
|
+
)
|
|
@@ -96,6 +96,7 @@ class RunContentEvent(BaseAgentRunEvent):
|
|
|
96
96
|
content: Optional[Any] = None
|
|
97
97
|
content_type: str = "str"
|
|
98
98
|
reasoning_content: Optional[str] = None
|
|
99
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
99
100
|
citations: Optional[Citations] = None
|
|
100
101
|
response_audio: Optional[Audio] = None # Model audio response
|
|
101
102
|
image: Optional[Image] = None # Image attached to the response
|
|
@@ -119,6 +120,7 @@ class RunCompletedEvent(BaseAgentRunEvent):
|
|
|
119
120
|
content_type: str = "str"
|
|
120
121
|
reasoning_content: Optional[str] = None
|
|
121
122
|
citations: Optional[Citations] = None
|
|
123
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
122
124
|
images: Optional[List[Image]] = None # Images attached to the response
|
|
123
125
|
videos: Optional[List[Video]] = None # Videos attached to the response
|
|
124
126
|
audio: Optional[List[Audio]] = None # Audio attached to the response
|
|
@@ -383,6 +385,8 @@ class RunOutput:
|
|
|
383
385
|
reasoning_steps: Optional[List[ReasoningStep]] = None
|
|
384
386
|
reasoning_messages: Optional[List[Message]] = None
|
|
385
387
|
|
|
388
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
389
|
+
|
|
386
390
|
model: Optional[str] = None
|
|
387
391
|
model_provider: Optional[str] = None
|
|
388
392
|
messages: Optional[List[Message]] = None
|
|
@@ -98,6 +98,7 @@ class RunContentEvent(BaseTeamRunEvent):
|
|
|
98
98
|
content: Optional[Any] = None
|
|
99
99
|
content_type: str = "str"
|
|
100
100
|
reasoning_content: Optional[str] = None
|
|
101
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
101
102
|
citations: Optional[Citations] = None
|
|
102
103
|
response_audio: Optional[Audio] = None # Model audio response
|
|
103
104
|
image: Optional[Image] = None # Image attached to the response
|
|
@@ -121,6 +122,7 @@ class RunCompletedEvent(BaseTeamRunEvent):
|
|
|
121
122
|
content_type: str = "str"
|
|
122
123
|
reasoning_content: Optional[str] = None
|
|
123
124
|
citations: Optional[Citations] = None
|
|
125
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
124
126
|
images: Optional[List[Image]] = None # Images attached to the response
|
|
125
127
|
videos: Optional[List[Video]] = None # Videos attached to the response
|
|
126
128
|
audio: Optional[List[Audio]] = None # Audio attached to the response
|
|
@@ -382,7 +384,7 @@ class TeamRunOutput:
|
|
|
382
384
|
reasoning_content: Optional[str] = None
|
|
383
385
|
|
|
384
386
|
citations: Optional[Citations] = None
|
|
385
|
-
|
|
387
|
+
model_provider_data: Optional[Dict[str, Any]] = None
|
|
386
388
|
metadata: Optional[Dict[str, Any]] = None
|
|
387
389
|
|
|
388
390
|
references: Optional[List[MessageReferences]] = None
|