agno 2.1.2__tar.gz → 2.1.3__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.3}/PKG-INFO +1 -1
- {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/firestore.py +1 -3
- {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/gcs_json_db.py +5 -3
- {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/in_memory_db.py +7 -5
- {agno-2.1.2 → agno-2.1.3}/agno/models/aws/bedrock.py +1 -1
- agno-2.1.3/agno/models/openrouter/openrouter.py +66 -0
- agno-2.1.3/agno/models/vertexai/claude.py +74 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/app.py +52 -2
- {agno-2.1.2 → agno-2.1.3}/agno/os/mcp.py +3 -3
- {agno-2.1.2 → agno-2.1.3}/agno/os/utils.py +2 -1
- {agno-2.1.2 → agno-2.1.3}/agno/tools/file.py +4 -2
- {agno-2.1.2 → agno-2.1.3}/agno/utils/merge_dict.py +3 -3
- agno-2.1.3/agno/utils/print_response/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/parallel.py +5 -5
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/workflow.py +9 -5
- {agno-2.1.2 → agno-2.1.3}/agno.egg-info/PKG-INFO +1 -1
- {agno-2.1.2 → agno-2.1.3}/agno.egg-info/SOURCES.txt +2 -0
- {agno-2.1.2 → agno-2.1.3}/pyproject.toml +1 -1
- agno-2.1.2/agno/models/openrouter/openrouter.py +0 -28
- {agno-2.1.2 → agno-2.1.3}/LICENSE +0 -0
- {agno-2.1.2 → agno-2.1.3}/README.md +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/agent/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/agent/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/api.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/os.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/routes.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/os.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/response.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/workflows.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/settings.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/api/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/json/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/json/json_db.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/json/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/migrations/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/mongo.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/mysql.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/postgres.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/redis/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/redis/redis.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/redis/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/redis/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/db/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/debug.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/eval/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/eval/accuracy.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/eval/performance.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/eval/reliability.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/eval/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/exceptions.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/guardrails/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/guardrails/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/guardrails/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/guardrails/pii.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/integrations/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/integrations/discord/client.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/content.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/document/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/types.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/knowledge/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/media.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/memory/manager.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/anthropic/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/aws/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/aws/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/azure/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cohere/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cohere/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/defaults.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/google/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/google/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/groq/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/groq/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/ibm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/internlm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/internlm/internlm.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/langdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/langdb/langdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/message.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/meta/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/meta/llama.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/mistral/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/mistral/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nebius/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nebius/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nexus/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nexus/nexus.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/ollama/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/ollama/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/openai/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/openai/chat.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/openai/like.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/openai/responses.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/portkey/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/portkey/portkey.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/requesty/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/requesty/requesty.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/response.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/together/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/together/together.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/vercel/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/vercel/v0.py +0 -0
- {agno-2.1.2/agno/reasoning → agno-2.1.3/agno/models/vertexai}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/vllm/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/vllm/vllm.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/xai/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/models/xai/xai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/auth.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/config.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/middleware/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/middleware/jwt.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/health.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/home.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/routers/session/session.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/schema.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/os/settings.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/py.typed +0 -0
- {agno-2.1.2/agno/run → agno-2.1.3/agno/reasoning}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/deepseek.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/default.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/helpers.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/ollama.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/reasoning/step.py +0 -0
- {agno-2.1.2/agno/tools/models → agno-2.1.3/agno/run}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/cancel.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/messages.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/run/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/session/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/session/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/session/summary.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/session/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/session/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/team/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/team/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/agentql.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/airflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/api.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/apify.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/arxiv.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/aws_lambda.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/aws_ses.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/baidusearch.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/bitbucket.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/brandfetch.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/bravesearch.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/brightdata.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/browserbase.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/calcom.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/calculator.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/cartesia.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/clickup.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/confluence.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/crawl4ai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/dalle.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/daytona.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/decorator.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/desi_vocal.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/discord.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/docker.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/duckdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/duckduckgo.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/e2b.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/eleven_labs.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/email.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/evm.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/exa.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/fal.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/file_generation.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/financial_datasets.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/firecrawl.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/function.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/giphy.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/github.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/gmail.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/google_bigquery.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/google_maps.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/googlecalendar.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/googlesearch.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/googlesheets.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/hackernews.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/jina.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/jira.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/linear.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/linkup.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/local_file_system.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/lumalab.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/mcp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/mem0.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/memori.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/memory.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.1.2/agno/tools/streamlit → agno-2.1.3/agno/tools/models}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models/groq.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models/morph.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models/nebius.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/models_labs.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/moviepy_video.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/neo4j.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/newspaper.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/newspaper4k.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/openbb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/opencv.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/openweather.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/oxylabs.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/pandas.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/postgres.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/pubmed.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/python.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/reasoning.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/reddit.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/replicate.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/resend.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/scrapegraph.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/searxng.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/serpapi.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/serper.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/shell.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/slack.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/sleep.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/spider.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/sql.py +0 -0
- {agno-2.1.2/agno/utils → agno-2.1.3/agno/tools/streamlit}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/streamlit/components.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/tavily.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/telegram.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/todoist.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/tool_registry.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/toolkit.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/trafilatura.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/trello.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/twilio.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/user_control_flow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/valyu.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/visualization.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/webbrowser.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/webex.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/website.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/webtools.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/wikipedia.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/x.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/yfinance.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/youtube.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/zendesk.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/zep.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/tools/zoom.py +0 -0
- {agno-2.1.2/agno/utils/models → agno-2.1.3/agno/utils}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/audio.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/certs.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/code_execution.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/common.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/dttm.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/enum.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/env.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/events.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/format_str.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/functions.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/gemini.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/hooks.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/http.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/json_schema.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/knowledge.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/location.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/log.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/mcp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/media.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/message.py +0 -0
- {agno-2.1.2/agno/utils/print_response → agno-2.1.3/agno/utils/models}/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/claude.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/cohere.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/llama.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/mistral.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/models/watsonx.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/openai.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/pickle.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/pprint.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/agent.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/prompts.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/reasoning.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/response.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/response_iterator.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/safe_formatter.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/serialize.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/shell.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/streamlit.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/string.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/team.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/timer.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/tools.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/web.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/whatsapp.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/utils/yaml_io.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/base.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/distance.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/search.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/__init__.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/condition.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/loop.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/router.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/step.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/steps.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno/workflow/types.py +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno.egg-info/requires.txt +0 -0
- {agno-2.1.2 → agno-2.1.3}/agno.egg-info/top_level.txt +0 -0
- {agno-2.1.2 → agno-2.1.3}/setup.cfg +0 -0
|
@@ -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"]:
|
|
@@ -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
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from os import getenv
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
|
+
|
|
5
|
+
from agno.models.anthropic import Claude as AnthropicClaude
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
from anthropic import AnthropicVertex as AnthropicClient
|
|
9
|
+
from anthropic import (
|
|
10
|
+
AsyncAnthropicVertex as AsyncAnthropicClient,
|
|
11
|
+
)
|
|
12
|
+
except ImportError as e:
|
|
13
|
+
raise ImportError("`anthropic` not installed. Please install it with `pip install anthropic`") from e
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class Claude(AnthropicClaude):
|
|
18
|
+
"""
|
|
19
|
+
A class representing Anthropic Claude model.
|
|
20
|
+
|
|
21
|
+
For more information, see: https://docs.anthropic.com/en/api/messages
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
id: str = "claude-sonnet-4@20250514"
|
|
25
|
+
name: str = "Claude"
|
|
26
|
+
provider: str = "VertexAI"
|
|
27
|
+
|
|
28
|
+
# Client parameters
|
|
29
|
+
region: Optional[str] = None
|
|
30
|
+
project_id: Optional[str] = None
|
|
31
|
+
base_url: Optional[str] = None
|
|
32
|
+
|
|
33
|
+
# Anthropic clients
|
|
34
|
+
client: Optional[AnthropicClient] = None
|
|
35
|
+
async_client: Optional[AsyncAnthropicClient] = None
|
|
36
|
+
|
|
37
|
+
def _get_client_params(self) -> Dict[str, Any]:
|
|
38
|
+
client_params: Dict[str, Any] = {}
|
|
39
|
+
|
|
40
|
+
# Add API key to client parameters
|
|
41
|
+
client_params["region"] = self.region or getenv("CLOUD_ML_REGION")
|
|
42
|
+
client_params["project_id"] = self.project_id or getenv("ANTHROPIC_VERTEX_PROJECT_ID")
|
|
43
|
+
client_params["base_url"] = self.base_url or getenv("ANTHROPIC_VERTEX_BASE_URL")
|
|
44
|
+
if self.timeout is not None:
|
|
45
|
+
client_params["timeout"] = self.timeout
|
|
46
|
+
|
|
47
|
+
# Add additional client parameters
|
|
48
|
+
if self.client_params is not None:
|
|
49
|
+
client_params.update(self.client_params)
|
|
50
|
+
if self.default_headers is not None:
|
|
51
|
+
client_params["default_headers"] = self.default_headers
|
|
52
|
+
return client_params
|
|
53
|
+
|
|
54
|
+
def get_client(self) -> AnthropicClient:
|
|
55
|
+
"""
|
|
56
|
+
Returns an instance of the Anthropic client.
|
|
57
|
+
"""
|
|
58
|
+
if self.client and not self.client.is_closed():
|
|
59
|
+
return self.client
|
|
60
|
+
|
|
61
|
+
_client_params = self._get_client_params()
|
|
62
|
+
self.client = AnthropicClient(**_client_params)
|
|
63
|
+
return self.client
|
|
64
|
+
|
|
65
|
+
def get_async_client(self) -> AsyncAnthropicClient:
|
|
66
|
+
"""
|
|
67
|
+
Returns an instance of the async Anthropic client.
|
|
68
|
+
"""
|
|
69
|
+
if self.async_client:
|
|
70
|
+
return self.async_client
|
|
71
|
+
|
|
72
|
+
_client_params = self._get_client_params()
|
|
73
|
+
self.async_client = AsyncAnthropicClient(**_client_params)
|
|
74
|
+
return self.async_client
|
|
@@ -64,6 +64,30 @@ async def mcp_lifespan(_, mcp_tools):
|
|
|
64
64
|
await tool.close()
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
def _combine_app_lifespans(lifespans: list) -> Any:
|
|
68
|
+
"""Combine multiple FastAPI app lifespan context managers into one."""
|
|
69
|
+
if len(lifespans) == 1:
|
|
70
|
+
return lifespans[0]
|
|
71
|
+
|
|
72
|
+
from contextlib import asynccontextmanager
|
|
73
|
+
|
|
74
|
+
@asynccontextmanager
|
|
75
|
+
async def combined_lifespan(app):
|
|
76
|
+
async def _run_nested(index: int):
|
|
77
|
+
if index >= len(lifespans):
|
|
78
|
+
yield
|
|
79
|
+
return
|
|
80
|
+
|
|
81
|
+
async with lifespans[index](app):
|
|
82
|
+
async for _ in _run_nested(index + 1):
|
|
83
|
+
yield
|
|
84
|
+
|
|
85
|
+
async for _ in _run_nested(0):
|
|
86
|
+
yield
|
|
87
|
+
|
|
88
|
+
return combined_lifespan
|
|
89
|
+
|
|
90
|
+
|
|
67
91
|
class AgentOS:
|
|
68
92
|
def __init__(
|
|
69
93
|
self,
|
|
@@ -220,7 +244,7 @@ class AgentOS:
|
|
|
220
244
|
async with mcp_tools_lifespan(app): # type: ignore
|
|
221
245
|
yield
|
|
222
246
|
|
|
223
|
-
app_lifespan = combined_lifespan
|
|
247
|
+
app_lifespan = combined_lifespan
|
|
224
248
|
else:
|
|
225
249
|
app_lifespan = mcp_tools_lifespan
|
|
226
250
|
|
|
@@ -237,6 +261,32 @@ class AgentOS:
|
|
|
237
261
|
def get_app(self) -> FastAPI:
|
|
238
262
|
if self.base_app:
|
|
239
263
|
fastapi_app = self.base_app
|
|
264
|
+
|
|
265
|
+
# Initialize MCP server if enabled
|
|
266
|
+
if self.enable_mcp_server:
|
|
267
|
+
from agno.os.mcp import get_mcp_server
|
|
268
|
+
|
|
269
|
+
self._mcp_app = get_mcp_server(self)
|
|
270
|
+
|
|
271
|
+
# Collect all lifespans that need to be combined
|
|
272
|
+
lifespans = []
|
|
273
|
+
|
|
274
|
+
if fastapi_app.router.lifespan_context:
|
|
275
|
+
lifespans.append(fastapi_app.router.lifespan_context)
|
|
276
|
+
|
|
277
|
+
if self.mcp_tools:
|
|
278
|
+
lifespans.append(partial(mcp_lifespan, mcp_tools=self.mcp_tools))
|
|
279
|
+
|
|
280
|
+
if self.enable_mcp_server and self._mcp_app:
|
|
281
|
+
lifespans.append(self._mcp_app.lifespan)
|
|
282
|
+
|
|
283
|
+
if self.lifespan:
|
|
284
|
+
lifespans.append(self.lifespan)
|
|
285
|
+
|
|
286
|
+
# Combine lifespans and set them in the app
|
|
287
|
+
if lifespans:
|
|
288
|
+
fastapi_app.router.lifespan_context = _combine_app_lifespans(lifespans)
|
|
289
|
+
|
|
240
290
|
else:
|
|
241
291
|
if self.enable_mcp_server:
|
|
242
292
|
from contextlib import asynccontextmanager
|
|
@@ -255,7 +305,7 @@ class AgentOS:
|
|
|
255
305
|
async with self._mcp_app.lifespan(app): # type: ignore
|
|
256
306
|
yield
|
|
257
307
|
|
|
258
|
-
final_lifespan = combined_lifespan
|
|
308
|
+
final_lifespan = combined_lifespan
|
|
259
309
|
|
|
260
310
|
fastapi_app = self._make_app(lifespan=final_lifespan)
|
|
261
311
|
else:
|
|
@@ -78,21 +78,21 @@ def get_mcp_server(
|
|
|
78
78
|
agent = get_agent_by_id(agent_id, os.agents)
|
|
79
79
|
if agent is None:
|
|
80
80
|
raise Exception(f"Agent {agent_id} not found")
|
|
81
|
-
return agent.
|
|
81
|
+
return await agent.arun(message)
|
|
82
82
|
|
|
83
83
|
@mcp.tool(name="run_team", description="Run a team", tags={"core"}) # type: ignore
|
|
84
84
|
async def run_team(team_id: str, message: str) -> TeamRunOutput:
|
|
85
85
|
team = get_team_by_id(team_id, os.teams)
|
|
86
86
|
if team is None:
|
|
87
87
|
raise Exception(f"Team {team_id} not found")
|
|
88
|
-
return team.
|
|
88
|
+
return await team.arun(message)
|
|
89
89
|
|
|
90
90
|
@mcp.tool(name="run_workflow", description="Run a workflow", tags={"core"}) # type: ignore
|
|
91
91
|
async def run_workflow(workflow_id: str, message: str) -> WorkflowRunOutput:
|
|
92
92
|
workflow = get_workflow_by_id(workflow_id, os.workflows)
|
|
93
93
|
if workflow is None:
|
|
94
94
|
raise Exception(f"Workflow {workflow_id} not found")
|
|
95
|
-
return workflow.
|
|
95
|
+
return await workflow.arun(message)
|
|
96
96
|
|
|
97
97
|
# Session Management Tools
|
|
98
98
|
@mcp.tool(name="get_sessions_for_agent", description="Get list of sessions for an agent", tags={"session"}) # type: ignore
|
|
@@ -96,7 +96,7 @@ def get_session_name(session: Dict[str, Any]) -> str:
|
|
|
96
96
|
run = None
|
|
97
97
|
for r in runs:
|
|
98
98
|
# If agent_id is not present, it's a team run
|
|
99
|
-
if not r.get("agent_id"):
|
|
99
|
+
if not r.get("agent_id"):
|
|
100
100
|
run = r
|
|
101
101
|
break
|
|
102
102
|
# Fallback to first run if no team run found
|
|
@@ -112,6 +112,7 @@ def get_session_name(session: Dict[str, Any]) -> str:
|
|
|
112
112
|
elif isinstance(workflow_input, dict):
|
|
113
113
|
try:
|
|
114
114
|
import json
|
|
115
|
+
|
|
115
116
|
return json.dumps(workflow_input)
|
|
116
117
|
except (TypeError, ValueError):
|
|
117
118
|
pass
|
|
@@ -75,7 +75,9 @@ class FileTools(Toolkit):
|
|
|
75
75
|
"""
|
|
76
76
|
try:
|
|
77
77
|
log_info(f"Reading files in : {self.base_dir}")
|
|
78
|
-
return json.dumps(
|
|
78
|
+
return json.dumps(
|
|
79
|
+
[str(file_path.relative_to(self.base_dir)) for file_path in self.base_dir.iterdir()], indent=4
|
|
80
|
+
)
|
|
79
81
|
except Exception as e:
|
|
80
82
|
log_error(f"Error reading files: {e}")
|
|
81
83
|
return f"Error reading files: {e}"
|
|
@@ -93,7 +95,7 @@ class FileTools(Toolkit):
|
|
|
93
95
|
log_debug(f"Searching files in {self.base_dir} with pattern {pattern}")
|
|
94
96
|
matching_files = list(self.base_dir.glob(pattern))
|
|
95
97
|
|
|
96
|
-
file_paths = [str(file_path) for file_path in matching_files]
|
|
98
|
+
file_paths = [str(file_path.relative_to(self.base_dir)) for file_path in matching_files]
|
|
97
99
|
|
|
98
100
|
result = {
|
|
99
101
|
"pattern": pattern,
|
|
@@ -27,7 +27,7 @@ def merge_parallel_session_states(original_state: Dict[str, Any], modified_state
|
|
|
27
27
|
"""
|
|
28
28
|
if not original_state or not modified_states:
|
|
29
29
|
return
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
# Collect all actual changes (keys where value differs from original)
|
|
32
32
|
all_changes = {}
|
|
33
33
|
for modified_state in modified_states:
|
|
@@ -35,7 +35,7 @@ def merge_parallel_session_states(original_state: Dict[str, Any], modified_state
|
|
|
35
35
|
for key, value in modified_state.items():
|
|
36
36
|
if key not in original_state or original_state[key] != value:
|
|
37
37
|
all_changes[key] = value
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
# Apply all collected changes to the original state
|
|
40
40
|
for key, value in all_changes.items():
|
|
41
|
-
original_state[key] = value
|
|
41
|
+
original_state[key] = value
|
|
File without changes
|
|
@@ -14,8 +14,8 @@ from agno.run.workflow import (
|
|
|
14
14
|
WorkflowRunOutput,
|
|
15
15
|
WorkflowRunOutputEvent,
|
|
16
16
|
)
|
|
17
|
-
from agno.utils.merge_dict import merge_parallel_session_states
|
|
18
17
|
from agno.utils.log import log_debug, logger
|
|
18
|
+
from agno.utils.merge_dict import merge_parallel_session_states
|
|
19
19
|
from agno.workflow.condition import Condition
|
|
20
20
|
from agno.workflow.step import Step
|
|
21
21
|
from agno.workflow.types import StepInput, StepOutput, StepType
|
|
@@ -220,7 +220,7 @@ class Parallel:
|
|
|
220
220
|
idx, step = step_with_index
|
|
221
221
|
# Use the individual session_state copy for this step
|
|
222
222
|
step_session_state = session_state_copies[idx]
|
|
223
|
-
|
|
223
|
+
|
|
224
224
|
try:
|
|
225
225
|
step_result = step.execute(
|
|
226
226
|
step_input,
|
|
@@ -350,7 +350,7 @@ class Parallel:
|
|
|
350
350
|
idx, step = step_with_index
|
|
351
351
|
# Use the individual session_state copy for this step
|
|
352
352
|
step_session_state = session_state_copies[idx]
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
try:
|
|
355
355
|
step_events = []
|
|
356
356
|
|
|
@@ -506,7 +506,7 @@ class Parallel:
|
|
|
506
506
|
idx, step = step_with_index
|
|
507
507
|
# Use the individual session_state copy for this step
|
|
508
508
|
step_session_state = session_state_copies[idx]
|
|
509
|
-
|
|
509
|
+
|
|
510
510
|
try:
|
|
511
511
|
inner_step_result = await step.aexecute(
|
|
512
512
|
step_input,
|
|
@@ -637,7 +637,7 @@ class Parallel:
|
|
|
637
637
|
idx, step = step_with_index
|
|
638
638
|
# Use the individual session_state copy for this step
|
|
639
639
|
step_session_state = session_state_copies[idx]
|
|
640
|
-
|
|
640
|
+
|
|
641
641
|
try:
|
|
642
642
|
step_events = []
|
|
643
643
|
|
|
@@ -875,9 +875,7 @@ class Workflow:
|
|
|
875
875
|
return func(**call_kwargs)
|
|
876
876
|
except TypeError as e:
|
|
877
877
|
# If signature inspection fails, fall back to original method
|
|
878
|
-
logger.error(
|
|
879
|
-
f"Function signature inspection failed: {e}. Falling back to original calling convention."
|
|
880
|
-
)
|
|
878
|
+
logger.error(f"Function signature inspection failed: {e}. Falling back to original calling convention.")
|
|
881
879
|
return func(**kwargs)
|
|
882
880
|
|
|
883
881
|
def _execute(
|
|
@@ -892,7 +890,8 @@ class Workflow:
|
|
|
892
890
|
from inspect import isasyncgenfunction, iscoroutinefunction, isgeneratorfunction
|
|
893
891
|
|
|
894
892
|
workflow_run_response.status = RunStatus.running
|
|
895
|
-
|
|
893
|
+
if workflow_run_response.run_id:
|
|
894
|
+
register_run(workflow_run_response.run_id) # type: ignore
|
|
896
895
|
|
|
897
896
|
if callable(self.steps):
|
|
898
897
|
if iscoroutinefunction(self.steps) or isasyncgenfunction(self.steps):
|
|
@@ -1346,7 +1345,8 @@ class Workflow:
|
|
|
1346
1345
|
workflow_run_response.status = RunStatus.running
|
|
1347
1346
|
|
|
1348
1347
|
# Register run for cancellation tracking
|
|
1349
|
-
|
|
1348
|
+
if workflow_run_response.run_id:
|
|
1349
|
+
register_run(workflow_run_response.run_id) # type: ignore
|
|
1350
1350
|
|
|
1351
1351
|
if callable(self.steps):
|
|
1352
1352
|
# Execute the workflow with the custom executor
|
|
@@ -1507,6 +1507,10 @@ class Workflow:
|
|
|
1507
1507
|
|
|
1508
1508
|
workflow_run_response.status = RunStatus.running
|
|
1509
1509
|
|
|
1510
|
+
# Register run for cancellation tracking
|
|
1511
|
+
if workflow_run_response.run_id:
|
|
1512
|
+
register_run(workflow_run_response.run_id)
|
|
1513
|
+
|
|
1510
1514
|
workflow_started_event = WorkflowStartedEvent(
|
|
1511
1515
|
run_id=workflow_run_response.run_id or "",
|
|
1512
1516
|
workflow_name=workflow_run_response.workflow_name,
|
|
@@ -243,6 +243,8 @@ agno/models/together/__init__.py
|
|
|
243
243
|
agno/models/together/together.py
|
|
244
244
|
agno/models/vercel/__init__.py
|
|
245
245
|
agno/models/vercel/v0.py
|
|
246
|
+
agno/models/vertexai/__init__.py
|
|
247
|
+
agno/models/vertexai/claude.py
|
|
246
248
|
agno/models/vllm/__init__.py
|
|
247
249
|
agno/models/vllm/vllm.py
|
|
248
250
|
agno/models/xai/__init__.py
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass, field
|
|
2
|
-
from os import getenv
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
|
-
from agno.models.openai.like import OpenAILike
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@dataclass
|
|
9
|
-
class OpenRouter(OpenAILike):
|
|
10
|
-
"""
|
|
11
|
-
A class for using models hosted on OpenRouter.
|
|
12
|
-
|
|
13
|
-
Attributes:
|
|
14
|
-
id (str): The model id. Defaults to "gpt-4o".
|
|
15
|
-
name (str): The model name. Defaults to "OpenRouter".
|
|
16
|
-
provider (str): The provider name. Defaults to "OpenRouter".
|
|
17
|
-
api_key (Optional[str]): The API key.
|
|
18
|
-
base_url (str): The base URL. Defaults to "https://openrouter.ai/api/v1".
|
|
19
|
-
max_tokens (int): The maximum number of tokens. Defaults to 1024.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
id: str = "gpt-4o"
|
|
23
|
-
name: str = "OpenRouter"
|
|
24
|
-
provider: str = "OpenRouter"
|
|
25
|
-
|
|
26
|
-
api_key: Optional[str] = field(default_factory=lambda: getenv("OPENROUTER_API_KEY"))
|
|
27
|
-
base_url: str = "https://openrouter.ai/api/v1"
|
|
28
|
-
max_tokens: int = 1024
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|