agno 2.2.8__tar.gz → 2.2.9__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.2.8 → agno-2.2.9}/PKG-INFO +11 -13
- {agno-2.2.8 → agno-2.2.9}/README.md +10 -10
- {agno-2.2.8 → agno-2.2.9}/agno/agent/agent.py +23 -15
- {agno-2.2.8 → agno-2.2.9}/agno/db/base.py +23 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/dynamo/dynamo.py +20 -25
- {agno-2.2.8 → agno-2.2.9}/agno/db/dynamo/schemas.py +1 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/firestore/firestore.py +11 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/gcs_json/gcs_json_db.py +4 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/in_memory/in_memory_db.py +4 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/json/json_db.py +4 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mongo/async_mongo.py +27 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mongo/mongo.py +25 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mysql/mysql.py +26 -1
- {agno-2.2.8 → agno-2.2.9}/agno/db/postgres/async_postgres.py +26 -1
- {agno-2.2.8 → agno-2.2.9}/agno/db/postgres/postgres.py +26 -1
- {agno-2.2.8 → agno-2.2.9}/agno/db/redis/redis.py +4 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/singlestore/singlestore.py +24 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/sqlite/async_sqlite.py +25 -1
- {agno-2.2.8 → agno-2.2.9}/agno/db/sqlite/sqlite.py +25 -1
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/surrealdb.py +13 -1
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/docx_reader.py +0 -1
- {agno-2.2.8 → agno-2.2.9}/agno/models/azure/ai_foundry.py +2 -1
- {agno-2.2.8 → agno-2.2.9}/agno/models/cerebras/cerebras.py +3 -2
- {agno-2.2.8 → agno-2.2.9}/agno/models/openai/chat.py +2 -1
- {agno-2.2.8 → agno-2.2.9}/agno/models/openai/responses.py +2 -1
- {agno-2.2.8 → agno-2.2.9}/agno/os/app.py +112 -50
- {agno-2.2.8 → agno-2.2.9}/agno/os/config.py +1 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/agui/router.py +9 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/agui/utils.py +49 -3
- {agno-2.2.8 → agno-2.2.9}/agno/os/mcp.py +8 -8
- {agno-2.2.8 → agno-2.2.9}/agno/os/router.py +27 -9
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/evals/evals.py +12 -7
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/memory/memory.py +18 -10
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/metrics/metrics.py +6 -4
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/session/session.py +21 -11
- {agno-2.2.8 → agno-2.2.9}/agno/os/utils.py +57 -11
- {agno-2.2.8 → agno-2.2.9}/agno/team/team.py +26 -21
- agno-2.2.9/agno/vectordb/mongodb/__init__.py +9 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/redis/__init__.py +4 -0
- {agno-2.2.8 → agno-2.2.9}/agno.egg-info/PKG-INFO +11 -13
- {agno-2.2.8 → agno-2.2.9}/agno.egg-info/requires.txt +0 -3
- {agno-2.2.8 → agno-2.2.9}/pyproject.toml +1 -2
- agno-2.2.8/agno/vectordb/mongodb/__init__.py +0 -3
- {agno-2.2.8 → agno-2.2.9}/LICENSE +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/agent/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/api.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/os.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/routes.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/os.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/response.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/schemas/workflows.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/settings.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/api/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/cloud/aws/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/culture/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/culture/manager.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/dynamo/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/firestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/firestore/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/firestore/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/in_memory/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/json/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/json/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/migrations/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mongo/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mongo/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mongo/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mysql/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mysql/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/mysql/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/postgres/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/postgres/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/postgres/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/redis/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/redis/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/redis/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/culture.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/memory.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/schemas/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/singlestore/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/sqlite/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/models.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/db/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/debug.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/eval/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/eval/accuracy.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/eval/performance.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/eval/reliability.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/eval/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/exceptions.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/guardrails/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/guardrails/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/guardrails/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/guardrails/pii.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/integrations/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/integrations/discord/client.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/content.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/document/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/types.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/knowledge/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/media.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/memory/manager.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/anthropic/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/aws/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/aws/bedrock.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/aws/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/azure/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cohere/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cohere/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/defaults.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/google/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/google/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/groq/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/groq/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/ibm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/internlm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/internlm/internlm.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/langdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/langdb/langdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/litellm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/litellm/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/message.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/meta/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/meta/llama.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/mistral/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/mistral/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nebius/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nebius/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nexus/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nexus/nexus.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/ollama/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/ollama/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/openai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/openai/like.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/portkey/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/portkey/portkey.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/requesty/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/requesty/requesty.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/response.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/together/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/together/together.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vercel/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vercel/v0.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vertexai/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vllm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/vllm/vllm.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/xai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/models/xai/xai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/auth.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/middleware/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/middleware/jwt.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/health.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/home.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/schema.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/os/settings.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/py.typed +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/anthropic.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/deepseek.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/default.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/helpers.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/ollama.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/step.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/reasoning/vertexai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/cancel.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/messages.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/run/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/session/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/session/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/session/summary.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/session/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/session/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/team/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/agentql.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/airflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/api.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/apify.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/arxiv.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/aws_lambda.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/aws_ses.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/baidusearch.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/bitbucket.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/brandfetch.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/bravesearch.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/brightdata.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/browserbase.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/calcom.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/calculator.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/cartesia.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/clickup.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/confluence.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/crawl4ai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/dalle.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/daytona.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/decorator.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/desi_vocal.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/discord.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/docker.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/duckdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/duckduckgo.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/e2b.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/eleven_labs.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/email.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/evm.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/exa.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/fal.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/file.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/file_generation.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/financial_datasets.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/firecrawl.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/function.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/giphy.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/github.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/gmail.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/google_bigquery.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/google_drive.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/google_maps.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/googlecalendar.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/googlesearch.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/googlesheets.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/hackernews.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/jina.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/jira.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/linear.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/linkup.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/local_file_system.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/lumalab.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mcp/params.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mem0.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/memori.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/memory.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/morph.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/models_labs.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/moviepy_video.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/neo4j.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/newspaper.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/newspaper4k.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/notion.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/openbb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/opencv.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/openweather.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/oxylabs.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/pandas.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/postgres.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/pubmed.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/python.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/reasoning.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/reddit.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/replicate.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/resend.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/scrapegraph.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/searxng.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/serpapi.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/serper.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/shell.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/slack.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/sleep.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/spider.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/sql.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/streamlit/components.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/tavily.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/telegram.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/todoist.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/tool_registry.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/toolkit.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/trafilatura.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/trello.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/twilio.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/user_control_flow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/valyu.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/visualization.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/webbrowser.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/webex.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/website.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/webtools.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/wikipedia.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/x.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/yfinance.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/youtube.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/zendesk.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/zep.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/tools/zoom.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/audio.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/certs.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/code_execution.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/common.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/dttm.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/enum.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/env.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/events.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/format_str.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/functions.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/hooks.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/http.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/json_schema.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/location.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/log.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/media.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/merge_dict.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/message.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/llama.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/models/watsonx.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/pickle.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/pprint.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/print_response/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/print_response/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/prompts.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/reasoning.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/response.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/response_iterator.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/safe_formatter.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/serialize.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/shell.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/streamlit.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/string.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/team.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/timer.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/tools.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/web.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/utils/yaml_io.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/base.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/distance.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/search.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/condition.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/loop.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/parallel.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/router.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/step.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/steps.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/types.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno/workflow/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno.egg-info/SOURCES.txt +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.2.8 → agno-2.2.9}/agno.egg-info/top_level.txt +0 -0
- {agno-2.2.8 → agno-2.2.9}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.9
|
|
4
4
|
Summary: Agno: a lightweight library for building Multi-Agent Systems
|
|
5
5
|
Author-email: Ashpreet Bedi <ashpreet@agno.com>
|
|
6
6
|
Project-URL: homepage, https://agno.com
|
|
@@ -262,8 +262,6 @@ Provides-Extra: a2a
|
|
|
262
262
|
Requires-Dist: a2a-sdk; extra == "a2a"
|
|
263
263
|
Provides-Extra: huggingface
|
|
264
264
|
Requires-Dist: huggingface-hub; extra == "huggingface"
|
|
265
|
-
Provides-Extra: vllm
|
|
266
|
-
Requires-Dist: vllm; extra == "vllm"
|
|
267
265
|
Provides-Extra: performance
|
|
268
266
|
Requires-Dist: memory_profiler; extra == "performance"
|
|
269
267
|
Provides-Extra: cookbooks
|
|
@@ -403,13 +401,13 @@ Dynamic: license-file
|
|
|
403
401
|
|
|
404
402
|
Agno is a multi-agent framework, runtime and control plane. Built for speed, privacy, and scale.
|
|
405
403
|
|
|
406
|
-
It provides a rich set of
|
|
404
|
+
It provides a rich set of tools for building:
|
|
407
405
|
|
|
408
|
-
- **Agents** with
|
|
409
|
-
- **Multi-Agent Teams** that operate autonomously under a team leader that maintains shared state and context.
|
|
410
|
-
- **Step-based Workflows** for controlled, deterministic execution. Steps can be Agents, Teams, or
|
|
406
|
+
- **Agents** with memory, knowledge, session management, and advanced features like human-in-the-loop, guardrails, dynamic context management and best-in-class MCP support.
|
|
407
|
+
- **Multi-Agent Teams** that operate autonomously under a team leader that maintains shared state and context. Perfect for use cases where the scope exceeds beyond a single agent.
|
|
408
|
+
- **Step-based Workflows** for controlled, deterministic execution. Steps can be Agents, Teams, or regular python functions that run sequentially, in parallel, in loops, branches, or conditionally.
|
|
411
409
|
|
|
412
|
-
Agno also provides a
|
|
410
|
+
Agno also provides a ready-to-use FastAPI app (called the AgentOS) for serving your agents, teams and workflows in production. Stateless, horizontally scalable and designed for scale, the AgentOS gives you major head start in building your AI product.
|
|
413
411
|
|
|
414
412
|
## Getting started
|
|
415
413
|
|
|
@@ -426,7 +424,7 @@ After that, checkout the [examples gallery](https://docs.agno.com/examples/intro
|
|
|
426
424
|
|
|
427
425
|
## Example
|
|
428
426
|
|
|
429
|
-
Here’s an example of an Agent that connects to an MCP server, manages conversation state in a database,
|
|
427
|
+
Here’s an example of an Agent that connects to an MCP server, manages conversation state in a database, is served using a FastAPI application that you can chat with using the [AgentOS UI](https://os.agno.com).
|
|
430
428
|
|
|
431
429
|
```python agno_agent.py
|
|
432
430
|
from agno.agent import Agent
|
|
@@ -461,11 +459,11 @@ if __name__ == "__main__":
|
|
|
461
459
|
|
|
462
460
|
## AgentOS - Production Runtime for Multi-Agent Systems
|
|
463
461
|
|
|
464
|
-
|
|
462
|
+
Building Agents is easy, running them is hard, and that's where the AgentOS comes in. AgentOS is a high-performance runtime for serving multi-agent systems in production. Key features include:
|
|
465
463
|
|
|
466
|
-
1. **Pre-built FastAPI
|
|
464
|
+
1. **Pre-built FastAPI app**: AgentOS ships with a ready-to-use FastAPI app for orchestrating your agents, teams, and workflows. This gives you a major head start in building your AI product.
|
|
467
465
|
|
|
468
|
-
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, letting you test, monitor, and manage your system in real time
|
|
466
|
+
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, letting you test, monitor, and manage your system in real time, giving you unmatched control over your system.
|
|
469
467
|
|
|
470
468
|
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data ever leaves your system. This is ideal for security-conscious enterprises.
|
|
471
469
|
|
|
@@ -485,7 +483,7 @@ Agno brings a novel architecture that no other framework provides, your AgentOS
|
|
|
485
483
|
|
|
486
484
|
## Designed for Agent Engineering
|
|
487
485
|
|
|
488
|
-
Agno is
|
|
486
|
+
Agno is an incredibly feature-rich framework, designed for Agent Engineering. Here are some key features:
|
|
489
487
|
|
|
490
488
|
| **Category** | **Feature** | **Description** |
|
|
491
489
|
|---------------|-------------|-----------------|
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
|
|
22
22
|
Agno is a multi-agent framework, runtime and control plane. Built for speed, privacy, and scale.
|
|
23
23
|
|
|
24
|
-
It provides a rich set of
|
|
24
|
+
It provides a rich set of tools for building:
|
|
25
25
|
|
|
26
|
-
- **Agents** with
|
|
27
|
-
- **Multi-Agent Teams** that operate autonomously under a team leader that maintains shared state and context.
|
|
28
|
-
- **Step-based Workflows** for controlled, deterministic execution. Steps can be Agents, Teams, or
|
|
26
|
+
- **Agents** with memory, knowledge, session management, and advanced features like human-in-the-loop, guardrails, dynamic context management and best-in-class MCP support.
|
|
27
|
+
- **Multi-Agent Teams** that operate autonomously under a team leader that maintains shared state and context. Perfect for use cases where the scope exceeds beyond a single agent.
|
|
28
|
+
- **Step-based Workflows** for controlled, deterministic execution. Steps can be Agents, Teams, or regular python functions that run sequentially, in parallel, in loops, branches, or conditionally.
|
|
29
29
|
|
|
30
|
-
Agno also provides a
|
|
30
|
+
Agno also provides a ready-to-use FastAPI app (called the AgentOS) for serving your agents, teams and workflows in production. Stateless, horizontally scalable and designed for scale, the AgentOS gives you major head start in building your AI product.
|
|
31
31
|
|
|
32
32
|
## Getting started
|
|
33
33
|
|
|
@@ -44,7 +44,7 @@ After that, checkout the [examples gallery](https://docs.agno.com/examples/intro
|
|
|
44
44
|
|
|
45
45
|
## Example
|
|
46
46
|
|
|
47
|
-
Here’s an example of an Agent that connects to an MCP server, manages conversation state in a database,
|
|
47
|
+
Here’s an example of an Agent that connects to an MCP server, manages conversation state in a database, is served using a FastAPI application that you can chat with using the [AgentOS UI](https://os.agno.com).
|
|
48
48
|
|
|
49
49
|
```python agno_agent.py
|
|
50
50
|
from agno.agent import Agent
|
|
@@ -79,11 +79,11 @@ if __name__ == "__main__":
|
|
|
79
79
|
|
|
80
80
|
## AgentOS - Production Runtime for Multi-Agent Systems
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
Building Agents is easy, running them is hard, and that's where the AgentOS comes in. AgentOS is a high-performance runtime for serving multi-agent systems in production. Key features include:
|
|
83
83
|
|
|
84
|
-
1. **Pre-built FastAPI
|
|
84
|
+
1. **Pre-built FastAPI app**: AgentOS ships with a ready-to-use FastAPI app for orchestrating your agents, teams, and workflows. This gives you a major head start in building your AI product.
|
|
85
85
|
|
|
86
|
-
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, letting you test, monitor, and manage your system in real time
|
|
86
|
+
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, letting you test, monitor, and manage your system in real time, giving you unmatched control over your system.
|
|
87
87
|
|
|
88
88
|
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data ever leaves your system. This is ideal for security-conscious enterprises.
|
|
89
89
|
|
|
@@ -103,7 +103,7 @@ Agno brings a novel architecture that no other framework provides, your AgentOS
|
|
|
103
103
|
|
|
104
104
|
## Designed for Agent Engineering
|
|
105
105
|
|
|
106
|
-
Agno is
|
|
106
|
+
Agno is an incredibly feature-rich framework, designed for Agent Engineering. Here are some key features:
|
|
107
107
|
|
|
108
108
|
| **Category** | **Feature** | **Description** |
|
|
109
109
|
|---------------|-------------|-----------------|
|
|
@@ -1140,7 +1140,7 @@ class Agent:
|
|
|
1140
1140
|
add_session_state_to_context: Optional[bool] = None,
|
|
1141
1141
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1142
1142
|
stream_events: bool = False,
|
|
1143
|
-
|
|
1143
|
+
yield_run_output: Optional[bool] = None,
|
|
1144
1144
|
debug_mode: Optional[bool] = None,
|
|
1145
1145
|
**kwargs: Any,
|
|
1146
1146
|
) -> Iterator[Union[RunOutputEvent, RunOutput]]:
|
|
@@ -1410,7 +1410,7 @@ class Agent:
|
|
|
1410
1410
|
if stream_events:
|
|
1411
1411
|
yield completed_event # type: ignore
|
|
1412
1412
|
|
|
1413
|
-
if
|
|
1413
|
+
if yield_run_output:
|
|
1414
1414
|
yield run_response
|
|
1415
1415
|
|
|
1416
1416
|
# Log Agent Telemetry
|
|
@@ -1491,7 +1491,8 @@ class Agent:
|
|
|
1491
1491
|
add_session_state_to_context: Optional[bool] = None,
|
|
1492
1492
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
1493
1493
|
metadata: Optional[Dict[str, Any]] = None,
|
|
1494
|
-
yield_run_response: bool = False,
|
|
1494
|
+
yield_run_response: bool = False, # To be deprecated: use yield_run_output instead
|
|
1495
|
+
yield_run_output: bool = False,
|
|
1495
1496
|
debug_mode: Optional[bool] = None,
|
|
1496
1497
|
**kwargs: Any,
|
|
1497
1498
|
) -> Iterator[Union[RunOutputEvent, RunOutput]]: ...
|
|
@@ -1517,7 +1518,8 @@ class Agent:
|
|
|
1517
1518
|
add_session_state_to_context: Optional[bool] = None,
|
|
1518
1519
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
1519
1520
|
metadata: Optional[Dict[str, Any]] = None,
|
|
1520
|
-
yield_run_response: bool =
|
|
1521
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
1522
|
+
yield_run_output: Optional[bool] = None,
|
|
1521
1523
|
debug_mode: Optional[bool] = None,
|
|
1522
1524
|
**kwargs: Any,
|
|
1523
1525
|
) -> Union[RunOutput, Iterator[Union[RunOutputEvent, RunOutput]]]:
|
|
@@ -1655,6 +1657,8 @@ class Agent:
|
|
|
1655
1657
|
last_exception = None
|
|
1656
1658
|
num_attempts = retries + 1
|
|
1657
1659
|
|
|
1660
|
+
yield_run_output = yield_run_output or yield_run_response # For backwards compatibility
|
|
1661
|
+
|
|
1658
1662
|
for attempt in range(num_attempts):
|
|
1659
1663
|
try:
|
|
1660
1664
|
if stream:
|
|
@@ -1668,7 +1672,7 @@ class Agent:
|
|
|
1668
1672
|
add_session_state_to_context=add_session_state,
|
|
1669
1673
|
response_format=response_format,
|
|
1670
1674
|
stream_events=stream_events,
|
|
1671
|
-
|
|
1675
|
+
yield_run_output=yield_run_output,
|
|
1672
1676
|
debug_mode=debug_mode,
|
|
1673
1677
|
**kwargs,
|
|
1674
1678
|
)
|
|
@@ -2009,7 +2013,7 @@ class Agent:
|
|
|
2009
2013
|
add_session_state_to_context: Optional[bool] = None,
|
|
2010
2014
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2011
2015
|
stream_events: bool = False,
|
|
2012
|
-
|
|
2016
|
+
yield_run_output: Optional[bool] = None,
|
|
2013
2017
|
debug_mode: Optional[bool] = None,
|
|
2014
2018
|
**kwargs: Any,
|
|
2015
2019
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]:
|
|
@@ -2307,7 +2311,7 @@ class Agent:
|
|
|
2307
2311
|
if stream_events:
|
|
2308
2312
|
yield completed_event # type: ignore
|
|
2309
2313
|
|
|
2310
|
-
if
|
|
2314
|
+
if yield_run_output:
|
|
2311
2315
|
yield run_response
|
|
2312
2316
|
|
|
2313
2317
|
# Log Agent Telemetry
|
|
@@ -2408,7 +2412,8 @@ class Agent:
|
|
|
2408
2412
|
add_session_state_to_context: Optional[bool] = None,
|
|
2409
2413
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2410
2414
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2411
|
-
yield_run_response: Optional[bool] = None,
|
|
2415
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
2416
|
+
yield_run_output: Optional[bool] = None,
|
|
2412
2417
|
debug_mode: Optional[bool] = None,
|
|
2413
2418
|
**kwargs: Any,
|
|
2414
2419
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]: ...
|
|
@@ -2434,7 +2439,8 @@ class Agent:
|
|
|
2434
2439
|
add_session_state_to_context: Optional[bool] = None,
|
|
2435
2440
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2436
2441
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2437
|
-
yield_run_response: Optional[bool] = None,
|
|
2442
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
2443
|
+
yield_run_output: Optional[bool] = None,
|
|
2438
2444
|
debug_mode: Optional[bool] = None,
|
|
2439
2445
|
**kwargs: Any,
|
|
2440
2446
|
) -> Union[RunOutput, AsyncIterator[RunOutputEvent]]:
|
|
@@ -2559,6 +2565,8 @@ class Agent:
|
|
|
2559
2565
|
last_exception = None
|
|
2560
2566
|
num_attempts = retries + 1
|
|
2561
2567
|
|
|
2568
|
+
yield_run_output = yield_run_output or yield_run_response # For backwards compatibility
|
|
2569
|
+
|
|
2562
2570
|
for attempt in range(num_attempts):
|
|
2563
2571
|
try:
|
|
2564
2572
|
# Pass the new run_response to _arun
|
|
@@ -2569,7 +2577,7 @@ class Agent:
|
|
|
2569
2577
|
user_id=user_id,
|
|
2570
2578
|
response_format=response_format,
|
|
2571
2579
|
stream_events=stream_events,
|
|
2572
|
-
|
|
2580
|
+
yield_run_output=yield_run_output,
|
|
2573
2581
|
session_id=session_id,
|
|
2574
2582
|
add_history_to_context=add_history,
|
|
2575
2583
|
add_dependencies_to_context=add_dependencies,
|
|
@@ -3248,7 +3256,7 @@ class Agent:
|
|
|
3248
3256
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
3249
3257
|
metadata: Optional[Dict[str, Any]] = None,
|
|
3250
3258
|
debug_mode: Optional[bool] = None,
|
|
3251
|
-
|
|
3259
|
+
yield_run_output: bool = False,
|
|
3252
3260
|
**kwargs,
|
|
3253
3261
|
) -> Union[RunOutput, AsyncIterator[Union[RunOutputEvent, RunOutput]]]:
|
|
3254
3262
|
"""Continue a previous run.
|
|
@@ -3266,7 +3274,7 @@ class Agent:
|
|
|
3266
3274
|
dependencies: The dependencies to use for continuing the run.
|
|
3267
3275
|
metadata: The metadata to use for continuing the run.
|
|
3268
3276
|
debug_mode: Whether to enable debug mode.
|
|
3269
|
-
|
|
3277
|
+
yield_run_output: Whether to yield the run response.
|
|
3270
3278
|
(deprecated) stream_intermediate_steps: Whether to stream all steps.
|
|
3271
3279
|
"""
|
|
3272
3280
|
if run_response is None and run_id is None:
|
|
@@ -3351,7 +3359,7 @@ class Agent:
|
|
|
3351
3359
|
session_id=session_id,
|
|
3352
3360
|
response_format=response_format,
|
|
3353
3361
|
stream_events=stream_events,
|
|
3354
|
-
|
|
3362
|
+
yield_run_output=yield_run_output,
|
|
3355
3363
|
debug_mode=debug_mode,
|
|
3356
3364
|
**kwargs,
|
|
3357
3365
|
)
|
|
@@ -3620,7 +3628,7 @@ class Agent:
|
|
|
3620
3628
|
user_id: Optional[str] = None,
|
|
3621
3629
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
3622
3630
|
stream_events: bool = False,
|
|
3623
|
-
|
|
3631
|
+
yield_run_output: bool = False,
|
|
3624
3632
|
debug_mode: Optional[bool] = None,
|
|
3625
3633
|
**kwargs,
|
|
3626
3634
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]:
|
|
@@ -3860,7 +3868,7 @@ class Agent:
|
|
|
3860
3868
|
if stream_events:
|
|
3861
3869
|
yield completed_event # type: ignore
|
|
3862
3870
|
|
|
3863
|
-
if
|
|
3871
|
+
if yield_run_output:
|
|
3864
3872
|
yield run_response
|
|
3865
3873
|
|
|
3866
3874
|
# Log Agent Telemetry
|
|
@@ -38,6 +38,14 @@ class BaseDb(ABC):
|
|
|
38
38
|
self.eval_table_name = eval_table or "agno_eval_runs"
|
|
39
39
|
self.knowledge_table_name = knowledge_table or "agno_knowledge"
|
|
40
40
|
|
|
41
|
+
@abstractmethod
|
|
42
|
+
def table_exists(self, table_name: str) -> bool:
|
|
43
|
+
raise NotImplementedError
|
|
44
|
+
|
|
45
|
+
def _create_all_tables(self) -> None:
|
|
46
|
+
"""Create all tables for this database."""
|
|
47
|
+
pass
|
|
48
|
+
|
|
41
49
|
# --- Sessions ---
|
|
42
50
|
@abstractmethod
|
|
43
51
|
def delete_session(self, session_id: str) -> bool:
|
|
@@ -328,6 +336,21 @@ class AsyncBaseDb(ABC):
|
|
|
328
336
|
self.knowledge_table_name = knowledge_table or "agno_knowledge"
|
|
329
337
|
self.culture_table_name = culture_table or "agno_culture"
|
|
330
338
|
|
|
339
|
+
@abstractmethod
|
|
340
|
+
async def table_exists(self, table_name: str) -> bool:
|
|
341
|
+
"""Check if a table with the given name exists in this database.
|
|
342
|
+
|
|
343
|
+
Default implementation returns True if the table name is configured.
|
|
344
|
+
Subclasses should override this to perform actual existence checks.
|
|
345
|
+
|
|
346
|
+
Args:
|
|
347
|
+
table_name: Name of the table to check
|
|
348
|
+
|
|
349
|
+
Returns:
|
|
350
|
+
bool: True if the table exists, False otherwise
|
|
351
|
+
"""
|
|
352
|
+
raise NotImplementedError
|
|
353
|
+
|
|
331
354
|
# --- Sessions ---
|
|
332
355
|
@abstractmethod
|
|
333
356
|
async def delete_session(self, session_id: str) -> bool:
|
|
@@ -112,27 +112,8 @@ class DynamoDb(BaseDb):
|
|
|
112
112
|
session = boto3.Session(**session_kwargs)
|
|
113
113
|
self.client = session.client("dynamodb")
|
|
114
114
|
|
|
115
|
-
def
|
|
116
|
-
|
|
117
|
-
(self.session_table_name, "sessions"),
|
|
118
|
-
(self.memory_table_name, "memories"),
|
|
119
|
-
(self.metrics_table_name, "metrics"),
|
|
120
|
-
(self.eval_table_name, "evals"),
|
|
121
|
-
(self.knowledge_table_name, "knowledge_sources"),
|
|
122
|
-
]
|
|
123
|
-
|
|
124
|
-
for table_name, table_type in tables_to_create:
|
|
125
|
-
if table_name:
|
|
126
|
-
try:
|
|
127
|
-
schema = get_table_schema_definition(table_type)
|
|
128
|
-
schema["TableName"] = table_name
|
|
129
|
-
create_table_if_not_exists(self.client, table_name, schema)
|
|
130
|
-
|
|
131
|
-
except Exception as e:
|
|
132
|
-
log_error(f"Failed to create table {table_name}: {e}")
|
|
133
|
-
|
|
134
|
-
def _table_exists(self, table_name: str) -> bool:
|
|
135
|
-
"""Check if a DynamoDB table with the given name exists.
|
|
115
|
+
def table_exists(self, table_name: str) -> bool:
|
|
116
|
+
"""Check if a DynamoDB table exists.
|
|
136
117
|
|
|
137
118
|
Args:
|
|
138
119
|
table_name: The name of the table to check
|
|
@@ -145,9 +126,23 @@ class DynamoDb(BaseDb):
|
|
|
145
126
|
return True
|
|
146
127
|
except self.client.exceptions.ResourceNotFoundException:
|
|
147
128
|
return False
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
129
|
+
|
|
130
|
+
def _create_all_tables(self):
|
|
131
|
+
"""Create all configured DynamoDB tables if they don't exist."""
|
|
132
|
+
tables_to_create = [
|
|
133
|
+
("sessions", self.session_table_name),
|
|
134
|
+
("memories", self.memory_table_name),
|
|
135
|
+
("metrics", self.metrics_table_name),
|
|
136
|
+
("evals", self.eval_table_name),
|
|
137
|
+
("knowledge", self.knowledge_table_name),
|
|
138
|
+
("culture", self.culture_table_name),
|
|
139
|
+
]
|
|
140
|
+
|
|
141
|
+
for table_type, table_name in tables_to_create:
|
|
142
|
+
if not self.table_exists(table_name):
|
|
143
|
+
schema = get_table_schema_definition(table_type)
|
|
144
|
+
schema["TableName"] = table_name
|
|
145
|
+
create_table_if_not_exists(self.client, table_name, schema)
|
|
151
146
|
|
|
152
147
|
def _get_table(self, table_type: str, create_table_if_not_found: Optional[bool] = True) -> Optional[str]:
|
|
153
148
|
"""
|
|
@@ -180,7 +175,7 @@ class DynamoDb(BaseDb):
|
|
|
180
175
|
raise ValueError(f"Unknown table type: {table_type}")
|
|
181
176
|
|
|
182
177
|
# Check if table exists, create if it doesn't
|
|
183
|
-
if not self.
|
|
178
|
+
if not self.table_exists(table_name) and create_table_if_not_found:
|
|
184
179
|
schema = get_table_schema_definition(table_type)
|
|
185
180
|
schema["TableName"] = table_name
|
|
186
181
|
create_table_if_not_exists(self.client, table_name, schema)
|
|
@@ -176,6 +176,7 @@ KNOWLEDGE_TABLE_SCHEMA = {
|
|
|
176
176
|
"KeySchema": [{"AttributeName": "id", "KeyType": "HASH"}],
|
|
177
177
|
"AttributeDefinitions": [
|
|
178
178
|
{"AttributeName": "id", "AttributeType": "S"},
|
|
179
|
+
{"AttributeName": "user_id", "AttributeType": "S"},
|
|
179
180
|
{"AttributeName": "type", "AttributeType": "S"},
|
|
180
181
|
{"AttributeName": "status", "AttributeType": "S"},
|
|
181
182
|
{"AttributeName": "created_at", "AttributeType": "N"},
|
|
@@ -89,6 +89,17 @@ class FirestoreDb(BaseDb):
|
|
|
89
89
|
|
|
90
90
|
# -- DB methods --
|
|
91
91
|
|
|
92
|
+
def table_exists(self, table_name: str) -> bool:
|
|
93
|
+
"""Check if a collection with the given name exists in the Firestore database.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
table_name: Name of the collection to check
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
bool: True if the collection exists in the database, False otherwise
|
|
100
|
+
"""
|
|
101
|
+
return table_name in self.db_client.list_collections()
|
|
102
|
+
|
|
92
103
|
def _get_collection(self, table_type: str, create_collection_if_not_found: Optional[bool] = True):
|
|
93
104
|
"""Get or create a collection based on table type.
|
|
94
105
|
|
|
@@ -83,6 +83,10 @@ class GcsJsonDb(BaseDb):
|
|
|
83
83
|
self.client = gcs.Client(project=project, credentials=credentials)
|
|
84
84
|
self.bucket = self.client.bucket(self.bucket_name)
|
|
85
85
|
|
|
86
|
+
def table_exists(self, table_name: str) -> bool:
|
|
87
|
+
"""JSON implementation, always returns True."""
|
|
88
|
+
return True
|
|
89
|
+
|
|
86
90
|
def _get_blob_name(self, filename: str) -> str:
|
|
87
91
|
"""Get the full blob name including prefix for a given filename."""
|
|
88
92
|
return f"{self.prefix}{filename}.json"
|
|
@@ -34,6 +34,10 @@ class InMemoryDb(BaseDb):
|
|
|
34
34
|
self._knowledge: List[Dict[str, Any]] = []
|
|
35
35
|
self._cultural_knowledge: List[Dict[str, Any]] = []
|
|
36
36
|
|
|
37
|
+
def table_exists(self, table_name: str) -> bool:
|
|
38
|
+
"""In-memory implementation, always returns True."""
|
|
39
|
+
return True
|
|
40
|
+
|
|
37
41
|
# -- Session methods --
|
|
38
42
|
|
|
39
43
|
def delete_session(self, session_id: str) -> bool:
|
|
@@ -66,6 +66,10 @@ class JsonDb(BaseDb):
|
|
|
66
66
|
# Create the directory where the JSON files will be stored, if it doesn't exist
|
|
67
67
|
self.db_path = Path(db_path or os.path.join(os.getcwd(), "agno_json_db"))
|
|
68
68
|
|
|
69
|
+
def table_exists(self, table_name: str) -> bool:
|
|
70
|
+
"""JSON implementation, always returns True."""
|
|
71
|
+
return True
|
|
72
|
+
|
|
69
73
|
def _read_json_file(self, filename: str, create_table_if_not_found: Optional[bool] = True) -> List[Dict[str, Any]]:
|
|
70
74
|
"""Read data from a JSON file, creating it if it doesn't exist.
|
|
71
75
|
|
|
@@ -99,6 +99,33 @@ class AsyncMongoDb(AsyncBaseDb):
|
|
|
99
99
|
self._database: Optional[AsyncIOMotorDatabase] = None
|
|
100
100
|
self._event_loop: Optional[asyncio.AbstractEventLoop] = None
|
|
101
101
|
|
|
102
|
+
async def table_exists(self, table_name: str) -> bool:
|
|
103
|
+
"""Check if a collection with the given name exists in the MongoDB database.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
table_name: Name of the collection to check
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
bool: True if the collection exists in the database, False otherwise
|
|
110
|
+
"""
|
|
111
|
+
collection_names = await self.database.list_collection_names()
|
|
112
|
+
return table_name in collection_names
|
|
113
|
+
|
|
114
|
+
async def _create_all_tables(self):
|
|
115
|
+
"""Create all configured MongoDB collections if they don't exist."""
|
|
116
|
+
collections_to_create = [
|
|
117
|
+
("sessions", self.session_table_name),
|
|
118
|
+
("memories", self.memory_table_name),
|
|
119
|
+
("metrics", self.metrics_table_name),
|
|
120
|
+
("evals", self.eval_table_name),
|
|
121
|
+
("knowledge", self.knowledge_table_name),
|
|
122
|
+
("culture", self.culture_table_name),
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
for collection_type, collection_name in collections_to_create:
|
|
126
|
+
if collection_name and not await self.table_exists(collection_name):
|
|
127
|
+
await self._get_collection(collection_type, create_collection_if_not_found=True)
|
|
128
|
+
|
|
102
129
|
def _ensure_client(self) -> AsyncIOMotorClient:
|
|
103
130
|
"""
|
|
104
131
|
Ensure the Motor client is valid for the current event loop.
|
|
@@ -100,6 +100,31 @@ class MongoDb(BaseDb):
|
|
|
100
100
|
return self._database
|
|
101
101
|
|
|
102
102
|
# -- DB methods --
|
|
103
|
+
def table_exists(self, table_name: str) -> bool:
|
|
104
|
+
"""Check if a collection with the given name exists in the MongoDB database.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
table_name: Name of the collection to check
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
bool: True if the collection exists in the database, False otherwise
|
|
111
|
+
"""
|
|
112
|
+
return table_name in self.database.list_collection_names()
|
|
113
|
+
|
|
114
|
+
def _create_all_tables(self):
|
|
115
|
+
"""Create all configured MongoDB collections if they don't exist."""
|
|
116
|
+
collections_to_create = [
|
|
117
|
+
("sessions", self.session_table_name),
|
|
118
|
+
("memories", self.memory_table_name),
|
|
119
|
+
("metrics", self.metrics_table_name),
|
|
120
|
+
("evals", self.eval_table_name),
|
|
121
|
+
("knowledge", self.knowledge_table_name),
|
|
122
|
+
("culture", self.culture_table_name),
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
for collection_type, collection_name in collections_to_create:
|
|
126
|
+
if collection_name and not self.table_exists(collection_name):
|
|
127
|
+
self._get_collection(collection_type, create_collection_if_not_found=True)
|
|
103
128
|
|
|
104
129
|
def _get_collection(
|
|
105
130
|
self, table_type: str, create_collection_if_not_found: Optional[bool] = True
|
|
@@ -107,6 +107,18 @@ class MySQLDb(BaseDb):
|
|
|
107
107
|
self.Session: scoped_session = scoped_session(sessionmaker(bind=self.db_engine))
|
|
108
108
|
|
|
109
109
|
# -- DB methods --
|
|
110
|
+
def table_exists(self, table_name: str) -> bool:
|
|
111
|
+
"""Check if a table with the given name exists in the MySQL database.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
table_name: Name of the table to check
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
bool: True if the table exists in the database, False otherwise
|
|
118
|
+
"""
|
|
119
|
+
with self.Session() as sess:
|
|
120
|
+
return is_table_available(session=sess, table_name=table_name, db_schema=self.db_schema)
|
|
121
|
+
|
|
110
122
|
def _create_table(self, table_name: str, table_type: str, db_schema: str) -> Table:
|
|
111
123
|
"""
|
|
112
124
|
Create a table with the appropriate schema based on the table type.
|
|
@@ -191,13 +203,26 @@ class MySQLDb(BaseDb):
|
|
|
191
203
|
except Exception as e:
|
|
192
204
|
log_error(f"Error creating index {idx.name}: {e}")
|
|
193
205
|
|
|
194
|
-
|
|
206
|
+
log_debug(f"Successfully created table {db_schema}.{table_name}")
|
|
195
207
|
return table
|
|
196
208
|
|
|
197
209
|
except Exception as e:
|
|
198
210
|
log_error(f"Could not create table {db_schema}.{table_name}: {e}")
|
|
199
211
|
raise
|
|
200
212
|
|
|
213
|
+
def _create_all_tables(self):
|
|
214
|
+
"""Create all tables for the database."""
|
|
215
|
+
tables_to_create = [
|
|
216
|
+
(self.session_table_name, "sessions"),
|
|
217
|
+
(self.memory_table_name, "memories"),
|
|
218
|
+
(self.metrics_table_name, "metrics"),
|
|
219
|
+
(self.eval_table_name, "evals"),
|
|
220
|
+
(self.knowledge_table_name, "knowledge"),
|
|
221
|
+
]
|
|
222
|
+
|
|
223
|
+
for table_name, table_type in tables_to_create:
|
|
224
|
+
self._create_table(table_name=table_name, table_type=table_type, db_schema=self.db_schema)
|
|
225
|
+
|
|
201
226
|
def _get_table(self, table_type: str, create_table_if_not_found: Optional[bool] = False) -> Optional[Table]:
|
|
202
227
|
if table_type == "sessions":
|
|
203
228
|
self.session_table = self._get_or_create_table(
|
|
@@ -102,6 +102,31 @@ class AsyncPostgresDb(AsyncBaseDb):
|
|
|
102
102
|
self.async_session_factory = async_sessionmaker(bind=self.db_engine)
|
|
103
103
|
|
|
104
104
|
# -- DB methods --
|
|
105
|
+
async def table_exists(self, table_name: str) -> bool:
|
|
106
|
+
"""Check if a table with the given name exists in the Postgres database.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
table_name: Name of the table to check
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
bool: True if the table exists in the database, False otherwise
|
|
113
|
+
"""
|
|
114
|
+
async with self.async_session_factory() as sess:
|
|
115
|
+
return await ais_table_available(session=sess, table_name=table_name, db_schema=self.db_schema)
|
|
116
|
+
|
|
117
|
+
async def _create_all_tables(self):
|
|
118
|
+
"""Create all tables for the database."""
|
|
119
|
+
tables_to_create = [
|
|
120
|
+
(self.session_table_name, "sessions"),
|
|
121
|
+
(self.memory_table_name, "memories"),
|
|
122
|
+
(self.metrics_table_name, "metrics"),
|
|
123
|
+
(self.eval_table_name, "evals"),
|
|
124
|
+
(self.knowledge_table_name, "knowledge"),
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
for table_name, table_type in tables_to_create:
|
|
128
|
+
await self._create_table(table_name=table_name, table_type=table_type, db_schema=self.db_schema)
|
|
129
|
+
|
|
105
130
|
async def _create_table(self, table_name: str, table_type: str, db_schema: str) -> Table:
|
|
106
131
|
"""
|
|
107
132
|
Create a table with the appropriate schema based on the table type.
|
|
@@ -180,7 +205,7 @@ class AsyncPostgresDb(AsyncBaseDb):
|
|
|
180
205
|
except Exception as e:
|
|
181
206
|
log_error(f"Error creating index {idx.name}: {e}")
|
|
182
207
|
|
|
183
|
-
|
|
208
|
+
log_debug(f"Successfully created table {table_name} in schema {db_schema}")
|
|
184
209
|
return table
|
|
185
210
|
|
|
186
211
|
except Exception as e:
|
|
@@ -106,6 +106,31 @@ class PostgresDb(BaseDb):
|
|
|
106
106
|
self.Session: scoped_session = scoped_session(sessionmaker(bind=self.db_engine))
|
|
107
107
|
|
|
108
108
|
# -- DB methods --
|
|
109
|
+
def table_exists(self, table_name: str) -> bool:
|
|
110
|
+
"""Check if a table with the given name exists in the Postgres database.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
table_name: Name of the table to check
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
bool: True if the table exists in the database, False otherwise
|
|
117
|
+
"""
|
|
118
|
+
with self.Session() as sess:
|
|
119
|
+
return is_table_available(session=sess, table_name=table_name, db_schema=self.db_schema)
|
|
120
|
+
|
|
121
|
+
def _create_all_tables(self):
|
|
122
|
+
"""Create all tables for the database."""
|
|
123
|
+
tables_to_create = [
|
|
124
|
+
(self.session_table_name, "sessions"),
|
|
125
|
+
(self.memory_table_name, "memories"),
|
|
126
|
+
(self.metrics_table_name, "metrics"),
|
|
127
|
+
(self.eval_table_name, "evals"),
|
|
128
|
+
(self.knowledge_table_name, "knowledge"),
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
for table_name, table_type in tables_to_create:
|
|
132
|
+
self._create_table(table_name=table_name, table_type=table_type, db_schema=self.db_schema)
|
|
133
|
+
|
|
109
134
|
def _create_table(self, table_name: str, table_type: str, db_schema: str) -> Table:
|
|
110
135
|
"""
|
|
111
136
|
Create a table with the appropriate schema based on the table type.
|
|
@@ -184,7 +209,7 @@ class PostgresDb(BaseDb):
|
|
|
184
209
|
except Exception as e:
|
|
185
210
|
log_error(f"Error creating index {idx.name}: {e}")
|
|
186
211
|
|
|
187
|
-
|
|
212
|
+
log_debug(f"Successfully created table {table_name} in schema {db_schema}")
|
|
188
213
|
return table
|
|
189
214
|
|
|
190
215
|
except Exception as e:
|
|
@@ -100,6 +100,10 @@ class RedisDb(BaseDb):
|
|
|
100
100
|
|
|
101
101
|
# -- DB methods --
|
|
102
102
|
|
|
103
|
+
def table_exists(self, table_name: str) -> bool:
|
|
104
|
+
"""Redis implementation, always returns True."""
|
|
105
|
+
return True
|
|
106
|
+
|
|
103
107
|
def _get_table_name(self, table_type: str) -> str:
|
|
104
108
|
"""Get the active table name for the given table type."""
|
|
105
109
|
if table_type == "sessions":
|