agno 2.3.21__tar.gz → 2.3.22__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.21 → agno-2.3.22}/PKG-INFO +13 -14
- {agno-2.3.21 → agno-2.3.22}/README.md +11 -12
- {agno-2.3.21 → agno-2.3.22}/agno/agent/agent.py +26 -1
- {agno-2.3.21 → agno-2.3.22}/agno/agent/remote.py +233 -72
- agno-2.3.22/agno/client/a2a/__init__.py +10 -0
- agno-2.3.22/agno/client/a2a/client.py +554 -0
- agno-2.3.22/agno/client/a2a/schemas.py +112 -0
- agno-2.3.22/agno/client/a2a/utils.py +369 -0
- agno-2.3.22/agno/db/migrations/utils.py +19 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/v1_to_v2.py +54 -16
- {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/versions/v2_3_0.py +92 -53
- {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/async_postgres.py +162 -40
- {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/postgres.py +181 -31
- {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/utils.py +6 -2
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/document.py +3 -2
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/markdown.py +8 -3
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/recursive.py +2 -2
- {agno-2.3.21 → agno-2.3.22}/agno/models/openai/chat.py +1 -1
- {agno-2.3.21 → agno-2.3.22}/agno/models/openai/responses.py +14 -7
- {agno-2.3.21 → agno-2.3.22}/agno/os/middleware/jwt.py +66 -27
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/router.py +2 -2
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/knowledge.py +3 -3
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/router.py +2 -2
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/router.py +2 -2
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/deepseek.py +11 -1
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/gemini.py +6 -2
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/groq.py +8 -3
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/openai.py +2 -0
- {agno-2.3.21 → agno-2.3.22}/agno/remote/base.py +105 -8
- agno-2.3.22/agno/skills/__init__.py +17 -0
- agno-2.3.22/agno/skills/agent_skills.py +370 -0
- agno-2.3.22/agno/skills/errors.py +32 -0
- agno-2.3.22/agno/skills/loaders/__init__.py +4 -0
- agno-2.3.22/agno/skills/loaders/base.py +27 -0
- agno-2.3.22/agno/skills/loaders/local.py +216 -0
- agno-2.3.22/agno/skills/skill.py +65 -0
- agno-2.3.22/agno/skills/utils.py +107 -0
- agno-2.3.22/agno/skills/validator.py +277 -0
- agno-2.3.22/agno/team/remote.py +447 -0
- {agno-2.3.21 → agno-2.3.22}/agno/team/team.py +22 -2
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/mcp.py +299 -17
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/multi_mcp.py +269 -14
- {agno-2.3.21 → agno-2.3.22}/agno/utils/mcp.py +49 -8
- {agno-2.3.21 → agno-2.3.22}/agno/utils/string.py +43 -1
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/condition.py +4 -2
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/loop.py +20 -1
- agno-2.3.22/agno/workflow/remote.py +362 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/router.py +4 -1
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/steps.py +4 -0
- {agno-2.3.21 → agno-2.3.22}/agno.egg-info/PKG-INFO +13 -14
- {agno-2.3.21 → agno-2.3.22}/agno.egg-info/SOURCES.txt +14 -0
- {agno-2.3.21 → agno-2.3.22}/agno.egg-info/requires.txt +1 -1
- {agno-2.3.21 → agno-2.3.22}/pyproject.toml +2 -2
- agno-2.3.21/agno/team/remote.py +0 -287
- agno-2.3.21/agno/workflow/remote.py +0 -222
- {agno-2.3.21 → agno-2.3.22}/LICENSE +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/agent/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/api.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/evals.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/os.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/routes.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/evals.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/os.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/response.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/workflows.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/settings.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/api/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/client/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/client/os.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/compression/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/compression/manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/culture/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/culture/manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/firestore.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/json/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/json/json_db.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/json/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/async_mongo.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/mongo.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/async_mysql.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/mysql.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/redis/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/redis/redis.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/redis/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/redis/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/culture.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/evals.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/memory.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/metrics.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/async_sqlite.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/models.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/surrealdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/db/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/debug.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/accuracy.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/agent_as_judge.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/performance.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/reliability.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/eval/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/exceptions.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/filters.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/guardrails/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/guardrails/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/guardrails/openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/guardrails/pii.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/hooks/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/hooks/decorator.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/integrations/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/integrations/discord/client.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/content.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/document/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/knowledge.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/types.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/knowledge/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/media.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/types.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/anthropic/claude.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/aws/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/aws/bedrock.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/aws/claude.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/azure/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cohere/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cohere/chat.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/defaults.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/google/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/google/gemini.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/google/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/groq/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/groq/groq.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/ibm/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/internlm/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/internlm/internlm.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/langdb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/langdb/langdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/chat.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/message.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/meta/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/meta/llama.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/metrics.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/mistral/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/mistral/mistral.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nebius/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nebius/nebius.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nexus/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nexus/nexus.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/ollama/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/ollama/chat.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/openai/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/openai/like.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/portkey/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/portkey/portkey.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/requesty/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/requesty/requesty.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/response.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/together/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/together/together.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vercel/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vercel/v0.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vertexai/claude.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vllm/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/vllm/vllm.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/xai/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/models/xai/xai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/app.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/auth.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/config.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/managers.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/mcp.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/middleware/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/router.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/schema.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/database.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/health.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/home.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/session/session.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/schema.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/schema.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/schema.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/scopes.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/settings.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/os/utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/py.typed +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/anthropic.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/default.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/helpers.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/ollama.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/step.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/reasoning/vertexai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/remote/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/cancel.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/messages.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/requirement.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/run/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/session/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/session/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/session/summary.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/session/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/session/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/table.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/team/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/agentql.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/airflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/api.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/apify.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/arxiv.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/aws_lambda.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/aws_ses.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/baidusearch.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/bitbucket.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/brandfetch.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/bravesearch.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/brightdata.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/browserbase.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/calcom.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/calculator.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/cartesia.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/clickup.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/confluence.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/crawl4ai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/dalle.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/daytona.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/decorator.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/desi_vocal.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/discord.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/docker.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/duckdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/duckduckgo.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/e2b.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/eleven_labs.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/email.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/evm.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/exa.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/fal.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/file.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/file_generation.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/financial_datasets.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/firecrawl.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/function.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/giphy.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/github.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/gmail.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/google_bigquery.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/google_drive.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/google_maps.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/googlecalendar.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/googlesheets.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/hackernews.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/jina.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/jira.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/knowledge.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/linear.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/linkup.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/local_file_system.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/lumalab.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/params.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mem0.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/memory.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/gemini.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/groq.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/morph.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models/nebius.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/models_labs.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/moviepy_video.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/nano_banana.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/neo4j.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/newspaper.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/newspaper4k.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/notion.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/openbb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/opencv.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/openweather.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/oxylabs.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/pandas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/parallel.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/postgres.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/pubmed.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/python.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/reasoning.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/reddit.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/redshift.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/replicate.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/resend.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/scrapegraph.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/searxng.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/serpapi.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/serper.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/shell.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/shopify.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/slack.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/sleep.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/spider.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/spotify.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/sql.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/streamlit/components.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/tavily.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/telegram.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/todoist.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/tool_registry.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/toolkit.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/trafilatura.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/trello.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/twilio.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/user_control_flow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/valyu.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/visualization.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/webbrowser.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/webex.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/website.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/webtools.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/whatsapp.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/wikipedia.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/x.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/yfinance.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/youtube.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/zendesk.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/zep.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tools/zoom.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tracing/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tracing/exporter.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tracing/schemas.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/tracing/setup.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/audio.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/certs.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/code_execution.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/common.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/cryptography.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/dttm.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/enum.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/env.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/events.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/format_str.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/functions.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/gemini.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/hooks.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/http.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/json_schema.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/knowledge.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/location.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/log.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/media.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/merge_dict.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/message.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/claude.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/cohere.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/llama.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/mistral.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/models/watsonx.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/openai.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/os.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/pickle.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/pprint.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/prompts.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/reasoning.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/remote.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/response.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/response_iterator.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/safe_formatter.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/serialize.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/shell.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/streamlit.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/team.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/timer.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/tokens.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/tools.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/web.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/whatsapp.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/utils/yaml_io.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/base.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/distance.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/search.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/__init__.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/agent.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/parallel.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/step.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/types.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno/workflow/workflow.py +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.3.21 → agno-2.3.22}/agno.egg-info/top_level.txt +0 -0
- {agno-2.3.21 → agno-2.3.22}/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.22
|
|
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
|
|
@@ -157,7 +157,7 @@ Requires-Dist: mcp>=1.9.2; extra == "mcp"
|
|
|
157
157
|
Provides-Extra: mem0
|
|
158
158
|
Requires-Dist: mem0ai; extra == "mem0"
|
|
159
159
|
Provides-Extra: memori
|
|
160
|
-
Requires-Dist:
|
|
160
|
+
Requires-Dist: memori>=3.0.5; extra == "memori"
|
|
161
161
|
Provides-Extra: newspaper
|
|
162
162
|
Requires-Dist: newspaper4k; extra == "newspaper"
|
|
163
163
|
Requires-Dist: lxml_html_clean; extra == "newspaper"
|
|
@@ -425,23 +425,22 @@ Dynamic: license-file
|
|
|
425
425
|
|
|
426
426
|
Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
|
|
427
427
|
|
|
428
|
-
- **Build** agents, teams, and workflows with memory, knowledge, guardrails
|
|
428
|
+
- **Build** agents, teams, and workflows with memory, knowledge, guardrails and 100+ integrations.
|
|
429
429
|
- **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
|
|
430
430
|
- **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
|
|
431
431
|
|
|
432
432
|
## Why Agno?
|
|
433
433
|
|
|
434
|
-
- **Your cloud, your data:**
|
|
435
|
-
- **
|
|
436
|
-
- **
|
|
434
|
+
- **Your cloud, your data:** Runs entirely in your infrastructure. Nothing leaves your environment.
|
|
435
|
+
- **Ready for production on day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
|
|
436
|
+
- **Incredibly fast:** 529× faster than LangGraph, 24× lower memory.
|
|
437
437
|
|
|
438
438
|
## Getting Started
|
|
439
439
|
|
|
440
|
-
|
|
440
|
+
Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started), then:
|
|
441
441
|
|
|
442
|
-
Then:
|
|
443
442
|
- Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
|
|
444
|
-
- Read the [docs](https://docs.agno.com) to learn more
|
|
443
|
+
- Read the [docs](https://docs.agno.com) to learn more
|
|
445
444
|
|
|
446
445
|
## Resources
|
|
447
446
|
|
|
@@ -509,26 +508,26 @@ This isn't a privacy mode or enterprise add-on. It's how Agno works.
|
|
|
509
508
|
|
|
510
509
|
## Features
|
|
511
510
|
|
|
512
|
-
|
|
511
|
+
### Core:
|
|
513
512
|
- Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
|
|
514
513
|
- Type-safe I/O with `input_schema` and `output_schema`
|
|
515
514
|
- Async-first, built for long-running tasks
|
|
516
515
|
- Natively multimodal (text, images, audio, video, files)
|
|
517
516
|
|
|
518
|
-
|
|
517
|
+
### Memory & Knowledge:
|
|
519
518
|
- Persistent storage for session history and state
|
|
520
519
|
- User memory that persists across sessions
|
|
521
520
|
- Agentic RAG with 20+ vector stores, hybrid search, reranking
|
|
522
521
|
- Culture — shared long-term memory across agents
|
|
523
522
|
|
|
524
|
-
|
|
523
|
+
### Execution:
|
|
525
524
|
- Human-in-the-loop (confirmations, approvals, overrides)
|
|
526
525
|
- Guardrails for validation and security
|
|
527
526
|
- Pre/post hooks for the agent lifecycle
|
|
528
527
|
- First-class MCP and A2A support
|
|
529
528
|
- 100+ built-in toolkits
|
|
530
529
|
|
|
531
|
-
|
|
530
|
+
### Production:
|
|
532
531
|
- Ready-to-use FastAPI runtime
|
|
533
532
|
- Integrated control plane UI
|
|
534
533
|
- Evals for accuracy, performance, latency
|
|
@@ -546,7 +545,7 @@ We're obsessive about performance because agent workloads spawn hundreds of inst
|
|
|
546
545
|
| Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
|
|
547
546
|
| Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
|
|
548
547
|
|
|
549
|
-
Run the benchmarks yourself: [`cookbook/
|
|
548
|
+
Run the benchmarks yourself: [`cookbook/12_evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/12_evals/performance)
|
|
550
549
|
|
|
551
550
|
https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
|
|
552
551
|
|
|
@@ -21,23 +21,22 @@
|
|
|
21
21
|
|
|
22
22
|
Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
|
|
23
23
|
|
|
24
|
-
- **Build** agents, teams, and workflows with memory, knowledge, guardrails
|
|
24
|
+
- **Build** agents, teams, and workflows with memory, knowledge, guardrails and 100+ integrations.
|
|
25
25
|
- **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
|
|
26
26
|
- **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
|
|
27
27
|
|
|
28
28
|
## Why Agno?
|
|
29
29
|
|
|
30
|
-
- **Your cloud, your data:**
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
30
|
+
- **Your cloud, your data:** Runs entirely in your infrastructure. Nothing leaves your environment.
|
|
31
|
+
- **Ready for production on day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
|
|
32
|
+
- **Incredibly fast:** 529× faster than LangGraph, 24× lower memory.
|
|
33
33
|
|
|
34
34
|
## Getting Started
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started), then:
|
|
37
37
|
|
|
38
|
-
Then:
|
|
39
38
|
- Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
|
|
40
|
-
- Read the [docs](https://docs.agno.com) to learn more
|
|
39
|
+
- Read the [docs](https://docs.agno.com) to learn more
|
|
41
40
|
|
|
42
41
|
## Resources
|
|
43
42
|
|
|
@@ -105,26 +104,26 @@ This isn't a privacy mode or enterprise add-on. It's how Agno works.
|
|
|
105
104
|
|
|
106
105
|
## Features
|
|
107
106
|
|
|
108
|
-
|
|
107
|
+
### Core:
|
|
109
108
|
- Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
|
|
110
109
|
- Type-safe I/O with `input_schema` and `output_schema`
|
|
111
110
|
- Async-first, built for long-running tasks
|
|
112
111
|
- Natively multimodal (text, images, audio, video, files)
|
|
113
112
|
|
|
114
|
-
|
|
113
|
+
### Memory & Knowledge:
|
|
115
114
|
- Persistent storage for session history and state
|
|
116
115
|
- User memory that persists across sessions
|
|
117
116
|
- Agentic RAG with 20+ vector stores, hybrid search, reranking
|
|
118
117
|
- Culture — shared long-term memory across agents
|
|
119
118
|
|
|
120
|
-
|
|
119
|
+
### Execution:
|
|
121
120
|
- Human-in-the-loop (confirmations, approvals, overrides)
|
|
122
121
|
- Guardrails for validation and security
|
|
123
122
|
- Pre/post hooks for the agent lifecycle
|
|
124
123
|
- First-class MCP and A2A support
|
|
125
124
|
- 100+ built-in toolkits
|
|
126
125
|
|
|
127
|
-
|
|
126
|
+
### Production:
|
|
128
127
|
- Ready-to-use FastAPI runtime
|
|
129
128
|
- Integrated control plane UI
|
|
130
129
|
- Evals for accuracy, performance, latency
|
|
@@ -142,7 +141,7 @@ We're obsessive about performance because agent workloads spawn hundreds of inst
|
|
|
142
141
|
| Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
|
|
143
142
|
| Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
|
|
144
143
|
|
|
145
|
-
Run the benchmarks yourself: [`cookbook/
|
|
144
|
+
Run the benchmarks yourself: [`cookbook/12_evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/12_evals/performance)
|
|
146
145
|
|
|
147
146
|
https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
|
|
148
147
|
|
|
@@ -77,6 +77,7 @@ from agno.run.requirement import RunRequirement
|
|
|
77
77
|
from agno.run.team import TeamRunOutputEvent
|
|
78
78
|
from agno.session import AgentSession, SessionSummaryManager, TeamSession, WorkflowSession
|
|
79
79
|
from agno.session.summary import SessionSummary
|
|
80
|
+
from agno.skills import Skills
|
|
80
81
|
from agno.tools import Toolkit
|
|
81
82
|
from agno.tools.function import Function
|
|
82
83
|
from agno.utils.agent import (
|
|
@@ -264,6 +265,10 @@ class Agent:
|
|
|
264
265
|
knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None
|
|
265
266
|
references_format: Literal["json", "yaml"] = "json"
|
|
266
267
|
|
|
268
|
+
# --- Skills ---
|
|
269
|
+
# Skills provide structured instructions, reference docs, and scripts for agents
|
|
270
|
+
skills: Optional[Skills] = None
|
|
271
|
+
|
|
267
272
|
# --- Agent Tools ---
|
|
268
273
|
# A list of tools provided to the Model.
|
|
269
274
|
# Tools are functions the model may generate JSON inputs for.
|
|
@@ -487,6 +492,7 @@ class Agent:
|
|
|
487
492
|
add_knowledge_to_context: bool = False,
|
|
488
493
|
knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
|
|
489
494
|
references_format: Literal["json", "yaml"] = "json",
|
|
495
|
+
skills: Optional[Skills] = None,
|
|
490
496
|
metadata: Optional[Dict[str, Any]] = None,
|
|
491
497
|
tools: Optional[Sequence[Union[Toolkit, Callable, Function, Dict]]] = None,
|
|
492
498
|
tool_call_limit: Optional[int] = None,
|
|
@@ -610,6 +616,8 @@ class Agent:
|
|
|
610
616
|
self.knowledge_retriever = knowledge_retriever
|
|
611
617
|
self.references_format = references_format
|
|
612
618
|
|
|
619
|
+
self.skills = skills
|
|
620
|
+
|
|
613
621
|
self.metadata = metadata
|
|
614
622
|
|
|
615
623
|
self.tools = list(tools) if tools else []
|
|
@@ -6396,6 +6404,10 @@ class Agent:
|
|
|
6396
6404
|
if self.update_knowledge:
|
|
6397
6405
|
agent_tools.append(self.add_to_knowledge)
|
|
6398
6406
|
|
|
6407
|
+
# Add tools for accessing skills
|
|
6408
|
+
if self.skills is not None:
|
|
6409
|
+
agent_tools.extend(self.skills.get_tools())
|
|
6410
|
+
|
|
6399
6411
|
return agent_tools
|
|
6400
6412
|
|
|
6401
6413
|
async def aget_tools(
|
|
@@ -6489,6 +6501,10 @@ class Agent:
|
|
|
6489
6501
|
if self.update_knowledge:
|
|
6490
6502
|
agent_tools.append(self.add_to_knowledge)
|
|
6491
6503
|
|
|
6504
|
+
# Add tools for accessing skills
|
|
6505
|
+
if self.skills is not None:
|
|
6506
|
+
agent_tools.extend(self.skills.get_tools())
|
|
6507
|
+
|
|
6492
6508
|
return agent_tools
|
|
6493
6509
|
|
|
6494
6510
|
def _determine_tools_for_model(
|
|
@@ -7171,7 +7187,6 @@ class Agent:
|
|
|
7171
7187
|
"""
|
|
7172
7188
|
if self._has_async_db():
|
|
7173
7189
|
raise ValueError("Async database not supported for save_session")
|
|
7174
|
-
|
|
7175
7190
|
# If the agent is a member of a team, do not save the session to the database
|
|
7176
7191
|
if (
|
|
7177
7192
|
self.db is not None
|
|
@@ -7937,6 +7952,11 @@ class Agent:
|
|
|
7937
7952
|
# 3.3.8 Then add additional context
|
|
7938
7953
|
if self.additional_context is not None:
|
|
7939
7954
|
system_message_content += f"{self.additional_context}\n"
|
|
7955
|
+
# 3.3.8.1 Then add skills to the system prompt
|
|
7956
|
+
if self.skills is not None:
|
|
7957
|
+
skills_snippet = self.skills.get_system_prompt_snippet()
|
|
7958
|
+
if skills_snippet:
|
|
7959
|
+
system_message_content += f"\n{skills_snippet}\n"
|
|
7940
7960
|
# 3.3.9 Then add memories to the system prompt
|
|
7941
7961
|
if self.add_memories_to_context:
|
|
7942
7962
|
_memory_manager_not_set = False
|
|
@@ -8281,6 +8301,11 @@ class Agent:
|
|
|
8281
8301
|
# 3.3.8 Then add additional context
|
|
8282
8302
|
if self.additional_context is not None:
|
|
8283
8303
|
system_message_content += f"{self.additional_context}\n"
|
|
8304
|
+
# 3.3.8.1 Then add skills to the system prompt
|
|
8305
|
+
if self.skills is not None:
|
|
8306
|
+
skills_snippet = self.skills.get_system_prompt_snippet()
|
|
8307
|
+
if skills_snippet:
|
|
8308
|
+
system_message_content += f"\n{skills_snippet}\n"
|
|
8284
8309
|
# 3.3.9 Then add memories to the system prompt
|
|
8285
8310
|
if self.add_memories_to_context:
|
|
8286
8311
|
_memory_manager_not_set = False
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import time
|
|
3
2
|
from dataclasses import dataclass, field
|
|
4
3
|
from typing import TYPE_CHECKING, Any, AsyncIterator, Dict, List, Literal, Optional, Sequence, Tuple, Union, overload
|
|
5
4
|
|
|
@@ -29,19 +28,25 @@ class RemoteAgent(BaseRemote):
|
|
|
29
28
|
base_url: str,
|
|
30
29
|
agent_id: str,
|
|
31
30
|
timeout: float = 60.0,
|
|
31
|
+
protocol: Literal["agentos", "a2a"] = "agentos",
|
|
32
|
+
a2a_protocol: Literal["json-rpc", "rest"] = "rest",
|
|
32
33
|
config_ttl: float = 300.0,
|
|
33
34
|
):
|
|
34
|
-
"""Initialize
|
|
35
|
+
"""Initialize RemoteAgent for remote execution.
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
Supports two protocols:
|
|
38
|
+
- "agentos": Agno's proprietary AgentOS REST API (default)
|
|
39
|
+
- "a2a": A2A (Agent-to-Agent) protocol for cross-framework communication
|
|
37
40
|
|
|
38
41
|
Args:
|
|
39
|
-
base_url: Base URL for remote
|
|
40
|
-
agent_id: ID of remote agent
|
|
42
|
+
base_url: Base URL for remote instance (e.g., "http://localhost:7777")
|
|
43
|
+
agent_id: ID of remote agent on the remote server
|
|
41
44
|
timeout: Request timeout in seconds (default: 60)
|
|
45
|
+
protocol: Communication protocol - "agentos" (default) or "a2a"
|
|
46
|
+
a2a_protocol: For A2A protocol only - Whether to use JSON-RPC or REST protocol.
|
|
42
47
|
config_ttl: Time-to-live for cached config in seconds (default: 300)
|
|
43
48
|
"""
|
|
44
|
-
super().__init__(base_url, timeout, config_ttl)
|
|
49
|
+
super().__init__(base_url, timeout, protocol, a2a_protocol, config_ttl)
|
|
45
50
|
self.agent_id = agent_id
|
|
46
51
|
self._cached_agent_config = None
|
|
47
52
|
|
|
@@ -50,14 +55,48 @@ class RemoteAgent(BaseRemote):
|
|
|
50
55
|
return self.agent_id
|
|
51
56
|
|
|
52
57
|
async def get_agent_config(self) -> "AgentResponse":
|
|
53
|
-
"""
|
|
54
|
-
|
|
58
|
+
"""
|
|
59
|
+
Get the agent config from remote.
|
|
60
|
+
|
|
61
|
+
For A2A protocol, returns a minimal AgentResponse since A2A servers
|
|
62
|
+
don't expose the same config endpoints as AgentOS. For AgentOS, always fetches fresh config.
|
|
63
|
+
"""
|
|
64
|
+
from agno.os.routers.agents.schema import AgentResponse
|
|
65
|
+
|
|
66
|
+
if self.a2a_client:
|
|
67
|
+
from agno.client.a2a.schemas import AgentCard
|
|
68
|
+
|
|
69
|
+
agent_card: Optional[AgentCard] = await self.a2a_client.aget_agent_card()
|
|
70
|
+
|
|
71
|
+
return AgentResponse(
|
|
72
|
+
id=self.agent_id,
|
|
73
|
+
name=agent_card.name if agent_card else self.agent_id,
|
|
74
|
+
description=agent_card.description if agent_card else f"A2A agent: {self.agent_id}",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return await self.agentos_client.aget_agent(self.agent_id) # type: ignore
|
|
55
78
|
|
|
56
79
|
@property
|
|
57
|
-
def _agent_config(self) -> "AgentResponse":
|
|
58
|
-
"""
|
|
80
|
+
def _agent_config(self) -> Optional["AgentResponse"]:
|
|
81
|
+
"""
|
|
82
|
+
Get the agent config from remote, cached with TTL.
|
|
83
|
+
Returns None for A2A protocol since A2A servers don't expose agent config endpoints.
|
|
84
|
+
"""
|
|
85
|
+
import time
|
|
86
|
+
|
|
59
87
|
from agno.os.routers.agents.schema import AgentResponse
|
|
60
88
|
|
|
89
|
+
if self.a2a_client:
|
|
90
|
+
from agno.client.a2a.schemas import AgentCard
|
|
91
|
+
|
|
92
|
+
agent_card: Optional[AgentCard] = self.a2a_client.get_agent_card()
|
|
93
|
+
|
|
94
|
+
return AgentResponse(
|
|
95
|
+
id=self.agent_id,
|
|
96
|
+
name=agent_card.name if agent_card else self.agent_id,
|
|
97
|
+
description=agent_card.description if agent_card else f"A2A agent: {self.agent_id}",
|
|
98
|
+
)
|
|
99
|
+
|
|
61
100
|
current_time = time.time()
|
|
62
101
|
|
|
63
102
|
# Check if cache is valid
|
|
@@ -67,15 +106,24 @@ class RemoteAgent(BaseRemote):
|
|
|
67
106
|
return config
|
|
68
107
|
|
|
69
108
|
# Fetch fresh config
|
|
70
|
-
config: AgentResponse = self.
|
|
109
|
+
config: AgentResponse = self.agentos_client.get_agent(self.agent_id) # type: ignore
|
|
71
110
|
self._cached_agent_config = (config, current_time)
|
|
72
111
|
return config
|
|
73
112
|
|
|
74
|
-
def refresh_config(self) -> "AgentResponse":
|
|
75
|
-
"""
|
|
113
|
+
async def refresh_config(self) -> Optional["AgentResponse"]:
|
|
114
|
+
"""
|
|
115
|
+
Force refresh the cached agent config.
|
|
116
|
+
Returns None for A2A protocol.
|
|
117
|
+
"""
|
|
118
|
+
import time
|
|
119
|
+
|
|
76
120
|
from agno.os.routers.agents.schema import AgentResponse
|
|
77
121
|
|
|
78
|
-
|
|
122
|
+
if self.a2a_client:
|
|
123
|
+
self._cached_agent_config = None
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
config: AgentResponse = await self.agentos_client.aget_agent(self.agent_id) # type: ignore
|
|
79
127
|
self._cached_agent_config = (config, time.time())
|
|
80
128
|
return config
|
|
81
129
|
|
|
@@ -91,7 +139,6 @@ class RemoteAgent(BaseRemote):
|
|
|
91
139
|
return self._agent_config.description
|
|
92
140
|
return ""
|
|
93
141
|
|
|
94
|
-
@property
|
|
95
142
|
def role(self) -> Optional[str]:
|
|
96
143
|
if self._agent_config is not None:
|
|
97
144
|
return self._agent_config.role
|
|
@@ -109,23 +156,27 @@ class RemoteAgent(BaseRemote):
|
|
|
109
156
|
|
|
110
157
|
@property
|
|
111
158
|
def db(self) -> Optional[RemoteDb]:
|
|
112
|
-
if
|
|
159
|
+
if (
|
|
160
|
+
self.agentos_client
|
|
161
|
+
and self._config
|
|
162
|
+
and self._agent_config is not None
|
|
163
|
+
and self._agent_config.db_id is not None
|
|
164
|
+
):
|
|
113
165
|
return RemoteDb.from_config(
|
|
114
166
|
db_id=self._agent_config.db_id,
|
|
115
|
-
client=self.
|
|
167
|
+
client=self.agentos_client,
|
|
116
168
|
config=self._config,
|
|
117
169
|
)
|
|
118
170
|
return None
|
|
119
171
|
|
|
120
172
|
@property
|
|
121
173
|
def knowledge(self) -> Optional[RemoteKnowledge]:
|
|
122
|
-
|
|
123
|
-
if self._agent_config is not None and self._agent_config.knowledge is not None:
|
|
174
|
+
if self.agentos_client and self._agent_config is not None and self._agent_config.knowledge is not None:
|
|
124
175
|
return RemoteKnowledge(
|
|
125
|
-
client=self.
|
|
176
|
+
client=self.agentos_client,
|
|
126
177
|
contents_db=RemoteDb(
|
|
127
178
|
id=self._agent_config.knowledge.get("db_id"), # type: ignore
|
|
128
|
-
client=self.
|
|
179
|
+
client=self.agentos_client,
|
|
129
180
|
knowledge_table_name=self._agent_config.knowledge.get("knowledge_table"),
|
|
130
181
|
)
|
|
131
182
|
if self._agent_config.knowledge.get("db_id") is not None
|
|
@@ -139,7 +190,7 @@ class RemoteAgent(BaseRemote):
|
|
|
139
190
|
return None
|
|
140
191
|
|
|
141
192
|
async def aget_tools(self, **kwargs: Any) -> List[Dict]:
|
|
142
|
-
if self._agent_config.tools is not None:
|
|
193
|
+
if self._agent_config is not None and self._agent_config.tools is not None:
|
|
143
194
|
return json.loads(self._agent_config.tools["tools"])
|
|
144
195
|
return []
|
|
145
196
|
|
|
@@ -222,52 +273,156 @@ class RemoteAgent(BaseRemote):
|
|
|
222
273
|
serialized_input = serialize_input(validated_input)
|
|
223
274
|
headers = self._get_auth_headers(auth_token)
|
|
224
275
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
return self.
|
|
228
|
-
agent_id=self.agent_id,
|
|
276
|
+
# A2A protocol path
|
|
277
|
+
if self.a2a_client:
|
|
278
|
+
return self._arun_a2a( # type: ignore[return-value]
|
|
229
279
|
message=serialized_input,
|
|
230
|
-
|
|
280
|
+
stream=stream or False,
|
|
231
281
|
user_id=user_id,
|
|
282
|
+
context_id=session_id, # Map session_id → context_id for A2A
|
|
232
283
|
audio=audio,
|
|
233
284
|
images=images,
|
|
234
285
|
videos=videos,
|
|
235
286
|
files=files,
|
|
236
|
-
session_state=session_state,
|
|
237
|
-
stream_events=stream_events,
|
|
238
|
-
retries=retries,
|
|
239
|
-
knowledge_filters=knowledge_filters,
|
|
240
|
-
add_history_to_context=add_history_to_context,
|
|
241
|
-
add_dependencies_to_context=add_dependencies_to_context,
|
|
242
|
-
add_session_state_to_context=add_session_state_to_context,
|
|
243
|
-
dependencies=dependencies,
|
|
244
|
-
metadata=metadata,
|
|
245
287
|
headers=headers,
|
|
246
|
-
**kwargs,
|
|
247
288
|
)
|
|
289
|
+
|
|
290
|
+
# AgentOS protocol path (default)
|
|
291
|
+
if self.agentos_client:
|
|
292
|
+
if stream:
|
|
293
|
+
# Handle streaming response
|
|
294
|
+
return self.agentos_client.run_agent_stream(
|
|
295
|
+
agent_id=self.agent_id,
|
|
296
|
+
message=serialized_input,
|
|
297
|
+
session_id=session_id,
|
|
298
|
+
user_id=user_id,
|
|
299
|
+
audio=audio,
|
|
300
|
+
images=images,
|
|
301
|
+
videos=videos,
|
|
302
|
+
files=files,
|
|
303
|
+
session_state=session_state,
|
|
304
|
+
stream_events=stream_events,
|
|
305
|
+
retries=retries,
|
|
306
|
+
knowledge_filters=knowledge_filters,
|
|
307
|
+
add_history_to_context=add_history_to_context,
|
|
308
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
309
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
310
|
+
dependencies=dependencies,
|
|
311
|
+
metadata=metadata,
|
|
312
|
+
headers=headers,
|
|
313
|
+
**kwargs,
|
|
314
|
+
)
|
|
315
|
+
else:
|
|
316
|
+
return self.agentos_client.run_agent( # type: ignore
|
|
317
|
+
agent_id=self.agent_id,
|
|
318
|
+
message=serialized_input,
|
|
319
|
+
session_id=session_id,
|
|
320
|
+
user_id=user_id,
|
|
321
|
+
audio=audio,
|
|
322
|
+
images=images,
|
|
323
|
+
videos=videos,
|
|
324
|
+
files=files,
|
|
325
|
+
session_state=session_state,
|
|
326
|
+
stream_events=stream_events,
|
|
327
|
+
retries=retries,
|
|
328
|
+
knowledge_filters=knowledge_filters,
|
|
329
|
+
add_history_to_context=add_history_to_context,
|
|
330
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
331
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
332
|
+
dependencies=dependencies,
|
|
333
|
+
metadata=metadata,
|
|
334
|
+
headers=headers,
|
|
335
|
+
**kwargs,
|
|
336
|
+
)
|
|
248
337
|
else:
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
338
|
+
raise ValueError("No client available")
|
|
339
|
+
|
|
340
|
+
def _arun_a2a(
|
|
341
|
+
self,
|
|
342
|
+
message: str,
|
|
343
|
+
stream: bool,
|
|
344
|
+
user_id: Optional[str],
|
|
345
|
+
context_id: Optional[str],
|
|
346
|
+
audio: Optional[Sequence[Audio]],
|
|
347
|
+
images: Optional[Sequence[Image]],
|
|
348
|
+
videos: Optional[Sequence[Video]],
|
|
349
|
+
files: Optional[Sequence[File]],
|
|
350
|
+
headers: Optional[Dict[str, str]],
|
|
351
|
+
) -> Union[RunOutput, AsyncIterator[RunOutputEvent]]:
|
|
352
|
+
"""Execute via A2A protocol.
|
|
353
|
+
|
|
354
|
+
Args:
|
|
355
|
+
message: Serialized message string
|
|
356
|
+
stream: Whether to stream the response
|
|
357
|
+
user_id: User identifier
|
|
358
|
+
context_id: Session/context ID (maps to session_id)
|
|
359
|
+
audio: Audio files to include
|
|
360
|
+
images: Images to include
|
|
361
|
+
videos: Videos to include
|
|
362
|
+
files: Files to include
|
|
363
|
+
headers: HTTP headers to include in the request (optional)
|
|
364
|
+
|
|
365
|
+
Returns:
|
|
366
|
+
RunOutput for non-streaming, AsyncIterator[RunOutputEvent] for streaming
|
|
367
|
+
"""
|
|
368
|
+
if not self.a2a_client:
|
|
369
|
+
raise ValueError("A2A client not available")
|
|
370
|
+
from agno.client.a2a.utils import map_stream_events_to_run_events
|
|
371
|
+
|
|
372
|
+
if stream:
|
|
373
|
+
# Return async generator for streaming
|
|
374
|
+
event_stream = self.a2a_client.stream_message(
|
|
375
|
+
message=message,
|
|
376
|
+
context_id=context_id,
|
|
253
377
|
user_id=user_id,
|
|
378
|
+
images=list(images) if images else None,
|
|
379
|
+
audio=list(audio) if audio else None,
|
|
380
|
+
videos=list(videos) if videos else None,
|
|
381
|
+
files=list(files) if files else None,
|
|
382
|
+
headers=headers,
|
|
383
|
+
)
|
|
384
|
+
return map_stream_events_to_run_events(event_stream, agent_id=self.agent_id)
|
|
385
|
+
else:
|
|
386
|
+
# Return coroutine for non-streaming
|
|
387
|
+
return self._arun_a2a_send( # type: ignore[return-value]
|
|
388
|
+
message=message,
|
|
389
|
+
user_id=user_id,
|
|
390
|
+
context_id=context_id,
|
|
254
391
|
audio=audio,
|
|
255
392
|
images=images,
|
|
256
393
|
videos=videos,
|
|
257
394
|
files=files,
|
|
258
|
-
session_state=session_state,
|
|
259
|
-
stream_events=stream_events,
|
|
260
|
-
retries=retries,
|
|
261
|
-
knowledge_filters=knowledge_filters,
|
|
262
|
-
add_history_to_context=add_history_to_context,
|
|
263
|
-
add_dependencies_to_context=add_dependencies_to_context,
|
|
264
|
-
add_session_state_to_context=add_session_state_to_context,
|
|
265
|
-
dependencies=dependencies,
|
|
266
|
-
metadata=metadata,
|
|
267
395
|
headers=headers,
|
|
268
|
-
**kwargs,
|
|
269
396
|
)
|
|
270
397
|
|
|
398
|
+
async def _arun_a2a_send(
|
|
399
|
+
self,
|
|
400
|
+
message: str,
|
|
401
|
+
user_id: Optional[str],
|
|
402
|
+
context_id: Optional[str],
|
|
403
|
+
audio: Optional[Sequence[Audio]],
|
|
404
|
+
images: Optional[Sequence[Image]],
|
|
405
|
+
videos: Optional[Sequence[Video]],
|
|
406
|
+
files: Optional[Sequence[File]],
|
|
407
|
+
headers: Optional[Dict[str, str]],
|
|
408
|
+
) -> RunOutput:
|
|
409
|
+
"""Send a non-streaming A2A message and convert response to RunOutput."""
|
|
410
|
+
if not self.a2a_client:
|
|
411
|
+
raise ValueError("A2A client not available")
|
|
412
|
+
from agno.client.a2a.utils import map_task_result_to_run_output
|
|
413
|
+
|
|
414
|
+
task_result = await self.a2a_client.send_message(
|
|
415
|
+
message=message,
|
|
416
|
+
context_id=context_id,
|
|
417
|
+
user_id=user_id,
|
|
418
|
+
images=list(images) if images else None,
|
|
419
|
+
audio=list(audio) if audio else None,
|
|
420
|
+
videos=list(videos) if videos else None,
|
|
421
|
+
files=list(files) if files else None,
|
|
422
|
+
headers=headers,
|
|
423
|
+
)
|
|
424
|
+
return map_task_result_to_run_output(task_result, agent_id=self.agent_id, user_id=user_id)
|
|
425
|
+
|
|
271
426
|
@overload
|
|
272
427
|
async def acontinue_run(
|
|
273
428
|
self,
|
|
@@ -307,27 +462,31 @@ class RemoteAgent(BaseRemote):
|
|
|
307
462
|
]:
|
|
308
463
|
headers = self._get_auth_headers(auth_token)
|
|
309
464
|
|
|
310
|
-
if
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
465
|
+
if self.agentos_client:
|
|
466
|
+
if stream:
|
|
467
|
+
# Handle streaming response
|
|
468
|
+
return self.agentos_client.continue_agent_run_stream( # type: ignore
|
|
469
|
+
agent_id=self.agent_id,
|
|
470
|
+
run_id=run_id,
|
|
471
|
+
user_id=user_id,
|
|
472
|
+
session_id=session_id,
|
|
473
|
+
tools=updated_tools,
|
|
474
|
+
headers=headers,
|
|
475
|
+
**kwargs,
|
|
476
|
+
)
|
|
477
|
+
else:
|
|
478
|
+
return self.agentos_client.continue_agent_run( # type: ignore
|
|
479
|
+
agent_id=self.agent_id,
|
|
480
|
+
run_id=run_id,
|
|
481
|
+
tools=updated_tools,
|
|
482
|
+
user_id=user_id,
|
|
483
|
+
session_id=session_id,
|
|
484
|
+
headers=headers,
|
|
485
|
+
**kwargs,
|
|
486
|
+
)
|
|
487
|
+
|
|
321
488
|
else:
|
|
322
|
-
|
|
323
|
-
agent_id=self.agent_id,
|
|
324
|
-
run_id=run_id,
|
|
325
|
-
tools=updated_tools,
|
|
326
|
-
user_id=user_id,
|
|
327
|
-
session_id=session_id,
|
|
328
|
-
headers=headers,
|
|
329
|
-
**kwargs,
|
|
330
|
-
)
|
|
489
|
+
raise ValueError("No client available")
|
|
331
490
|
|
|
332
491
|
async def cancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
|
|
333
492
|
"""Cancel a running agent execution.
|
|
@@ -340,8 +499,10 @@ class RemoteAgent(BaseRemote):
|
|
|
340
499
|
bool: True if the run was successfully cancelled, False otherwise.
|
|
341
500
|
"""
|
|
342
501
|
headers = self._get_auth_headers(auth_token)
|
|
502
|
+
if not self.agentos_client:
|
|
503
|
+
raise ValueError("AgentOS client not available")
|
|
343
504
|
try:
|
|
344
|
-
await self.
|
|
505
|
+
await self.agentos_client.cancel_agent_run(
|
|
345
506
|
agent_id=self.agent_id,
|
|
346
507
|
run_id=run_id,
|
|
347
508
|
headers=headers,
|