agno 2.1.0__tar.gz → 2.1.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-2.1.0 → agno-2.1.1}/PKG-INFO +1 -1
- {agno-2.1.0 → agno-2.1.1}/agno/agent/agent.py +1 -1
- {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/mongo.py +65 -66
- agno-2.1.1/agno/db/utils.py +116 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/knowledge.py +6 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openai/responses.py +1 -1
- agno-2.1.1/agno/os/interfaces/__init__.py +1 -0
- agno-2.1.1/agno/os/interfaces/agui/agui.py +47 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/base.py +4 -2
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/slack.py +13 -8
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/whatsapp.py +12 -5
- {agno-2.1.0 → agno-2.1.1}/agno/os/mcp.py +1 -1
- {agno-2.1.0 → agno-2.1.1}/agno/os/router.py +1 -1
- {agno-2.1.0 → agno-2.1.1}/agno/run/base.py +2 -13
- {agno-2.1.0 → agno-2.1.1}/agno/team/team.py +1 -1
- agno-2.1.1/agno/utils/serialize.py +32 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/types.py +4 -6
- {agno-2.1.0 → agno-2.1.1}/agno.egg-info/PKG-INFO +1 -1
- {agno-2.1.0 → agno-2.1.1}/agno.egg-info/SOURCES.txt +1 -0
- {agno-2.1.0 → agno-2.1.1}/pyproject.toml +1 -1
- agno-2.1.0/agno/db/utils.py +0 -88
- agno-2.1.0/agno/os/interfaces/agui/agui.py +0 -31
- agno-2.1.0/agno/utils/print_response/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/LICENSE +0 -0
- {agno-2.1.0 → agno-2.1.1}/README.md +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/agent/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/agent.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/api.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/evals.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/os.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/routes.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/agent.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/evals.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/os.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/response.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/workflows.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/settings.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/api/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/firestore.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/json/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/json/json_db.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/json/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/migrations/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/mysql.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/postgres.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/redis/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/redis/redis.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/redis/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/redis/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/evals.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/memory.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/metrics.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/debug.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/eval/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/eval/accuracy.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/eval/performance.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/eval/reliability.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/eval/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/exceptions.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/guardrails/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/guardrails/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/guardrails/openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/guardrails/pii.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/integrations/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/integrations/discord/client.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/content.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/document/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/types.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/knowledge/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/media.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/memory/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/memory/manager.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/anthropic/claude.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/aws/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/aws/bedrock.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/aws/claude.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/azure/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cohere/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cohere/chat.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/defaults.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/google/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/google/gemini.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/groq/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/groq/groq.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/ibm/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/internlm/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/internlm/internlm.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/langdb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/langdb/langdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/chat.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/message.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/meta/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/meta/llama.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/metrics.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/mistral/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/mistral/mistral.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nebius/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nebius/nebius.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nexus/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nexus/nexus.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/ollama/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/ollama/chat.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openai/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openai/chat.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openai/like.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/portkey/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/portkey/portkey.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/requesty/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/requesty/requesty.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/response.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/together/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/together/together.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/vercel/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/vercel/v0.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/vllm/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/vllm/vllm.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/xai/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/models/xai/xai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/app.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/auth.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/config.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/middleware/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/middleware/jwt.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/health.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/home.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/routers/session/session.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/schema.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/settings.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/os/utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/py.typed +0 -0
- {agno-2.1.0/agno/os/interfaces → agno-2.1.1/agno/reasoning}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/deepseek.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/default.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/groq.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/helpers.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/ollama.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/reasoning/step.py +0 -0
- {agno-2.1.0/agno/reasoning → agno-2.1.1/agno/run}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/run/agent.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/run/cancel.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/run/messages.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/run/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/run/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/session/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/session/agent.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/session/summary.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/session/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/session/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/team/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/agentql.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/airflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/api.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/apify.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/arxiv.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/aws_lambda.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/aws_ses.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/baidusearch.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/bitbucket.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/brandfetch.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/bravesearch.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/brightdata.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/browserbase.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/calcom.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/calculator.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/cartesia.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/clickup.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/confluence.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/crawl4ai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/dalle.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/daytona.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/decorator.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/desi_vocal.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/discord.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/docker.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/duckdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/duckduckgo.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/e2b.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/eleven_labs.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/email.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/evm.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/exa.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/fal.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/file.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/file_generation.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/financial_datasets.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/firecrawl.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/function.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/giphy.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/github.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/gmail.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/google_bigquery.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/google_maps.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/googlecalendar.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/googlesearch.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/googlesheets.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/hackernews.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/jina.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/jira.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/knowledge.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/linear.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/linkup.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/local_file_system.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/lumalab.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/mcp.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/mem0.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/memori.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/memory.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.1.0/agno/run → agno-2.1.1/agno/tools/models}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models/gemini.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models/groq.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models/morph.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models/nebius.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/models_labs.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/moviepy_video.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/neo4j.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/newspaper.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/newspaper4k.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/openbb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/opencv.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/openweather.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/oxylabs.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/pandas.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/postgres.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/pubmed.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/python.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/reasoning.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/reddit.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/replicate.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/resend.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/scrapegraph.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/searxng.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/serpapi.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/serper.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/shell.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/slack.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/sleep.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/spider.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/sql.py +0 -0
- {agno-2.1.0/agno/tools/models → agno-2.1.1/agno/tools/streamlit}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/streamlit/components.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/tavily.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/telegram.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/todoist.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/tool_registry.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/toolkit.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/trafilatura.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/trello.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/twilio.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/user_control_flow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/valyu.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/visualization.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/webbrowser.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/webex.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/website.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/webtools.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/whatsapp.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/wikipedia.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/x.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/yfinance.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/youtube.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/zendesk.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/zep.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/tools/zoom.py +0 -0
- {agno-2.1.0/agno/tools/streamlit → agno-2.1.1/agno/utils}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/audio.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/certs.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/code_execution.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/common.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/dttm.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/enum.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/env.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/events.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/format_str.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/functions.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/gemini.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/hooks.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/http.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/json_schema.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/knowledge.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/location.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/log.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/mcp.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/media.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/merge_dict.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/message.py +0 -0
- {agno-2.1.0/agno/utils → agno-2.1.1/agno/utils/models}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/claude.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/cohere.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/llama.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/mistral.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/models/watsonx.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/openai.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/pickle.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/pprint.py +0 -0
- {agno-2.1.0/agno/utils/models → agno-2.1.1/agno/utils/print_response}/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/agent.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/prompts.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/reasoning.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/response.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/response_iterator.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/safe_formatter.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/shell.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/streamlit.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/string.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/team.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/timer.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/tools.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/web.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/whatsapp.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/utils/yaml_io.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/base.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/distance.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/search.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/__init__.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/condition.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/loop.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/parallel.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/router.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/step.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/steps.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno/workflow/workflow.py +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno.egg-info/requires.txt +0 -0
- {agno-2.1.0 → agno-2.1.1}/agno.egg-info/top_level.txt +0 -0
- {agno-2.1.0 → agno-2.1.1}/setup.cfg +0 -0
|
@@ -5244,7 +5244,7 @@ class Agent:
|
|
|
5244
5244
|
|
|
5245
5245
|
# 3.2.5 Add information about agentic filters if enabled
|
|
5246
5246
|
if self.knowledge is not None and self.enable_agentic_knowledge_filters:
|
|
5247
|
-
valid_filters =
|
|
5247
|
+
valid_filters = self.knowledge.get_valid_filters()
|
|
5248
5248
|
if valid_filters:
|
|
5249
5249
|
valid_filters_str = ", ".join(valid_filters)
|
|
5250
5250
|
additional_information.append(
|
|
@@ -16,7 +16,7 @@ from agno.db.mongo.utils import (
|
|
|
16
16
|
from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
|
|
17
17
|
from agno.db.schemas.knowledge import KnowledgeRow
|
|
18
18
|
from agno.db.schemas.memory import UserMemory
|
|
19
|
-
from agno.db.utils import deserialize_session_json_fields
|
|
19
|
+
from agno.db.utils import deserialize_session_json_fields
|
|
20
20
|
from agno.session import AgentSession, Session, TeamSession, WorkflowSession
|
|
21
21
|
from agno.utils.log import log_debug, log_error, log_info
|
|
22
22
|
from agno.utils.string import generate_id
|
|
@@ -282,7 +282,6 @@ class MongoDb(BaseDb):
|
|
|
282
282
|
return None
|
|
283
283
|
|
|
284
284
|
session = deserialize_session_json_fields(result)
|
|
285
|
-
|
|
286
285
|
if not deserialize:
|
|
287
286
|
return session
|
|
288
287
|
|
|
@@ -385,7 +384,6 @@ class MongoDb(BaseDb):
|
|
|
385
384
|
records = list(cursor)
|
|
386
385
|
if records is None:
|
|
387
386
|
return [] if deserialize else ([], 0)
|
|
388
|
-
|
|
389
387
|
sessions_raw = [deserialize_session_json_fields(record) for record in records]
|
|
390
388
|
|
|
391
389
|
if not deserialize:
|
|
@@ -489,25 +487,25 @@ class MongoDb(BaseDb):
|
|
|
489
487
|
if collection is None:
|
|
490
488
|
return None
|
|
491
489
|
|
|
492
|
-
|
|
490
|
+
session_dict = session.to_dict()
|
|
493
491
|
|
|
494
492
|
if isinstance(session, AgentSession):
|
|
495
493
|
record = {
|
|
496
|
-
"session_id":
|
|
494
|
+
"session_id": session_dict.get("session_id"),
|
|
497
495
|
"session_type": SessionType.AGENT.value,
|
|
498
|
-
"agent_id":
|
|
499
|
-
"user_id":
|
|
500
|
-
"runs":
|
|
501
|
-
"agent_data":
|
|
502
|
-
"session_data":
|
|
503
|
-
"summary":
|
|
504
|
-
"metadata":
|
|
505
|
-
"created_at":
|
|
496
|
+
"agent_id": session_dict.get("agent_id"),
|
|
497
|
+
"user_id": session_dict.get("user_id"),
|
|
498
|
+
"runs": session_dict.get("runs"),
|
|
499
|
+
"agent_data": session_dict.get("agent_data"),
|
|
500
|
+
"session_data": session_dict.get("session_data"),
|
|
501
|
+
"summary": session_dict.get("summary"),
|
|
502
|
+
"metadata": session_dict.get("metadata"),
|
|
503
|
+
"created_at": session_dict.get("created_at"),
|
|
506
504
|
"updated_at": int(time.time()),
|
|
507
505
|
}
|
|
508
506
|
|
|
509
507
|
result = collection.find_one_and_replace(
|
|
510
|
-
filter={"session_id":
|
|
508
|
+
filter={"session_id": session_dict.get("session_id")},
|
|
511
509
|
replacement=record,
|
|
512
510
|
upsert=True,
|
|
513
511
|
return_document=ReturnDocument.AFTER,
|
|
@@ -515,7 +513,7 @@ class MongoDb(BaseDb):
|
|
|
515
513
|
if not result:
|
|
516
514
|
return None
|
|
517
515
|
|
|
518
|
-
session =
|
|
516
|
+
session = result # type: ignore
|
|
519
517
|
|
|
520
518
|
if not deserialize:
|
|
521
519
|
return session
|
|
@@ -524,21 +522,21 @@ class MongoDb(BaseDb):
|
|
|
524
522
|
|
|
525
523
|
elif isinstance(session, TeamSession):
|
|
526
524
|
record = {
|
|
527
|
-
"session_id":
|
|
525
|
+
"session_id": session_dict.get("session_id"),
|
|
528
526
|
"session_type": SessionType.TEAM.value,
|
|
529
|
-
"team_id":
|
|
530
|
-
"user_id":
|
|
531
|
-
"runs":
|
|
532
|
-
"team_data":
|
|
533
|
-
"session_data":
|
|
534
|
-
"summary":
|
|
535
|
-
"metadata":
|
|
536
|
-
"created_at":
|
|
527
|
+
"team_id": session_dict.get("team_id"),
|
|
528
|
+
"user_id": session_dict.get("user_id"),
|
|
529
|
+
"runs": session_dict.get("runs"),
|
|
530
|
+
"team_data": session_dict.get("team_data"),
|
|
531
|
+
"session_data": session_dict.get("session_data"),
|
|
532
|
+
"summary": session_dict.get("summary"),
|
|
533
|
+
"metadata": session_dict.get("metadata"),
|
|
534
|
+
"created_at": session_dict.get("created_at"),
|
|
537
535
|
"updated_at": int(time.time()),
|
|
538
536
|
}
|
|
539
537
|
|
|
540
538
|
result = collection.find_one_and_replace(
|
|
541
|
-
filter={"session_id":
|
|
539
|
+
filter={"session_id": session_dict.get("session_id")},
|
|
542
540
|
replacement=record,
|
|
543
541
|
upsert=True,
|
|
544
542
|
return_document=ReturnDocument.AFTER,
|
|
@@ -546,7 +544,8 @@ class MongoDb(BaseDb):
|
|
|
546
544
|
if not result:
|
|
547
545
|
return None
|
|
548
546
|
|
|
549
|
-
|
|
547
|
+
# MongoDB stores native objects, no deserialization needed for document fields
|
|
548
|
+
session = result # type: ignore
|
|
550
549
|
|
|
551
550
|
if not deserialize:
|
|
552
551
|
return session
|
|
@@ -555,21 +554,21 @@ class MongoDb(BaseDb):
|
|
|
555
554
|
|
|
556
555
|
else:
|
|
557
556
|
record = {
|
|
558
|
-
"session_id":
|
|
557
|
+
"session_id": session_dict.get("session_id"),
|
|
559
558
|
"session_type": SessionType.WORKFLOW.value,
|
|
560
|
-
"workflow_id":
|
|
561
|
-
"user_id":
|
|
562
|
-
"runs":
|
|
563
|
-
"workflow_data":
|
|
564
|
-
"session_data":
|
|
565
|
-
"summary":
|
|
566
|
-
"metadata":
|
|
567
|
-
"created_at":
|
|
559
|
+
"workflow_id": session_dict.get("workflow_id"),
|
|
560
|
+
"user_id": session_dict.get("user_id"),
|
|
561
|
+
"runs": session_dict.get("runs"),
|
|
562
|
+
"workflow_data": session_dict.get("workflow_data"),
|
|
563
|
+
"session_data": session_dict.get("session_data"),
|
|
564
|
+
"summary": session_dict.get("summary"),
|
|
565
|
+
"metadata": session_dict.get("metadata"),
|
|
566
|
+
"created_at": session_dict.get("created_at"),
|
|
568
567
|
"updated_at": int(time.time()),
|
|
569
568
|
}
|
|
570
569
|
|
|
571
570
|
result = collection.find_one_and_replace(
|
|
572
|
-
filter={"session_id":
|
|
571
|
+
filter={"session_id": session_dict.get("session_id")},
|
|
573
572
|
replacement=record,
|
|
574
573
|
upsert=True,
|
|
575
574
|
return_document=ReturnDocument.AFTER,
|
|
@@ -577,7 +576,7 @@ class MongoDb(BaseDb):
|
|
|
577
576
|
if not result:
|
|
578
577
|
return None
|
|
579
578
|
|
|
580
|
-
session =
|
|
579
|
+
session = result # type: ignore
|
|
581
580
|
|
|
582
581
|
if not deserialize:
|
|
583
582
|
return session
|
|
@@ -628,48 +627,48 @@ class MongoDb(BaseDb):
|
|
|
628
627
|
if session is None:
|
|
629
628
|
continue
|
|
630
629
|
|
|
631
|
-
|
|
630
|
+
session_dict = session.to_dict()
|
|
632
631
|
|
|
633
632
|
if isinstance(session, AgentSession):
|
|
634
633
|
record = {
|
|
635
|
-
"session_id":
|
|
634
|
+
"session_id": session_dict.get("session_id"),
|
|
636
635
|
"session_type": SessionType.AGENT.value,
|
|
637
|
-
"agent_id":
|
|
638
|
-
"user_id":
|
|
639
|
-
"runs":
|
|
640
|
-
"agent_data":
|
|
641
|
-
"session_data":
|
|
642
|
-
"summary":
|
|
643
|
-
"metadata":
|
|
644
|
-
"created_at":
|
|
636
|
+
"agent_id": session_dict.get("agent_id"),
|
|
637
|
+
"user_id": session_dict.get("user_id"),
|
|
638
|
+
"runs": session_dict.get("runs"),
|
|
639
|
+
"agent_data": session_dict.get("agent_data"),
|
|
640
|
+
"session_data": session_dict.get("session_data"),
|
|
641
|
+
"summary": session_dict.get("summary"),
|
|
642
|
+
"metadata": session_dict.get("metadata"),
|
|
643
|
+
"created_at": session_dict.get("created_at"),
|
|
645
644
|
"updated_at": int(time.time()),
|
|
646
645
|
}
|
|
647
646
|
elif isinstance(session, TeamSession):
|
|
648
647
|
record = {
|
|
649
|
-
"session_id":
|
|
648
|
+
"session_id": session_dict.get("session_id"),
|
|
650
649
|
"session_type": SessionType.TEAM.value,
|
|
651
|
-
"team_id":
|
|
652
|
-
"user_id":
|
|
653
|
-
"runs":
|
|
654
|
-
"team_data":
|
|
655
|
-
"session_data":
|
|
656
|
-
"summary":
|
|
657
|
-
"metadata":
|
|
658
|
-
"created_at":
|
|
650
|
+
"team_id": session_dict.get("team_id"),
|
|
651
|
+
"user_id": session_dict.get("user_id"),
|
|
652
|
+
"runs": session_dict.get("runs"),
|
|
653
|
+
"team_data": session_dict.get("team_data"),
|
|
654
|
+
"session_data": session_dict.get("session_data"),
|
|
655
|
+
"summary": session_dict.get("summary"),
|
|
656
|
+
"metadata": session_dict.get("metadata"),
|
|
657
|
+
"created_at": session_dict.get("created_at"),
|
|
659
658
|
"updated_at": int(time.time()),
|
|
660
659
|
}
|
|
661
660
|
elif isinstance(session, WorkflowSession):
|
|
662
661
|
record = {
|
|
663
|
-
"session_id":
|
|
662
|
+
"session_id": session_dict.get("session_id"),
|
|
664
663
|
"session_type": SessionType.WORKFLOW.value,
|
|
665
|
-
"workflow_id":
|
|
666
|
-
"user_id":
|
|
667
|
-
"runs":
|
|
668
|
-
"workflow_data":
|
|
669
|
-
"session_data":
|
|
670
|
-
"summary":
|
|
671
|
-
"metadata":
|
|
672
|
-
"created_at":
|
|
664
|
+
"workflow_id": session_dict.get("workflow_id"),
|
|
665
|
+
"user_id": session_dict.get("user_id"),
|
|
666
|
+
"runs": session_dict.get("runs"),
|
|
667
|
+
"workflow_data": session_dict.get("workflow_data"),
|
|
668
|
+
"session_data": session_dict.get("session_data"),
|
|
669
|
+
"summary": session_dict.get("summary"),
|
|
670
|
+
"metadata": session_dict.get("metadata"),
|
|
671
|
+
"created_at": session_dict.get("created_at"),
|
|
673
672
|
"updated_at": int(time.time()),
|
|
674
673
|
}
|
|
675
674
|
else:
|
|
@@ -688,7 +687,7 @@ class MongoDb(BaseDb):
|
|
|
688
687
|
cursor = collection.find({"session_id": {"$in": session_ids}})
|
|
689
688
|
|
|
690
689
|
for doc in cursor:
|
|
691
|
-
session_dict =
|
|
690
|
+
session_dict = doc
|
|
692
691
|
|
|
693
692
|
if deserialize:
|
|
694
693
|
session_type = doc.get("session_type")
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""Logic shared across different database implementations"""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from datetime import date, datetime
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
from agno.models.message import Message
|
|
8
|
+
from agno.models.metrics import Metrics
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CustomJSONEncoder(json.JSONEncoder):
|
|
12
|
+
"""Custom encoder to handle non JSON serializable types."""
|
|
13
|
+
|
|
14
|
+
def default(self, obj):
|
|
15
|
+
if isinstance(obj, UUID):
|
|
16
|
+
return str(obj)
|
|
17
|
+
elif isinstance(obj, (date, datetime)):
|
|
18
|
+
return obj.isoformat()
|
|
19
|
+
elif isinstance(obj, Message):
|
|
20
|
+
return obj.to_dict()
|
|
21
|
+
elif isinstance(obj, Metrics):
|
|
22
|
+
return obj.to_dict()
|
|
23
|
+
|
|
24
|
+
return super().default(obj)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def serialize_session_json_fields(session: dict) -> dict:
|
|
28
|
+
"""Serialize all JSON fields in the given Session dictionary.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
data (dict): The dictionary to serialize JSON fields in.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
dict: The dictionary with JSON fields serialized.
|
|
35
|
+
"""
|
|
36
|
+
if session.get("session_data") is not None:
|
|
37
|
+
session["session_data"] = json.dumps(session["session_data"])
|
|
38
|
+
if session.get("agent_data") is not None:
|
|
39
|
+
session["agent_data"] = json.dumps(session["agent_data"])
|
|
40
|
+
if session.get("team_data") is not None:
|
|
41
|
+
session["team_data"] = json.dumps(session["team_data"])
|
|
42
|
+
if session.get("workflow_data") is not None:
|
|
43
|
+
session["workflow_data"] = json.dumps(session["workflow_data"])
|
|
44
|
+
if session.get("metadata") is not None:
|
|
45
|
+
session["metadata"] = json.dumps(session["metadata"])
|
|
46
|
+
if session.get("chat_history") is not None:
|
|
47
|
+
session["chat_history"] = json.dumps(session["chat_history"])
|
|
48
|
+
if session.get("summary") is not None:
|
|
49
|
+
session["summary"] = json.dumps(session["summary"], cls=CustomJSONEncoder)
|
|
50
|
+
if session.get("runs") is not None:
|
|
51
|
+
session["runs"] = json.dumps(session["runs"], cls=CustomJSONEncoder)
|
|
52
|
+
|
|
53
|
+
return session
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def deserialize_session_json_fields(session: dict) -> dict:
|
|
57
|
+
"""Deserialize JSON fields in the given Session dictionary.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
session (dict): The dictionary to deserialize.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
dict: The dictionary with JSON string fields deserialized to objects.
|
|
64
|
+
"""
|
|
65
|
+
from agno.utils.log import log_warning
|
|
66
|
+
|
|
67
|
+
if session.get("agent_data") is not None and isinstance(session["agent_data"], str):
|
|
68
|
+
try:
|
|
69
|
+
session["agent_data"] = json.loads(session["agent_data"])
|
|
70
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
71
|
+
log_warning(f"Warning: Could not parse agent_data as JSON, keeping as string: {e}")
|
|
72
|
+
|
|
73
|
+
if session.get("team_data") is not None and isinstance(session["team_data"], str):
|
|
74
|
+
try:
|
|
75
|
+
session["team_data"] = json.loads(session["team_data"])
|
|
76
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
77
|
+
log_warning(f"Warning: Could not parse team_data as JSON, keeping as string: {e}")
|
|
78
|
+
|
|
79
|
+
if session.get("workflow_data") is not None and isinstance(session["workflow_data"], str):
|
|
80
|
+
try:
|
|
81
|
+
session["workflow_data"] = json.loads(session["workflow_data"])
|
|
82
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
83
|
+
log_warning(f"Warning: Could not parse workflow_data as JSON, keeping as string: {e}")
|
|
84
|
+
|
|
85
|
+
if session.get("metadata") is not None and isinstance(session["metadata"], str):
|
|
86
|
+
try:
|
|
87
|
+
session["metadata"] = json.loads(session["metadata"])
|
|
88
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
89
|
+
log_warning(f"Warning: Could not parse metadata as JSON, keeping as string: {e}")
|
|
90
|
+
|
|
91
|
+
if session.get("chat_history") is not None and isinstance(session["chat_history"], str):
|
|
92
|
+
try:
|
|
93
|
+
session["chat_history"] = json.loads(session["chat_history"])
|
|
94
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
95
|
+
log_warning(f"Warning: Could not parse chat_history as JSON, keeping as string: {e}")
|
|
96
|
+
|
|
97
|
+
if session.get("summary") is not None and isinstance(session["summary"], str):
|
|
98
|
+
try:
|
|
99
|
+
session["summary"] = json.loads(session["summary"])
|
|
100
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
101
|
+
log_warning(f"Warning: Could not parse summary as JSON, keeping as string: {e}")
|
|
102
|
+
|
|
103
|
+
if session.get("session_data") is not None and isinstance(session["session_data"], str):
|
|
104
|
+
try:
|
|
105
|
+
session["session_data"] = json.loads(session["session_data"])
|
|
106
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
107
|
+
log_warning(f"Warning: Could not parse session_data as JSON, keeping as string: {e}")
|
|
108
|
+
|
|
109
|
+
# Handle runs field with session type checking
|
|
110
|
+
if session.get("runs") is not None and isinstance(session["runs"], str):
|
|
111
|
+
try:
|
|
112
|
+
session["runs"] = json.loads(session["runs"])
|
|
113
|
+
except (json.JSONDecodeError, TypeError) as e:
|
|
114
|
+
log_warning(f"Warning: Could not parse runs as JSON, keeping as string: {e}")
|
|
115
|
+
|
|
116
|
+
return session
|
|
@@ -1357,6 +1357,12 @@ class Knowledge:
|
|
|
1357
1357
|
log_error(f"Error searching for documents: {e}")
|
|
1358
1358
|
return []
|
|
1359
1359
|
|
|
1360
|
+
def get_valid_filters(self) -> Set[str]:
|
|
1361
|
+
if self.valid_metadata_filters is None:
|
|
1362
|
+
self.valid_metadata_filters = set()
|
|
1363
|
+
self.valid_metadata_filters.update(self._get_filters_from_db)
|
|
1364
|
+
return self.valid_metadata_filters
|
|
1365
|
+
|
|
1360
1366
|
def validate_filters(self, filters: Optional[Dict[str, Any]]) -> Tuple[Dict[str, Any], List[str]]:
|
|
1361
1367
|
if self.valid_metadata_filters is None:
|
|
1362
1368
|
self.valid_metadata_filters = set()
|
|
@@ -45,7 +45,7 @@ class OpenAIResponses(Model):
|
|
|
45
45
|
parallel_tool_calls: Optional[bool] = None
|
|
46
46
|
reasoning: Optional[Dict[str, Any]] = None
|
|
47
47
|
verbosity: Optional[Literal["low", "medium", "high"]] = None
|
|
48
|
-
reasoning_effort: Optional[Literal["minimal", "medium", "high"]] = None
|
|
48
|
+
reasoning_effort: Optional[Literal["minimal", "low", "medium", "high"]] = None
|
|
49
49
|
reasoning_summary: Optional[Literal["auto", "concise", "detailed"]] = None
|
|
50
50
|
store: Optional[bool] = None
|
|
51
51
|
temperature: Optional[float] = None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Main class for the AG-UI app, used to expose an Agno Agent or Team in an AG-UI compatible format."""
|
|
2
|
+
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
from fastapi.routing import APIRouter
|
|
6
|
+
|
|
7
|
+
from agno.agent import Agent
|
|
8
|
+
from agno.os.interfaces.agui.router import attach_routes
|
|
9
|
+
from agno.os.interfaces.base import BaseInterface
|
|
10
|
+
from agno.team import Team
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AGUI(BaseInterface):
|
|
14
|
+
type = "agui"
|
|
15
|
+
|
|
16
|
+
router: APIRouter
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
agent: Optional[Agent] = None,
|
|
21
|
+
team: Optional[Team] = None,
|
|
22
|
+
prefix: str = "",
|
|
23
|
+
tags: Optional[List[str]] = None,
|
|
24
|
+
):
|
|
25
|
+
"""
|
|
26
|
+
Initialize the AGUI interface.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
agent: The agent to expose via AG-UI
|
|
30
|
+
team: The team to expose via AG-UI
|
|
31
|
+
prefix: Custom prefix for the router (e.g., "/agui/v1", "/chat/public")
|
|
32
|
+
tags: Custom tags for the router (e.g., ["AGUI", "Chat"], defaults to ["AGUI"])
|
|
33
|
+
"""
|
|
34
|
+
self.agent = agent
|
|
35
|
+
self.team = team
|
|
36
|
+
self.prefix = prefix
|
|
37
|
+
self.tags = tags or ["AGUI"]
|
|
38
|
+
|
|
39
|
+
if not (self.agent or self.team):
|
|
40
|
+
raise ValueError("AGUI requires an agent or a team")
|
|
41
|
+
|
|
42
|
+
def get_router(self) -> APIRouter:
|
|
43
|
+
self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
|
|
44
|
+
|
|
45
|
+
self.router = attach_routes(router=self.router, agent=self.agent, team=self.team)
|
|
46
|
+
|
|
47
|
+
return self.router
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import List, Optional
|
|
3
3
|
|
|
4
4
|
from fastapi import APIRouter
|
|
5
5
|
|
|
@@ -11,11 +11,13 @@ from agno.workflow.workflow import Workflow
|
|
|
11
11
|
class BaseInterface(ABC):
|
|
12
12
|
type: str
|
|
13
13
|
version: str = "1.0"
|
|
14
|
-
router_prefix: str = ""
|
|
15
14
|
agent: Optional[Agent] = None
|
|
16
15
|
team: Optional[Team] = None
|
|
17
16
|
workflow: Optional[Workflow] = None
|
|
18
17
|
|
|
18
|
+
prefix: str
|
|
19
|
+
tags: List[str]
|
|
20
|
+
|
|
19
21
|
router: APIRouter
|
|
20
22
|
|
|
21
23
|
@abstractmethod
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
from typing import Optional
|
|
1
|
+
from typing import List, Optional
|
|
3
2
|
|
|
4
3
|
from fastapi.routing import APIRouter
|
|
5
4
|
|
|
@@ -9,25 +8,31 @@ from agno.os.interfaces.slack.router import attach_routes
|
|
|
9
8
|
from agno.team.team import Team
|
|
10
9
|
from agno.workflow.workflow import Workflow
|
|
11
10
|
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
11
|
|
|
15
12
|
class Slack(BaseInterface):
|
|
16
13
|
type = "slack"
|
|
17
14
|
|
|
18
15
|
router: APIRouter
|
|
19
16
|
|
|
20
|
-
def __init__(
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
agent: Optional[Agent] = None,
|
|
20
|
+
team: Optional[Team] = None,
|
|
21
|
+
workflow: Optional[Workflow] = None,
|
|
22
|
+
prefix: str = "/slack",
|
|
23
|
+
tags: Optional[List[str]] = None,
|
|
24
|
+
):
|
|
21
25
|
self.agent = agent
|
|
22
26
|
self.team = team
|
|
23
27
|
self.workflow = workflow
|
|
28
|
+
self.prefix = prefix
|
|
29
|
+
self.tags = tags or ["Slack"]
|
|
24
30
|
|
|
25
31
|
if not (self.agent or self.team or self.workflow):
|
|
26
32
|
raise ValueError("Slack requires an agent, team or workflow")
|
|
27
33
|
|
|
28
|
-
def get_router(self
|
|
29
|
-
#
|
|
30
|
-
self.router = APIRouter(prefix="/slack", tags=["Slack"])
|
|
34
|
+
def get_router(self) -> APIRouter:
|
|
35
|
+
self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
|
|
31
36
|
|
|
32
37
|
self.router = attach_routes(router=self.router, agent=self.agent, team=self.team, workflow=self.workflow)
|
|
33
38
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import List, Optional
|
|
2
2
|
|
|
3
3
|
from fastapi.routing import APIRouter
|
|
4
4
|
|
|
@@ -13,16 +13,23 @@ class Whatsapp(BaseInterface):
|
|
|
13
13
|
|
|
14
14
|
router: APIRouter
|
|
15
15
|
|
|
16
|
-
def __init__(
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
agent: Optional[Agent] = None,
|
|
19
|
+
team: Optional[Team] = None,
|
|
20
|
+
prefix: str = "/whatsapp",
|
|
21
|
+
tags: Optional[List[str]] = None,
|
|
22
|
+
):
|
|
17
23
|
self.agent = agent
|
|
18
24
|
self.team = team
|
|
25
|
+
self.prefix = prefix
|
|
26
|
+
self.tags = tags or ["Whatsapp"]
|
|
19
27
|
|
|
20
28
|
if not (self.agent or self.team):
|
|
21
29
|
raise ValueError("Whatsapp requires an agent or a team")
|
|
22
30
|
|
|
23
|
-
def get_router(self
|
|
24
|
-
#
|
|
25
|
-
self.router = APIRouter(prefix="/whatsapp", tags=["Whatsapp"])
|
|
31
|
+
def get_router(self) -> APIRouter:
|
|
32
|
+
self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
|
|
26
33
|
|
|
27
34
|
self.router = attach_routes(router=self.router, agent=self.agent, team=self.team)
|
|
28
35
|
|
|
@@ -68,7 +68,7 @@ def get_mcp_server(
|
|
|
68
68
|
teams=[TeamSummaryResponse.from_team(team) for team in os.teams] if os.teams else [],
|
|
69
69
|
workflows=[WorkflowSummaryResponse.from_workflow(w) for w in os.workflows] if os.workflows else [],
|
|
70
70
|
interfaces=[
|
|
71
|
-
InterfaceResponse(type=interface.type, version=interface.version, route=interface.
|
|
71
|
+
InterfaceResponse(type=interface.type, version=interface.version, route=interface.prefix)
|
|
72
72
|
for interface in os.interfaces
|
|
73
73
|
],
|
|
74
74
|
)
|
|
@@ -654,7 +654,7 @@ def get_base_router(
|
|
|
654
654
|
teams=[TeamSummaryResponse.from_team(team) for team in os.teams] if os.teams else [],
|
|
655
655
|
workflows=[WorkflowSummaryResponse.from_workflow(w) for w in os.workflows] if os.workflows else [],
|
|
656
656
|
interfaces=[
|
|
657
|
-
InterfaceResponse(type=interface.type, version=interface.version, route=interface.
|
|
657
|
+
InterfaceResponse(type=interface.type, version=interface.version, route=interface.prefix)
|
|
658
658
|
for interface in os.interfaces
|
|
659
659
|
],
|
|
660
660
|
)
|
|
@@ -117,19 +117,8 @@ class BaseRunOutputEvent:
|
|
|
117
117
|
|
|
118
118
|
def to_json(self, separators=(", ", ": "), indent: Optional[int] = 2) -> str:
|
|
119
119
|
import json
|
|
120
|
-
|
|
121
|
-
from
|
|
122
|
-
|
|
123
|
-
def json_serializer(obj):
|
|
124
|
-
# Datetime like
|
|
125
|
-
if isinstance(obj, (datetime, date, time)):
|
|
126
|
-
return obj.isoformat()
|
|
127
|
-
# Enums
|
|
128
|
-
if isinstance(obj, Enum):
|
|
129
|
-
v = obj.value
|
|
130
|
-
return v if isinstance(v, (str, int, float, bool, type(None))) else obj.name
|
|
131
|
-
# Fallback to string
|
|
132
|
-
return str(obj)
|
|
120
|
+
|
|
121
|
+
from agno.utils.serialize import json_serializer
|
|
133
122
|
|
|
134
123
|
try:
|
|
135
124
|
_dict = self.to_dict()
|
|
@@ -4866,7 +4866,7 @@ class Team:
|
|
|
4866
4866
|
additional_information.append(f"Your name is: {self.name}.")
|
|
4867
4867
|
|
|
4868
4868
|
if self.knowledge is not None and self.enable_agentic_knowledge_filters:
|
|
4869
|
-
valid_filters =
|
|
4869
|
+
valid_filters = self.knowledge.get_valid_filters()
|
|
4870
4870
|
if valid_filters:
|
|
4871
4871
|
valid_filters_str = ", ".join(valid_filters)
|
|
4872
4872
|
additional_information.append(
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""JSON serialization utilities for handling datetime and enum objects."""
|
|
2
|
+
|
|
3
|
+
from datetime import date, datetime, time
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def json_serializer(obj: Any) -> Any:
|
|
9
|
+
"""Custom JSON serializer for objects not serializable by default json module.
|
|
10
|
+
|
|
11
|
+
Handles:
|
|
12
|
+
- datetime, date, time objects -> ISO format strings
|
|
13
|
+
- Enum objects -> their values (or names if values are not JSON-serializable)
|
|
14
|
+
- All other objects -> string representation
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
obj: Object to serialize
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
JSON-serializable representation of the object
|
|
21
|
+
"""
|
|
22
|
+
# Datetime like
|
|
23
|
+
if isinstance(obj, (datetime, date, time)):
|
|
24
|
+
return obj.isoformat()
|
|
25
|
+
|
|
26
|
+
# Enums
|
|
27
|
+
if isinstance(obj, Enum):
|
|
28
|
+
v = obj.value
|
|
29
|
+
return v if isinstance(v, (str, int, float, bool, type(None))) else obj.name
|
|
30
|
+
|
|
31
|
+
# Fallback to string
|
|
32
|
+
return str(obj)
|