agno 1.8.0__tar.gz → 1.8.1__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.8.0 → agno-1.8.1}/PKG-INFO +4 -1
- {agno-1.8.0 → agno-1.8.1}/agno/agent/agent.py +3 -3
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/agent.py +8 -4
- {agno-1.8.0 → agno-1.8.1}/agno/media.py +2 -2
- {agno-1.8.0 → agno-1.8.1}/agno/models/dashscope/dashscope.py +14 -5
- {agno-1.8.0 → agno-1.8.1}/agno/models/google/gemini.py +23 -11
- {agno-1.8.0 → agno-1.8.1}/agno/models/openai/chat.py +14 -4
- {agno-1.8.0 → agno-1.8.1}/agno/models/openai/responses.py +56 -11
- {agno-1.8.0 → agno-1.8.1}/agno/team/team.py +17 -1
- {agno-1.8.0 → agno-1.8.1}/agno/tools/confluence.py +63 -10
- {agno-1.8.0 → agno-1.8.1}/agno/tools/e2b.py +1 -1
- {agno-1.8.0 → agno-1.8.1}/agno/tools/gmail.py +1 -1
- agno-1.8.1/agno/tools/neo4j.py +132 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/location.py +2 -2
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/qdrant/qdrant.py +22 -0
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/PKG-INFO +4 -1
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/SOURCES.txt +1 -0
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/requires.txt +4 -0
- {agno-1.8.0 → agno-1.8.1}/pyproject.toml +4 -1
- {agno-1.8.0 → agno-1.8.1}/LICENSE +0 -0
- {agno-1.8.0 → agno-1.8.1}/README.md +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/agent/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/agent/metrics.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/agent.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/api.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/evals.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/playground.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/routes.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/agent.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/evals.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/playground.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/response.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/team.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/user.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/workflows.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/schemas/workspace.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/team.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/user.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/workflows.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/api/workspace.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/agui/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/agui/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/agui/async_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/agui/sync_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/agui/utils.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/discord/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/discord/client.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/fastapi/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/fastapi/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/fastapi/async_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/fastapi/sync_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/async_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/deploy.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/operator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/schemas.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/serve.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/settings.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/sync_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/playground/utils.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/settings.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/slack/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/slack/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/slack/async_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/slack/security.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/slack/sync_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/utils.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/whatsapp/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/whatsapp/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/whatsapp/async_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/whatsapp/security.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/app/whatsapp/sync_router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/auth_server.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/config.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/console.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/credentials.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/entrypoint.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/operator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/settings.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/ws/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/cli/ws/ws_cli.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/constants.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/debug.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/agentic.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/document.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/fixed.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/markdown.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/recursive.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/row.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/semantic.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/chunking/strategy.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/arxiv_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/csv_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/docx_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/firecrawl_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/gcs/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/gcs/pdf_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/json_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/markdown_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/pdf_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/s3/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/s3/pdf_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/s3/text_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/text_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/url_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/website_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/document/reader/youtube_reader.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/aws_bedrock.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/azure_openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/cohere.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/fastembed.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/fireworks.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/google.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/huggingface.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/jina.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/langdb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/mistral.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/nebius.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/ollama.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/sentence_transformer.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/together.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/embedder/voyageai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/eval/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/eval/accuracy.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/eval/performance.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/eval/reliability.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/eval/utils.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/exceptions.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/file/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/file/file.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/file/local/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/file/local/csv.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/file/local/txt.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/context.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/db_app.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/resource.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/infra/resources.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/arxiv.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/combined.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/csv.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/csv_url.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/document.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/docx.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/firecrawl.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/gcs/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/gcs/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/gcs/pdf.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/json.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/langchain.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/light_rag.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/llamaindex.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/markdown.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/pdf.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/pdf_bytes.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/pdf_url.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/s3/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/s3/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/s3/pdf.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/s3/text.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/text.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/url.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/website.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/wikipedia.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/knowledge/youtube.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/agent.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/classifier.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/db/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/db/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/db/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/db/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/db/sqlite.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/manager.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/memory.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/row.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/summarizer.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/summary.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/team.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/firestore.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/redis.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/schema.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/db/sqlite.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/manager.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/memory.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/schema.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/v2/summarizer.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/memory/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/aimlapi/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/anthropic/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/anthropic/claude.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/aws/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/aws/bedrock.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/aws/claude.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/azure/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/azure/ai_foundry.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/azure/openai_chat.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/cerebras/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/cerebras/cerebras.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/cohere/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/cohere/chat.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/dashscope/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/deepinfra/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/deepseek/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/deepseek/deepseek.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/defaults.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/fireworks/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/fireworks/fireworks.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/google/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/groq/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/groq/groq.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/huggingface/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/huggingface/huggingface.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/ibm/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/ibm/watsonx.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/internlm/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/internlm/internlm.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/langdb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/langdb/langdb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/litellm/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/litellm/chat.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/lmstudio/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/message.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/meta/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/meta/llama.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/meta/llama_openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/mistral/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/mistral/mistral.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/nebius/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/nebius/nebius.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/nvidia/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/nvidia/nvidia.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/ollama/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/ollama/chat.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/ollama/tools.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/openai/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/openai/like.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/openrouter/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/openrouter/openrouter.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/perplexity/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/perplexity/perplexity.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/portkey/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/portkey/portkey.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/qwen/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/response.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/sambanova/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/sambanova/sambanova.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/together/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/together/together.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/vercel/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/vercel/v0.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/vllm/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/vllm/vllm.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/xai/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/models/xai/xai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/playground/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/playground/deploy.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/playground/playground.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/playground/serve.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/playground/settings.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/py.typed +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/deepseek.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/default.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/groq.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/helpers.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/ollama.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reasoning/step.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reranker/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reranker/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reranker/cohere.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reranker/infinity.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/reranker/sentence_transformer.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/messages.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/response.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/team.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/v2/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/v2/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/run/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/dynamodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/json.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/singlestore.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/sqlite.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/agent/yaml.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/dynamodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/firestore.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/gcs_json.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/in_memory.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/json.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/mysql.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/redis.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/agent.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/team.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/v2/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/v2/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/session/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/singlestore.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/sqlite.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/workflow/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/workflow/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/workflow/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/workflow/sqlite.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/storage/yaml.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/team/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/agentql.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/airflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/api.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/apify.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/arxiv.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/aws_lambda.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/aws_ses.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/baidusearch.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/bitbucket.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/brandfetch.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/bravesearch.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/brightdata.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/browserbase.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/calcom.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/calculator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/cartesia.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/clickup_tool.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/crawl4ai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/csv_toolkit.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/dalle.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/daytona.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/decorator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/desi_vocal.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/discord.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/docker.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/duckdb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/duckduckgo.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/eleven_labs.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/email.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/evm.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/exa.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/fal.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/file.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/financial_datasets.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/firecrawl.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/function.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/giphy.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/github.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/google_bigquery.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/google_maps.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/googlecalendar.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/googlesearch.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/googlesheets.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/hackernews.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/jina.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/jira.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/knowledge.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/linear.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/linkup.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/local_file_system.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/lumalab.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/mcp.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/mem0.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/memori.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/mlx_transcribe.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/azure_openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/gemini.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/groq.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/morph.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models/nebius.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/models_labs.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/moviepy_video.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/newspaper.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/newspaper4k.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/openbb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/opencv.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/openweather.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/oxylabs.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/pandas.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/postgres.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/pubmed.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/python.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/reasoning.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/reddit.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/replicate.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/resend.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/scrapegraph.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/searxng.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/serpapi.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/serper.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/shell.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/slack.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/sleep.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/spider.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/sql.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/streamlit/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/streamlit/components.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/tavily.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/telegram.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/thinking.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/todoist.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/tool_registry.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/toolkit.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/trafilatura.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/trello.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/twilio.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/user_control_flow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/valyu.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/visualization.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/webbrowser.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/webex.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/website.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/webtools.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/whatsapp.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/wikipedia.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/x.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/yfinance.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/youtube.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/zendesk.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/zep.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/tools/zoom.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/audio.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/certs.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/code_execution.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/common.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/defaults.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/dttm.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/enum.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/env.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/events.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/filesystem.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/format_str.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/functions.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/gemini.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/git.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/http.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/json_io.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/json_schema.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/load_env.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/log.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/mcp.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/media.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/merge_dict.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/message.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/ai_foundry.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/aws_claude.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/claude.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/cohere.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/llama.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/mistral.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/openai_responses.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/schema_utils.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/models/watsonx.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/openai.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/pickle.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/pprint.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/prompts.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/py_io.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/pyproject.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/resource_filter.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/response.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/response_iterator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/safe_formatter.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/shell.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/string.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/timer.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/tools.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/web.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/whatsapp.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/utils/yaml_io.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/base.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/cassandra/index.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/distance.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/pgvector/index.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/search.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/singlestore/index.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/weaviate/index.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/condition.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/loop.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/parallel.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/router.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/step.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/steps.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/types.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/v2/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workflow/workflow.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/__init__.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/config.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/enums.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/helpers.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/operator.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno/workspace/settings.py +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/dependency_links.txt +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/entry_points.txt +0 -0
- {agno-1.8.0 → agno-1.8.1}/agno.egg-info/top_level.txt +0 -0
- {agno-1.8.0 → agno-1.8.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.1
|
|
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.
|
|
@@ -553,6 +553,8 @@ Provides-Extra: oxylabs
|
|
|
553
553
|
Requires-Dist: oxylabs; extra == "oxylabs"
|
|
554
554
|
Provides-Extra: trafilatura
|
|
555
555
|
Requires-Dist: trafilatura; extra == "trafilatura"
|
|
556
|
+
Provides-Extra: neo4j
|
|
557
|
+
Requires-Dist: neo4j; extra == "neo4j"
|
|
556
558
|
Provides-Extra: sql
|
|
557
559
|
Requires-Dist: sqlalchemy; extra == "sql"
|
|
558
560
|
Provides-Extra: postgres
|
|
@@ -670,6 +672,7 @@ Requires-Dist: agno[memori]; extra == "tools"
|
|
|
670
672
|
Requires-Dist: agno[google_bigquery]; extra == "tools"
|
|
671
673
|
Requires-Dist: agno[psycopg]; extra == "tools"
|
|
672
674
|
Requires-Dist: agno[trafilatura]; extra == "tools"
|
|
675
|
+
Requires-Dist: agno[neo4j]; extra == "tools"
|
|
673
676
|
Provides-Extra: storage
|
|
674
677
|
Requires-Dist: agno[sql]; extra == "storage"
|
|
675
678
|
Requires-Dist: agno[postgres]; extra == "storage"
|
|
@@ -352,6 +352,7 @@ class Agent:
|
|
|
352
352
|
agent_id: Optional[str] = None,
|
|
353
353
|
introduction: Optional[str] = None,
|
|
354
354
|
user_id: Optional[str] = None,
|
|
355
|
+
app_id: Optional[str] = None,
|
|
355
356
|
session_id: Optional[str] = None,
|
|
356
357
|
session_name: Optional[str] = None,
|
|
357
358
|
session_state: Optional[Dict[str, Any]] = None,
|
|
@@ -443,6 +444,7 @@ class Agent:
|
|
|
443
444
|
self.agent_id = agent_id
|
|
444
445
|
self.introduction = introduction
|
|
445
446
|
self.user_id = user_id
|
|
447
|
+
self.app_id = app_id
|
|
446
448
|
|
|
447
449
|
self.session_id = session_id
|
|
448
450
|
self.session_name = session_name
|
|
@@ -747,9 +749,7 @@ class Agent:
|
|
|
747
749
|
self.session_id = session_id = str(uuid4())
|
|
748
750
|
|
|
749
751
|
# Use the default user_id when necessary
|
|
750
|
-
if user_id is
|
|
751
|
-
user_id = user_id
|
|
752
|
-
else:
|
|
752
|
+
if user_id is None or user_id == "":
|
|
753
753
|
user_id = self.user_id
|
|
754
754
|
|
|
755
755
|
# Determine the session_state
|
|
@@ -161,7 +161,8 @@ class AgentKnowledge(BaseModel):
|
|
|
161
161
|
|
|
162
162
|
# Upsert documents if upsert is True and vector db supports upsert
|
|
163
163
|
if upsert and self.vector_db.upsert_available():
|
|
164
|
-
|
|
164
|
+
for doc in documents_to_load:
|
|
165
|
+
self.vector_db.upsert(documents=[doc], filters=doc.meta_data)
|
|
165
166
|
# Insert documents
|
|
166
167
|
else:
|
|
167
168
|
# Filter out documents which already exist in the vector db
|
|
@@ -170,7 +171,8 @@ class AgentKnowledge(BaseModel):
|
|
|
170
171
|
documents_to_load = self.filter_existing_documents(document_list)
|
|
171
172
|
|
|
172
173
|
if documents_to_load:
|
|
173
|
-
|
|
174
|
+
for doc in documents_to_load:
|
|
175
|
+
self.vector_db.insert(documents=[doc], filters=doc.meta_data)
|
|
174
176
|
|
|
175
177
|
num_documents += len(documents_to_load)
|
|
176
178
|
log_info(f"Added {num_documents} documents to knowledge base")
|
|
@@ -204,7 +206,8 @@ class AgentKnowledge(BaseModel):
|
|
|
204
206
|
|
|
205
207
|
# Upsert documents if upsert is True and vector db supports upsert
|
|
206
208
|
if upsert and self.vector_db.upsert_available():
|
|
207
|
-
|
|
209
|
+
for doc in documents_to_load:
|
|
210
|
+
await self.vector_db.async_upsert(documents=[doc], filters=doc.meta_data)
|
|
208
211
|
# Insert documents
|
|
209
212
|
else:
|
|
210
213
|
# Filter out documents which already exist in the vector db
|
|
@@ -213,7 +216,8 @@ class AgentKnowledge(BaseModel):
|
|
|
213
216
|
documents_to_load = await self.async_filter_existing_documents(document_list)
|
|
214
217
|
|
|
215
218
|
if documents_to_load:
|
|
216
|
-
|
|
219
|
+
for doc in documents_to_load:
|
|
220
|
+
await self.vector_db.async_insert(documents=[doc], filters=doc.meta_data)
|
|
217
221
|
|
|
218
222
|
num_documents += len(documents_to_load)
|
|
219
223
|
log_info(f"Added {num_documents} documents to knowledge base")
|
|
@@ -157,7 +157,7 @@ class Video(BaseModel):
|
|
|
157
157
|
|
|
158
158
|
@classmethod
|
|
159
159
|
def from_artifact(cls, artifact: VideoArtifact) -> "Video":
|
|
160
|
-
return cls(url=artifact.url)
|
|
160
|
+
return cls(url=artifact.url, content=artifact.content, format=artifact.mime_type)
|
|
161
161
|
|
|
162
162
|
|
|
163
163
|
class Audio(BaseModel):
|
|
@@ -329,7 +329,7 @@ class Image(BaseModel):
|
|
|
329
329
|
|
|
330
330
|
@classmethod
|
|
331
331
|
def from_artifact(cls, artifact: ImageArtifact) -> "Image":
|
|
332
|
-
return cls(url=artifact.url)
|
|
332
|
+
return cls(url=artifact.url, content=artifact.content, format=artifact.mime_type)
|
|
333
333
|
|
|
334
334
|
|
|
335
335
|
class File(BaseModel):
|
|
@@ -19,7 +19,7 @@ class DashScope(OpenAILike):
|
|
|
19
19
|
provider (str): The provider name. Defaults to "Qwen".
|
|
20
20
|
api_key (Optional[str]): The DashScope API key.
|
|
21
21
|
base_url (str): The base URL. Defaults to "https://dashscope-intl.aliyuncs.com/compatible-mode/v1".
|
|
22
|
-
enable_thinking (
|
|
22
|
+
enable_thinking (bool): Enable thinking process (DashScope native parameter). Defaults to False.
|
|
23
23
|
include_thoughts (Optional[bool]): Include thinking process in response (alternative parameter). Defaults to None.
|
|
24
24
|
"""
|
|
25
25
|
|
|
@@ -31,8 +31,9 @@ class DashScope(OpenAILike):
|
|
|
31
31
|
base_url: str = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
|
|
32
32
|
|
|
33
33
|
# Thinking parameters
|
|
34
|
-
enable_thinking:
|
|
34
|
+
enable_thinking: bool = False
|
|
35
35
|
include_thoughts: Optional[bool] = None
|
|
36
|
+
thinking_budget: Optional[int] = None
|
|
36
37
|
|
|
37
38
|
# DashScope supports structured outputs
|
|
38
39
|
supports_native_structured_outputs: bool = True
|
|
@@ -75,7 +76,15 @@ class DashScope(OpenAILike):
|
|
|
75
76
|
) -> Dict[str, Any]:
|
|
76
77
|
params = super().get_request_params(response_format=response_format, tools=tools, tool_choice=tool_choice)
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
if self.include_thoughts is not None:
|
|
80
|
+
self.enable_thinking = self.include_thoughts
|
|
81
|
+
|
|
82
|
+
if self.enable_thinking is not None:
|
|
83
|
+
params["extra_body"] = {
|
|
84
|
+
"enable_thinking": self.enable_thinking,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if self.thinking_budget is not None:
|
|
88
|
+
params["extra_body"]["thinking_budget"] = self.thinking_budget
|
|
89
|
+
|
|
81
90
|
return params
|
|
@@ -793,12 +793,18 @@ class Gemini(Model):
|
|
|
793
793
|
grounding_metadata = response.candidates[0].grounding_metadata.model_dump()
|
|
794
794
|
citations_raw["grounding_metadata"] = grounding_metadata
|
|
795
795
|
|
|
796
|
-
chunks = grounding_metadata.get("grounding_chunks", [])
|
|
797
|
-
citation_pairs = [
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
796
|
+
chunks = grounding_metadata.get("grounding_chunks", []) or []
|
|
797
|
+
citation_pairs = []
|
|
798
|
+
for chunk in chunks:
|
|
799
|
+
if not isinstance(chunk, dict):
|
|
800
|
+
continue
|
|
801
|
+
web = chunk.get("web")
|
|
802
|
+
if not isinstance(web, dict):
|
|
803
|
+
continue
|
|
804
|
+
uri = web.get("uri")
|
|
805
|
+
title = web.get("title")
|
|
806
|
+
if uri:
|
|
807
|
+
citation_pairs.append((uri, title))
|
|
802
808
|
|
|
803
809
|
# Create citation objects from filtered pairs
|
|
804
810
|
grounding_urls = [UrlCitation(url=url, title=title) for url, title in citation_pairs]
|
|
@@ -907,11 +913,17 @@ class Gemini(Model):
|
|
|
907
913
|
|
|
908
914
|
# Extract url and title
|
|
909
915
|
chunks = grounding_metadata.pop("grounding_chunks", None) or []
|
|
910
|
-
citation_pairs = [
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
916
|
+
citation_pairs = []
|
|
917
|
+
for chunk in chunks:
|
|
918
|
+
if not isinstance(chunk, dict):
|
|
919
|
+
continue
|
|
920
|
+
web = chunk.get("web")
|
|
921
|
+
if not isinstance(web, dict):
|
|
922
|
+
continue
|
|
923
|
+
uri = web.get("uri")
|
|
924
|
+
title = web.get("title")
|
|
925
|
+
if uri:
|
|
926
|
+
citation_pairs.append((uri, title))
|
|
915
927
|
|
|
916
928
|
# Create citation objects from filtered pairs
|
|
917
929
|
citations.urls = [UrlCitation(url=url, title=title) for url, title in citation_pairs]
|
|
@@ -77,7 +77,7 @@ class OpenAIChat(Model):
|
|
|
77
77
|
max_retries: Optional[int] = None
|
|
78
78
|
default_headers: Optional[Any] = None
|
|
79
79
|
default_query: Optional[Any] = None
|
|
80
|
-
http_client: Optional[httpx.Client] = None
|
|
80
|
+
http_client: Optional[Union[httpx.Client, httpx.AsyncClient]] = None
|
|
81
81
|
client_params: Optional[Dict[str, Any]] = None
|
|
82
82
|
|
|
83
83
|
# The role to map the message role to.
|
|
@@ -123,8 +123,11 @@ class OpenAIChat(Model):
|
|
|
123
123
|
OpenAIClient: An instance of the OpenAI client.
|
|
124
124
|
"""
|
|
125
125
|
client_params: Dict[str, Any] = self._get_client_params()
|
|
126
|
-
if self.http_client
|
|
127
|
-
|
|
126
|
+
if self.http_client:
|
|
127
|
+
if isinstance(self.http_client, httpx.Client):
|
|
128
|
+
client_params["http_client"] = self.http_client
|
|
129
|
+
else:
|
|
130
|
+
log_warning("http_client is not an instance of httpx.Client.")
|
|
128
131
|
return OpenAIClient(**client_params)
|
|
129
132
|
|
|
130
133
|
def get_async_client(self) -> AsyncOpenAIClient:
|
|
@@ -136,7 +139,14 @@ class OpenAIChat(Model):
|
|
|
136
139
|
"""
|
|
137
140
|
client_params: Dict[str, Any] = self._get_client_params()
|
|
138
141
|
if self.http_client:
|
|
139
|
-
|
|
142
|
+
if isinstance(self.http_client, httpx.AsyncClient):
|
|
143
|
+
client_params["http_client"] = self.http_client
|
|
144
|
+
else:
|
|
145
|
+
log_warning("http_client is not an instance of httpx.AsyncClient. Using default httpx.AsyncClient.")
|
|
146
|
+
# Create a new async HTTP client with custom limits
|
|
147
|
+
client_params["http_client"] = httpx.AsyncClient(
|
|
148
|
+
limits=httpx.Limits(max_connections=1000, max_keepalive_connections=100)
|
|
149
|
+
)
|
|
140
150
|
else:
|
|
141
151
|
# Create a new async HTTP client with custom limits
|
|
142
152
|
client_params["http_client"] = httpx.AsyncClient(
|
|
@@ -44,6 +44,7 @@ class OpenAIResponses(Model):
|
|
|
44
44
|
reasoning: Optional[Dict[str, Any]] = None
|
|
45
45
|
verbosity: Optional[Literal["low", "medium", "high"]] = None
|
|
46
46
|
reasoning_effort: Optional[Literal["minimal", "medium", "high"]] = None
|
|
47
|
+
reasoning_summary: Optional[Literal["auto", "concise", "detailed"]] = None
|
|
47
48
|
store: Optional[bool] = None
|
|
48
49
|
temperature: Optional[float] = None
|
|
49
50
|
top_p: Optional[float] = None
|
|
@@ -84,6 +85,18 @@ class OpenAIResponses(Model):
|
|
|
84
85
|
"""Return True if the contextual used model is a known reasoning model."""
|
|
85
86
|
return self.id.startswith("o3") or self.id.startswith("o4-mini") or self.id.startswith("gpt-5")
|
|
86
87
|
|
|
88
|
+
def _set_reasoning_request_param(self, base_params: Dict[str, Any]) -> Dict[str, Any]:
|
|
89
|
+
"""Set the reasoning request parameter."""
|
|
90
|
+
base_params["reasoning"] = self.reasoning or {}
|
|
91
|
+
|
|
92
|
+
if self.reasoning_effort is not None:
|
|
93
|
+
base_params["reasoning"]["effort"] = self.reasoning_effort
|
|
94
|
+
|
|
95
|
+
if self.reasoning_summary is not None:
|
|
96
|
+
base_params["reasoning"]["summary"] = self.reasoning_summary
|
|
97
|
+
|
|
98
|
+
return base_params
|
|
99
|
+
|
|
87
100
|
def _get_client_params(self) -> Dict[str, Any]:
|
|
88
101
|
"""
|
|
89
102
|
Get client parameters for API requests.
|
|
@@ -185,12 +198,8 @@ class OpenAIResponses(Model):
|
|
|
185
198
|
"user": self.user,
|
|
186
199
|
"service_tier": self.service_tier,
|
|
187
200
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if self.reasoning is not None:
|
|
191
|
-
base_params["reasoning"] = self.reasoning
|
|
192
|
-
elif self.reasoning_effort is not None:
|
|
193
|
-
base_params["reasoning"] = {"effort": self.reasoning_effort}
|
|
201
|
+
# Populate the reasoning parameter
|
|
202
|
+
base_params = self._set_reasoning_request_param(base_params)
|
|
194
203
|
|
|
195
204
|
# Build text parameter
|
|
196
205
|
text_params: Dict[str, Any] = {}
|
|
@@ -478,7 +487,6 @@ class OpenAIResponses(Model):
|
|
|
478
487
|
request_params = self.get_request_params(
|
|
479
488
|
messages=messages, response_format=response_format, tools=tools, tool_choice=tool_choice
|
|
480
489
|
)
|
|
481
|
-
|
|
482
490
|
return self.get_client().responses.create(
|
|
483
491
|
model=self.id,
|
|
484
492
|
input=self._format_messages(messages), # type: ignore
|
|
@@ -730,7 +738,10 @@ class OpenAIResponses(Model):
|
|
|
730
738
|
|
|
731
739
|
# Add role
|
|
732
740
|
model_response.role = "assistant"
|
|
741
|
+
reasoning_summary: str = ""
|
|
742
|
+
|
|
733
743
|
for output in response.output:
|
|
744
|
+
# Add content
|
|
734
745
|
if output.type == "message":
|
|
735
746
|
model_response.content = response.output_text
|
|
736
747
|
|
|
@@ -746,6 +757,8 @@ class OpenAIResponses(Model):
|
|
|
746
757
|
citations.urls.append(UrlCitation(url=annotation.url, title=annotation.title))
|
|
747
758
|
if citations.urls or citations.documents:
|
|
748
759
|
model_response.citations = citations
|
|
760
|
+
|
|
761
|
+
# Add tool calls
|
|
749
762
|
elif output.type == "function_call":
|
|
750
763
|
if model_response.tool_calls is None:
|
|
751
764
|
model_response.tool_calls = []
|
|
@@ -765,10 +778,24 @@ class OpenAIResponses(Model):
|
|
|
765
778
|
model_response.extra = model_response.extra or {}
|
|
766
779
|
model_response.extra.setdefault("tool_call_ids", []).append(output.call_id)
|
|
767
780
|
|
|
768
|
-
|
|
769
|
-
|
|
781
|
+
# Add reasoning summary
|
|
782
|
+
elif output.type == "reasoning":
|
|
783
|
+
if reasoning_summaries := getattr(output, "summary", None):
|
|
784
|
+
for summary in reasoning_summaries:
|
|
785
|
+
if isinstance(summary, dict):
|
|
786
|
+
summary_text = summary.get("text")
|
|
787
|
+
else:
|
|
788
|
+
summary_text = getattr(summary, "text", None)
|
|
789
|
+
if summary_text:
|
|
790
|
+
reasoning_summary = (reasoning_summary or "") + summary_text
|
|
791
|
+
|
|
792
|
+
# Add reasoning content
|
|
793
|
+
if reasoning_summary is not None:
|
|
794
|
+
model_response.reasoning_content = reasoning_summary
|
|
795
|
+
elif self.reasoning is not None:
|
|
770
796
|
model_response.reasoning_content = response.output_text
|
|
771
797
|
|
|
798
|
+
# Add metrics
|
|
772
799
|
if response.usage is not None:
|
|
773
800
|
model_response.response_usage = response.usage
|
|
774
801
|
|
|
@@ -835,7 +862,8 @@ class OpenAIResponses(Model):
|
|
|
835
862
|
model_response.content = stream_event.delta
|
|
836
863
|
stream_data.response_content += stream_event.delta
|
|
837
864
|
|
|
838
|
-
if
|
|
865
|
+
# Treat the output_text deltas as reasoning content if the reasoning summary is not requested.
|
|
866
|
+
if self.reasoning is not None and self.reasoning_summary is None:
|
|
839
867
|
model_response.reasoning_content = stream_event.delta
|
|
840
868
|
stream_data.response_thinking += stream_event.delta
|
|
841
869
|
|
|
@@ -868,7 +896,24 @@ class OpenAIResponses(Model):
|
|
|
868
896
|
|
|
869
897
|
elif stream_event.type == "response.completed":
|
|
870
898
|
model_response = ModelResponse()
|
|
871
|
-
|
|
899
|
+
|
|
900
|
+
# Add reasoning summary
|
|
901
|
+
if self.reasoning_summary is not None:
|
|
902
|
+
summary_text: str = ""
|
|
903
|
+
for out in getattr(stream_event.response, "output", []) or []:
|
|
904
|
+
if getattr(out, "type", None) == "reasoning":
|
|
905
|
+
summaries = getattr(out, "summary", None)
|
|
906
|
+
if summaries:
|
|
907
|
+
for s in summaries:
|
|
908
|
+
text_val = s.get("text") if isinstance(s, dict) else getattr(s, "text", None)
|
|
909
|
+
if text_val:
|
|
910
|
+
if summary_text:
|
|
911
|
+
summary_text += "\n\n"
|
|
912
|
+
summary_text += text_val
|
|
913
|
+
if summary_text:
|
|
914
|
+
model_response.reasoning_content = summary_text
|
|
915
|
+
|
|
916
|
+
# Add metrics
|
|
872
917
|
if stream_event.response.usage is not None:
|
|
873
918
|
model_response.response_usage = stream_event.response.usage
|
|
874
919
|
|
|
@@ -157,6 +157,8 @@ class Team:
|
|
|
157
157
|
add_datetime_to_instructions: bool = False
|
|
158
158
|
# If True, add the current location to the instructions to give the team a sense of location
|
|
159
159
|
add_location_to_instructions: bool = False
|
|
160
|
+
# Allows for custom timezone for datetime instructions following the TZ Database format (e.g. "Etc/UTC")
|
|
161
|
+
timezone_identifier: Optional[str] = None
|
|
160
162
|
# If True, add the tools available to team members to the system message
|
|
161
163
|
add_member_tools_to_system_message: bool = True
|
|
162
164
|
|
|
@@ -328,6 +330,7 @@ class Team:
|
|
|
328
330
|
markdown: bool = False,
|
|
329
331
|
add_datetime_to_instructions: bool = False,
|
|
330
332
|
add_location_to_instructions: bool = False,
|
|
333
|
+
timezone_identifier: Optional[str] = None,
|
|
331
334
|
add_member_tools_to_system_message: bool = True,
|
|
332
335
|
system_message: Optional[Union[str, Callable, Message]] = None,
|
|
333
336
|
system_message_role: str = "system",
|
|
@@ -411,6 +414,7 @@ class Team:
|
|
|
411
414
|
self.markdown = markdown
|
|
412
415
|
self.add_datetime_to_instructions = add_datetime_to_instructions
|
|
413
416
|
self.add_location_to_instructions = add_location_to_instructions
|
|
417
|
+
self.timezone_identifier = timezone_identifier
|
|
414
418
|
self.add_member_tools_to_system_message = add_member_tools_to_system_message
|
|
415
419
|
self.system_message = system_message
|
|
416
420
|
self.system_message_role = system_message_role
|
|
@@ -5308,7 +5312,19 @@ class Team:
|
|
|
5308
5312
|
if self.add_datetime_to_instructions:
|
|
5309
5313
|
from datetime import datetime
|
|
5310
5314
|
|
|
5311
|
-
|
|
5315
|
+
tz = None
|
|
5316
|
+
|
|
5317
|
+
if self.timezone_identifier:
|
|
5318
|
+
try:
|
|
5319
|
+
from zoneinfo import ZoneInfo
|
|
5320
|
+
|
|
5321
|
+
tz = ZoneInfo(self.timezone_identifier)
|
|
5322
|
+
except Exception:
|
|
5323
|
+
log_warning("Invalid timezone identifier")
|
|
5324
|
+
|
|
5325
|
+
time = datetime.now(tz) if tz else datetime.now()
|
|
5326
|
+
|
|
5327
|
+
additional_information.append(f"The current time is {time}.")
|
|
5312
5328
|
|
|
5313
5329
|
# 1.3.3 Add the current location
|
|
5314
5330
|
if self.add_location_to_instructions:
|
|
@@ -2,6 +2,8 @@ import json
|
|
|
2
2
|
from os import getenv
|
|
3
3
|
from typing import Any, List, Optional
|
|
4
4
|
|
|
5
|
+
import requests
|
|
6
|
+
|
|
5
7
|
from agno.tools import Toolkit
|
|
6
8
|
from agno.utils.log import log_info, logger
|
|
7
9
|
|
|
@@ -55,14 +57,22 @@ class ConfluenceTools(Toolkit):
|
|
|
55
57
|
if not self.password:
|
|
56
58
|
raise ValueError("Confluence API KEY or password not provided")
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
session = requests.Session()
|
|
61
|
+
session.verify = verify_ssl
|
|
62
|
+
|
|
61
63
|
if not verify_ssl:
|
|
62
64
|
import urllib3
|
|
63
65
|
|
|
64
66
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
65
67
|
|
|
68
|
+
self.confluence = Confluence(
|
|
69
|
+
url=self.url,
|
|
70
|
+
username=self.username,
|
|
71
|
+
password=self.password,
|
|
72
|
+
verify_ssl=verify_ssl,
|
|
73
|
+
session=session,
|
|
74
|
+
)
|
|
75
|
+
|
|
66
76
|
tools: List[Any] = []
|
|
67
77
|
tools.append(self.get_page_content)
|
|
68
78
|
tools.append(self.get_space_key)
|
|
@@ -87,6 +97,9 @@ class ConfluenceTools(Toolkit):
|
|
|
87
97
|
try:
|
|
88
98
|
log_info(f"Retrieving page content from space '{space_name}'")
|
|
89
99
|
key = self.get_space_key(space_name=space_name)
|
|
100
|
+
if key == "No space found":
|
|
101
|
+
return json.dumps({"error": f"Space '{space_name}' not found"})
|
|
102
|
+
|
|
90
103
|
page = self.confluence.get_page_by_title(key, page_title, expand=expand)
|
|
91
104
|
if page:
|
|
92
105
|
log_info(f"Successfully retrieved page '{page_title}' from space '{space_name}'")
|
|
@@ -106,7 +119,20 @@ class ConfluenceTools(Toolkit):
|
|
|
106
119
|
str: List of space details as a string.
|
|
107
120
|
"""
|
|
108
121
|
log_info("Retrieving details for all Confluence spaces")
|
|
109
|
-
results =
|
|
122
|
+
results = []
|
|
123
|
+
start = 0
|
|
124
|
+
limit = 50
|
|
125
|
+
|
|
126
|
+
while True:
|
|
127
|
+
spaces_data = self.confluence.get_all_spaces(start=start, limit=limit)
|
|
128
|
+
if not spaces_data.get("results"):
|
|
129
|
+
break
|
|
130
|
+
results.extend(spaces_data["results"])
|
|
131
|
+
|
|
132
|
+
if len(spaces_data["results"]) < limit:
|
|
133
|
+
break
|
|
134
|
+
start += limit
|
|
135
|
+
|
|
110
136
|
return str(results)
|
|
111
137
|
|
|
112
138
|
def get_space_key(self, space_name: str):
|
|
@@ -118,13 +144,29 @@ class ConfluenceTools(Toolkit):
|
|
|
118
144
|
Returns:
|
|
119
145
|
str: Space key or "No space found" if space doesn't exist.
|
|
120
146
|
"""
|
|
121
|
-
|
|
122
|
-
|
|
147
|
+
start = 0
|
|
148
|
+
limit = 50
|
|
149
|
+
|
|
150
|
+
while True:
|
|
151
|
+
result = self.confluence.get_all_spaces(start=start, limit=limit)
|
|
152
|
+
if not result.get("results"):
|
|
153
|
+
break
|
|
154
|
+
|
|
155
|
+
spaces = result["results"]
|
|
156
|
+
|
|
157
|
+
for space in spaces:
|
|
158
|
+
if space["name"].lower() == space_name.lower():
|
|
159
|
+
log_info(f"Found space key for '{space_name}': {space['key']}")
|
|
160
|
+
return space["key"]
|
|
161
|
+
|
|
162
|
+
for space in spaces:
|
|
163
|
+
if space["key"] == space_name:
|
|
164
|
+
log_info(f"'{space_name}' is already a space key")
|
|
165
|
+
return space_name
|
|
123
166
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return space["key"]
|
|
167
|
+
if len(spaces) < limit:
|
|
168
|
+
break
|
|
169
|
+
start += limit
|
|
128
170
|
|
|
129
171
|
logger.warning(f"No space named {space_name} found")
|
|
130
172
|
return "No space found"
|
|
@@ -140,9 +182,17 @@ class ConfluenceTools(Toolkit):
|
|
|
140
182
|
"""
|
|
141
183
|
log_info(f"Retrieving all pages from space '{space_name}'")
|
|
142
184
|
space_key = self.get_space_key(space_name)
|
|
185
|
+
|
|
186
|
+
if space_key == "No space found":
|
|
187
|
+
return json.dumps({"error": f"Space '{space_name}' not found"})
|
|
188
|
+
|
|
143
189
|
page_details = self.confluence.get_all_pages_from_space(
|
|
144
190
|
space_key, status=None, expand=None, content_type="page"
|
|
145
191
|
)
|
|
192
|
+
|
|
193
|
+
if not page_details:
|
|
194
|
+
return json.dumps({"error": f"No pages found in space '{space_name}'"})
|
|
195
|
+
|
|
146
196
|
page_details = str([{"id": page["id"], "title": page["title"]} for page in page_details])
|
|
147
197
|
return page_details
|
|
148
198
|
|
|
@@ -160,6 +210,9 @@ class ConfluenceTools(Toolkit):
|
|
|
160
210
|
"""
|
|
161
211
|
try:
|
|
162
212
|
space_key = self.get_space_key(space_name=space_name)
|
|
213
|
+
if space_key == "No space found":
|
|
214
|
+
return json.dumps({"error": f"Space '{space_name}' not found"})
|
|
215
|
+
|
|
163
216
|
page = self.confluence.create_page(space_key, title, body, parent_id=parent_id)
|
|
164
217
|
log_info(f"Page created: {title} with ID {page['id']}")
|
|
165
218
|
return json.dumps({"id": page["id"], "title": title})
|
|
@@ -58,7 +58,7 @@ class E2BTools(Toolkit):
|
|
|
58
58
|
|
|
59
59
|
# According to official docs, the parameter is 'timeout' (in seconds), not 'timeout_ms'
|
|
60
60
|
try:
|
|
61
|
-
self.sandbox = Sandbox(api_key=self.api_key, timeout=timeout, **self.sandbox_options)
|
|
61
|
+
self.sandbox = Sandbox.create(api_key=self.api_key, timeout=timeout, **self.sandbox_options)
|
|
62
62
|
except Exception as e:
|
|
63
63
|
logger.error(f"Warning: Could not create sandbox: {e}")
|
|
64
64
|
raise e
|
|
@@ -133,7 +133,7 @@ class GmailTools(Toolkit):
|
|
|
133
133
|
send_email (bool): Enable sending emails. Defaults to True.
|
|
134
134
|
search_emails (bool): Enable searching emails. Defaults to True.
|
|
135
135
|
send_email_reply (bool): Enable sending email replies. Defaults to True.
|
|
136
|
-
creds (Optional[Credentials]): Pre-
|
|
136
|
+
creds (Optional[Credentials]): Pre-fetched OAuth credentials. Use this to skip a new auth flow. Defaults to None.
|
|
137
137
|
credentials_path (Optional[str]): Path to credentials file. Defaults to None.
|
|
138
138
|
token_path (Optional[str]): Path to token file. Defaults to None.
|
|
139
139
|
scopes (Optional[List[str]]): Custom OAuth scopes. If None, uses DEFAULT_SCOPES.
|