agno 1.7.12__tar.gz → 1.8.0__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.12 → agno-1.8.0}/PKG-INFO +7 -4
- {agno-1.7.12 → agno-1.8.0}/README.md +1 -1
- {agno-1.7.12 → agno-1.8.0}/agno/app/agui/utils.py +1 -1
- {agno-1.7.12 → agno-1.8.0}/agno/app/fastapi/async_router.py +13 -10
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/gcs/pdf.py +2 -2
- {agno-1.7.12 → agno-1.8.0}/agno/media.py +24 -3
- {agno-1.7.12 → agno-1.8.0}/agno/models/google/gemini.py +16 -1
- {agno-1.7.12 → agno-1.8.0}/agno/tools/duckduckgo.py +8 -16
- {agno-1.7.12 → agno-1.8.0}/agno/tools/github.py +26 -14
- agno-1.8.0/agno/tools/memori.py +387 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/scrapegraph.py +65 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/pgvector/pgvector.py +23 -39
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/step.py +4 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/types.py +11 -1
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/workflow.py +54 -1
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/PKG-INFO +7 -4
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/SOURCES.txt +1 -0
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/requires.txt +6 -2
- {agno-1.7.12 → agno-1.8.0}/pyproject.toml +7 -4
- {agno-1.7.12 → agno-1.8.0}/LICENSE +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/agent/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/agent/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/agent/metrics.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/api.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/evals.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/playground.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/routes.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/evals.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/playground.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/response.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/user.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/workflows.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/schemas/workspace.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/user.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/workflows.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/api/workspace.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/agui/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/agui/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/agui/async_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/agui/sync_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/discord/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/discord/client.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/fastapi/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/fastapi/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/fastapi/sync_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/async_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/deploy.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/operator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/schemas.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/serve.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/settings.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/sync_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/playground/utils.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/settings.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/slack/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/slack/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/slack/async_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/slack/security.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/slack/sync_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/utils.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/whatsapp/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/whatsapp/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/whatsapp/async_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/whatsapp/security.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/app/whatsapp/sync_router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/auth_server.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/config.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/console.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/credentials.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/entrypoint.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/operator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/settings.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/ws/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/cli/ws/ws_cli.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/constants.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/debug.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/agentic.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/document.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/fixed.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/markdown.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/recursive.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/row.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/semantic.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/chunking/strategy.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/arxiv_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/csv_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/docx_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/firecrawl_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/gcs/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/gcs/pdf_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/json_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/markdown_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/pdf_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/s3/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/s3/pdf_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/s3/text_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/text_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/url_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/website_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/document/reader/youtube_reader.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/aws_bedrock.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/azure_openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/cohere.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/fastembed.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/fireworks.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/google.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/huggingface.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/jina.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/langdb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/mistral.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/nebius.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/ollama.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/sentence_transformer.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/together.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/embedder/voyageai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/eval/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/eval/accuracy.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/eval/performance.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/eval/reliability.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/eval/utils.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/exceptions.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/file/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/file/file.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/file/local/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/file/local/csv.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/file/local/txt.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/context.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/db_app.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/resource.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/infra/resources.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/arxiv.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/combined.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/csv.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/csv_url.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/document.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/docx.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/firecrawl.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/gcs/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/gcs/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/json.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/langchain.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/light_rag.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/llamaindex.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/markdown.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/pdf.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/pdf_bytes.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/pdf_url.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/s3/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/s3/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/s3/pdf.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/s3/text.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/text.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/url.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/website.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/wikipedia.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/knowledge/youtube.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/classifier.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/db/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/db/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/db/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/db/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/db/sqlite.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/manager.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/memory.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/row.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/summarizer.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/summary.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/firestore.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/redis.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/schema.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/db/sqlite.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/manager.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/memory.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/schema.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/v2/summarizer.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/memory/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/aimlapi/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/anthropic/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/anthropic/claude.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/aws/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/aws/bedrock.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/aws/claude.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/azure/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/azure/ai_foundry.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/azure/openai_chat.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/cerebras/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/cerebras/cerebras.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/cohere/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/cohere/chat.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/dashscope/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/dashscope/dashscope.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/deepinfra/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/deepseek/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/deepseek/deepseek.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/defaults.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/fireworks/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/fireworks/fireworks.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/google/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/groq/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/groq/groq.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/huggingface/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/huggingface/huggingface.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/ibm/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/ibm/watsonx.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/internlm/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/internlm/internlm.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/langdb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/langdb/langdb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/litellm/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/litellm/chat.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/lmstudio/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/message.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/meta/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/meta/llama.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/meta/llama_openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/mistral/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/mistral/mistral.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/nebius/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/nebius/nebius.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/nvidia/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/nvidia/nvidia.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/ollama/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/ollama/chat.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/ollama/tools.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openai/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openai/chat.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openai/like.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openai/responses.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openrouter/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/openrouter/openrouter.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/perplexity/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/perplexity/perplexity.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/portkey/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/portkey/portkey.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/qwen/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/response.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/sambanova/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/sambanova/sambanova.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/together/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/together/together.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/vercel/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/vercel/v0.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/vllm/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/vllm/vllm.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/xai/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/models/xai/xai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/playground/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/playground/deploy.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/playground/playground.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/playground/serve.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/playground/settings.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/py.typed +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/deepseek.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/default.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/groq.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/helpers.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/ollama.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reasoning/step.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reranker/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reranker/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reranker/cohere.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reranker/infinity.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/reranker/sentence_transformer.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/messages.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/response.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/v2/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/v2/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/run/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/dynamodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/json.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/singlestore.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/sqlite.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/agent/yaml.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/dynamodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/firestore.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/gcs_json.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/in_memory.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/json.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/mysql.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/redis.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/agent.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/v2/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/v2/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/session/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/singlestore.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/sqlite.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/workflow/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/workflow/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/workflow/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/workflow/sqlite.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/storage/yaml.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/team/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/team/team.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/agentql.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/airflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/api.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/apify.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/arxiv.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/aws_lambda.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/aws_ses.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/baidusearch.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/bitbucket.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/brandfetch.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/bravesearch.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/brightdata.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/browserbase.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/calcom.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/calculator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/cartesia.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/clickup_tool.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/confluence.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/crawl4ai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/csv_toolkit.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/dalle.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/daytona.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/decorator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/desi_vocal.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/discord.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/docker.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/duckdb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/e2b.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/eleven_labs.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/email.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/evm.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/exa.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/fal.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/file.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/financial_datasets.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/firecrawl.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/function.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/giphy.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/gmail.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/google_bigquery.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/google_maps.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/googlecalendar.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/googlesearch.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/googlesheets.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/hackernews.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/jina.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/jira.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/knowledge.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/linear.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/linkup.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/local_file_system.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/lumalab.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/mcp.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/mem0.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/mlx_transcribe.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/azure_openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/gemini.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/groq.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/morph.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models/nebius.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/models_labs.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/moviepy_video.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/newspaper.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/newspaper4k.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/openbb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/opencv.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/openweather.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/oxylabs.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/pandas.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/postgres.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/pubmed.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/python.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/reasoning.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/reddit.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/replicate.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/resend.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/searxng.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/serpapi.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/serper.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/shell.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/slack.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/sleep.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/spider.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/sql.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/streamlit/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/streamlit/components.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/tavily.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/telegram.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/thinking.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/todoist.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/tool_registry.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/toolkit.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/trafilatura.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/trello.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/twilio.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/user_control_flow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/valyu.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/visualization.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/webbrowser.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/webex.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/website.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/webtools.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/whatsapp.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/wikipedia.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/x.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/yfinance.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/youtube.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/zendesk.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/zep.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/tools/zoom.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/audio.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/certs.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/code_execution.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/common.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/defaults.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/dttm.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/enum.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/env.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/events.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/filesystem.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/format_str.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/functions.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/gemini.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/git.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/http.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/json_io.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/json_schema.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/load_env.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/location.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/log.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/mcp.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/media.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/merge_dict.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/message.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/ai_foundry.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/aws_claude.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/claude.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/cohere.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/llama.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/mistral.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/openai_responses.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/schema_utils.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/models/watsonx.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/openai.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/pickle.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/pprint.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/prompts.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/py_io.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/pyproject.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/resource_filter.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/response.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/response_iterator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/safe_formatter.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/shell.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/string.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/timer.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/tools.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/web.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/whatsapp.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/utils/yaml_io.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/base.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/cassandra/index.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/distance.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/pgvector/index.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/search.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/singlestore/index.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/weaviate/index.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/condition.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/loop.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/parallel.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/router.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/v2/steps.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workflow/workflow.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/__init__.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/config.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/enums.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/helpers.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/operator.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno/workspace/settings.py +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/dependency_links.txt +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/entry_points.txt +0 -0
- {agno-1.7.12 → agno-1.8.0}/agno.egg-info/top_level.txt +0 -0
- {agno-1.7.12 → agno-1.8.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
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.
|
|
@@ -424,7 +424,7 @@ Requires-Dist: fastapi; extra == "dev"
|
|
|
424
424
|
Requires-Dist: uvicorn; extra == "dev"
|
|
425
425
|
Provides-Extra: integration-tests
|
|
426
426
|
Requires-Dist: exa_py; extra == "integration-tests"
|
|
427
|
-
Requires-Dist:
|
|
427
|
+
Requires-Dist: ddgs; extra == "integration-tests"
|
|
428
428
|
Requires-Dist: yfinance; extra == "integration-tests"
|
|
429
429
|
Requires-Dist: sqlalchemy; extra == "integration-tests"
|
|
430
430
|
Requires-Dist: Pillow; extra == "integration-tests"
|
|
@@ -493,7 +493,7 @@ Requires-Dist: cartesia; extra == "cartesia"
|
|
|
493
493
|
Provides-Extra: confluence
|
|
494
494
|
Requires-Dist: atlassian-python-api; extra == "confluence"
|
|
495
495
|
Provides-Extra: ddg
|
|
496
|
-
Requires-Dist:
|
|
496
|
+
Requires-Dist: ddgs; extra == "ddg"
|
|
497
497
|
Provides-Extra: duckdb
|
|
498
498
|
Requires-Dist: duckdb; extra == "duckdb"
|
|
499
499
|
Provides-Extra: elevenlabs
|
|
@@ -525,6 +525,8 @@ Provides-Extra: mcp
|
|
|
525
525
|
Requires-Dist: mcp; extra == "mcp"
|
|
526
526
|
Provides-Extra: mem0
|
|
527
527
|
Requires-Dist: mem0ai; extra == "mem0"
|
|
528
|
+
Provides-Extra: memori
|
|
529
|
+
Requires-Dist: memorisdk; extra == "memori"
|
|
528
530
|
Provides-Extra: newspaper
|
|
529
531
|
Requires-Dist: newspaper4k; extra == "newspaper"
|
|
530
532
|
Requires-Dist: lxml_html_clean; extra == "newspaper"
|
|
@@ -664,6 +666,7 @@ Requires-Dist: agno[confluence]; extra == "tools"
|
|
|
664
666
|
Requires-Dist: agno[oxylabs]; extra == "tools"
|
|
665
667
|
Requires-Dist: agno[zep]; extra == "tools"
|
|
666
668
|
Requires-Dist: agno[mem0]; extra == "tools"
|
|
669
|
+
Requires-Dist: agno[memori]; extra == "tools"
|
|
667
670
|
Requires-Dist: agno[google_bigquery]; extra == "tools"
|
|
668
671
|
Requires-Dist: agno[psycopg]; extra == "tools"
|
|
669
672
|
Requires-Dist: agno[trafilatura]; extra == "tools"
|
|
@@ -881,7 +884,7 @@ agent_team.print_response("What's the market outlook and financial performance o
|
|
|
881
884
|
Install dependencies and run the Agent team:
|
|
882
885
|
|
|
883
886
|
```shell
|
|
884
|
-
pip install
|
|
887
|
+
pip install ddgs yfinance
|
|
885
888
|
|
|
886
889
|
python agent_team.py
|
|
887
890
|
```
|
|
@@ -168,7 +168,7 @@ agent_team.print_response("What's the market outlook and financial performance o
|
|
|
168
168
|
Install dependencies and run the Agent team:
|
|
169
169
|
|
|
170
170
|
```shell
|
|
171
|
-
pip install
|
|
171
|
+
pip install ddgs yfinance
|
|
172
172
|
|
|
173
173
|
python agent_team.py
|
|
174
174
|
```
|
|
@@ -129,7 +129,7 @@ def _create_events_from_chunk(
|
|
|
129
129
|
Process a single chunk and return events to emit + updated message_started state.
|
|
130
130
|
Returns: (events_to_emit, new_message_started_state)
|
|
131
131
|
"""
|
|
132
|
-
events_to_emit = []
|
|
132
|
+
events_to_emit: List[BaseEvent] = []
|
|
133
133
|
|
|
134
134
|
# Extract content if the contextual event is a content event
|
|
135
135
|
if chunk.event == RunEvent.run_response_content:
|
|
@@ -13,7 +13,7 @@ from agno.media import Audio, Image, Video
|
|
|
13
13
|
from agno.media import File as FileMedia
|
|
14
14
|
from agno.run.response import RunResponseErrorEvent
|
|
15
15
|
from agno.run.team import RunResponseErrorEvent as TeamRunResponseErrorEvent
|
|
16
|
-
from agno.run.team import TeamRunResponseEvent
|
|
16
|
+
from agno.run.team import TeamRunResponse, TeamRunResponseEvent
|
|
17
17
|
from agno.run.v2.workflow import WorkflowErrorEvent
|
|
18
18
|
from agno.team.team import Team
|
|
19
19
|
from agno.utils.log import logger
|
|
@@ -425,15 +425,18 @@ def get_async_router(
|
|
|
425
425
|
)
|
|
426
426
|
return run_response.to_dict()
|
|
427
427
|
elif team:
|
|
428
|
-
team_run_response =
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
428
|
+
team_run_response = cast(
|
|
429
|
+
TeamRunResponse,
|
|
430
|
+
await team.arun(
|
|
431
|
+
message=message,
|
|
432
|
+
session_id=session_id,
|
|
433
|
+
user_id=user_id,
|
|
434
|
+
images=base64_images if base64_images else None,
|
|
435
|
+
audio=base64_audios if base64_audios else None,
|
|
436
|
+
videos=base64_videos if base64_videos else None,
|
|
437
|
+
files=document_files if document_files else None,
|
|
438
|
+
stream=False,
|
|
439
|
+
),
|
|
437
440
|
)
|
|
438
441
|
return team_run_response.to_dict()
|
|
439
442
|
elif workflow:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import AsyncIterator, Iterator, List, Optional
|
|
1
|
+
from typing import Any, AsyncIterator, Dict, Iterator, List, Optional
|
|
2
2
|
|
|
3
3
|
from agno.document import Document
|
|
4
4
|
from agno.document.reader.gcs.pdf_reader import GCSPDFReader
|
|
@@ -93,7 +93,7 @@ class GCSPDFKnowledgeBase(GCSKnowledgeBase):
|
|
|
93
93
|
document_iterator = self.async_document_lists
|
|
94
94
|
async for document_list in document_iterator: # type: ignore
|
|
95
95
|
documents_to_load = document_list
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
# Track metadata for filtering capabilities and collect metadata for filters
|
|
98
98
|
filters_metadata: Optional[Dict[str, Any]] = None
|
|
99
99
|
for doc in document_list:
|
|
@@ -38,13 +38,34 @@ class ImageArtifact(Media):
|
|
|
38
38
|
mime_type: Optional[str] = None
|
|
39
39
|
alt_text: Optional[str] = None
|
|
40
40
|
|
|
41
|
+
def _normalise_content(self) -> Optional[Union[str, bytes]]:
|
|
42
|
+
if self.content is None:
|
|
43
|
+
return None
|
|
44
|
+
content_normalised: Union[str, bytes] = self.content
|
|
45
|
+
if content_normalised and isinstance(content_normalised, bytes):
|
|
46
|
+
from base64 import b64encode
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
# First try to decode as UTF-8
|
|
50
|
+
content_normalised = content_normalised.decode("utf-8") # type: ignore
|
|
51
|
+
except UnicodeDecodeError:
|
|
52
|
+
# Fallback to base64 encoding for binary content
|
|
53
|
+
content_normalised = b64encode(bytes(content_normalised)).decode("utf-8") # type: ignore
|
|
54
|
+
except Exception:
|
|
55
|
+
# Last resort: try to convert to base64
|
|
56
|
+
try:
|
|
57
|
+
content_normalised = b64encode(bytes(content_normalised)).decode("utf-8") # type: ignore
|
|
58
|
+
except Exception:
|
|
59
|
+
pass
|
|
60
|
+
return content_normalised
|
|
61
|
+
|
|
41
62
|
def to_dict(self) -> Dict[str, Any]:
|
|
63
|
+
content_normalised = self._normalise_content()
|
|
64
|
+
|
|
42
65
|
response_dict = {
|
|
43
66
|
"id": self.id,
|
|
44
67
|
"url": self.url,
|
|
45
|
-
"content":
|
|
46
|
-
if self.content and isinstance(self.content, bytes)
|
|
47
|
-
else self.content,
|
|
68
|
+
"content": content_normalised,
|
|
48
69
|
"mime_type": self.mime_type,
|
|
49
70
|
"alt_text": self.alt_text,
|
|
50
71
|
}
|
|
@@ -30,9 +30,11 @@ try:
|
|
|
30
30
|
GoogleSearch,
|
|
31
31
|
GoogleSearchRetrieval,
|
|
32
32
|
Part,
|
|
33
|
+
Retrieval,
|
|
33
34
|
ThinkingConfig,
|
|
34
35
|
Tool,
|
|
35
36
|
UrlContext,
|
|
37
|
+
VertexAISearch,
|
|
36
38
|
)
|
|
37
39
|
from google.genai.types import (
|
|
38
40
|
File as GeminiFile,
|
|
@@ -70,6 +72,8 @@ class Gemini(Model):
|
|
|
70
72
|
grounding: bool = False
|
|
71
73
|
grounding_dynamic_threshold: Optional[float] = None
|
|
72
74
|
url_context: bool = False
|
|
75
|
+
vertexai_search: bool = False
|
|
76
|
+
vertexai_search_datastore: Optional[str] = None
|
|
73
77
|
|
|
74
78
|
temperature: Optional[float] = None
|
|
75
79
|
top_p: Optional[float] = None
|
|
@@ -204,7 +208,9 @@ class Gemini(Model):
|
|
|
204
208
|
builtin_tools = []
|
|
205
209
|
|
|
206
210
|
if self.grounding:
|
|
207
|
-
log_info(
|
|
211
|
+
log_info(
|
|
212
|
+
"Grounding enabled. This is a legacy tool. For Gemini 2.0+ Please use enable `search` flag instead."
|
|
213
|
+
)
|
|
208
214
|
builtin_tools.append(
|
|
209
215
|
Tool(
|
|
210
216
|
google_search=GoogleSearchRetrieval(
|
|
@@ -223,6 +229,15 @@ class Gemini(Model):
|
|
|
223
229
|
log_info("URL context enabled.")
|
|
224
230
|
builtin_tools.append(Tool(url_context=UrlContext()))
|
|
225
231
|
|
|
232
|
+
if self.vertexai_search:
|
|
233
|
+
log_info("Vertex AI Search enabled.")
|
|
234
|
+
if not self.vertexai_search_datastore:
|
|
235
|
+
log_error("vertexai_search_datastore must be provided when vertexai_search is enabled.")
|
|
236
|
+
raise ValueError("vertexai_search_datastore must be provided when vertexai_search is enabled.")
|
|
237
|
+
builtin_tools.append(
|
|
238
|
+
Tool(retrieval=Retrieval(vertex_ai_search=VertexAISearch(datastore=self.vertexai_search_datastore)))
|
|
239
|
+
)
|
|
240
|
+
|
|
226
241
|
# Set tools in config
|
|
227
242
|
if builtin_tools:
|
|
228
243
|
if tools:
|
|
@@ -5,9 +5,9 @@ from agno.tools import Toolkit
|
|
|
5
5
|
from agno.utils.log import log_debug
|
|
6
6
|
|
|
7
7
|
try:
|
|
8
|
-
from
|
|
8
|
+
from ddgs import DDGS
|
|
9
9
|
except ImportError:
|
|
10
|
-
raise ImportError("`duckduckgo-search` not installed. Please install using `pip install
|
|
10
|
+
raise ImportError("`duckduckgo-search` not installed. Please install using `pip install ddgs`")
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class DuckDuckGoTools(Toolkit):
|
|
@@ -18,9 +18,7 @@ class DuckDuckGoTools(Toolkit):
|
|
|
18
18
|
news (bool): Enable DuckDuckGo news function.
|
|
19
19
|
modifier (Optional[str]): A modifier to be used in the search request.
|
|
20
20
|
fixed_max_results (Optional[int]): A fixed number of maximum results.
|
|
21
|
-
headers (Optional[Any]): Headers to be used in the search request.
|
|
22
21
|
proxy (Optional[str]): Proxy to be used in the search request.
|
|
23
|
-
proxies (Optional[Any]): A list of proxies to be used in the search request.
|
|
24
22
|
timeout (Optional[int]): The maximum number of seconds to wait for a response.
|
|
25
23
|
|
|
26
24
|
"""
|
|
@@ -31,16 +29,12 @@ class DuckDuckGoTools(Toolkit):
|
|
|
31
29
|
news: bool = True,
|
|
32
30
|
modifier: Optional[str] = None,
|
|
33
31
|
fixed_max_results: Optional[int] = None,
|
|
34
|
-
headers: Optional[Any] = None,
|
|
35
32
|
proxy: Optional[str] = None,
|
|
36
|
-
proxies: Optional[Any] = None,
|
|
37
33
|
timeout: Optional[int] = 10,
|
|
38
34
|
verify_ssl: bool = True,
|
|
39
35
|
**kwargs,
|
|
40
36
|
):
|
|
41
|
-
self.headers: Optional[Any] = headers
|
|
42
37
|
self.proxy: Optional[str] = proxy
|
|
43
|
-
self.proxies: Optional[Any] = proxies
|
|
44
38
|
self.timeout: Optional[int] = timeout
|
|
45
39
|
self.fixed_max_results: Optional[int] = fixed_max_results
|
|
46
40
|
self.modifier: Optional[str] = modifier
|
|
@@ -68,11 +62,10 @@ class DuckDuckGoTools(Toolkit):
|
|
|
68
62
|
search_query = f"{self.modifier} {query}" if self.modifier else query
|
|
69
63
|
|
|
70
64
|
log_debug(f"Searching DDG for: {search_query}")
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
65
|
+
with DDGS(proxy=self.proxy, timeout=self.timeout, verify=self.verify_ssl) as ddgs:
|
|
66
|
+
results = ddgs.text(search_query, max_results=actual_max_results)
|
|
74
67
|
|
|
75
|
-
return json.dumps(
|
|
68
|
+
return json.dumps(results, indent=2)
|
|
76
69
|
|
|
77
70
|
def duckduckgo_news(self, query: str, max_results: int = 5) -> str:
|
|
78
71
|
"""Use this function to get the latest news from DuckDuckGo.
|
|
@@ -87,8 +80,7 @@ class DuckDuckGoTools(Toolkit):
|
|
|
87
80
|
actual_max_results = self.fixed_max_results or max_results
|
|
88
81
|
|
|
89
82
|
log_debug(f"Searching DDG news for: {query}")
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
)
|
|
83
|
+
with DDGS(proxy=self.proxy, timeout=self.timeout, verify=self.verify_ssl) as ddgs:
|
|
84
|
+
results = ddgs.news(query, max_results=actual_max_results)
|
|
93
85
|
|
|
94
|
-
return json.dumps(
|
|
86
|
+
return json.dumps(results, indent=2)
|
|
@@ -1698,20 +1698,32 @@ class GithubTools(Toolkit):
|
|
|
1698
1698
|
log_debug(f"Final search query: {search_query}")
|
|
1699
1699
|
code_results = self.g.search_code(search_query)
|
|
1700
1700
|
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
#
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1701
|
+
results: list[dict] = []
|
|
1702
|
+
limit = 60
|
|
1703
|
+
max_pages = 2 # GitHub returns 30 items per page, so 2 pages covers our limit
|
|
1704
|
+
page_index = 0
|
|
1705
|
+
|
|
1706
|
+
while len(results) < limit and page_index < max_pages:
|
|
1707
|
+
# Fetch one page of results from GitHub API
|
|
1708
|
+
page_items = code_results.get_page(page_index)
|
|
1709
|
+
|
|
1710
|
+
# Stop if no more results available
|
|
1711
|
+
if not page_items:
|
|
1712
|
+
break
|
|
1713
|
+
|
|
1714
|
+
# Process each code result in the current page
|
|
1715
|
+
for code in page_items:
|
|
1716
|
+
code_info = {
|
|
1717
|
+
"repository": code.repository.full_name,
|
|
1718
|
+
"path": code.path,
|
|
1719
|
+
"name": code.name,
|
|
1720
|
+
"sha": code.sha,
|
|
1721
|
+
"html_url": code.html_url,
|
|
1722
|
+
"git_url": code.git_url,
|
|
1723
|
+
"score": code.score,
|
|
1724
|
+
}
|
|
1725
|
+
results.append(code_info)
|
|
1726
|
+
page_index += 1
|
|
1715
1727
|
|
|
1716
1728
|
# Return search results
|
|
1717
1729
|
return json.dumps(
|