agno 1.7.5__tar.gz → 1.7.7__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-1.7.5 → agno-1.7.7}/PKG-INFO +20 -3
- {agno-1.7.5 → agno-1.7.7}/agno/agent/agent.py +5 -24
- {agno-1.7.5 → agno-1.7.7}/agno/app/agui/async_router.py +5 -5
- {agno-1.7.5 → agno-1.7.7}/agno/app/agui/sync_router.py +5 -5
- {agno-1.7.5 → agno-1.7.7}/agno/app/agui/utils.py +84 -14
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/app.py +3 -2
- agno-1.7.7/agno/document/chunking/row.py +39 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/base.py +0 -7
- agno-1.7.7/agno/embedder/jina.py +73 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/openai.py +5 -1
- {agno-1.7.5 → agno-1.7.7}/agno/memory/agent.py +2 -2
- {agno-1.7.5 → agno-1.7.7}/agno/memory/team.py +2 -2
- {agno-1.7.5 → agno-1.7.7}/agno/models/anthropic/claude.py +9 -1
- {agno-1.7.5 → agno-1.7.7}/agno/models/aws/bedrock.py +311 -15
- {agno-1.7.5 → agno-1.7.7}/agno/models/google/gemini.py +26 -6
- {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/chat.py +38 -7
- {agno-1.7.5 → agno-1.7.7}/agno/models/message.py +1 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/openai/chat.py +1 -22
- {agno-1.7.5 → agno-1.7.7}/agno/models/openai/responses.py +5 -5
- agno-1.7.7/agno/models/portkey/__init__.py +3 -0
- agno-1.7.7/agno/models/portkey/portkey.py +88 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/xai/xai.py +54 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/v2/workflow.py +4 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/mysql.py +2 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/postgres.py +5 -3
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/v2/workflow.py +29 -5
- {agno-1.7.5 → agno-1.7.7}/agno/storage/singlestore.py +4 -1
- {agno-1.7.5 → agno-1.7.7}/agno/storage/sqlite.py +0 -1
- {agno-1.7.5 → agno-1.7.7}/agno/team/team.py +38 -36
- agno-1.7.7/agno/tools/bitbucket.py +292 -0
- agno-1.7.7/agno/tools/daytona.py +478 -0
- agno-1.7.7/agno/tools/evm.py +123 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/jina.py +13 -6
- agno-1.7.7/agno/tools/linkup.py +54 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/mcp.py +170 -26
- {agno-1.7.5 → agno-1.7.7}/agno/tools/mem0.py +15 -2
- agno-1.7.7/agno/tools/models/morph.py +186 -0
- agno-1.7.7/agno/tools/postgres.py +265 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/zep.py +21 -32
- {agno-1.7.5 → agno-1.7.7}/agno/utils/log.py +16 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/claude.py +1 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/string.py +14 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/pgvector.py +4 -5
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/workflow.py +152 -25
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/workflow.py +90 -63
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/PKG-INFO +20 -3
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/SOURCES.txt +8 -0
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/requires.txt +24 -1
- {agno-1.7.5 → agno-1.7.7}/pyproject.toml +23 -6
- agno-1.7.5/agno/tools/daytona.py +0 -130
- agno-1.7.5/agno/tools/postgres.py +0 -247
- {agno-1.7.5 → agno-1.7.7}/LICENSE +0 -0
- {agno-1.7.5 → agno-1.7.7}/README.md +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/agent/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/agent/metrics.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/agent.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/api.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/evals.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/playground.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/routes.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/agent.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/evals.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/playground.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/response.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/team.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/user.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/workflows.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/workspace.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/team.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/user.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/workflows.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/api/workspace.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/agui/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/agui/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/discord/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/discord/client.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/async_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/sync_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/async_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/deploy.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/operator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/schemas.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/serve.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/settings.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/sync_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/playground/utils.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/settings.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/slack/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/slack/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/slack/async_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/slack/security.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/slack/sync_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/utils.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/async_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/security.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/sync_router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/auth_server.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/config.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/console.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/credentials.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/entrypoint.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/operator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/settings.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/ws/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/cli/ws/ws_cli.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/constants.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/debug.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/agentic.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/document.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/fixed.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/markdown.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/recursive.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/semantic.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/strategy.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/arxiv_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/csv_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/docx_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/firecrawl_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/gcs/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/gcs/pdf_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/json_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/markdown_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/pdf_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/pdf_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/text_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/text_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/url_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/website_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/document/reader/youtube_reader.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/aws_bedrock.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/azure_openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/cohere.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/fastembed.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/fireworks.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/google.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/huggingface.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/langdb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/mistral.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/nebius.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/ollama.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/sentence_transformer.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/together.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/embedder/voyageai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/eval/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/eval/accuracy.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/eval/performance.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/eval/reliability.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/eval/utils.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/exceptions.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/file/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/file/file.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/file/local/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/file/local/csv.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/file/local/txt.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/context.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/db_app.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/resource.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/infra/resources.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/agent.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/arxiv.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/combined.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/csv.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/csv_url.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/document.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/docx.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/firecrawl.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/pdf.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/json.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/langchain.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/light_rag.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/llamaindex.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/markdown.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf_bytes.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf_url.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/pdf.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/text.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/text.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/url.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/website.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/wikipedia.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/knowledge/youtube.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/media.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/classifier.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/db/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/db/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/db/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/db/postgres.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/db/sqlite.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/manager.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/memory.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/row.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/summarizer.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/summary.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/firestore.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/postgres.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/redis.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/schema.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/sqlite.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/manager.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/memory.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/schema.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/summarizer.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/memory/workflow.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/aimlapi/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/anthropic/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/aws/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/aws/claude.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/azure/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/azure/ai_foundry.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/azure/openai_chat.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/cerebras.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/cohere/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/cohere/chat.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/deepinfra/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/deepseek/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/deepseek/deepseek.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/defaults.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/fireworks/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/fireworks/fireworks.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/google/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/groq/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/groq/groq.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/huggingface/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/huggingface/huggingface.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/ibm/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/ibm/watsonx.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/internlm/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/internlm/internlm.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/langdb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/langdb/langdb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/lmstudio/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/meta/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/meta/llama.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/meta/llama_openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/mistral/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/mistral/mistral.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/nebius/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/nebius/nebius.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/nvidia/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/nvidia/nvidia.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/chat.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/tools.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/openai/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/openai/like.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/openrouter/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/openrouter/openrouter.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/perplexity/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/perplexity/perplexity.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/response.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/sambanova/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/sambanova/sambanova.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/together/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/together/together.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/vercel/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/vercel/v0.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/vllm/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/vllm/vllm.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/models/xai/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/playground/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/playground/deploy.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/playground/playground.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/playground/serve.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/playground/settings.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/py.typed +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/deepseek.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/default.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/groq.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/helpers.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/ollama.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reasoning/step.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reranker/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reranker/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reranker/cohere.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reranker/infinity.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/reranker/sentence_transformer.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/messages.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/response.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/team.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/v2/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/run/workflow.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/dynamodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/json.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/postgres.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/singlestore.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/sqlite.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/yaml.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/dynamodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/firestore.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/gcs_json.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/json.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/redis.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/agent.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/team.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/v2/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/session/workflow.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/postgres.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/sqlite.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/storage/yaml.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/team/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/agentql.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/airflow.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/api.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/apify.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/arxiv.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/aws_lambda.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/aws_ses.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/baidusearch.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/bravesearch.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/brightdata.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/browserbase.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/calcom.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/calculator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/cartesia.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/clickup_tool.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/confluence.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/crawl4ai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/csv_toolkit.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/dalle.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/decorator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/desi_vocal.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/discord.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/docker.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/duckdb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/duckduckgo.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/e2b.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/eleven_labs.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/email.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/exa.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/fal.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/file.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/financial_datasets.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/firecrawl.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/function.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/giphy.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/github.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/gmail.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/google_bigquery.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/google_maps.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/googlecalendar.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/googlesearch.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/googlesheets.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/hackernews.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/jira.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/knowledge.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/linear.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/local_file_system.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/lumalab.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/mlx_transcribe.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models/azure_openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models/gemini.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models/groq.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models/nebius.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/models_labs.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/moviepy_video.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/newspaper.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/newspaper4k.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/openbb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/opencv.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/openweather.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/oxylabs.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/pandas.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/pubmed.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/python.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/reasoning.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/reddit.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/replicate.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/resend.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/scrapegraph.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/searxng.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/serpapi.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/serper.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/shell.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/slack.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/sleep.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/spider.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/sql.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/streamlit/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/streamlit/components.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/tavily.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/telegram.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/thinking.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/todoist.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/tool_registry.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/toolkit.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/trello.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/twilio.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/user_control_flow.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/valyu.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/visualization.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/webbrowser.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/webex.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/website.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/webtools.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/whatsapp.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/wikipedia.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/x.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/yfinance.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/youtube.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/zendesk.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/tools/zoom.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/audio.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/certs.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/code_execution.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/common.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/defaults.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/dttm.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/enum.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/env.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/events.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/filesystem.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/format_str.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/functions.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/gemini.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/git.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/http.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/json_io.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/json_schema.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/load_env.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/location.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/mcp.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/media.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/merge_dict.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/message.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/ai_foundry.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/aws_claude.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/cohere.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/llama.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/mistral.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/openai_responses.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/schema_utils.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/models/watsonx.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/openai.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/pickle.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/pprint.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/prompts.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/py_io.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/pyproject.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/resource_filter.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/response.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/response_iterator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/safe_formatter.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/shell.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/timer.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/tools.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/web.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/whatsapp.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/utils/yaml_io.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/base.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/index.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/distance.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/index.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/search.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/index.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/index.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/condition.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/loop.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/parallel.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/router.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/step.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/steps.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/types.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/__init__.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/config.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/enums.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/helpers.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/operator.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno/workspace/settings.py +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/dependency_links.txt +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/entry_points.txt +0 -0
- {agno-1.7.5 → agno-1.7.7}/agno.egg-info/top_level.txt +0 -0
- {agno-1.7.5 → agno-1.7.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.7
|
|
4
4
|
Summary: Agno: a lightweight library for building Multi-Agent Systems
|
|
5
5
|
Author-email: Ashpreet Bedi <ashpreet@agno.com>
|
|
6
6
|
License: Copyright (c) Agno, Inc.
|
|
@@ -421,7 +421,6 @@ Requires-Dist: types-pyyaml; extra == "dev"
|
|
|
421
421
|
Requires-Dist: types-aiofiles; extra == "dev"
|
|
422
422
|
Requires-Dist: fastapi; extra == "dev"
|
|
423
423
|
Requires-Dist: uvicorn; extra == "dev"
|
|
424
|
-
Requires-Dist: arxiv; extra == "dev"
|
|
425
424
|
Provides-Extra: integration-tests
|
|
426
425
|
Requires-Dist: exa_py; extra == "integration-tests"
|
|
427
426
|
Requires-Dist: duckduckgo-search; extra == "integration-tests"
|
|
@@ -443,6 +442,9 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc; extra == "arize"
|
|
|
443
442
|
Requires-Dist: opentelemetry-distro; extra == "arize"
|
|
444
443
|
Provides-Extra: langfuse
|
|
445
444
|
Requires-Dist: langfuse; extra == "langfuse"
|
|
445
|
+
Provides-Extra: aws-bedrock
|
|
446
|
+
Requires-Dist: boto3; extra == "aws-bedrock"
|
|
447
|
+
Requires-Dist: aioboto3; extra == "aws-bedrock"
|
|
446
448
|
Provides-Extra: anthropic
|
|
447
449
|
Requires-Dist: anthropic; extra == "anthropic"
|
|
448
450
|
Provides-Extra: azure
|
|
@@ -472,10 +474,14 @@ Provides-Extra: ollama
|
|
|
472
474
|
Requires-Dist: ollama; extra == "ollama"
|
|
473
475
|
Provides-Extra: openai
|
|
474
476
|
Requires-Dist: openai; extra == "openai"
|
|
477
|
+
Provides-Extra: portkey
|
|
478
|
+
Requires-Dist: portkey-ai; extra == "portkey"
|
|
475
479
|
Provides-Extra: agentql
|
|
476
480
|
Requires-Dist: agentql; extra == "agentql"
|
|
477
481
|
Provides-Extra: apify
|
|
478
482
|
Requires-Dist: apify-client; extra == "apify"
|
|
483
|
+
Provides-Extra: arxiv
|
|
484
|
+
Requires-Dist: arxiv; extra == "arxiv"
|
|
479
485
|
Provides-Extra: brave
|
|
480
486
|
Requires-Dist: brave-search; extra == "brave"
|
|
481
487
|
Provides-Extra: browserbase
|
|
@@ -491,6 +497,8 @@ Provides-Extra: duckdb
|
|
|
491
497
|
Requires-Dist: duckdb; extra == "duckdb"
|
|
492
498
|
Provides-Extra: elevenlabs
|
|
493
499
|
Requires-Dist: elevenlabs; extra == "elevenlabs"
|
|
500
|
+
Provides-Extra: evm
|
|
501
|
+
Requires-Dist: web3; extra == "evm"
|
|
494
502
|
Provides-Extra: exa
|
|
495
503
|
Requires-Dist: exa_py; extra == "exa"
|
|
496
504
|
Provides-Extra: fal
|
|
@@ -521,6 +529,9 @@ Requires-Dist: newspaper4k; extra == "newspaper"
|
|
|
521
529
|
Requires-Dist: lxml_html_clean; extra == "newspaper"
|
|
522
530
|
Provides-Extra: opencv
|
|
523
531
|
Requires-Dist: opencv-python; extra == "opencv"
|
|
532
|
+
Provides-Extra: psycopg
|
|
533
|
+
Requires-Dist: psycopg-binary; extra == "psycopg"
|
|
534
|
+
Requires-Dist: psycopg; extra == "psycopg"
|
|
524
535
|
Provides-Extra: todoist
|
|
525
536
|
Requires-Dist: todoist-api-python; extra == "todoist"
|
|
526
537
|
Provides-Extra: valyu
|
|
@@ -533,13 +544,14 @@ Provides-Extra: youtube
|
|
|
533
544
|
Requires-Dist: youtube_transcript_api; extra == "youtube"
|
|
534
545
|
Provides-Extra: zep
|
|
535
546
|
Requires-Dist: zep-cloud; extra == "zep"
|
|
547
|
+
Provides-Extra: daytona
|
|
548
|
+
Requires-Dist: daytona; extra == "daytona"
|
|
536
549
|
Provides-Extra: oxylabs
|
|
537
550
|
Requires-Dist: oxylabs; extra == "oxylabs"
|
|
538
551
|
Provides-Extra: sql
|
|
539
552
|
Requires-Dist: sqlalchemy; extra == "sql"
|
|
540
553
|
Provides-Extra: postgres
|
|
541
554
|
Requires-Dist: psycopg-binary; extra == "postgres"
|
|
542
|
-
Requires-Dist: psycopg; extra == "postgres"
|
|
543
555
|
Provides-Extra: sqlite
|
|
544
556
|
Requires-Dist: sqlalchemy; extra == "sqlite"
|
|
545
557
|
Provides-Extra: gcs
|
|
@@ -603,6 +615,7 @@ Provides-Extra: aws
|
|
|
603
615
|
Requires-Dist: agno-aws; extra == "aws"
|
|
604
616
|
Requires-Dist: agno-docker; extra == "aws"
|
|
605
617
|
Provides-Extra: models
|
|
618
|
+
Requires-Dist: agno[aws-bedrock]; extra == "models"
|
|
606
619
|
Requires-Dist: agno[anthropic]; extra == "models"
|
|
607
620
|
Requires-Dist: agno[azure]; extra == "models"
|
|
608
621
|
Requires-Dist: agno[cerebras]; extra == "models"
|
|
@@ -617,8 +630,10 @@ Requires-Dist: agno[meta]; extra == "models"
|
|
|
617
630
|
Requires-Dist: agno[mistral]; extra == "models"
|
|
618
631
|
Requires-Dist: agno[ollama]; extra == "models"
|
|
619
632
|
Requires-Dist: agno[openai]; extra == "models"
|
|
633
|
+
Requires-Dist: agno[portkey]; extra == "models"
|
|
620
634
|
Provides-Extra: tools
|
|
621
635
|
Requires-Dist: agno[apify]; extra == "tools"
|
|
636
|
+
Requires-Dist: agno[arxiv]; extra == "tools"
|
|
622
637
|
Requires-Dist: agno[brave]; extra == "tools"
|
|
623
638
|
Requires-Dist: agno[exa]; extra == "tools"
|
|
624
639
|
Requires-Dist: agno[cartesia]; extra == "tools"
|
|
@@ -634,6 +649,7 @@ Requires-Dist: agno[googlemaps]; extra == "tools"
|
|
|
634
649
|
Requires-Dist: agno[todoist]; extra == "tools"
|
|
635
650
|
Requires-Dist: agno[matplotlib]; extra == "tools"
|
|
636
651
|
Requires-Dist: agno[elevenlabs]; extra == "tools"
|
|
652
|
+
Requires-Dist: agno[evm]; extra == "tools"
|
|
637
653
|
Requires-Dist: agno[fal]; extra == "tools"
|
|
638
654
|
Requires-Dist: agno[webex]; extra == "tools"
|
|
639
655
|
Requires-Dist: agno[mcp]; extra == "tools"
|
|
@@ -646,6 +662,7 @@ Requires-Dist: agno[oxylabs]; extra == "tools"
|
|
|
646
662
|
Requires-Dist: agno[zep]; extra == "tools"
|
|
647
663
|
Requires-Dist: agno[mem0]; extra == "tools"
|
|
648
664
|
Requires-Dist: agno[google_bigquery]; extra == "tools"
|
|
665
|
+
Requires-Dist: agno[psycopg]; extra == "tools"
|
|
649
666
|
Provides-Extra: storage
|
|
650
667
|
Requires-Dist: agno[sql]; extra == "storage"
|
|
651
668
|
Requires-Dist: agno[postgres]; extra == "storage"
|
|
@@ -713,15 +713,6 @@ class Agent:
|
|
|
713
713
|
if self.workflow_session_state is not None:
|
|
714
714
|
self.workflow_session_state["current_user_id"] = user_id
|
|
715
715
|
|
|
716
|
-
def _reset_session_state(self) -> None:
|
|
717
|
-
"""Reset the session state for the agent."""
|
|
718
|
-
if self.team_session_state is not None:
|
|
719
|
-
self.team_session_state.pop("current_session_id", None)
|
|
720
|
-
self.team_session_state.pop("current_user_id", None)
|
|
721
|
-
if self.session_state is not None:
|
|
722
|
-
self.session_state.pop("current_session_id", None)
|
|
723
|
-
self.session_state.pop("current_user_id", None)
|
|
724
|
-
|
|
725
716
|
def _initialize_session(
|
|
726
717
|
self,
|
|
727
718
|
session_id: Optional[str] = None,
|
|
@@ -1162,8 +1153,6 @@ class Agent:
|
|
|
1162
1153
|
)
|
|
1163
1154
|
else:
|
|
1164
1155
|
return self.run_response
|
|
1165
|
-
finally:
|
|
1166
|
-
self._reset_session_state()
|
|
1167
1156
|
|
|
1168
1157
|
# If we get here, all retries failed
|
|
1169
1158
|
if last_exception is not None:
|
|
@@ -1540,8 +1529,6 @@ class Agent:
|
|
|
1540
1529
|
)
|
|
1541
1530
|
else:
|
|
1542
1531
|
return self.run_response
|
|
1543
|
-
finally:
|
|
1544
|
-
self._reset_session_state()
|
|
1545
1532
|
|
|
1546
1533
|
# If we get here, all retries failed
|
|
1547
1534
|
if last_exception is not None:
|
|
@@ -1797,8 +1784,6 @@ class Agent:
|
|
|
1797
1784
|
return self.create_run_response(
|
|
1798
1785
|
run_state=RunStatus.cancelled, content="Operation cancelled by user", run_response=run_response
|
|
1799
1786
|
)
|
|
1800
|
-
finally:
|
|
1801
|
-
self._reset_session_state()
|
|
1802
1787
|
|
|
1803
1788
|
# If we get here, all retries failed
|
|
1804
1789
|
if last_exception is not None:
|
|
@@ -2196,8 +2181,6 @@ class Agent:
|
|
|
2196
2181
|
return self.create_run_response(
|
|
2197
2182
|
run_state=RunStatus.cancelled, content="Operation cancelled by user", run_response=run_response
|
|
2198
2183
|
)
|
|
2199
|
-
finally:
|
|
2200
|
-
self._reset_session_state()
|
|
2201
2184
|
|
|
2202
2185
|
# If we get here, all retries failed
|
|
2203
2186
|
if last_exception is not None:
|
|
@@ -4369,7 +4352,6 @@ class Agent:
|
|
|
4369
4352
|
# Format the system message with the session state variables
|
|
4370
4353
|
if self.add_state_in_messages:
|
|
4371
4354
|
sys_message_content = self.format_message_with_state_variables(sys_message_content)
|
|
4372
|
-
print("HELLO", sys_message_content)
|
|
4373
4355
|
|
|
4374
4356
|
# Add the JSON output prompt if response_model is provided and the model does not support native structured outputs or JSON schema outputs
|
|
4375
4357
|
# or if use_json_mode is True
|
|
@@ -5300,6 +5282,8 @@ class Agent:
|
|
|
5300
5282
|
"""
|
|
5301
5283
|
from agno.document import Document
|
|
5302
5284
|
|
|
5285
|
+
if num_documents is None and self.knowledge is not None:
|
|
5286
|
+
num_documents = self.knowledge.num_documents
|
|
5303
5287
|
# Validate the filters against known valid filter keys
|
|
5304
5288
|
if self.knowledge is not None:
|
|
5305
5289
|
valid_filters, invalid_keys = self.knowledge.validate_filters(filters) # type: ignore
|
|
@@ -5339,9 +5323,6 @@ class Agent:
|
|
|
5339
5323
|
):
|
|
5340
5324
|
return None
|
|
5341
5325
|
|
|
5342
|
-
if num_documents is None:
|
|
5343
|
-
num_documents = self.knowledge.num_documents
|
|
5344
|
-
|
|
5345
5326
|
log_debug(f"Searching knowledge base with filters: {filters}")
|
|
5346
5327
|
relevant_docs: List[Document] = self.knowledge.search(
|
|
5347
5328
|
query=query, num_documents=num_documents, filters=filters
|
|
@@ -5362,6 +5343,9 @@ class Agent:
|
|
|
5362
5343
|
"""Get relevant documents from knowledge base asynchronously."""
|
|
5363
5344
|
from agno.document import Document
|
|
5364
5345
|
|
|
5346
|
+
if num_documents is None and self.knowledge is not None:
|
|
5347
|
+
num_documents = self.knowledge.num_documents
|
|
5348
|
+
|
|
5365
5349
|
# Validate the filters against known valid filter keys
|
|
5366
5350
|
if self.knowledge is not None:
|
|
5367
5351
|
valid_filters, invalid_keys = self.knowledge.validate_filters(filters) # type: ignore
|
|
@@ -5405,9 +5389,6 @@ class Agent:
|
|
|
5405
5389
|
):
|
|
5406
5390
|
return None
|
|
5407
5391
|
|
|
5408
|
-
if num_documents is None:
|
|
5409
|
-
num_documents = self.knowledge.num_documents
|
|
5410
|
-
|
|
5411
5392
|
log_debug(f"Searching knowledge base with filters: {filters}")
|
|
5412
5393
|
relevant_docs: List[Document] = await self.knowledge.async_search(
|
|
5413
5394
|
query=query, num_documents=num_documents, filters=filters
|
|
@@ -16,7 +16,7 @@ from fastapi import APIRouter
|
|
|
16
16
|
from fastapi.responses import StreamingResponse
|
|
17
17
|
|
|
18
18
|
from agno.agent.agent import Agent
|
|
19
|
-
from agno.app.agui.utils import async_stream_agno_response_as_agui_events,
|
|
19
|
+
from agno.app.agui.utils import async_stream_agno_response_as_agui_events, convert_agui_messages_to_agno_messages
|
|
20
20
|
from agno.team.team import Team
|
|
21
21
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
@@ -28,12 +28,12 @@ async def run_agent(agent: Agent, run_input: RunAgentInput) -> AsyncIterator[Bas
|
|
|
28
28
|
|
|
29
29
|
try:
|
|
30
30
|
# Preparing the input for the Agent and emitting the run started event
|
|
31
|
-
|
|
31
|
+
messages = convert_agui_messages_to_agno_messages(run_input.messages or [])
|
|
32
32
|
yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=run_input.thread_id, run_id=run_id)
|
|
33
33
|
|
|
34
34
|
# Request streaming response from agent
|
|
35
35
|
response_stream = await agent.arun(
|
|
36
|
-
|
|
36
|
+
messages=messages,
|
|
37
37
|
session_id=run_input.thread_id,
|
|
38
38
|
stream=True,
|
|
39
39
|
stream_intermediate_steps=True,
|
|
@@ -56,12 +56,12 @@ async def run_team(team: Team, input: RunAgentInput) -> AsyncIterator[BaseEvent]
|
|
|
56
56
|
run_id = input.run_id or str(uuid.uuid4())
|
|
57
57
|
try:
|
|
58
58
|
# Extract the last user message for team execution
|
|
59
|
-
|
|
59
|
+
messages = convert_agui_messages_to_agno_messages(input.messages or [])
|
|
60
60
|
yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=input.thread_id, run_id=run_id)
|
|
61
61
|
|
|
62
62
|
# Request streaming response from team
|
|
63
63
|
response_stream = await team.arun(
|
|
64
|
-
message=
|
|
64
|
+
message=messages,
|
|
65
65
|
session_id=input.thread_id,
|
|
66
66
|
stream=True,
|
|
67
67
|
stream_intermediate_steps=True,
|
|
@@ -16,7 +16,7 @@ from fastapi import APIRouter
|
|
|
16
16
|
from fastapi.responses import StreamingResponse
|
|
17
17
|
|
|
18
18
|
from agno.agent.agent import Agent
|
|
19
|
-
from agno.app.agui.utils import
|
|
19
|
+
from agno.app.agui.utils import convert_agui_messages_to_agno_messages, stream_agno_response_as_agui_events
|
|
20
20
|
from agno.team.team import Team
|
|
21
21
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
@@ -28,12 +28,12 @@ def run_agent(agent: Agent, run_input: RunAgentInput) -> Iterator[BaseEvent]:
|
|
|
28
28
|
|
|
29
29
|
try:
|
|
30
30
|
# Preparing the input for the Agent and emitting the run started event
|
|
31
|
-
|
|
31
|
+
messages = convert_agui_messages_to_agno_messages(run_input.messages or [])
|
|
32
32
|
yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=run_input.thread_id, run_id=run_id)
|
|
33
33
|
|
|
34
34
|
# Request streaming response from agent
|
|
35
35
|
response_stream = agent.run(
|
|
36
|
-
|
|
36
|
+
messages=messages,
|
|
37
37
|
session_id=run_input.thread_id,
|
|
38
38
|
stream=True,
|
|
39
39
|
stream_intermediate_steps=True,
|
|
@@ -56,12 +56,12 @@ def run_team(team: Team, input: RunAgentInput) -> Iterator[BaseEvent]:
|
|
|
56
56
|
run_id = input.run_id or str(uuid.uuid4())
|
|
57
57
|
try:
|
|
58
58
|
# Extract the last user message for team execution
|
|
59
|
-
|
|
59
|
+
messages = convert_agui_messages_to_agno_messages(input.messages or [])
|
|
60
60
|
yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=input.thread_id, run_id=run_id)
|
|
61
61
|
|
|
62
62
|
# Request streaming response from team
|
|
63
63
|
response_stream = team.run(
|
|
64
|
-
message=
|
|
64
|
+
message=messages,
|
|
65
65
|
session_id=input.thread_id,
|
|
66
66
|
stream=True,
|
|
67
67
|
stream_intermediate_steps=True,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Logic used by the AG-UI router."""
|
|
2
2
|
|
|
3
|
+
import json
|
|
3
4
|
import uuid
|
|
4
5
|
from collections import deque
|
|
5
6
|
from collections.abc import Iterator
|
|
@@ -17,11 +18,13 @@ from ag_ui.core import (
|
|
|
17
18
|
TextMessageStartEvent,
|
|
18
19
|
ToolCallArgsEvent,
|
|
19
20
|
ToolCallEndEvent,
|
|
21
|
+
ToolCallResultEvent,
|
|
20
22
|
ToolCallStartEvent,
|
|
21
23
|
)
|
|
22
24
|
from ag_ui.core.types import Message as AGUIMessage
|
|
23
25
|
|
|
24
|
-
from agno.
|
|
26
|
+
from agno.models.message import Message
|
|
27
|
+
from agno.run.response import RunEvent, RunResponseContentEvent, RunResponseEvent, RunResponsePausedEvent
|
|
25
28
|
from agno.run.team import RunResponseContentEvent as TeamRunResponseContentEvent
|
|
26
29
|
from agno.run.team import TeamRunEvent, TeamRunResponseEvent
|
|
27
30
|
|
|
@@ -64,13 +67,26 @@ class EventBuffer:
|
|
|
64
67
|
return False
|
|
65
68
|
|
|
66
69
|
|
|
67
|
-
def
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
for msg in
|
|
71
|
-
if msg.role == "
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
def convert_agui_messages_to_agno_messages(messages: List[AGUIMessage]) -> List[Message]:
|
|
71
|
+
"""Convert AG-UI messages to Agno messages."""
|
|
72
|
+
result = []
|
|
73
|
+
for msg in messages:
|
|
74
|
+
if msg.role == "tool":
|
|
75
|
+
result.append(Message(role="tool", tool_call_id=msg.tool_call_id, content=msg.content))
|
|
76
|
+
elif msg.role == "assistant":
|
|
77
|
+
tool_calls = None
|
|
78
|
+
if msg.tool_calls:
|
|
79
|
+
tool_calls = [call.model_dump() for call in msg.tool_calls]
|
|
80
|
+
result.append(
|
|
81
|
+
Message(
|
|
82
|
+
role="assistant",
|
|
83
|
+
content=msg.content,
|
|
84
|
+
tool_calls=tool_calls,
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
elif msg.role == "user":
|
|
88
|
+
result.append(Message(role="user", content=msg.content))
|
|
89
|
+
return result
|
|
74
90
|
|
|
75
91
|
|
|
76
92
|
def extract_team_response_chunk_content(response: TeamRunResponseContentEvent) -> str:
|
|
@@ -159,7 +175,7 @@ def _create_events_from_chunk(
|
|
|
159
175
|
args_event = ToolCallArgsEvent(
|
|
160
176
|
type=EventType.TOOL_CALL_ARGS,
|
|
161
177
|
tool_call_id=tool_call.tool_call_id, # type: ignore
|
|
162
|
-
delta=
|
|
178
|
+
delta=json.dumps(tool_call.tool_args),
|
|
163
179
|
)
|
|
164
180
|
events_to_emit.append(args_event)
|
|
165
181
|
|
|
@@ -174,6 +190,16 @@ def _create_events_from_chunk(
|
|
|
174
190
|
)
|
|
175
191
|
events_to_emit.append(end_event)
|
|
176
192
|
|
|
193
|
+
if tool_call.result is not None:
|
|
194
|
+
result_event = ToolCallResultEvent(
|
|
195
|
+
type=EventType.TOOL_CALL_RESULT,
|
|
196
|
+
tool_call_id=tool_call.tool_call_id, # type: ignore
|
|
197
|
+
content=str(tool_call.result),
|
|
198
|
+
role="tool",
|
|
199
|
+
message_id=str(uuid.uuid4()),
|
|
200
|
+
)
|
|
201
|
+
events_to_emit.append(result_event)
|
|
202
|
+
|
|
177
203
|
# Handle reasoning
|
|
178
204
|
elif chunk.event == RunEvent.reasoning_started:
|
|
179
205
|
step_event = StepStartedEvent(type=EventType.STEP_STARTED, step_name="reasoning")
|
|
@@ -186,7 +212,12 @@ def _create_events_from_chunk(
|
|
|
186
212
|
|
|
187
213
|
|
|
188
214
|
def _create_completion_events(
|
|
189
|
-
|
|
215
|
+
chunk: Union[RunResponseEvent, TeamRunResponseEvent],
|
|
216
|
+
event_buffer: EventBuffer,
|
|
217
|
+
message_started: bool,
|
|
218
|
+
message_id: str,
|
|
219
|
+
thread_id: str,
|
|
220
|
+
run_id: str,
|
|
190
221
|
) -> List[BaseEvent]:
|
|
191
222
|
"""Create events for run completion."""
|
|
192
223
|
events_to_emit = []
|
|
@@ -205,6 +236,33 @@ def _create_completion_events(
|
|
|
205
236
|
end_message_event = TextMessageEndEvent(type=EventType.TEXT_MESSAGE_END, message_id=message_id)
|
|
206
237
|
events_to_emit.append(end_message_event)
|
|
207
238
|
|
|
239
|
+
# emit frontend tool calls, i.e. external_execution=True
|
|
240
|
+
if isinstance(chunk, RunResponsePausedEvent) and chunk.tools is not None:
|
|
241
|
+
for tool in chunk.tools:
|
|
242
|
+
if tool.tool_call_id is None or tool.tool_name is None:
|
|
243
|
+
continue
|
|
244
|
+
|
|
245
|
+
start_event = ToolCallStartEvent(
|
|
246
|
+
type=EventType.TOOL_CALL_START,
|
|
247
|
+
tool_call_id=tool.tool_call_id,
|
|
248
|
+
tool_call_name=tool.tool_name,
|
|
249
|
+
parent_message_id=message_id,
|
|
250
|
+
)
|
|
251
|
+
events_to_emit.append(start_event)
|
|
252
|
+
|
|
253
|
+
args_event = ToolCallArgsEvent(
|
|
254
|
+
type=EventType.TOOL_CALL_ARGS,
|
|
255
|
+
tool_call_id=tool.tool_call_id,
|
|
256
|
+
delta=json.dumps(tool.tool_args),
|
|
257
|
+
)
|
|
258
|
+
events_to_emit.append(args_event)
|
|
259
|
+
|
|
260
|
+
end_event = ToolCallEndEvent(
|
|
261
|
+
type=EventType.TOOL_CALL_END,
|
|
262
|
+
tool_call_id=tool.tool_call_id,
|
|
263
|
+
)
|
|
264
|
+
events_to_emit.append(end_event)
|
|
265
|
+
|
|
208
266
|
run_finished_event = RunFinishedEvent(type=EventType.RUN_FINISHED, thread_id=thread_id, run_id=run_id)
|
|
209
267
|
events_to_emit.append(run_finished_event)
|
|
210
268
|
|
|
@@ -271,8 +329,14 @@ def stream_agno_response_as_agui_events(
|
|
|
271
329
|
|
|
272
330
|
for chunk in response_stream:
|
|
273
331
|
# Handle the lifecycle end event
|
|
274
|
-
if
|
|
275
|
-
|
|
332
|
+
if (
|
|
333
|
+
chunk.event == RunEvent.run_completed
|
|
334
|
+
or chunk.event == TeamRunEvent.run_completed
|
|
335
|
+
or chunk.event == RunEvent.run_paused
|
|
336
|
+
):
|
|
337
|
+
completion_events = _create_completion_events(
|
|
338
|
+
chunk, event_buffer, message_started, message_id, thread_id, run_id
|
|
339
|
+
)
|
|
276
340
|
for event in completion_events:
|
|
277
341
|
events_to_emit = _emit_event_logic(event_buffer=event_buffer, event=event)
|
|
278
342
|
for emit_event in events_to_emit:
|
|
@@ -302,8 +366,14 @@ async def async_stream_agno_response_as_agui_events(
|
|
|
302
366
|
|
|
303
367
|
async for chunk in response_stream:
|
|
304
368
|
# Handle the lifecycle end event
|
|
305
|
-
if
|
|
306
|
-
|
|
369
|
+
if (
|
|
370
|
+
chunk.event == RunEvent.run_completed
|
|
371
|
+
or chunk.event == TeamRunEvent.run_completed
|
|
372
|
+
or chunk.event == RunEvent.run_paused
|
|
373
|
+
):
|
|
374
|
+
completion_events = _create_completion_events(
|
|
375
|
+
chunk, event_buffer, message_started, message_id, thread_id, run_id
|
|
376
|
+
)
|
|
307
377
|
for event in completion_events:
|
|
308
378
|
events_to_emit = _emit_event_logic(event_buffer=event_buffer, event=event)
|
|
309
379
|
for emit_event in events_to_emit:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from os import getenv
|
|
2
|
-
from typing import Any, Dict, List, Optional, Union
|
|
2
|
+
from typing import Any, Callable, Dict, List, Optional, Union
|
|
3
3
|
from urllib.parse import quote
|
|
4
4
|
from uuid import uuid4
|
|
5
5
|
|
|
@@ -110,13 +110,14 @@ class Playground:
|
|
|
110
110
|
def get_async_router(self) -> APIRouter:
|
|
111
111
|
return get_async_playground_router(self.agents, self.workflows, self.teams, self.app_id)
|
|
112
112
|
|
|
113
|
-
def get_app(self, use_async: bool = True, prefix: str = "/v1") -> FastAPI:
|
|
113
|
+
def get_app(self, use_async: bool = True, prefix: str = "/v1", lifespan: Optional[Callable] = None) -> FastAPI:
|
|
114
114
|
if not self.api_app:
|
|
115
115
|
self.api_app = FastAPI(
|
|
116
116
|
title=self.settings.title,
|
|
117
117
|
docs_url="/docs" if self.settings.docs_enabled else None,
|
|
118
118
|
redoc_url="/redoc" if self.settings.docs_enabled else None,
|
|
119
119
|
openapi_url="/openapi.json" if self.settings.docs_enabled else None,
|
|
120
|
+
lifespan=lifespan,
|
|
120
121
|
)
|
|
121
122
|
|
|
122
123
|
if not self.api_app:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from agno.document.base import Document
|
|
4
|
+
from agno.document.chunking.strategy import ChunkingStrategy
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class RowChunking(ChunkingStrategy):
|
|
8
|
+
def __init__(self, skip_header: bool = False, clean_rows: bool = True):
|
|
9
|
+
self.skip_header = skip_header
|
|
10
|
+
self.clean_rows = clean_rows
|
|
11
|
+
|
|
12
|
+
def chunk(self, document: Document) -> List[Document]:
|
|
13
|
+
if not document or not document.content:
|
|
14
|
+
return []
|
|
15
|
+
|
|
16
|
+
if not isinstance(document.content, str):
|
|
17
|
+
raise ValueError("Document content must be a string")
|
|
18
|
+
|
|
19
|
+
rows = document.content.splitlines()
|
|
20
|
+
|
|
21
|
+
if self.skip_header and rows:
|
|
22
|
+
rows = rows[1:]
|
|
23
|
+
start_index = 2
|
|
24
|
+
else:
|
|
25
|
+
start_index = 1
|
|
26
|
+
|
|
27
|
+
chunks = []
|
|
28
|
+
for i, row in enumerate(rows):
|
|
29
|
+
if self.clean_rows:
|
|
30
|
+
chunk_content = " ".join(row.split()) # Normalize internal whitespace
|
|
31
|
+
else:
|
|
32
|
+
chunk_content = row.strip()
|
|
33
|
+
|
|
34
|
+
if chunk_content: # Skip empty rows
|
|
35
|
+
meta_data = document.meta_data.copy()
|
|
36
|
+
meta_data["row_number"] = start_index + i # Preserve logical row numbering
|
|
37
|
+
chunk_id = f"{document.id}_row_{start_index + i}" if document.id else None
|
|
38
|
+
chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
|
|
39
|
+
return chunks
|
|
@@ -16,13 +16,6 @@ class Reader:
|
|
|
16
16
|
separators: List[str] = field(default_factory=lambda: ["\n", "\n\n", "\r", "\r\n", "\n\r", "\t", " ", " "])
|
|
17
17
|
chunking_strategy: Optional[ChunkingStrategy] = None
|
|
18
18
|
|
|
19
|
-
def __init__(
|
|
20
|
-
self, chunk: bool = True, chunk_size: int = 5000, chunking_strategy: Optional[ChunkingStrategy] = None
|
|
21
|
-
) -> None:
|
|
22
|
-
self.chunk = chunk
|
|
23
|
-
self.chunk_size = chunk_size
|
|
24
|
-
self.chunking_strategy = chunking_strategy
|
|
25
|
-
|
|
26
19
|
def read(self, obj: Any) -> List[Document]:
|
|
27
20
|
raise NotImplementedError
|
|
28
21
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from os import getenv
|
|
3
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Literal
|
|
6
|
+
|
|
7
|
+
from agno.embedder.base import Embedder
|
|
8
|
+
from agno.utils.log import logger
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
import requests
|
|
12
|
+
except ImportError:
|
|
13
|
+
raise ImportError("requests not installed, use pip install requests")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class JinaEmbedder(Embedder):
|
|
18
|
+
id: str = "jina-embeddings-v3"
|
|
19
|
+
dimensions: int = 1024
|
|
20
|
+
embedding_type: Literal["float", "base64", "int8"] = "float"
|
|
21
|
+
late_chunking: bool = False
|
|
22
|
+
user: Optional[str] = None
|
|
23
|
+
api_key: Optional[str] = getenv("JINA_API_KEY")
|
|
24
|
+
base_url: str = "https://api.jina.ai/v1/embeddings"
|
|
25
|
+
headers: Optional[Dict[str, str]] = None
|
|
26
|
+
request_params: Optional[Dict[str, Any]] = None
|
|
27
|
+
timeout: Optional[float] = None
|
|
28
|
+
|
|
29
|
+
def _get_headers(self) -> Dict[str, str]:
|
|
30
|
+
if not self.api_key:
|
|
31
|
+
raise ValueError(
|
|
32
|
+
"API key is required for Jina embedder. Set JINA_API_KEY environment variable or pass api_key parameter."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {self.api_key}"}
|
|
36
|
+
if self.headers:
|
|
37
|
+
headers.update(self.headers)
|
|
38
|
+
return headers
|
|
39
|
+
|
|
40
|
+
def _response(self, text: str) -> Dict[str, Any]:
|
|
41
|
+
data = {
|
|
42
|
+
"model": self.id,
|
|
43
|
+
"late_chunking": self.late_chunking,
|
|
44
|
+
"dimensions": self.dimensions,
|
|
45
|
+
"embedding_type": self.embedding_type,
|
|
46
|
+
"input": [text], # Jina API expects a list
|
|
47
|
+
}
|
|
48
|
+
if self.user is not None:
|
|
49
|
+
data["user"] = self.user
|
|
50
|
+
if self.request_params:
|
|
51
|
+
data.update(self.request_params)
|
|
52
|
+
|
|
53
|
+
response = requests.post(self.base_url, headers=self._get_headers(), json=data, timeout=self.timeout)
|
|
54
|
+
response.raise_for_status()
|
|
55
|
+
return response.json()
|
|
56
|
+
|
|
57
|
+
def get_embedding(self, text: str) -> List[float]:
|
|
58
|
+
try:
|
|
59
|
+
result = self._response(text)
|
|
60
|
+
return result["data"][0]["embedding"]
|
|
61
|
+
except Exception as e:
|
|
62
|
+
logger.warning(f"Failed to get embedding: {e}")
|
|
63
|
+
return []
|
|
64
|
+
|
|
65
|
+
def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
|
|
66
|
+
try:
|
|
67
|
+
result = self._response(text)
|
|
68
|
+
embedding = result["data"][0]["embedding"]
|
|
69
|
+
usage = result.get("usage")
|
|
70
|
+
return embedding, usage
|
|
71
|
+
except Exception as e:
|
|
72
|
+
logger.warning(f"Failed to get embedding and usage: {e}")
|
|
73
|
+
return [], None
|
|
@@ -16,7 +16,7 @@ except ImportError:
|
|
|
16
16
|
@dataclass
|
|
17
17
|
class OpenAIEmbedder(Embedder):
|
|
18
18
|
id: str = "text-embedding-3-small"
|
|
19
|
-
dimensions: int =
|
|
19
|
+
dimensions: Optional[int] = None
|
|
20
20
|
encoding_format: Literal["float", "base64"] = "float"
|
|
21
21
|
user: Optional[str] = None
|
|
22
22
|
api_key: Optional[str] = None
|
|
@@ -26,6 +26,10 @@ class OpenAIEmbedder(Embedder):
|
|
|
26
26
|
client_params: Optional[Dict[str, Any]] = None
|
|
27
27
|
openai_client: Optional[OpenAIClient] = None
|
|
28
28
|
|
|
29
|
+
def __post_init__(self):
|
|
30
|
+
if self.dimensions is None:
|
|
31
|
+
self.dimensions = 3072 if self.id == "text-embedding-3-large" else 1536
|
|
32
|
+
|
|
29
33
|
@property
|
|
30
34
|
def client(self) -> OpenAIClient:
|
|
31
35
|
if self.openai_client:
|
|
@@ -273,7 +273,7 @@ class AgentMemory(BaseModel):
|
|
|
273
273
|
|
|
274
274
|
self.classifier.existing_memories = self.memories
|
|
275
275
|
classifier_response = self.classifier.run(input)
|
|
276
|
-
if classifier_response == "yes":
|
|
276
|
+
if classifier_response and classifier_response.lower() == "yes":
|
|
277
277
|
return True
|
|
278
278
|
return False
|
|
279
279
|
|
|
@@ -286,7 +286,7 @@ class AgentMemory(BaseModel):
|
|
|
286
286
|
|
|
287
287
|
self.classifier.existing_memories = self.memories
|
|
288
288
|
classifier_response = await self.classifier.arun(input)
|
|
289
|
-
if classifier_response == "yes":
|
|
289
|
+
if classifier_response and classifier_response.lower() == "yes":
|
|
290
290
|
return True
|
|
291
291
|
return False
|
|
292
292
|
|
|
@@ -313,7 +313,7 @@ class TeamMemory:
|
|
|
313
313
|
|
|
314
314
|
self.classifier.existing_memories = self.memories
|
|
315
315
|
classifier_response = self.classifier.run(input)
|
|
316
|
-
if classifier_response == "yes":
|
|
316
|
+
if classifier_response and classifier_response.lower() == "yes":
|
|
317
317
|
return True
|
|
318
318
|
return False
|
|
319
319
|
|
|
@@ -326,7 +326,7 @@ class TeamMemory:
|
|
|
326
326
|
|
|
327
327
|
self.classifier.existing_memories = self.memories
|
|
328
328
|
classifier_response = await self.classifier.arun(input)
|
|
329
|
-
if classifier_response == "yes":
|
|
329
|
+
if classifier_response and classifier_response.lower() == "yes":
|
|
330
330
|
return True
|
|
331
331
|
return False
|
|
332
332
|
|
|
@@ -570,8 +570,16 @@ class Claude(Model):
|
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
elif isinstance(response, ContentBlockStopEvent):
|
|
573
|
+
# Handle completed thinking content
|
|
574
|
+
if response.content_block.type == "thinking": # type: ignore
|
|
575
|
+
model_response.thinking = response.content_block.thinking # type: ignore
|
|
576
|
+
# Store signature if available
|
|
577
|
+
if hasattr(response.content_block, "signature"): # type: ignore
|
|
578
|
+
model_response.provider_data = {
|
|
579
|
+
"signature": response.content_block.signature, # type: ignore
|
|
580
|
+
}
|
|
573
581
|
# Handle tool calls
|
|
574
|
-
|
|
582
|
+
elif response.content_block.type == "tool_use": # type: ignore
|
|
575
583
|
tool_use = response.content_block # type: ignore
|
|
576
584
|
tool_name = tool_use.name
|
|
577
585
|
tool_input = tool_use.input
|