agno 2.3.5__tar.gz → 2.3.6__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.3.5 → agno-2.3.6}/PKG-INFO +37 -32
- {agno-2.3.5 → agno-2.3.6}/README.md +35 -31
- {agno-2.3.5 → agno-2.3.6}/agno/agent/agent.py +7 -4
- {agno-2.3.5 → agno-2.3.6}/agno/db/postgres/async_postgres.py +14 -4
- {agno-2.3.5 → agno-2.3.6}/agno/db/postgres/postgres.py +9 -3
- {agno-2.3.5 → agno-2.3.6}/agno/db/sqlite/async_sqlite.py +1 -1
- {agno-2.3.5 → agno-2.3.6}/agno/db/sqlite/sqlite.py +3 -4
- {agno-2.3.5 → agno-2.3.6}/agno/eval/accuracy.py +8 -4
- {agno-2.3.5 → agno-2.3.6}/agno/integrations/discord/client.py +1 -1
- {agno-2.3.5 → agno-2.3.6}/agno/models/cerebras/cerebras.py +11 -12
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/whatsapp/security.py +3 -1
- {agno-2.3.5 → agno-2.3.6}/agno/os/schema.py +2 -1
- {agno-2.3.5 → agno-2.3.6}/agno/session/team.py +0 -1
- {agno-2.3.5 → agno-2.3.6}/agno/table.py +1 -1
- {agno-2.3.5 → agno-2.3.6}/agno/team/team.py +7 -4
- {agno-2.3.5 → agno-2.3.6}/agno/tools/google_drive.py +4 -3
- agno-2.3.6/agno/tools/spotify.py +922 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/agent.py +2 -2
- {agno-2.3.5 → agno-2.3.6}/agno/utils/mcp.py +1 -1
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/workflow.py +5 -2
- {agno-2.3.5 → agno-2.3.6}/agno.egg-info/PKG-INFO +37 -32
- {agno-2.3.5 → agno-2.3.6}/agno.egg-info/SOURCES.txt +1 -0
- {agno-2.3.5 → agno-2.3.6}/agno.egg-info/requires.txt +1 -0
- {agno-2.3.5 → agno-2.3.6}/pyproject.toml +2 -1
- {agno-2.3.5 → agno-2.3.6}/LICENSE +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/agent/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/api.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/evals.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/os.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/routes.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/evals.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/os.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/response.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/team.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/schemas/workflows.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/settings.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/team.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/api/workflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/cloud/aws/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/compression/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/compression/manager.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/culture/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/culture/manager.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/dynamo/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/firestore/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/firestore/firestore.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/firestore/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/firestore/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/in_memory/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/json/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/json/json_db.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/json/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/migrations/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/migrations/manager.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/migrations/versions/v2_3_0.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mongo/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mongo/async_mongo.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mongo/mongo.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mongo/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mongo/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mysql/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mysql/mysql.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mysql/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/mysql/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/postgres/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/postgres/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/postgres/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/redis/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/redis/redis.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/redis/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/redis/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/culture.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/evals.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/memory.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/schemas/metrics.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/singlestore/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/sqlite/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/models.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/surrealdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/db/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/debug.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/eval/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/eval/performance.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/eval/reliability.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/eval/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/exceptions.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/filters.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/guardrails/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/guardrails/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/guardrails/openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/guardrails/pii.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/hooks/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/hooks/decorator.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/integrations/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/content.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/document/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/knowledge.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/types.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/knowledge/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/media.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/manager.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/strategies/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/memory/strategies/types.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/anthropic/claude.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/aws/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/aws/bedrock.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/aws/claude.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/azure/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cohere/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cohere/chat.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/defaults.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/google/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/google/gemini.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/groq/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/groq/groq.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/ibm/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/internlm/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/internlm/internlm.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/langdb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/langdb/langdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/litellm/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/litellm/chat.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/message.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/meta/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/meta/llama.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/metrics.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/mistral/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/mistral/mistral.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nebius/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nebius/nebius.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nexus/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nexus/nexus.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/ollama/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/ollama/chat.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openai/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openai/chat.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openai/like.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openai/responses.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/portkey/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/portkey/portkey.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/requesty/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/requesty/requesty.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/response.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/together/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/together/together.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vercel/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vercel/v0.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vertexai/claude.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vllm/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/vllm/vllm.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/xai/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/models/xai/xai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/app.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/auth.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/config.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/mcp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/middleware/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/middleware/jwt.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/health.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/home.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/session/session.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/settings.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/os/utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/py.typed +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/anthropic.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/deepseek.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/default.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/gemini.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/groq.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/helpers.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/ollama.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/step.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/reasoning/vertexai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/cancel.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/messages.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/team.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/run/workflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/session/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/session/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/session/summary.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/session/workflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/team/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/agentql.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/airflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/api.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/apify.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/arxiv.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/aws_lambda.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/aws_ses.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/baidusearch.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/bitbucket.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/brandfetch.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/bravesearch.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/brightdata.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/browserbase.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/calcom.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/calculator.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/cartesia.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/clickup.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/confluence.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/crawl4ai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/dalle.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/daytona.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/decorator.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/desi_vocal.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/discord.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/docker.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/duckdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/duckduckgo.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/e2b.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/eleven_labs.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/email.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/evm.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/exa.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/fal.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/file.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/file_generation.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/financial_datasets.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/firecrawl.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/function.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/giphy.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/github.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/gmail.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/google_bigquery.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/google_maps.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/googlecalendar.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/googlesheets.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/hackernews.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/jina.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/jira.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/knowledge.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/linear.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/linkup.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/local_file_system.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/lumalab.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mcp/params.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mem0.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/memori.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/memory.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/gemini.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/groq.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/morph.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models/nebius.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/models_labs.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/moviepy_video.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/nano_banana.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/neo4j.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/newspaper.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/newspaper4k.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/notion.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/openbb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/opencv.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/openweather.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/oxylabs.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/pandas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/parallel.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/postgres.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/pubmed.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/python.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/reasoning.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/reddit.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/replicate.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/resend.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/scrapegraph.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/searxng.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/serpapi.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/serper.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/shell.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/slack.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/sleep.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/spider.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/sql.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/streamlit/components.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/tavily.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/telegram.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/todoist.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/tool_registry.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/toolkit.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/trafilatura.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/trello.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/twilio.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/user_control_flow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/valyu.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/visualization.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/webbrowser.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/webex.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/website.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/webtools.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/whatsapp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/wikipedia.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/workflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/x.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/yfinance.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/youtube.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/zendesk.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/zep.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tools/zoom.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tracing/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tracing/exporter.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tracing/schemas.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/tracing/setup.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/audio.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/certs.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/code_execution.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/common.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/dttm.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/enum.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/env.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/events.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/format_str.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/functions.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/gemini.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/hooks.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/http.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/json_schema.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/knowledge.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/location.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/log.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/media.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/merge_dict.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/message.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/claude.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/cohere.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/llama.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/mistral.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/models/watsonx.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/openai.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/pickle.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/pprint.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/print_response/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/print_response/team.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/prompts.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/reasoning.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/response.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/response_iterator.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/safe_formatter.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/serialize.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/shell.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/streamlit.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/string.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/team.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/timer.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/tokens.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/tools.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/web.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/whatsapp.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/utils/yaml_io.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/base.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/distance.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/search.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/__init__.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/agent.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/condition.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/loop.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/parallel.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/router.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/step.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/steps.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno/workflow/types.py +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.3.5 → agno-2.3.6}/agno.egg-info/top_level.txt +0 -0
- {agno-2.3.5 → agno-2.3.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.6
|
|
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
|
|
@@ -381,6 +381,7 @@ Requires-Dist: agno[agui]; extra == "tests"
|
|
|
381
381
|
Requires-Dist: agno[integration-tests]; extra == "tests"
|
|
382
382
|
Requires-Dist: twine; extra == "tests"
|
|
383
383
|
Requires-Dist: build; extra == "tests"
|
|
384
|
+
Requires-Dist: grpcio==1.74.0; extra == "tests"
|
|
384
385
|
Provides-Extra: integration-tests
|
|
385
386
|
Requires-Dist: exa_py; extra == "integration-tests"
|
|
386
387
|
Requires-Dist: ddgs; extra == "integration-tests"
|
|
@@ -411,15 +412,15 @@ Dynamic: license-file
|
|
|
411
412
|
|
|
412
413
|
## What is Agno?
|
|
413
414
|
|
|
414
|
-
Agno is
|
|
415
|
+
Agno is an incredibly fast multi-agent framework, runtime and control plane.
|
|
415
416
|
|
|
416
|
-
It provides
|
|
417
|
+
It provides the complete stack for building, running and managing multi-agent systems:
|
|
417
418
|
|
|
418
|
-
- **
|
|
419
|
-
- **
|
|
420
|
-
- **
|
|
419
|
+
- **Framework**: Build agents, multi-agent teams and workflows with memory, knowledge, state, guardrails, HITL, context compression, MCP, A2A and 100+ toolkits.
|
|
420
|
+
- **AgentOS Runtime**: Run your multi-agent system in production with a secure, stateless runtime and ready to use integration endpoints.
|
|
421
|
+
- **AgentOS Control Plane**: Test, monitor and manage AgentOS deployments across environments with full operational visibility.
|
|
421
422
|
|
|
422
|
-
|
|
423
|
+
Checkout the full list of features [here](#features).
|
|
423
424
|
|
|
424
425
|
## Getting started
|
|
425
426
|
|
|
@@ -436,7 +437,7 @@ After that, checkout the [examples gallery](https://docs.agno.com/examples/use-c
|
|
|
436
437
|
|
|
437
438
|
## Example
|
|
438
439
|
|
|
439
|
-
Here
|
|
440
|
+
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).
|
|
440
441
|
|
|
441
442
|
```python agno_agent.py
|
|
442
443
|
from agno.agent import Agent
|
|
@@ -471,21 +472,21 @@ if __name__ == "__main__":
|
|
|
471
472
|
|
|
472
473
|
## AgentOS - Production Runtime for Multi-Agent Systems
|
|
473
474
|
|
|
474
|
-
Building Agents is easy, running them
|
|
475
|
+
Building Agents is easy, running them as a secure, scalable service is hard. AgentOS solves this by providing a high performance runtime for serving multi-agent systems in production. Key features include:
|
|
475
476
|
|
|
476
|
-
1. **Pre-built FastAPI app**: AgentOS
|
|
477
|
+
1. **Pre-built FastAPI app**: AgentOS includes a ready-to-use FastAPI app for running your agents, teams and workflows. This gives you a significant head start when building an AI product.
|
|
477
478
|
|
|
478
|
-
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime,
|
|
479
|
+
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, so you can test, monitor and manage your system in real time with full operational visibility.
|
|
479
480
|
|
|
480
|
-
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data
|
|
481
|
+
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data leaves your environment, making it ideal for security conscious enterprises..
|
|
481
482
|
|
|
482
|
-
|
|
483
|
+
When you run the example script shared above, you get a FastAPI app that you can connect to the [AgentOS UI](https://os.agno.com). Here's what it looks like in action:
|
|
483
484
|
|
|
484
485
|
https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
|
|
485
486
|
|
|
486
487
|
## The Complete Agentic Solution
|
|
487
488
|
|
|
488
|
-
|
|
489
|
+
Agno provides the complete solution for companies building agentic systems:
|
|
489
490
|
|
|
490
491
|
- The fastest framework for building agents, multi-agent teams and agentic workflows.
|
|
491
492
|
- A ready-to-use FastAPI app that gets you building AI products on day one.
|
|
@@ -493,28 +494,32 @@ For companies building agents, Agno provides the complete agentic solution:
|
|
|
493
494
|
|
|
494
495
|
Agno brings a novel architecture that no other framework provides, your AgentOS runs securely in your cloud, and the control plane connects directly to it from your browser. You don't need to send data to any external services or pay retention costs, you get complete privacy and control.
|
|
495
496
|
|
|
496
|
-
##
|
|
497
|
+
## Features
|
|
497
498
|
|
|
498
|
-
Agno is an incredibly feature-rich framework
|
|
499
|
+
Agno is an incredibly feature-rich framework purpose-built for Agent Engineering. Here are some key features:
|
|
499
500
|
|
|
500
501
|
| **Category** | **Feature** | **Description** |
|
|
501
502
|
| -------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
502
|
-
| **
|
|
503
|
-
| | **Type Safe** |
|
|
504
|
-
| | **Dynamic Context
|
|
505
|
-
| **
|
|
506
|
-
|
|
|
507
|
-
| | **
|
|
508
|
-
| | **
|
|
509
|
-
| **
|
|
503
|
+
| **Foundational Principles** | **Model Agnostic** | Supports all model providers so you can choose the best model for your use case |
|
|
504
|
+
| | **Type Safe** | Enforces structured I/O through input_schema and output_schema for predictable and composable agent behavior. |
|
|
505
|
+
| | **Dynamic Context** | Inject variables, state, and retrieved data at runtime into context. Compress, summarize and filter context to keep your Agents focused and efficient. |
|
|
506
|
+
| | **Designed for Scale** | Designed around async execution and long-running tasks for high throughput agent workloads. |
|
|
507
|
+
| **Memory, Knowledge, and Persistence** | **Persistent Storage** | Give your Agents, Teams, and Workflows a database to persist session history, state, and messages. |
|
|
508
|
+
| | **User Memory** | Built in memory layer that helps agents recall user specific context across sessions. |
|
|
509
|
+
| | **Agentic RAG** | Connect to 20+ vector stores (called **Knowledge**) with hybrid search, reranking, and chunking out of the box. |
|
|
510
|
+
| | **Culture** | Shared long term collective memory that compounds across agents and time. |
|
|
511
|
+
| | **Ephemeral Context** | In memory scratchpad for short lived reasoning without polluting long term state. |
|
|
512
|
+
| **Execution & Control** | **Human-in-the-Loop** | Native support for confirmations, approvals, manual overrides, and external actions. |
|
|
510
513
|
| | **Guardrails** | Built-in safeguards for validation, security, and prompt protection. |
|
|
511
|
-
| | **Agent Lifecycle Hooks** | Pre
|
|
512
|
-
| | **MCP Integration** | First-class support for the Model Context Protocol (MCP) to connect Agents with external systems.
|
|
513
|
-
| | **
|
|
514
|
-
|
|
|
515
|
-
|
|
|
516
|
-
| | **
|
|
517
|
-
| | **
|
|
514
|
+
| | **Agent Lifecycle Hooks** | Pre and post hooks to validate, enrich, or transform inputs and outputs. |
|
|
515
|
+
| | **MCP Integration** | First-class support for the Model Context Protocol (MCP) to connect Agents with external systems. |
|
|
516
|
+
| | **A2A Integration** | First-class support for the Agent to Agent communication protocol (A2A). |
|
|
517
|
+
| | **Toolkits** | 100+ built in toolkits with thousands of tools covering data, code, web, and enterprise APIs. |
|
|
518
|
+
| **Runtime & Evaluation** | **Runtime** | Prebuilt FastAPI runtime with SSE compatible endpoints. Production ready from day one. |
|
|
519
|
+
| | **Control Plane (UI)** | Integrated interface to test, observe, and debug your agents, teams, and workflows in real time. |
|
|
520
|
+
| | **Natively Multimodal** | Agents can process and generate text, images, audio, video, and files. |
|
|
521
|
+
| | **Evals** | Measure Accuracy, Performance, Latency, and Reliability across agents and workflows. |
|
|
522
|
+
| | **Durable Execution** | Built in support for long running, resumable workflows. |
|
|
518
523
|
| **Security & Privacy** | **Private by Design** | Runs entirely in your cloud. The UI connects directly to your AgentOS from your browser, no data is ever sent externally. |
|
|
519
524
|
| | **Data Governance** | Your data lives securely in your Agent database, no external data sharing or vendor lock-in. |
|
|
520
525
|
| | **Access Control** | Role-based access (RBAC) and per-agent permissions to protect sensitive contexts and tools. |
|
|
@@ -544,7 +549,7 @@ At Agno, we optimize performance across 3 dimensions:
|
|
|
544
549
|
|
|
545
550
|
1. **Agent performance:** We optimize static operations (instantiation, memory footprint) and runtime operations (tool calls, memory updates, history management).
|
|
546
551
|
2. **System performance:** The AgentOS API is async by default and has a minimal memory footprint. The system is stateless and horizontally scalable, with a focus on preventing memory leaks. It handles parallel and batch embedding generation during knowledge ingestion, metrics collection in background tasks, and other system-level optimizations.
|
|
547
|
-
3. **Agent reliability and accuracy:** Monitored through evals, which we
|
|
552
|
+
3. **Agent reliability and accuracy:** Monitored through evals, which we'll explore later.
|
|
548
553
|
|
|
549
554
|
### Agent Performance
|
|
550
555
|
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
|
|
20
20
|
## What is Agno?
|
|
21
21
|
|
|
22
|
-
Agno is
|
|
22
|
+
Agno is an incredibly fast multi-agent framework, runtime and control plane.
|
|
23
23
|
|
|
24
|
-
It provides
|
|
24
|
+
It provides the complete stack for building, running and managing multi-agent systems:
|
|
25
25
|
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
26
|
+
- **Framework**: Build agents, multi-agent teams and workflows with memory, knowledge, state, guardrails, HITL, context compression, MCP, A2A and 100+ toolkits.
|
|
27
|
+
- **AgentOS Runtime**: Run your multi-agent system in production with a secure, stateless runtime and ready to use integration endpoints.
|
|
28
|
+
- **AgentOS Control Plane**: Test, monitor and manage AgentOS deployments across environments with full operational visibility.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Checkout the full list of features [here](#features).
|
|
31
31
|
|
|
32
32
|
## Getting started
|
|
33
33
|
|
|
@@ -44,7 +44,7 @@ After that, checkout the [examples gallery](https://docs.agno.com/examples/use-c
|
|
|
44
44
|
|
|
45
45
|
## Example
|
|
46
46
|
|
|
47
|
-
Here
|
|
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,21 +79,21 @@ if __name__ == "__main__":
|
|
|
79
79
|
|
|
80
80
|
## AgentOS - Production Runtime for Multi-Agent Systems
|
|
81
81
|
|
|
82
|
-
Building Agents is easy, running them
|
|
82
|
+
Building Agents is easy, running them as a secure, scalable service is hard. AgentOS solves this by providing a high performance runtime for serving multi-agent systems in production. Key features include:
|
|
83
83
|
|
|
84
|
-
1. **Pre-built FastAPI app**: AgentOS
|
|
84
|
+
1. **Pre-built FastAPI app**: AgentOS includes a ready-to-use FastAPI app for running your agents, teams and workflows. This gives you a significant head start when building an AI product.
|
|
85
85
|
|
|
86
|
-
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime,
|
|
86
|
+
2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, so you can test, monitor and manage your system in real time with full operational visibility.
|
|
87
87
|
|
|
88
|
-
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data
|
|
88
|
+
3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data leaves your environment, making it ideal for security conscious enterprises..
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
When you run the example script shared above, you get a FastAPI app that you can connect to the [AgentOS UI](https://os.agno.com). Here's what it looks like in action:
|
|
91
91
|
|
|
92
92
|
https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
|
|
93
93
|
|
|
94
94
|
## The Complete Agentic Solution
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
Agno provides the complete solution for companies building agentic systems:
|
|
97
97
|
|
|
98
98
|
- The fastest framework for building agents, multi-agent teams and agentic workflows.
|
|
99
99
|
- A ready-to-use FastAPI app that gets you building AI products on day one.
|
|
@@ -101,28 +101,32 @@ For companies building agents, Agno provides the complete agentic solution:
|
|
|
101
101
|
|
|
102
102
|
Agno brings a novel architecture that no other framework provides, your AgentOS runs securely in your cloud, and the control plane connects directly to it from your browser. You don't need to send data to any external services or pay retention costs, you get complete privacy and control.
|
|
103
103
|
|
|
104
|
-
##
|
|
104
|
+
## Features
|
|
105
105
|
|
|
106
|
-
Agno is an incredibly feature-rich framework
|
|
106
|
+
Agno is an incredibly feature-rich framework purpose-built for Agent Engineering. Here are some key features:
|
|
107
107
|
|
|
108
108
|
| **Category** | **Feature** | **Description** |
|
|
109
109
|
| -------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
110
|
-
| **
|
|
111
|
-
| | **Type Safe** |
|
|
112
|
-
| | **Dynamic Context
|
|
113
|
-
| **
|
|
114
|
-
|
|
|
115
|
-
| | **
|
|
116
|
-
| | **
|
|
117
|
-
| **
|
|
110
|
+
| **Foundational Principles** | **Model Agnostic** | Supports all model providers so you can choose the best model for your use case |
|
|
111
|
+
| | **Type Safe** | Enforces structured I/O through input_schema and output_schema for predictable and composable agent behavior. |
|
|
112
|
+
| | **Dynamic Context** | Inject variables, state, and retrieved data at runtime into context. Compress, summarize and filter context to keep your Agents focused and efficient. |
|
|
113
|
+
| | **Designed for Scale** | Designed around async execution and long-running tasks for high throughput agent workloads. |
|
|
114
|
+
| **Memory, Knowledge, and Persistence** | **Persistent Storage** | Give your Agents, Teams, and Workflows a database to persist session history, state, and messages. |
|
|
115
|
+
| | **User Memory** | Built in memory layer that helps agents recall user specific context across sessions. |
|
|
116
|
+
| | **Agentic RAG** | Connect to 20+ vector stores (called **Knowledge**) with hybrid search, reranking, and chunking out of the box. |
|
|
117
|
+
| | **Culture** | Shared long term collective memory that compounds across agents and time. |
|
|
118
|
+
| | **Ephemeral Context** | In memory scratchpad for short lived reasoning without polluting long term state. |
|
|
119
|
+
| **Execution & Control** | **Human-in-the-Loop** | Native support for confirmations, approvals, manual overrides, and external actions. |
|
|
118
120
|
| | **Guardrails** | Built-in safeguards for validation, security, and prompt protection. |
|
|
119
|
-
| | **Agent Lifecycle Hooks** | Pre
|
|
120
|
-
| | **MCP Integration** | First-class support for the Model Context Protocol (MCP) to connect Agents with external systems.
|
|
121
|
-
| | **
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
| | **
|
|
125
|
-
| | **
|
|
121
|
+
| | **Agent Lifecycle Hooks** | Pre and post hooks to validate, enrich, or transform inputs and outputs. |
|
|
122
|
+
| | **MCP Integration** | First-class support for the Model Context Protocol (MCP) to connect Agents with external systems. |
|
|
123
|
+
| | **A2A Integration** | First-class support for the Agent to Agent communication protocol (A2A). |
|
|
124
|
+
| | **Toolkits** | 100+ built in toolkits with thousands of tools covering data, code, web, and enterprise APIs. |
|
|
125
|
+
| **Runtime & Evaluation** | **Runtime** | Prebuilt FastAPI runtime with SSE compatible endpoints. Production ready from day one. |
|
|
126
|
+
| | **Control Plane (UI)** | Integrated interface to test, observe, and debug your agents, teams, and workflows in real time. |
|
|
127
|
+
| | **Natively Multimodal** | Agents can process and generate text, images, audio, video, and files. |
|
|
128
|
+
| | **Evals** | Measure Accuracy, Performance, Latency, and Reliability across agents and workflows. |
|
|
129
|
+
| | **Durable Execution** | Built in support for long running, resumable workflows. |
|
|
126
130
|
| **Security & Privacy** | **Private by Design** | Runs entirely in your cloud. The UI connects directly to your AgentOS from your browser, no data is ever sent externally. |
|
|
127
131
|
| | **Data Governance** | Your data lives securely in your Agent database, no external data sharing or vendor lock-in. |
|
|
128
132
|
| | **Access Control** | Role-based access (RBAC) and per-agent permissions to protect sensitive contexts and tools. |
|
|
@@ -152,7 +156,7 @@ At Agno, we optimize performance across 3 dimensions:
|
|
|
152
156
|
|
|
153
157
|
1. **Agent performance:** We optimize static operations (instantiation, memory footprint) and runtime operations (tool calls, memory updates, history management).
|
|
154
158
|
2. **System performance:** The AgentOS API is async by default and has a minimal memory footprint. The system is stateless and horizontally scalable, with a focus on preventing memory leaks. It handles parallel and batch embedding generation during knowledge ingestion, metrics collection in background tasks, and other system-level optimizations.
|
|
155
|
-
3. **Agent reliability and accuracy:** Monitored through evals, which we
|
|
159
|
+
3. **Agent reliability and accuracy:** Monitored through evals, which we'll explore later.
|
|
156
160
|
|
|
157
161
|
### Agent Performance
|
|
158
162
|
|
|
@@ -1645,7 +1645,10 @@ class Agent:
|
|
|
1645
1645
|
|
|
1646
1646
|
# Initialize session state
|
|
1647
1647
|
session_state = self._initialize_session_state(
|
|
1648
|
-
session_state=session_state
|
|
1648
|
+
session_state=session_state if session_state is not None else {},
|
|
1649
|
+
user_id=user_id,
|
|
1650
|
+
session_id=session_id,
|
|
1651
|
+
run_id=run_id,
|
|
1649
1652
|
)
|
|
1650
1653
|
# Update session state from DB
|
|
1651
1654
|
session_state = self._load_session_state(session=agent_session, session_state=session_state)
|
|
@@ -1866,7 +1869,7 @@ class Agent:
|
|
|
1866
1869
|
self._update_metadata(session=agent_session)
|
|
1867
1870
|
# Initialize session state
|
|
1868
1871
|
run_context.session_state = self._initialize_session_state(
|
|
1869
|
-
session_state=run_context.session_state
|
|
1872
|
+
session_state=run_context.session_state if run_context.session_state is not None else {},
|
|
1870
1873
|
user_id=user_id,
|
|
1871
1874
|
session_id=session_id,
|
|
1872
1875
|
run_id=run_response.run_id,
|
|
@@ -2144,7 +2147,7 @@ class Agent:
|
|
|
2144
2147
|
self._update_metadata(session=agent_session)
|
|
2145
2148
|
# Initialize session state
|
|
2146
2149
|
run_context.session_state = self._initialize_session_state(
|
|
2147
|
-
session_state=run_context.session_state
|
|
2150
|
+
session_state=run_context.session_state if run_context.session_state is not None else {},
|
|
2148
2151
|
user_id=user_id,
|
|
2149
2152
|
session_id=session_id,
|
|
2150
2153
|
run_id=run_response.run_id,
|
|
@@ -6988,7 +6991,7 @@ class Agent:
|
|
|
6988
6991
|
|
|
6989
6992
|
# Should already be resolved and passed from run() method
|
|
6990
6993
|
format_variables = ChainMap(
|
|
6991
|
-
session_state
|
|
6994
|
+
session_state if session_state is not None else {},
|
|
6992
6995
|
dependencies or {},
|
|
6993
6996
|
metadata or {},
|
|
6994
6997
|
{"user_id": user_id} if user_id is not None else {},
|
|
@@ -32,6 +32,7 @@ from agno.utils.log import log_debug, log_error, log_info, log_warning
|
|
|
32
32
|
try:
|
|
33
33
|
from sqlalchemy import Index, String, Table, UniqueConstraint, func, update
|
|
34
34
|
from sqlalchemy.dialects import postgresql
|
|
35
|
+
from sqlalchemy.exc import ProgrammingError
|
|
35
36
|
from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker, create_async_engine
|
|
36
37
|
from sqlalchemy.schema import Column, MetaData
|
|
37
38
|
from sqlalchemy.sql.expression import select, text
|
|
@@ -897,10 +898,19 @@ class AsyncPostgresDb(AsyncBaseDb):
|
|
|
897
898
|
table = await self._get_table(table_type="memories")
|
|
898
899
|
|
|
899
900
|
async with self.async_session_factory() as sess, sess.begin():
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
901
|
+
try:
|
|
902
|
+
stmt = select(func.jsonb_array_elements_text(table.c.topics))
|
|
903
|
+
if user_id is not None:
|
|
904
|
+
stmt = stmt.where(table.c.user_id == user_id)
|
|
905
|
+
result = await sess.execute(stmt)
|
|
906
|
+
except ProgrammingError:
|
|
907
|
+
# Retrying with json_array_elements_text. This works in older versions,
|
|
908
|
+
# where the topics column was of type JSON instead of JSONB
|
|
909
|
+
stmt = select(func.json_array_elements_text(table.c.topics))
|
|
910
|
+
if user_id is not None:
|
|
911
|
+
stmt = stmt.where(table.c.user_id == user_id)
|
|
912
|
+
result = await sess.execute(stmt)
|
|
913
|
+
|
|
904
914
|
records = result.fetchall()
|
|
905
915
|
|
|
906
916
|
return list(set([record[0] for record in records]))
|
|
@@ -33,6 +33,7 @@ try:
|
|
|
33
33
|
from sqlalchemy import ForeignKey, Index, String, UniqueConstraint, func, select, update
|
|
34
34
|
from sqlalchemy.dialects import postgresql
|
|
35
35
|
from sqlalchemy.engine import Engine, create_engine
|
|
36
|
+
from sqlalchemy.exc import ProgrammingError
|
|
36
37
|
from sqlalchemy.orm import scoped_session, sessionmaker
|
|
37
38
|
from sqlalchemy.schema import Column, MetaData, Table
|
|
38
39
|
from sqlalchemy.sql.expression import text
|
|
@@ -1082,9 +1083,14 @@ class PostgresDb(BaseDb):
|
|
|
1082
1083
|
return []
|
|
1083
1084
|
|
|
1084
1085
|
with self.Session() as sess, sess.begin():
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1086
|
+
try:
|
|
1087
|
+
stmt = select(func.jsonb_array_elements_text(table.c.topics))
|
|
1088
|
+
result = sess.execute(stmt).fetchall()
|
|
1089
|
+
except ProgrammingError:
|
|
1090
|
+
# Retrying with json_array_elements_text. This works in older versions,
|
|
1091
|
+
# where the topics column was of type JSON instead of JSONB
|
|
1092
|
+
stmt = select(func.json_array_elements_text(table.c.topics))
|
|
1093
|
+
result = sess.execute(stmt).fetchall()
|
|
1088
1094
|
|
|
1089
1095
|
return list(set([record[0] for record in result]))
|
|
1090
1096
|
|
|
@@ -1114,7 +1114,7 @@ class AsyncSqliteDb(AsyncBaseDb):
|
|
|
1114
1114
|
|
|
1115
1115
|
async with self.async_session_factory() as sess, sess.begin():
|
|
1116
1116
|
# Select topics from all results
|
|
1117
|
-
stmt = select(
|
|
1117
|
+
stmt = select(table.c.topics)
|
|
1118
1118
|
result = (await sess.execute(stmt)).fetchall()
|
|
1119
1119
|
|
|
1120
1120
|
return list(set([record[0] for record in result]))
|
|
@@ -245,9 +245,9 @@ class SqliteDb(BaseDb):
|
|
|
245
245
|
return table
|
|
246
246
|
|
|
247
247
|
except Exception as e:
|
|
248
|
-
from traceback import
|
|
248
|
+
from traceback import print_exc
|
|
249
249
|
|
|
250
|
-
|
|
250
|
+
print_exc()
|
|
251
251
|
log_error(f"Could not create table '{table_name}': {e}")
|
|
252
252
|
raise e
|
|
253
253
|
|
|
@@ -1109,9 +1109,8 @@ class SqliteDb(BaseDb):
|
|
|
1109
1109
|
|
|
1110
1110
|
with self.Session() as sess, sess.begin():
|
|
1111
1111
|
# Select topics from all results
|
|
1112
|
-
stmt = select(
|
|
1112
|
+
stmt = select(table.c.topics)
|
|
1113
1113
|
result = sess.execute(stmt).fetchall()
|
|
1114
|
-
|
|
1115
1114
|
return list(set([record[0] for record in result]))
|
|
1116
1115
|
|
|
1117
1116
|
except Exception as e:
|
|
@@ -359,10 +359,12 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
359
359
|
status = Status(f"Running evaluation {i + 1}...", spinner="dots", speed=1.0, refresh_per_second=10)
|
|
360
360
|
live_log.update(status)
|
|
361
361
|
|
|
362
|
+
agent_session_id = f"eval_{self.eval_id}_{i + 1}"
|
|
363
|
+
|
|
362
364
|
if self.agent is not None:
|
|
363
|
-
output = self.agent.run(input=eval_input).content
|
|
365
|
+
output = self.agent.run(input=eval_input, session_id=agent_session_id).content
|
|
364
366
|
elif self.team is not None:
|
|
365
|
-
output = self.team.run(input=eval_input).content
|
|
367
|
+
output = self.team.run(input=eval_input, session_id=agent_session_id).content
|
|
366
368
|
|
|
367
369
|
if not output:
|
|
368
370
|
logger.error(f"Failed to generate a valid answer on iteration {i + 1}: {output}")
|
|
@@ -500,11 +502,13 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
500
502
|
status = Status(f"Running evaluation {i + 1}...", spinner="dots", speed=1.0, refresh_per_second=10)
|
|
501
503
|
live_log.update(status)
|
|
502
504
|
|
|
505
|
+
agent_session_id = f"eval_{self.eval_id}_{i + 1}"
|
|
506
|
+
|
|
503
507
|
if self.agent is not None:
|
|
504
|
-
response = await self.agent.arun(input=eval_input)
|
|
508
|
+
response = await self.agent.arun(input=eval_input, session_id=agent_session_id)
|
|
505
509
|
output = response.content
|
|
506
510
|
elif self.team is not None:
|
|
507
|
-
response = await self.team.arun(input=eval_input) # type: ignore
|
|
511
|
+
response = await self.team.arun(input=eval_input, session_id=agent_session_id) # type: ignore
|
|
508
512
|
output = response.content
|
|
509
513
|
|
|
510
514
|
if not output:
|
|
@@ -14,7 +14,7 @@ try:
|
|
|
14
14
|
import discord
|
|
15
15
|
|
|
16
16
|
except (ImportError, ModuleNotFoundError):
|
|
17
|
-
|
|
17
|
+
raise ImportError("`discord.py` not installed. Please install using `pip install discord.py`")
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class RequiresConfirmationView(discord.ui.View):
|
|
@@ -512,14 +512,16 @@ class Cerebras(Model):
|
|
|
512
512
|
|
|
513
513
|
# Extend the list if needed
|
|
514
514
|
while len(tool_calls) <= index:
|
|
515
|
-
tool_calls.append(
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
"
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
515
|
+
tool_calls.append(
|
|
516
|
+
{
|
|
517
|
+
"id": None,
|
|
518
|
+
"type": None,
|
|
519
|
+
"function": {
|
|
520
|
+
"name": "",
|
|
521
|
+
"arguments": "",
|
|
522
|
+
},
|
|
523
|
+
}
|
|
524
|
+
)
|
|
523
525
|
|
|
524
526
|
tool_call_entry = tool_calls[index]
|
|
525
527
|
|
|
@@ -540,10 +542,7 @@ class Cerebras(Model):
|
|
|
540
542
|
tool_call_entry["function"]["arguments"] += func_delta["arguments"]
|
|
541
543
|
|
|
542
544
|
# Filter out any incomplete tool calls (missing id or function name)
|
|
543
|
-
complete_tool_calls = [
|
|
544
|
-
tc for tc in tool_calls
|
|
545
|
-
if tc.get("id") and tc.get("function", {}).get("name")
|
|
546
|
-
]
|
|
545
|
+
complete_tool_calls = [tc for tc in tool_calls if tc.get("id") and tc.get("function", {}).get("name")]
|
|
547
546
|
|
|
548
547
|
return complete_tool_calls
|
|
549
548
|
|
|
@@ -3,6 +3,8 @@ import hmac
|
|
|
3
3
|
import os
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
+
from agno.utils.log import log_warning
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
def is_development_mode() -> bool:
|
|
8
10
|
"""Check if the application is running in development mode."""
|
|
@@ -36,7 +38,7 @@ def validate_webhook_signature(payload: bytes, signature_header: Optional[str])
|
|
|
36
38
|
"""
|
|
37
39
|
# In development mode, we can bypass signature validation
|
|
38
40
|
if is_development_mode():
|
|
39
|
-
|
|
41
|
+
log_warning("Bypassing signature validation in development mode")
|
|
40
42
|
return True
|
|
41
43
|
|
|
42
44
|
if not signature_header or not signature_header.startswith("sha256="):
|
|
@@ -742,10 +742,11 @@ class SessionSchema(BaseModel):
|
|
|
742
742
|
@classmethod
|
|
743
743
|
def from_dict(cls, session: Dict[str, Any]) -> "SessionSchema":
|
|
744
744
|
session_name = get_session_name(session)
|
|
745
|
+
session_data = session.get("session_data", {}) or {}
|
|
745
746
|
return cls(
|
|
746
747
|
session_id=session.get("session_id", ""),
|
|
747
748
|
session_name=session_name,
|
|
748
|
-
session_state=
|
|
749
|
+
session_state=session_data.get("session_state", None),
|
|
749
750
|
created_at=datetime.fromtimestamp(session.get("created_at", 0), tz=timezone.utc)
|
|
750
751
|
if session.get("created_at")
|
|
751
752
|
else None,
|
|
@@ -46,7 +46,6 @@ class TeamSession:
|
|
|
46
46
|
session_dict = asdict(self)
|
|
47
47
|
|
|
48
48
|
session_dict["runs"] = [run.to_dict() for run in self.runs] if self.runs else None
|
|
49
|
-
print(session_dict["runs"])
|
|
50
49
|
session_dict["summary"] = self.summary.to_dict() if self.summary else None
|
|
51
50
|
|
|
52
51
|
return session_dict
|
|
@@ -2060,7 +2060,10 @@ class Team:
|
|
|
2060
2060
|
|
|
2061
2061
|
# Initialize session state
|
|
2062
2062
|
session_state = self._initialize_session_state(
|
|
2063
|
-
session_state=session_state
|
|
2063
|
+
session_state=session_state if session_state is not None else {},
|
|
2064
|
+
user_id=user_id,
|
|
2065
|
+
session_id=session_id,
|
|
2066
|
+
run_id=run_id,
|
|
2064
2067
|
)
|
|
2065
2068
|
# Update session state from DB
|
|
2066
2069
|
session_state = self._load_session_state(session=team_session, session_state=session_state)
|
|
@@ -2293,7 +2296,7 @@ class Team:
|
|
|
2293
2296
|
self._update_metadata(session=team_session)
|
|
2294
2297
|
# Initialize session state
|
|
2295
2298
|
run_context.session_state = self._initialize_session_state(
|
|
2296
|
-
session_state=run_context.session_state
|
|
2299
|
+
session_state=run_context.session_state if run_context.session_state is not None else {},
|
|
2297
2300
|
user_id=user_id,
|
|
2298
2301
|
session_id=session_id,
|
|
2299
2302
|
run_id=run_response.run_id,
|
|
@@ -2533,7 +2536,7 @@ class Team:
|
|
|
2533
2536
|
self._update_metadata(session=team_session)
|
|
2534
2537
|
# Initialize session state
|
|
2535
2538
|
run_context.session_state = self._initialize_session_state(
|
|
2536
|
-
session_state=run_context.session_state
|
|
2539
|
+
session_state=run_context.session_state if run_context.session_state is not None else {},
|
|
2537
2540
|
user_id=user_id,
|
|
2538
2541
|
session_id=session_id,
|
|
2539
2542
|
run_id=run_response.run_id,
|
|
@@ -6877,7 +6880,7 @@ class Team:
|
|
|
6877
6880
|
return message
|
|
6878
6881
|
# Should already be resolved and passed from run() method
|
|
6879
6882
|
format_variables = ChainMap(
|
|
6880
|
-
session_state
|
|
6883
|
+
session_state if session_state is not None else {},
|
|
6881
6884
|
dependencies or {},
|
|
6882
6885
|
metadata or {},
|
|
6883
6886
|
{"user_id": user_id} if user_id is not None else {},
|
|
@@ -69,6 +69,7 @@ from pathlib import Path
|
|
|
69
69
|
from typing import Any, List, Optional, Union
|
|
70
70
|
|
|
71
71
|
from agno.tools import Toolkit
|
|
72
|
+
from agno.utils.log import log_error
|
|
72
73
|
|
|
73
74
|
try:
|
|
74
75
|
from google.auth.transport.requests import Request
|
|
@@ -202,7 +203,7 @@ class GoogleDriveTools(Toolkit):
|
|
|
202
203
|
items = results.get("files", [])
|
|
203
204
|
return items
|
|
204
205
|
except Exception as error:
|
|
205
|
-
|
|
206
|
+
log_error(f"Could not list files: {error}")
|
|
206
207
|
return []
|
|
207
208
|
|
|
208
209
|
@authenticate
|
|
@@ -238,7 +239,7 @@ class GoogleDriveTools(Toolkit):
|
|
|
238
239
|
)
|
|
239
240
|
return uploaded_file
|
|
240
241
|
except Exception as error:
|
|
241
|
-
|
|
242
|
+
log_error(f"Could not upload file '{file_path}': {error}")
|
|
242
243
|
return None
|
|
243
244
|
|
|
244
245
|
@authenticate
|
|
@@ -266,5 +267,5 @@ class GoogleDriveTools(Toolkit):
|
|
|
266
267
|
print(f"Download progress: {int(status.progress() * 100)}%.")
|
|
267
268
|
return dest_path
|
|
268
269
|
except Exception as error:
|
|
269
|
-
|
|
270
|
+
log_error(f"Could not download file '{file_id}': {error}")
|
|
270
271
|
return None
|