agno 2.1.2__tar.gz → 2.1.4__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.1.2 → agno-2.1.4}/PKG-INFO +1 -1
- {agno-2.1.2 → agno-2.1.4}/agno/agent/agent.py +39 -69
- {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/dynamo.py +8 -6
- {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/schemas.py +1 -10
- {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/utils.py +2 -2
- {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/firestore.py +1 -3
- {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/gcs_json_db.py +5 -3
- {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/in_memory_db.py +7 -5
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/fastembed.py +1 -1
- {agno-2.1.2 → agno-2.1.4}/agno/models/aws/bedrock.py +1 -1
- agno-2.1.4/agno/models/openrouter/openrouter.py +66 -0
- agno-2.1.4/agno/models/vertexai/claude.py +74 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/app.py +59 -5
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/utils.py +6 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/mcp.py +3 -3
- {agno-2.1.2 → agno-2.1.4}/agno/os/schema.py +2 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/utils.py +4 -2
- {agno-2.1.2 → agno-2.1.4}/agno/session/workflow.py +69 -1
- {agno-2.1.2 → agno-2.1.4}/agno/team/team.py +29 -79
- {agno-2.1.2 → agno-2.1.4}/agno/tools/file.py +4 -2
- {agno-2.1.2 → agno-2.1.4}/agno/tools/function.py +36 -18
- agno-2.1.4/agno/tools/google_drive.py +270 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/merge_dict.py +3 -3
- agno-2.1.4/agno/utils/print_response/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/workflow.py +112 -12
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/condition.py +25 -0
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/loop.py +25 -0
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/parallel.py +142 -118
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/router.py +25 -0
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/step.py +138 -25
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/steps.py +25 -0
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/types.py +26 -1
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/workflow.py +234 -12
- {agno-2.1.2 → agno-2.1.4}/agno.egg-info/PKG-INFO +1 -1
- {agno-2.1.2 → agno-2.1.4}/agno.egg-info/SOURCES.txt +3 -0
- {agno-2.1.2 → agno-2.1.4}/pyproject.toml +1 -1
- agno-2.1.2/agno/models/openrouter/openrouter.py +0 -28
- {agno-2.1.2 → agno-2.1.4}/LICENSE +0 -0
- {agno-2.1.2 → agno-2.1.4}/README.md +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/agent/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/api.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/os.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/routes.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/os.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/response.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/workflows.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/settings.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/api/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/json/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/json/json_db.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/json/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/migrations/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/mongo.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/mysql.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/postgres.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/redis/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/redis/redis.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/redis/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/redis/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/db/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/debug.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/eval/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/eval/accuracy.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/eval/performance.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/eval/reliability.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/eval/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/exceptions.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/guardrails/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/guardrails/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/guardrails/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/guardrails/pii.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/integrations/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/integrations/discord/client.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/content.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/document/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/types.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/knowledge/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/media.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/memory/manager.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/anthropic/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/aws/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/aws/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/azure/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cohere/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cohere/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/defaults.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/google/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/google/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/groq/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/groq/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/ibm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/internlm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/internlm/internlm.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/langdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/langdb/langdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/message.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/meta/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/meta/llama.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/mistral/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/mistral/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nebius/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nebius/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nexus/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nexus/nexus.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/ollama/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/ollama/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/openai/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/openai/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/openai/like.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/openai/responses.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/portkey/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/portkey/portkey.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/requesty/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/requesty/requesty.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/response.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/together/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/together/together.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/vercel/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/vercel/v0.py +0 -0
- {agno-2.1.2/agno/reasoning → agno-2.1.4/agno/models/vertexai}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/vllm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/vllm/vllm.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/xai/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/models/xai/xai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/auth.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/config.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/middleware/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/middleware/jwt.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/router.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/health.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/home.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/routers/session/session.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/os/settings.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/py.typed +0 -0
- {agno-2.1.2/agno/run → agno-2.1.4/agno/reasoning}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/deepseek.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/default.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/helpers.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/ollama.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/reasoning/step.py +0 -0
- {agno-2.1.2/agno/tools/models → agno-2.1.4/agno/run}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/cancel.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/messages.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/run/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/session/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/session/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/session/summary.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/session/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/team/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/agentql.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/airflow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/api.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/apify.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/arxiv.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/aws_lambda.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/aws_ses.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/baidusearch.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/bitbucket.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/brandfetch.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/bravesearch.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/brightdata.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/browserbase.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/calcom.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/calculator.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/cartesia.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/clickup.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/confluence.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/crawl4ai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/dalle.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/daytona.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/decorator.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/desi_vocal.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/discord.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/docker.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/duckdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/duckduckgo.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/e2b.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/eleven_labs.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/email.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/evm.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/exa.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/fal.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/file_generation.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/financial_datasets.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/firecrawl.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/giphy.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/github.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/gmail.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/google_bigquery.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/google_maps.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/googlecalendar.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/googlesearch.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/googlesheets.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/hackernews.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/jina.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/jira.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/linear.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/linkup.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/local_file_system.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/lumalab.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/mcp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/mem0.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/memori.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.1.2/agno/tools/streamlit → agno-2.1.4/agno/tools/models}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models/morph.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/models_labs.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/moviepy_video.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/neo4j.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/newspaper.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/newspaper4k.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/openbb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/opencv.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/openweather.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/oxylabs.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/pandas.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/postgres.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/pubmed.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/python.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/reasoning.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/reddit.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/replicate.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/resend.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/scrapegraph.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/searxng.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/serpapi.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/serper.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/shell.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/slack.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/sleep.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/spider.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/sql.py +0 -0
- {agno-2.1.2/agno/utils → agno-2.1.4/agno/tools/streamlit}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/streamlit/components.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/tavily.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/telegram.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/todoist.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/tool_registry.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/toolkit.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/trafilatura.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/trello.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/twilio.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/user_control_flow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/valyu.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/visualization.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/webbrowser.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/webex.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/website.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/webtools.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/wikipedia.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/x.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/yfinance.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/youtube.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/zendesk.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/zep.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/tools/zoom.py +0 -0
- {agno-2.1.2/agno/utils/models → agno-2.1.4/agno/utils}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/audio.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/certs.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/code_execution.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/common.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/dttm.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/enum.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/env.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/events.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/format_str.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/functions.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/hooks.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/http.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/json_schema.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/location.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/log.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/mcp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/media.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/message.py +0 -0
- {agno-2.1.2/agno/utils/print_response → agno-2.1.4/agno/utils/models}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/llama.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/models/watsonx.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/pickle.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/pprint.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/prompts.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/reasoning.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/response.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/response_iterator.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/safe_formatter.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/serialize.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/shell.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/streamlit.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/string.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/team.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/timer.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/tools.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/web.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/utils/yaml_io.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/base.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/distance.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/search.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno/workflow/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno.egg-info/requires.txt +0 -0
- {agno-2.1.2 → agno-2.1.4}/agno.egg-info/top_level.txt +0 -0
- {agno-2.1.2 → agno-2.1.4}/setup.cfg +0 -0
|
@@ -957,7 +957,6 @@ class Agent:
|
|
|
957
957
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
958
958
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
959
959
|
stream_intermediate_steps: bool = False,
|
|
960
|
-
workflow_context: Optional[Dict] = None,
|
|
961
960
|
yield_run_response: bool = False,
|
|
962
961
|
debug_mode: Optional[bool] = None,
|
|
963
962
|
**kwargs: Any,
|
|
@@ -973,7 +972,8 @@ class Agent:
|
|
|
973
972
|
6. Optional: Save output to file if save_response_to_file is set
|
|
974
973
|
7. Add the RunOutput to the Agent Session
|
|
975
974
|
8. Update Agent Memory
|
|
976
|
-
9.
|
|
975
|
+
9. Create the run completed event
|
|
976
|
+
10. Save session to storage
|
|
977
977
|
"""
|
|
978
978
|
|
|
979
979
|
# Register run for cancellation tracking
|
|
@@ -1034,7 +1034,7 @@ class Agent:
|
|
|
1034
1034
|
try:
|
|
1035
1035
|
# Start the Run by yielding a RunStarted event
|
|
1036
1036
|
if stream_intermediate_steps:
|
|
1037
|
-
yield self._handle_event(create_run_started_event(run_response), run_response
|
|
1037
|
+
yield self._handle_event(create_run_started_event(run_response), run_response)
|
|
1038
1038
|
|
|
1039
1039
|
# 3. Reason about the task if reasoning is enabled
|
|
1040
1040
|
yield from self._handle_reasoning_stream(run_response=run_response, run_messages=run_messages)
|
|
@@ -1050,7 +1050,6 @@ class Agent:
|
|
|
1050
1050
|
run_messages=run_messages,
|
|
1051
1051
|
response_format=response_format,
|
|
1052
1052
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1053
|
-
workflow_context=workflow_context,
|
|
1054
1053
|
):
|
|
1055
1054
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1056
1055
|
yield event
|
|
@@ -1066,7 +1065,6 @@ class Agent:
|
|
|
1066
1065
|
run_messages=run_messages,
|
|
1067
1066
|
response_format=response_format,
|
|
1068
1067
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1069
|
-
workflow_context=workflow_context,
|
|
1070
1068
|
):
|
|
1071
1069
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1072
1070
|
if isinstance(event, RunContentEvent):
|
|
@@ -1084,7 +1082,6 @@ class Agent:
|
|
|
1084
1082
|
run_response=run_response,
|
|
1085
1083
|
run_messages=run_messages,
|
|
1086
1084
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1087
|
-
workflow_context=workflow_context,
|
|
1088
1085
|
):
|
|
1089
1086
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1090
1087
|
yield event
|
|
@@ -1115,9 +1112,6 @@ class Agent:
|
|
|
1115
1112
|
# 5. Calculate session metrics
|
|
1116
1113
|
self._update_session_metrics(session=session, run_response=run_response)
|
|
1117
1114
|
|
|
1118
|
-
completed_event = self._handle_event(
|
|
1119
|
-
create_run_completed_event(from_run_response=run_response), run_response, workflow_context
|
|
1120
|
-
)
|
|
1121
1115
|
# 6. Optional: Save output to file if save_response_to_file is set
|
|
1122
1116
|
self.save_run_response_to_file(
|
|
1123
1117
|
run_response=run_response,
|
|
@@ -1134,7 +1128,12 @@ class Agent:
|
|
|
1134
1128
|
run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
|
|
1135
1129
|
)
|
|
1136
1130
|
|
|
1137
|
-
# 9.
|
|
1131
|
+
# 9. Create the run completed event
|
|
1132
|
+
completed_event = self._handle_event(
|
|
1133
|
+
create_run_completed_event(from_run_response=run_response), run_response
|
|
1134
|
+
)
|
|
1135
|
+
|
|
1136
|
+
# 10. Save session to storage
|
|
1138
1137
|
self.save_session(session=session)
|
|
1139
1138
|
|
|
1140
1139
|
if stream_intermediate_steps:
|
|
@@ -1158,7 +1157,6 @@ class Agent:
|
|
|
1158
1157
|
yield self._handle_event(
|
|
1159
1158
|
create_run_cancelled_event(from_run_response=run_response, reason=str(e)),
|
|
1160
1159
|
run_response,
|
|
1161
|
-
workflow_context,
|
|
1162
1160
|
)
|
|
1163
1161
|
|
|
1164
1162
|
# Add the RunOutput to Agent Session even when cancelled
|
|
@@ -1302,9 +1300,6 @@ class Agent:
|
|
|
1302
1300
|
)
|
|
1303
1301
|
add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
|
|
1304
1302
|
|
|
1305
|
-
# Extract workflow context from kwargs if present
|
|
1306
|
-
workflow_context = kwargs.pop("workflow_context", None)
|
|
1307
|
-
|
|
1308
1303
|
# Initialize Knowledge Filters
|
|
1309
1304
|
effective_filters = knowledge_filters
|
|
1310
1305
|
|
|
@@ -1380,7 +1375,6 @@ class Agent:
|
|
|
1380
1375
|
dependencies=run_dependencies,
|
|
1381
1376
|
response_format=response_format,
|
|
1382
1377
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1383
|
-
workflow_context=workflow_context,
|
|
1384
1378
|
yield_run_response=yield_run_response,
|
|
1385
1379
|
debug_mode=debug_mode,
|
|
1386
1380
|
**kwargs,
|
|
@@ -1651,7 +1645,6 @@ class Agent:
|
|
|
1651
1645
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
1652
1646
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1653
1647
|
stream_intermediate_steps: bool = False,
|
|
1654
|
-
workflow_context: Optional[Dict] = None,
|
|
1655
1648
|
yield_run_response: Optional[bool] = None,
|
|
1656
1649
|
debug_mode: Optional[bool] = None,
|
|
1657
1650
|
**kwargs: Any,
|
|
@@ -1667,7 +1660,8 @@ class Agent:
|
|
|
1667
1660
|
6. Calculate session metrics
|
|
1668
1661
|
7. Add RunOutput to Agent Session
|
|
1669
1662
|
8. Update Agent Memory
|
|
1670
|
-
9.
|
|
1663
|
+
9. Create the run completed event
|
|
1664
|
+
10. Save session to storage
|
|
1671
1665
|
"""
|
|
1672
1666
|
|
|
1673
1667
|
# 1. Resolving here for async requirement
|
|
@@ -1731,7 +1725,7 @@ class Agent:
|
|
|
1731
1725
|
try:
|
|
1732
1726
|
# Start the Run by yielding a RunStarted event
|
|
1733
1727
|
if stream_intermediate_steps:
|
|
1734
|
-
yield self._handle_event(create_run_started_event(run_response), run_response
|
|
1728
|
+
yield self._handle_event(create_run_started_event(run_response), run_response)
|
|
1735
1729
|
|
|
1736
1730
|
# 4. Reason about the task if reasoning is enabled
|
|
1737
1731
|
async for item in self._ahandle_reasoning_stream(run_response=run_response, run_messages=run_messages):
|
|
@@ -1749,7 +1743,6 @@ class Agent:
|
|
|
1749
1743
|
run_messages=run_messages,
|
|
1750
1744
|
response_format=response_format,
|
|
1751
1745
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1752
|
-
workflow_context=workflow_context,
|
|
1753
1746
|
):
|
|
1754
1747
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1755
1748
|
yield event
|
|
@@ -1765,7 +1758,6 @@ class Agent:
|
|
|
1765
1758
|
run_messages=run_messages,
|
|
1766
1759
|
response_format=response_format,
|
|
1767
1760
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1768
|
-
workflow_context=workflow_context,
|
|
1769
1761
|
):
|
|
1770
1762
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1771
1763
|
if isinstance(event, RunContentEvent):
|
|
@@ -1782,7 +1774,6 @@ class Agent:
|
|
|
1782
1774
|
session=session,
|
|
1783
1775
|
run_response=run_response,
|
|
1784
1776
|
run_messages=run_messages,
|
|
1785
|
-
workflow_context=workflow_context,
|
|
1786
1777
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
1787
1778
|
):
|
|
1788
1779
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
@@ -1811,10 +1802,6 @@ class Agent:
|
|
|
1811
1802
|
if run_response.metrics:
|
|
1812
1803
|
run_response.metrics.stop_timer()
|
|
1813
1804
|
|
|
1814
|
-
completed_event = self._handle_event(
|
|
1815
|
-
create_run_completed_event(from_run_response=run_response), run_response, workflow_context
|
|
1816
|
-
)
|
|
1817
|
-
|
|
1818
1805
|
# 6. Calculate session metrics
|
|
1819
1806
|
self._update_session_metrics(session=session, run_response=run_response)
|
|
1820
1807
|
|
|
@@ -1835,7 +1822,12 @@ class Agent:
|
|
|
1835
1822
|
):
|
|
1836
1823
|
yield event
|
|
1837
1824
|
|
|
1838
|
-
# 9.
|
|
1825
|
+
# 9. Create the run completed event
|
|
1826
|
+
completed_event = self._handle_event(
|
|
1827
|
+
create_run_completed_event(from_run_response=run_response), run_response
|
|
1828
|
+
)
|
|
1829
|
+
|
|
1830
|
+
# 10. Save session to storage
|
|
1839
1831
|
self.save_session(session=session)
|
|
1840
1832
|
|
|
1841
1833
|
if stream_intermediate_steps:
|
|
@@ -1859,7 +1851,6 @@ class Agent:
|
|
|
1859
1851
|
yield self._handle_event(
|
|
1860
1852
|
create_run_cancelled_event(from_run_response=run_response, reason=str(e)),
|
|
1861
1853
|
run_response,
|
|
1862
|
-
workflow_context,
|
|
1863
1854
|
)
|
|
1864
1855
|
|
|
1865
1856
|
# Add the RunOutput to Agent Session even when cancelled
|
|
@@ -1999,9 +1990,6 @@ class Agent:
|
|
|
1999
1990
|
)
|
|
2000
1991
|
add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
|
|
2001
1992
|
|
|
2002
|
-
# Extract workflow context from kwargs if present
|
|
2003
|
-
workflow_context = kwargs.pop("workflow_context", None)
|
|
2004
|
-
|
|
2005
1993
|
effective_filters = knowledge_filters
|
|
2006
1994
|
# When filters are passed manually
|
|
2007
1995
|
if self.knowledge_filters or knowledge_filters:
|
|
@@ -2074,7 +2062,6 @@ class Agent:
|
|
|
2074
2062
|
metadata=metadata,
|
|
2075
2063
|
response_format=response_format,
|
|
2076
2064
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
2077
|
-
workflow_context=workflow_context,
|
|
2078
2065
|
yield_run_response=yield_run_response,
|
|
2079
2066
|
dependencies=run_dependencies,
|
|
2080
2067
|
debug_mode=debug_mode,
|
|
@@ -2093,7 +2080,6 @@ class Agent:
|
|
|
2093
2080
|
metadata=metadata,
|
|
2094
2081
|
response_format=response_format,
|
|
2095
2082
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
2096
|
-
workflow_context=workflow_context,
|
|
2097
2083
|
yield_run_response=yield_run_response,
|
|
2098
2084
|
dependencies=run_dependencies,
|
|
2099
2085
|
debug_mode=debug_mode,
|
|
@@ -2484,11 +2470,12 @@ class Agent:
|
|
|
2484
2470
|
Steps:
|
|
2485
2471
|
1. Handle any updated tools
|
|
2486
2472
|
2. Generate a response from the Model
|
|
2487
|
-
3.
|
|
2488
|
-
4.
|
|
2489
|
-
5.
|
|
2490
|
-
6.
|
|
2491
|
-
7.
|
|
2473
|
+
3. Calculate session metrics
|
|
2474
|
+
4. Save output to file if save_response_to_file is set
|
|
2475
|
+
5. Add the run to memory
|
|
2476
|
+
6. Update Agent Memory
|
|
2477
|
+
7. Create the run completed event
|
|
2478
|
+
8. Save session to storage
|
|
2492
2479
|
"""
|
|
2493
2480
|
|
|
2494
2481
|
if dependencies is not None:
|
|
@@ -2523,8 +2510,6 @@ class Agent:
|
|
|
2523
2510
|
|
|
2524
2511
|
run_response.status = RunStatus.completed
|
|
2525
2512
|
|
|
2526
|
-
completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
|
|
2527
|
-
|
|
2528
2513
|
# Set the run duration
|
|
2529
2514
|
if run_response.metrics:
|
|
2530
2515
|
run_response.metrics.stop_timer()
|
|
@@ -2542,7 +2527,10 @@ class Agent:
|
|
|
2542
2527
|
run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
|
|
2543
2528
|
)
|
|
2544
2529
|
|
|
2545
|
-
# 7.
|
|
2530
|
+
# 7. Create the run completed event
|
|
2531
|
+
completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
|
|
2532
|
+
|
|
2533
|
+
# 8. Save session to storage
|
|
2546
2534
|
self.save_session(session=session)
|
|
2547
2535
|
|
|
2548
2536
|
if stream_intermediate_steps:
|
|
@@ -2882,11 +2870,12 @@ class Agent:
|
|
|
2882
2870
|
Steps:
|
|
2883
2871
|
1. Handle any updated tools
|
|
2884
2872
|
2. Generate a response from the Model
|
|
2885
|
-
3.
|
|
2886
|
-
4.
|
|
2887
|
-
5.
|
|
2888
|
-
6.
|
|
2889
|
-
7.
|
|
2873
|
+
3. Calculate session metrics
|
|
2874
|
+
4. Save output to file if save_response_to_file is set
|
|
2875
|
+
5. Add the run to memory
|
|
2876
|
+
6. Update Agent Memory
|
|
2877
|
+
7. Create the run completed event
|
|
2878
|
+
8. Save session to storage
|
|
2890
2879
|
"""
|
|
2891
2880
|
# Resolve dependencies
|
|
2892
2881
|
if dependencies is not None:
|
|
@@ -2923,8 +2912,6 @@ class Agent:
|
|
|
2923
2912
|
|
|
2924
2913
|
run_response.status = RunStatus.completed
|
|
2925
2914
|
|
|
2926
|
-
completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
|
|
2927
|
-
|
|
2928
2915
|
# Set the run duration
|
|
2929
2916
|
if run_response.metrics:
|
|
2930
2917
|
run_response.metrics.stop_timer()
|
|
@@ -2943,7 +2930,10 @@ class Agent:
|
|
|
2943
2930
|
):
|
|
2944
2931
|
yield event
|
|
2945
2932
|
|
|
2946
|
-
# 7.
|
|
2933
|
+
# 7. Create the run completed event
|
|
2934
|
+
completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
|
|
2935
|
+
|
|
2936
|
+
# 8. Save session to storage
|
|
2947
2937
|
self.save_session(session=session)
|
|
2948
2938
|
|
|
2949
2939
|
if stream_intermediate_steps:
|
|
@@ -3608,7 +3598,6 @@ class Agent:
|
|
|
3608
3598
|
run_messages: RunMessages,
|
|
3609
3599
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
3610
3600
|
stream_intermediate_steps: bool = False,
|
|
3611
|
-
workflow_context: Optional[Dict] = None,
|
|
3612
3601
|
) -> Iterator[RunOutputEvent]:
|
|
3613
3602
|
self.model = cast(Model, self.model)
|
|
3614
3603
|
|
|
@@ -3642,7 +3631,6 @@ class Agent:
|
|
|
3642
3631
|
reasoning_state=reasoning_state,
|
|
3643
3632
|
parse_structured_output=self.should_parse_structured_output,
|
|
3644
3633
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
3645
|
-
workflow_context=workflow_context,
|
|
3646
3634
|
)
|
|
3647
3635
|
|
|
3648
3636
|
# Determine reasoning completed
|
|
@@ -3685,7 +3673,6 @@ class Agent:
|
|
|
3685
3673
|
run_messages: RunMessages,
|
|
3686
3674
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
3687
3675
|
stream_intermediate_steps: bool = False,
|
|
3688
|
-
workflow_context: Optional[Dict] = None,
|
|
3689
3676
|
) -> AsyncIterator[RunOutputEvent]:
|
|
3690
3677
|
self.model = cast(Model, self.model)
|
|
3691
3678
|
|
|
@@ -3721,7 +3708,6 @@ class Agent:
|
|
|
3721
3708
|
reasoning_state=reasoning_state,
|
|
3722
3709
|
parse_structured_output=self.should_parse_structured_output,
|
|
3723
3710
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
3724
|
-
workflow_context=workflow_context,
|
|
3725
3711
|
):
|
|
3726
3712
|
yield event
|
|
3727
3713
|
|
|
@@ -3766,7 +3752,6 @@ class Agent:
|
|
|
3766
3752
|
reasoning_state: Optional[Dict[str, Any]] = None,
|
|
3767
3753
|
parse_structured_output: bool = False,
|
|
3768
3754
|
stream_intermediate_steps: bool = False,
|
|
3769
|
-
workflow_context: Optional[Dict] = None,
|
|
3770
3755
|
) -> Iterator[RunOutputEvent]:
|
|
3771
3756
|
if isinstance(model_response_event, tuple(get_args(RunOutputEvent))) or isinstance(
|
|
3772
3757
|
model_response_event, tuple(get_args(TeamRunOutputEvent))
|
|
@@ -3830,7 +3815,6 @@ class Agent:
|
|
|
3830
3815
|
content_type=content_type,
|
|
3831
3816
|
),
|
|
3832
3817
|
run_response,
|
|
3833
|
-
workflow_context=workflow_context,
|
|
3834
3818
|
)
|
|
3835
3819
|
elif (
|
|
3836
3820
|
model_response_event.content is not None
|
|
@@ -3849,7 +3833,6 @@ class Agent:
|
|
|
3849
3833
|
model_provider_data=model_response_event.provider_data,
|
|
3850
3834
|
),
|
|
3851
3835
|
run_response,
|
|
3852
|
-
workflow_context=workflow_context,
|
|
3853
3836
|
)
|
|
3854
3837
|
|
|
3855
3838
|
# Process audio
|
|
@@ -3910,7 +3893,6 @@ class Agent:
|
|
|
3910
3893
|
response_audio=run_response.response_audio,
|
|
3911
3894
|
),
|
|
3912
3895
|
run_response,
|
|
3913
|
-
workflow_context=workflow_context,
|
|
3914
3896
|
)
|
|
3915
3897
|
|
|
3916
3898
|
if model_response_event.images is not None:
|
|
@@ -3920,7 +3902,6 @@ class Agent:
|
|
|
3920
3902
|
image=model_response_event.images[-1],
|
|
3921
3903
|
),
|
|
3922
3904
|
run_response,
|
|
3923
|
-
workflow_context=workflow_context,
|
|
3924
3905
|
)
|
|
3925
3906
|
|
|
3926
3907
|
if model_response.images is None:
|
|
@@ -6892,7 +6873,6 @@ class Agent:
|
|
|
6892
6873
|
run_response: RunOutput,
|
|
6893
6874
|
run_messages: RunMessages,
|
|
6894
6875
|
stream_intermediate_steps: bool = False,
|
|
6895
|
-
workflow_context: Optional[Dict] = None,
|
|
6896
6876
|
):
|
|
6897
6877
|
"""Parse the model response using the output model."""
|
|
6898
6878
|
from agno.utils.events import (
|
|
@@ -6916,7 +6896,6 @@ class Agent:
|
|
|
6916
6896
|
run_response=run_response,
|
|
6917
6897
|
model_response=model_response,
|
|
6918
6898
|
model_response_event=model_response_event,
|
|
6919
|
-
workflow_context=workflow_context,
|
|
6920
6899
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
6921
6900
|
)
|
|
6922
6901
|
|
|
@@ -6945,7 +6924,6 @@ class Agent:
|
|
|
6945
6924
|
run_response: RunOutput,
|
|
6946
6925
|
run_messages: RunMessages,
|
|
6947
6926
|
stream_intermediate_steps: bool = False,
|
|
6948
|
-
workflow_context: Optional[Dict] = None,
|
|
6949
6927
|
):
|
|
6950
6928
|
"""Parse the model response using the output model."""
|
|
6951
6929
|
from agno.utils.events import (
|
|
@@ -6971,7 +6949,6 @@ class Agent:
|
|
|
6971
6949
|
run_response=run_response,
|
|
6972
6950
|
model_response=model_response,
|
|
6973
6951
|
model_response_event=model_response_event,
|
|
6974
|
-
workflow_context=workflow_context,
|
|
6975
6952
|
stream_intermediate_steps=stream_intermediate_steps,
|
|
6976
6953
|
):
|
|
6977
6954
|
yield event
|
|
@@ -6986,14 +6963,7 @@ class Agent:
|
|
|
6986
6963
|
# Update the RunResponse metrics
|
|
6987
6964
|
run_response.metrics = self._calculate_run_metrics(messages_for_run_response)
|
|
6988
6965
|
|
|
6989
|
-
def _handle_event(self, event: RunOutputEvent, run_response: RunOutput
|
|
6990
|
-
if workflow_context:
|
|
6991
|
-
event.workflow_id = workflow_context.get("workflow_id")
|
|
6992
|
-
event.workflow_run_id = workflow_context.get("workflow_run_id")
|
|
6993
|
-
event.step_id = workflow_context.get("step_id")
|
|
6994
|
-
event.step_name = workflow_context.get("step_name")
|
|
6995
|
-
event.step_index = workflow_context.get("step_index")
|
|
6996
|
-
|
|
6966
|
+
def _handle_event(self, event: RunOutputEvent, run_response: RunOutput):
|
|
6997
6967
|
# We only store events that are not run_response_content events
|
|
6998
6968
|
events_to_skip = [event.value for event in self.events_to_skip] if self.events_to_skip else []
|
|
6999
6969
|
if self.store_events and event.event not in events_to_skip:
|
|
@@ -1454,17 +1454,17 @@ class DynamoDb(BaseDb):
|
|
|
1454
1454
|
"""
|
|
1455
1455
|
import json
|
|
1456
1456
|
|
|
1457
|
-
item = {}
|
|
1457
|
+
item: Dict[str, Any] = {}
|
|
1458
1458
|
for key, value in data.items():
|
|
1459
1459
|
if value is not None:
|
|
1460
1460
|
if isinstance(value, bool):
|
|
1461
|
-
item[key] = {"BOOL":
|
|
1461
|
+
item[key] = {"BOOL": value}
|
|
1462
1462
|
elif isinstance(value, (int, float)):
|
|
1463
1463
|
item[key] = {"N": str(value)}
|
|
1464
1464
|
elif isinstance(value, str):
|
|
1465
1465
|
item[key] = {"S": str(value)}
|
|
1466
1466
|
elif isinstance(value, (dict, list)):
|
|
1467
|
-
item[key] = {"S": json.dumps(
|
|
1467
|
+
item[key] = {"S": json.dumps(value)}
|
|
1468
1468
|
else:
|
|
1469
1469
|
item[key] = {"S": str(value)}
|
|
1470
1470
|
return item
|
|
@@ -1803,14 +1803,16 @@ class DynamoDb(BaseDb):
|
|
|
1803
1803
|
|
|
1804
1804
|
if filter_type is not None:
|
|
1805
1805
|
if filter_type == EvalFilterType.AGENT:
|
|
1806
|
-
filter_expressions.append("agent_id
|
|
1806
|
+
filter_expressions.append("attribute_exists(agent_id)")
|
|
1807
1807
|
elif filter_type == EvalFilterType.TEAM:
|
|
1808
|
-
filter_expressions.append("team_id
|
|
1808
|
+
filter_expressions.append("attribute_exists(team_id)")
|
|
1809
1809
|
elif filter_type == EvalFilterType.WORKFLOW:
|
|
1810
|
-
filter_expressions.append("workflow_id
|
|
1810
|
+
filter_expressions.append("attribute_exists(workflow_id)")
|
|
1811
1811
|
|
|
1812
1812
|
if filter_expressions:
|
|
1813
1813
|
scan_kwargs["FilterExpression"] = " AND ".join(filter_expressions)
|
|
1814
|
+
|
|
1815
|
+
if expression_values:
|
|
1814
1816
|
scan_kwargs["ExpressionAttributeValues"] = expression_values # type: ignore
|
|
1815
1817
|
|
|
1816
1818
|
# Execute scan
|
|
@@ -73,6 +73,7 @@ USER_MEMORY_TABLE_SCHEMA = {
|
|
|
73
73
|
{"AttributeName": "user_id", "AttributeType": "S"},
|
|
74
74
|
{"AttributeName": "agent_id", "AttributeType": "S"},
|
|
75
75
|
{"AttributeName": "team_id", "AttributeType": "S"},
|
|
76
|
+
{"AttributeName": "workflow_id", "AttributeType": "S"},
|
|
76
77
|
{"AttributeName": "updated_at", "AttributeType": "S"},
|
|
77
78
|
],
|
|
78
79
|
"GlobalSecondaryIndexes": [
|
|
@@ -123,7 +124,6 @@ EVAL_TABLE_SCHEMA = {
|
|
|
123
124
|
"AttributeDefinitions": [
|
|
124
125
|
{"AttributeName": "run_id", "AttributeType": "S"},
|
|
125
126
|
{"AttributeName": "eval_type", "AttributeType": "S"},
|
|
126
|
-
{"AttributeName": "eval_input", "AttributeType": "S"},
|
|
127
127
|
{"AttributeName": "agent_id", "AttributeType": "S"},
|
|
128
128
|
{"AttributeName": "team_id", "AttributeType": "S"},
|
|
129
129
|
{"AttributeName": "workflow_id", "AttributeType": "S"},
|
|
@@ -176,18 +176,9 @@ KNOWLEDGE_TABLE_SCHEMA = {
|
|
|
176
176
|
"KeySchema": [{"AttributeName": "id", "KeyType": "HASH"}],
|
|
177
177
|
"AttributeDefinitions": [
|
|
178
178
|
{"AttributeName": "id", "AttributeType": "S"},
|
|
179
|
-
{"AttributeName": "name", "AttributeType": "S"},
|
|
180
|
-
{"AttributeName": "description", "AttributeType": "S"},
|
|
181
|
-
{"AttributeName": "metadata", "AttributeType": "S"},
|
|
182
179
|
{"AttributeName": "type", "AttributeType": "S"},
|
|
183
|
-
{"AttributeName": "size", "AttributeType": "N"},
|
|
184
|
-
{"AttributeName": "linked_to", "AttributeType": "S"},
|
|
185
|
-
{"AttributeName": "access_count", "AttributeType": "N"},
|
|
186
180
|
{"AttributeName": "status", "AttributeType": "S"},
|
|
187
|
-
{"AttributeName": "status_message", "AttributeType": "S"},
|
|
188
181
|
{"AttributeName": "created_at", "AttributeType": "N"},
|
|
189
|
-
{"AttributeName": "updated_at", "AttributeType": "N"},
|
|
190
|
-
{"AttributeName": "external_id", "AttributeType": "S"},
|
|
191
182
|
],
|
|
192
183
|
"GlobalSecondaryIndexes": [
|
|
193
184
|
{
|
|
@@ -23,7 +23,7 @@ def serialize_to_dynamo_item(data: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
23
23
|
A DynamoDB-ready dict with the serialized data
|
|
24
24
|
|
|
25
25
|
"""
|
|
26
|
-
item = {}
|
|
26
|
+
item: Dict[str, Any] = {}
|
|
27
27
|
for key, value in data.items():
|
|
28
28
|
if value is not None:
|
|
29
29
|
if isinstance(value, (int, float)):
|
|
@@ -31,7 +31,7 @@ def serialize_to_dynamo_item(data: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
31
31
|
elif isinstance(value, str):
|
|
32
32
|
item[key] = {"S": value}
|
|
33
33
|
elif isinstance(value, bool):
|
|
34
|
-
item[key] = {"BOOL":
|
|
34
|
+
item[key] = {"BOOL": value}
|
|
35
35
|
elif isinstance(value, (dict, list)):
|
|
36
36
|
item[key] = {"S": json.dumps(value)}
|
|
37
37
|
else:
|
|
@@ -682,9 +682,7 @@ class FirestoreDb(BaseDb):
|
|
|
682
682
|
log_error(f"Error deleting memories: {e}")
|
|
683
683
|
raise e
|
|
684
684
|
|
|
685
|
-
def get_all_memory_topics(
|
|
686
|
-
self, create_collection_if_not_found: Optional[bool] = True
|
|
687
|
-
) -> List[str]:
|
|
685
|
+
def get_all_memory_topics(self, create_collection_if_not_found: Optional[bool] = True) -> List[str]:
|
|
688
686
|
"""Get all memory topics from the database.
|
|
689
687
|
|
|
690
688
|
Returns:
|
|
@@ -472,7 +472,8 @@ class GcsJsonDb(BaseDb):
|
|
|
472
472
|
|
|
473
473
|
# Filter out the memory, with optional user_id verification
|
|
474
474
|
memories = [
|
|
475
|
-
m
|
|
475
|
+
m
|
|
476
|
+
for m in memories
|
|
476
477
|
if not (m.get("memory_id") == memory_id and (user_id is None or m.get("user_id") == user_id))
|
|
477
478
|
]
|
|
478
479
|
|
|
@@ -499,7 +500,8 @@ class GcsJsonDb(BaseDb):
|
|
|
499
500
|
|
|
500
501
|
# Filter out memories, with optional user_id verification
|
|
501
502
|
memories = [
|
|
502
|
-
m
|
|
503
|
+
m
|
|
504
|
+
for m in memories
|
|
503
505
|
if not (m.get("memory_id") in memory_ids and (user_id is None or m.get("user_id") == user_id))
|
|
504
506
|
]
|
|
505
507
|
|
|
@@ -642,7 +644,7 @@ class GcsJsonDb(BaseDb):
|
|
|
642
644
|
user_stats[memory_user_id] = {
|
|
643
645
|
"user_id": memory_user_id,
|
|
644
646
|
"total_memories": 0,
|
|
645
|
-
"last_memory_updated_at": 0
|
|
647
|
+
"last_memory_updated_at": 0,
|
|
646
648
|
}
|
|
647
649
|
user_stats[memory_user_id]["total_memories"] += 1
|
|
648
650
|
updated_at = memory.get("updated_at", 0)
|
|
@@ -359,8 +359,7 @@ class InMemoryDb(BaseDb):
|
|
|
359
359
|
# If user_id is provided, verify ownership before deleting
|
|
360
360
|
if user_id is not None:
|
|
361
361
|
self._memories = [
|
|
362
|
-
m for m in self._memories
|
|
363
|
-
if not (m.get("memory_id") == memory_id and m.get("user_id") == user_id)
|
|
362
|
+
m for m in self._memories if not (m.get("memory_id") == memory_id and m.get("user_id") == user_id)
|
|
364
363
|
]
|
|
365
364
|
else:
|
|
366
365
|
self._memories = [m for m in self._memories if m.get("memory_id") != memory_id]
|
|
@@ -388,8 +387,7 @@ class InMemoryDb(BaseDb):
|
|
|
388
387
|
# If user_id is provided, verify ownership before deleting
|
|
389
388
|
if user_id is not None:
|
|
390
389
|
self._memories = [
|
|
391
|
-
m for m in self._memories
|
|
392
|
-
if not (m.get("memory_id") in memory_ids and m.get("user_id") == user_id)
|
|
390
|
+
m for m in self._memories if not (m.get("memory_id") in memory_ids and m.get("user_id") == user_id)
|
|
393
391
|
]
|
|
394
392
|
else:
|
|
395
393
|
self._memories = [m for m in self._memories if m.get("memory_id") not in memory_ids]
|
|
@@ -532,7 +530,11 @@ class InMemoryDb(BaseDb):
|
|
|
532
530
|
|
|
533
531
|
if memory_user_id:
|
|
534
532
|
if memory_user_id not in user_stats:
|
|
535
|
-
user_stats[memory_user_id] = {
|
|
533
|
+
user_stats[memory_user_id] = {
|
|
534
|
+
"user_id": memory_user_id,
|
|
535
|
+
"total_memories": 0,
|
|
536
|
+
"last_memory_updated_at": 0,
|
|
537
|
+
}
|
|
536
538
|
user_stats[memory_user_id]["total_memories"] += 1
|
|
537
539
|
updated_at = memory.get("updated_at", 0)
|
|
538
540
|
if updated_at > user_stats[memory_user_id]["last_memory_updated_at"]:
|
|
@@ -23,7 +23,7 @@ class FastEmbedEmbedder(Embedder):
|
|
|
23
23
|
"""Using BAAI/bge-small-en-v1.5 model, more models available: https://qdrant.github.io/fastembed/examples/Supported_Models/"""
|
|
24
24
|
|
|
25
25
|
id: str = "BAAI/bge-small-en-v1.5"
|
|
26
|
-
dimensions: int = 384
|
|
26
|
+
dimensions: Optional[int] = 384
|
|
27
27
|
|
|
28
28
|
def get_embedding(self, text: str) -> List[float]:
|
|
29
29
|
model = TextEmbedding(model_name=self.id)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from os import getenv
|
|
3
|
+
from typing import Any, Dict, List, Optional, Type, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from agno.models.openai.like import OpenAILike
|
|
8
|
+
from agno.run.agent import RunOutput
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class OpenRouter(OpenAILike):
|
|
13
|
+
"""
|
|
14
|
+
A class for using models hosted on OpenRouter.
|
|
15
|
+
|
|
16
|
+
Attributes:
|
|
17
|
+
id (str): The model id. Defaults to "gpt-4o".
|
|
18
|
+
name (str): The model name. Defaults to "OpenRouter".
|
|
19
|
+
provider (str): The provider name. Defaults to "OpenRouter".
|
|
20
|
+
api_key (Optional[str]): The API key.
|
|
21
|
+
base_url (str): The base URL. Defaults to "https://openrouter.ai/api/v1".
|
|
22
|
+
max_tokens (int): The maximum number of tokens. Defaults to 1024.
|
|
23
|
+
fallback_models (Optional[List[str]]): List of fallback model IDs to use if the primary model
|
|
24
|
+
fails due to rate limits, timeouts, or unavailability. OpenRouter will automatically try
|
|
25
|
+
these models in order. Example: ["anthropic/claude-sonnet-4", "deepseek/deepseek-r1"]
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
id: str = "gpt-4o"
|
|
29
|
+
name: str = "OpenRouter"
|
|
30
|
+
provider: str = "OpenRouter"
|
|
31
|
+
|
|
32
|
+
api_key: Optional[str] = field(default_factory=lambda: getenv("OPENROUTER_API_KEY"))
|
|
33
|
+
base_url: str = "https://openrouter.ai/api/v1"
|
|
34
|
+
max_tokens: int = 1024
|
|
35
|
+
models: Optional[List[str]] = None # Dynamic model routing https://openrouter.ai/docs/features/model-routing
|
|
36
|
+
|
|
37
|
+
def get_request_params(
|
|
38
|
+
self,
|
|
39
|
+
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
40
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
41
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
42
|
+
run_response: Optional[RunOutput] = None,
|
|
43
|
+
) -> Dict[str, Any]:
|
|
44
|
+
"""
|
|
45
|
+
Returns keyword arguments for API requests, including fallback models configuration.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Dict[str, Any]: A dictionary of keyword arguments for API requests.
|
|
49
|
+
"""
|
|
50
|
+
# Get base request params from parent class
|
|
51
|
+
request_params = super().get_request_params(
|
|
52
|
+
response_format=response_format, tools=tools, tool_choice=tool_choice, run_response=run_response
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Add fallback models to extra_body if specified
|
|
56
|
+
if self.models:
|
|
57
|
+
# Get existing extra_body or create new dict
|
|
58
|
+
extra_body = request_params.get("extra_body") or {}
|
|
59
|
+
|
|
60
|
+
# Merge fallback models into extra_body
|
|
61
|
+
extra_body["models"] = self.models
|
|
62
|
+
|
|
63
|
+
# Update request params
|
|
64
|
+
request_params["extra_body"] = extra_body
|
|
65
|
+
|
|
66
|
+
return request_params
|