agno 2.2.8__tar.gz → 2.2.10__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.10}/PKG-INFO +11 -13
- {agno-2.2.8 → agno-2.2.10}/README.md +10 -10
- {agno-2.2.8 → agno-2.2.10}/agno/agent/agent.py +37 -19
- {agno-2.2.8 → agno-2.2.10}/agno/db/base.py +23 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/dynamo/dynamo.py +20 -25
- {agno-2.2.8 → agno-2.2.10}/agno/db/dynamo/schemas.py +1 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/firestore/firestore.py +11 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/gcs_json/gcs_json_db.py +4 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/in_memory/in_memory_db.py +4 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/json/json_db.py +4 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mongo/async_mongo.py +27 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mongo/mongo.py +25 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mysql/mysql.py +26 -1
- {agno-2.2.8 → agno-2.2.10}/agno/db/postgres/async_postgres.py +26 -1
- {agno-2.2.8 → agno-2.2.10}/agno/db/postgres/postgres.py +26 -1
- {agno-2.2.8 → agno-2.2.10}/agno/db/redis/redis.py +4 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/singlestore/singlestore.py +24 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/sqlite/async_sqlite.py +25 -1
- {agno-2.2.8 → agno-2.2.10}/agno/db/sqlite/sqlite.py +25 -1
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/surrealdb.py +13 -1
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/docx_reader.py +0 -1
- {agno-2.2.8 → agno-2.2.10}/agno/models/azure/ai_foundry.py +2 -1
- {agno-2.2.8 → agno-2.2.10}/agno/models/cerebras/cerebras.py +3 -2
- {agno-2.2.8 → agno-2.2.10}/agno/models/openai/chat.py +2 -1
- {agno-2.2.8 → agno-2.2.10}/agno/models/openai/responses.py +2 -1
- {agno-2.2.8 → agno-2.2.10}/agno/os/app.py +127 -65
- {agno-2.2.8 → agno-2.2.10}/agno/os/config.py +1 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/agui/router.py +9 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/agui/utils.py +49 -3
- {agno-2.2.8 → agno-2.2.10}/agno/os/mcp.py +8 -8
- {agno-2.2.8 → agno-2.2.10}/agno/os/router.py +27 -9
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/evals/evals.py +12 -7
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/memory/memory.py +18 -10
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/metrics/metrics.py +6 -4
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/session/session.py +21 -11
- {agno-2.2.8 → agno-2.2.10}/agno/os/utils.py +57 -11
- {agno-2.2.8 → agno-2.2.10}/agno/team/team.py +33 -23
- agno-2.2.10/agno/vectordb/mongodb/__init__.py +9 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/redis/__init__.py +4 -0
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/agent.py +2 -2
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/condition.py +26 -4
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/loop.py +9 -0
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/parallel.py +39 -16
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/router.py +25 -4
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/step.py +162 -91
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/steps.py +9 -0
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/workflow.py +26 -22
- {agno-2.2.8 → agno-2.2.10}/agno.egg-info/PKG-INFO +11 -13
- {agno-2.2.8 → agno-2.2.10}/agno.egg-info/requires.txt +0 -3
- {agno-2.2.8 → agno-2.2.10}/pyproject.toml +1 -2
- agno-2.2.8/agno/vectordb/mongodb/__init__.py +0 -3
- {agno-2.2.8 → agno-2.2.10}/LICENSE +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/agent/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/api.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/os.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/routes.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/os.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/response.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/schemas/workflows.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/settings.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/api/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/cloud/aws/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/culture/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/culture/manager.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/dynamo/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/firestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/firestore/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/firestore/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/in_memory/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/json/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/json/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/migrations/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mongo/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mongo/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mongo/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mysql/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mysql/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/mysql/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/postgres/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/postgres/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/postgres/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/redis/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/redis/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/redis/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/culture.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/evals.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/memory.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/schemas/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/singlestore/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/sqlite/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/models.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/db/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/debug.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/eval/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/eval/accuracy.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/eval/performance.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/eval/reliability.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/eval/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/exceptions.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/guardrails/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/guardrails/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/guardrails/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/guardrails/pii.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/integrations/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/integrations/discord/client.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/content.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/document/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/types.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/knowledge/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/media.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/memory/manager.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/anthropic/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/aws/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/aws/bedrock.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/aws/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/azure/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cohere/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cohere/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/defaults.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/google/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/google/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/groq/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/groq/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/ibm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/internlm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/internlm/internlm.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/langdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/langdb/langdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/litellm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/litellm/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/message.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/meta/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/meta/llama.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/metrics.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/mistral/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/mistral/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nebius/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nebius/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nexus/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nexus/nexus.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/ollama/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/ollama/chat.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/openai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/openai/like.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/portkey/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/portkey/portkey.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/requesty/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/requesty/requesty.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/response.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/together/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/together/together.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vercel/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vercel/v0.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vertexai/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vllm/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/vllm/vllm.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/xai/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/models/xai/xai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/auth.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/middleware/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/middleware/jwt.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/health.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/home.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/schema.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/os/settings.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/py.typed +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/anthropic.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/deepseek.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/default.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/helpers.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/ollama.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/step.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/reasoning/vertexai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/cancel.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/messages.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/run/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/session/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/session/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/session/summary.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/session/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/session/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/team/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/agentql.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/airflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/api.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/apify.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/arxiv.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/aws_lambda.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/aws_ses.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/baidusearch.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/bitbucket.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/brandfetch.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/bravesearch.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/brightdata.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/browserbase.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/calcom.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/calculator.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/cartesia.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/clickup.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/confluence.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/crawl4ai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/dalle.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/daytona.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/decorator.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/desi_vocal.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/discord.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/docker.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/duckdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/duckduckgo.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/e2b.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/eleven_labs.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/email.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/evm.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/exa.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/fal.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/file.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/file_generation.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/financial_datasets.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/firecrawl.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/function.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/giphy.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/github.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/gmail.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/google_bigquery.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/google_drive.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/google_maps.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/googlecalendar.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/googlesearch.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/googlesheets.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/hackernews.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/jina.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/jira.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/linear.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/linkup.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/local_file_system.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/lumalab.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mcp/params.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mem0.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/memori.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/memory.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/groq.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/morph.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models/nebius.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/models_labs.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/moviepy_video.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/neo4j.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/newspaper.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/newspaper4k.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/notion.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/openbb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/opencv.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/openweather.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/oxylabs.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/pandas.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/postgres.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/pubmed.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/python.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/reasoning.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/reddit.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/replicate.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/resend.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/scrapegraph.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/searxng.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/serpapi.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/serper.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/shell.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/slack.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/sleep.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/spider.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/sql.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/streamlit/components.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/tavily.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/telegram.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/todoist.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/tool_registry.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/toolkit.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/trafilatura.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/trello.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/twilio.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/user_control_flow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/valyu.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/visualization.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/webbrowser.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/webex.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/website.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/webtools.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/wikipedia.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/x.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/yfinance.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/youtube.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/zendesk.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/zep.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/tools/zoom.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/audio.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/certs.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/code_execution.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/common.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/dttm.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/enum.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/env.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/events.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/format_str.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/functions.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/gemini.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/hooks.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/http.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/json_schema.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/knowledge.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/location.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/log.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/mcp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/media.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/merge_dict.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/message.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/claude.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/cohere.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/llama.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/mistral.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/models/watsonx.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/openai.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/pickle.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/pprint.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/print_response/agent.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/print_response/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/prompts.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/reasoning.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/response.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/response_iterator.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/safe_formatter.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/serialize.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/shell.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/streamlit.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/string.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/team.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/timer.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/tools.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/web.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/whatsapp.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/utils/yaml_io.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/base.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/distance.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/search.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/__init__.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno/workflow/types.py +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno.egg-info/SOURCES.txt +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.2.8 → agno-2.2.10}/agno.egg-info/top_level.txt +0 -0
- {agno-2.2.8 → agno-2.2.10}/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.10
|
|
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
|
|
@@ -1454,6 +1454,7 @@ class Agent:
|
|
|
1454
1454
|
user_id: Optional[str] = None,
|
|
1455
1455
|
session_id: Optional[str] = None,
|
|
1456
1456
|
session_state: Optional[Dict[str, Any]] = None,
|
|
1457
|
+
run_context: Optional[RunContext] = None,
|
|
1457
1458
|
audio: Optional[Sequence[Audio]] = None,
|
|
1458
1459
|
images: Optional[Sequence[Image]] = None,
|
|
1459
1460
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -1480,6 +1481,7 @@ class Agent:
|
|
|
1480
1481
|
user_id: Optional[str] = None,
|
|
1481
1482
|
session_id: Optional[str] = None,
|
|
1482
1483
|
session_state: Optional[Dict[str, Any]] = None,
|
|
1484
|
+
run_context: Optional[RunContext] = None,
|
|
1483
1485
|
audio: Optional[Sequence[Audio]] = None,
|
|
1484
1486
|
images: Optional[Sequence[Image]] = None,
|
|
1485
1487
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -1491,7 +1493,8 @@ class Agent:
|
|
|
1491
1493
|
add_session_state_to_context: Optional[bool] = None,
|
|
1492
1494
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
1493
1495
|
metadata: Optional[Dict[str, Any]] = None,
|
|
1494
|
-
yield_run_response: bool = False,
|
|
1496
|
+
yield_run_response: bool = False, # To be deprecated: use yield_run_output instead
|
|
1497
|
+
yield_run_output: bool = False,
|
|
1495
1498
|
debug_mode: Optional[bool] = None,
|
|
1496
1499
|
**kwargs: Any,
|
|
1497
1500
|
) -> Iterator[Union[RunOutputEvent, RunOutput]]: ...
|
|
@@ -1506,6 +1509,7 @@ class Agent:
|
|
|
1506
1509
|
user_id: Optional[str] = None,
|
|
1507
1510
|
session_id: Optional[str] = None,
|
|
1508
1511
|
session_state: Optional[Dict[str, Any]] = None,
|
|
1512
|
+
run_context: Optional[RunContext] = None,
|
|
1509
1513
|
audio: Optional[Sequence[Audio]] = None,
|
|
1510
1514
|
images: Optional[Sequence[Image]] = None,
|
|
1511
1515
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -1517,7 +1521,8 @@ class Agent:
|
|
|
1517
1521
|
add_session_state_to_context: Optional[bool] = None,
|
|
1518
1522
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
1519
1523
|
metadata: Optional[Dict[str, Any]] = None,
|
|
1520
|
-
yield_run_response: bool =
|
|
1524
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
1525
|
+
yield_run_output: Optional[bool] = None,
|
|
1521
1526
|
debug_mode: Optional[bool] = None,
|
|
1522
1527
|
**kwargs: Any,
|
|
1523
1528
|
) -> Union[RunOutput, Iterator[Union[RunOutputEvent, RunOutput]]]:
|
|
@@ -1579,7 +1584,7 @@ class Agent:
|
|
|
1579
1584
|
dependencies = dependencies if dependencies is not None else self.dependencies
|
|
1580
1585
|
|
|
1581
1586
|
# Initialize run context
|
|
1582
|
-
run_context = RunContext(
|
|
1587
|
+
run_context = run_context or RunContext(
|
|
1583
1588
|
run_id=run_id,
|
|
1584
1589
|
session_id=session_id,
|
|
1585
1590
|
user_id=user_id,
|
|
@@ -1655,6 +1660,8 @@ class Agent:
|
|
|
1655
1660
|
last_exception = None
|
|
1656
1661
|
num_attempts = retries + 1
|
|
1657
1662
|
|
|
1663
|
+
yield_run_output = yield_run_output or yield_run_response # For backwards compatibility
|
|
1664
|
+
|
|
1658
1665
|
for attempt in range(num_attempts):
|
|
1659
1666
|
try:
|
|
1660
1667
|
if stream:
|
|
@@ -1668,7 +1675,7 @@ class Agent:
|
|
|
1668
1675
|
add_session_state_to_context=add_session_state,
|
|
1669
1676
|
response_format=response_format,
|
|
1670
1677
|
stream_events=stream_events,
|
|
1671
|
-
|
|
1678
|
+
yield_run_output=yield_run_output,
|
|
1672
1679
|
debug_mode=debug_mode,
|
|
1673
1680
|
**kwargs,
|
|
1674
1681
|
)
|
|
@@ -2009,7 +2016,7 @@ class Agent:
|
|
|
2009
2016
|
add_session_state_to_context: Optional[bool] = None,
|
|
2010
2017
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2011
2018
|
stream_events: bool = False,
|
|
2012
|
-
|
|
2019
|
+
yield_run_output: Optional[bool] = None,
|
|
2013
2020
|
debug_mode: Optional[bool] = None,
|
|
2014
2021
|
**kwargs: Any,
|
|
2015
2022
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]:
|
|
@@ -2307,7 +2314,7 @@ class Agent:
|
|
|
2307
2314
|
if stream_events:
|
|
2308
2315
|
yield completed_event # type: ignore
|
|
2309
2316
|
|
|
2310
|
-
if
|
|
2317
|
+
if yield_run_output:
|
|
2311
2318
|
yield run_response
|
|
2312
2319
|
|
|
2313
2320
|
# Log Agent Telemetry
|
|
@@ -2370,6 +2377,7 @@ class Agent:
|
|
|
2370
2377
|
user_id: Optional[str] = None,
|
|
2371
2378
|
session_id: Optional[str] = None,
|
|
2372
2379
|
session_state: Optional[Dict[str, Any]] = None,
|
|
2380
|
+
run_context: Optional[RunContext] = None,
|
|
2373
2381
|
audio: Optional[Sequence[Audio]] = None,
|
|
2374
2382
|
images: Optional[Sequence[Image]] = None,
|
|
2375
2383
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -2395,6 +2403,7 @@ class Agent:
|
|
|
2395
2403
|
stream: Literal[True] = True,
|
|
2396
2404
|
user_id: Optional[str] = None,
|
|
2397
2405
|
session_id: Optional[str] = None,
|
|
2406
|
+
run_context: Optional[RunContext] = None,
|
|
2398
2407
|
audio: Optional[Sequence[Audio]] = None,
|
|
2399
2408
|
images: Optional[Sequence[Image]] = None,
|
|
2400
2409
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -2408,7 +2417,8 @@ class Agent:
|
|
|
2408
2417
|
add_session_state_to_context: Optional[bool] = None,
|
|
2409
2418
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2410
2419
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2411
|
-
yield_run_response: Optional[bool] = None,
|
|
2420
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
2421
|
+
yield_run_output: Optional[bool] = None,
|
|
2412
2422
|
debug_mode: Optional[bool] = None,
|
|
2413
2423
|
**kwargs: Any,
|
|
2414
2424
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]: ...
|
|
@@ -2421,6 +2431,7 @@ class Agent:
|
|
|
2421
2431
|
user_id: Optional[str] = None,
|
|
2422
2432
|
session_id: Optional[str] = None,
|
|
2423
2433
|
session_state: Optional[Dict[str, Any]] = None,
|
|
2434
|
+
run_context: Optional[RunContext] = None,
|
|
2424
2435
|
audio: Optional[Sequence[Audio]] = None,
|
|
2425
2436
|
images: Optional[Sequence[Image]] = None,
|
|
2426
2437
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -2434,7 +2445,8 @@ class Agent:
|
|
|
2434
2445
|
add_session_state_to_context: Optional[bool] = None,
|
|
2435
2446
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2436
2447
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2437
|
-
yield_run_response: Optional[bool] = None,
|
|
2448
|
+
yield_run_response: Optional[bool] = None, # To be deprecated: use yield_run_output instead
|
|
2449
|
+
yield_run_output: Optional[bool] = None,
|
|
2438
2450
|
debug_mode: Optional[bool] = None,
|
|
2439
2451
|
**kwargs: Any,
|
|
2440
2452
|
) -> Union[RunOutput, AsyncIterator[RunOutputEvent]]:
|
|
@@ -2524,7 +2536,7 @@ class Agent:
|
|
|
2524
2536
|
merge_dictionaries(metadata, self.metadata)
|
|
2525
2537
|
|
|
2526
2538
|
# Initialize run context
|
|
2527
|
-
run_context = RunContext(
|
|
2539
|
+
run_context = run_context or RunContext(
|
|
2528
2540
|
run_id=run_id,
|
|
2529
2541
|
session_id=session_id,
|
|
2530
2542
|
user_id=user_id,
|
|
@@ -2559,6 +2571,8 @@ class Agent:
|
|
|
2559
2571
|
last_exception = None
|
|
2560
2572
|
num_attempts = retries + 1
|
|
2561
2573
|
|
|
2574
|
+
yield_run_output = yield_run_output or yield_run_response # For backwards compatibility
|
|
2575
|
+
|
|
2562
2576
|
for attempt in range(num_attempts):
|
|
2563
2577
|
try:
|
|
2564
2578
|
# Pass the new run_response to _arun
|
|
@@ -2569,7 +2583,7 @@ class Agent:
|
|
|
2569
2583
|
user_id=user_id,
|
|
2570
2584
|
response_format=response_format,
|
|
2571
2585
|
stream_events=stream_events,
|
|
2572
|
-
|
|
2586
|
+
yield_run_output=yield_run_output,
|
|
2573
2587
|
session_id=session_id,
|
|
2574
2588
|
add_history_to_context=add_history,
|
|
2575
2589
|
add_dependencies_to_context=add_dependencies,
|
|
@@ -2684,6 +2698,7 @@ class Agent:
|
|
|
2684
2698
|
stream_intermediate_steps: Optional[bool] = None,
|
|
2685
2699
|
user_id: Optional[str] = None,
|
|
2686
2700
|
session_id: Optional[str] = None,
|
|
2701
|
+
run_context: Optional[RunContext] = None,
|
|
2687
2702
|
retries: Optional[int] = None,
|
|
2688
2703
|
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2689
2704
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
@@ -2701,6 +2716,7 @@ class Agent:
|
|
|
2701
2716
|
stream_events: Whether to stream all events.
|
|
2702
2717
|
user_id: The user id to continue the run for.
|
|
2703
2718
|
session_id: The session id to continue the run for.
|
|
2719
|
+
run_context: The run context to use for the run.
|
|
2704
2720
|
retries: The number of retries to continue the run for.
|
|
2705
2721
|
knowledge_filters: The knowledge filters to use for the run.
|
|
2706
2722
|
dependencies: The dependencies to use for the run.
|
|
@@ -2741,7 +2757,7 @@ class Agent:
|
|
|
2741
2757
|
dependencies = dependencies if dependencies is not None else self.dependencies
|
|
2742
2758
|
|
|
2743
2759
|
# Initialize run context
|
|
2744
|
-
run_context = RunContext(
|
|
2760
|
+
run_context = run_context or RunContext(
|
|
2745
2761
|
run_id=run_id, # type: ignore
|
|
2746
2762
|
session_id=session_id,
|
|
2747
2763
|
user_id=user_id,
|
|
@@ -3243,12 +3259,13 @@ class Agent:
|
|
|
3243
3259
|
stream_intermediate_steps: Optional[bool] = None,
|
|
3244
3260
|
user_id: Optional[str] = None,
|
|
3245
3261
|
session_id: Optional[str] = None,
|
|
3262
|
+
run_context: Optional[RunContext] = None,
|
|
3246
3263
|
retries: Optional[int] = None,
|
|
3247
3264
|
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
3248
3265
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
3249
3266
|
metadata: Optional[Dict[str, Any]] = None,
|
|
3250
3267
|
debug_mode: Optional[bool] = None,
|
|
3251
|
-
|
|
3268
|
+
yield_run_output: bool = False,
|
|
3252
3269
|
**kwargs,
|
|
3253
3270
|
) -> Union[RunOutput, AsyncIterator[Union[RunOutputEvent, RunOutput]]]:
|
|
3254
3271
|
"""Continue a previous run.
|
|
@@ -3261,12 +3278,13 @@ class Agent:
|
|
|
3261
3278
|
stream_events: Whether to stream all events.
|
|
3262
3279
|
user_id: The user id to continue the run for.
|
|
3263
3280
|
session_id: The session id to continue the run for.
|
|
3281
|
+
run_context: The run context to use for the run.
|
|
3264
3282
|
retries: The number of retries to continue the run for.
|
|
3265
3283
|
knowledge_filters: The knowledge filters to use for the run.
|
|
3266
3284
|
dependencies: The dependencies to use for continuing the run.
|
|
3267
3285
|
metadata: The metadata to use for continuing the run.
|
|
3268
3286
|
debug_mode: Whether to enable debug mode.
|
|
3269
|
-
|
|
3287
|
+
yield_run_output: Whether to yield the run response.
|
|
3270
3288
|
(deprecated) stream_intermediate_steps: Whether to stream all steps.
|
|
3271
3289
|
"""
|
|
3272
3290
|
if run_response is None and run_id is None:
|
|
@@ -3327,7 +3345,7 @@ class Agent:
|
|
|
3327
3345
|
self.model = cast(Model, self.model)
|
|
3328
3346
|
|
|
3329
3347
|
# Initialize run context
|
|
3330
|
-
run_context = RunContext(
|
|
3348
|
+
run_context = run_context or RunContext(
|
|
3331
3349
|
run_id=run_id, # type: ignore
|
|
3332
3350
|
session_id=session_id,
|
|
3333
3351
|
user_id=user_id,
|
|
@@ -3351,7 +3369,7 @@ class Agent:
|
|
|
3351
3369
|
session_id=session_id,
|
|
3352
3370
|
response_format=response_format,
|
|
3353
3371
|
stream_events=stream_events,
|
|
3354
|
-
|
|
3372
|
+
yield_run_output=yield_run_output,
|
|
3355
3373
|
debug_mode=debug_mode,
|
|
3356
3374
|
**kwargs,
|
|
3357
3375
|
)
|
|
@@ -3620,7 +3638,7 @@ class Agent:
|
|
|
3620
3638
|
user_id: Optional[str] = None,
|
|
3621
3639
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
3622
3640
|
stream_events: bool = False,
|
|
3623
|
-
|
|
3641
|
+
yield_run_output: bool = False,
|
|
3624
3642
|
debug_mode: Optional[bool] = None,
|
|
3625
3643
|
**kwargs,
|
|
3626
3644
|
) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]:
|
|
@@ -3860,7 +3878,7 @@ class Agent:
|
|
|
3860
3878
|
if stream_events:
|
|
3861
3879
|
yield completed_event # type: ignore
|
|
3862
3880
|
|
|
3863
|
-
if
|
|
3881
|
+
if yield_run_output:
|
|
3864
3882
|
yield run_response
|
|
3865
3883
|
|
|
3866
3884
|
# 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
|