agno 2.4.3__tar.gz → 2.4.5__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.4.3 → agno-2.4.5}/PKG-INFO +5 -2
- {agno-2.4.3 → agno-2.4.5}/README.md +1 -1
- {agno-2.4.3 → agno-2.4.5}/agno/agent/agent.py +45 -38
- {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/firestore.py +53 -30
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/models.py +5 -5
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/surrealdb.py +13 -1
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/markdown.py +112 -11
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/knowledge.py +8 -10
- {agno-2.4.3 → agno-2.4.5}/agno/models/base.py +6 -0
- agno-2.4.5/agno/models/moonshot/__init__.py +3 -0
- agno-2.4.5/agno/models/moonshot/moonshot.py +57 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/response.py +4 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/utils.py +5 -0
- {agno-2.4.3 → agno-2.4.5}/agno/team/team.py +27 -20
- {agno-2.4.3 → agno-2.4.5}/agno/tools/decorator.py +3 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/function.py +3 -0
- agno-2.4.5/agno/tools/seltz.py +134 -0
- agno-2.4.5/agno/tools/unsplash.py +341 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/agent.py +8 -5
- {agno-2.4.3 → agno-2.4.5}/agno/utils/response.py +38 -28
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lancedb/lance_db.py +29 -7
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/workflow.py +8 -0
- {agno-2.4.3 → agno-2.4.5}/agno.egg-info/PKG-INFO +5 -2
- {agno-2.4.3 → agno-2.4.5}/agno.egg-info/SOURCES.txt +4 -0
- {agno-2.4.3 → agno-2.4.5}/agno.egg-info/requires.txt +4 -0
- {agno-2.4.3 → agno-2.4.5}/pyproject.toml +4 -1
- {agno-2.4.3 → agno-2.4.5}/LICENSE +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/agent/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/agent/remote.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/api.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/evals.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/os.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/routes.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/evals.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/os.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/response.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/workflows.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/settings.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/api/workflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/client.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/client/os.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/compression/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/compression/manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/culture/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/culture/manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/json/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/json/json_db.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/json/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/versions/v2_3_0.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/async_mongo.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/mongo.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/async_mysql.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/mysql.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/async_postgres.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/postgres.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/redis/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/redis/redis.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/redis/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/redis/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/culture.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/evals.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/memory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/metrics.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/async_sqlite.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/db/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/debug.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/accuracy.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/agent_as_judge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/performance.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/reliability.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/eval/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/exceptions.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/filters.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/guardrails/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/guardrails/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/guardrails/openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/guardrails/pii.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/hooks/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/hooks/decorator.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/integrations/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/integrations/discord/client.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/code.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/content.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/document/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/filesystem.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/protocol.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/excel_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/utils/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/utils/spreadsheet.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/config.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/types.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/knowledge/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/config.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/curate.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/machine.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/decision_log.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/entity_memory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/learned_knowledge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/protocol.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/session_context.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/user_memory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/user_profile.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/learn/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/media.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/types.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/anthropic/claude.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/aws/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/aws/bedrock.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/aws/claude.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/azure/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cohere/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cohere/chat.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/defaults.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/google/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/google/gemini.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/google/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/groq/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/groq/groq.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/ibm/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/internlm/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/internlm/internlm.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/langdb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/langdb/langdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/chat.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/message.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/meta/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/meta/llama.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/metrics.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/mistral/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/mistral/mistral.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/n1n/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/n1n/n1n.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nebius/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nebius/nebius.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nexus/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nexus/nexus.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/chat.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/responses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openai/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openai/chat.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openai/like.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openai/open_responses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openai/responses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/responses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/portkey/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/portkey/portkey.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/requesty/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/requesty/requesty.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/together/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/together/together.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vercel/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vercel/v0.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vertexai/claude.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vllm/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/vllm/vllm.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/xai/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/models/xai/xai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/app.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/auth.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/config.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/managers.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/mcp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/jwt.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/trailing_slash.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/schema.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/components/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/components/components.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/database.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/health.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/home.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/registry/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/registry/registry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/session/session.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/schema.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/schema.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/schema.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/scopes.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/settings.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/os/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/py.typed +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/anthropic.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/deepseek.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/default.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/gemini.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/groq.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/helpers.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/ollama.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/step.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/reasoning/vertexai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/registry/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/registry/registry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/remote/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/remote/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/cancel.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/messages.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/requirement.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/run/workflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/session/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/session/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/session/summary.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/session/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/session/workflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/agent_skills.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/errors.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/local.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/skill.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/skills/validator.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/table.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/team/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/team/remote.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/agentql.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/airflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/api.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/apify.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/arxiv.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/aws_lambda.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/aws_ses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/baidusearch.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/bitbucket.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/brandfetch.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/bravesearch.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/brightdata.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/browserbase.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/calcom.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/calculator.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/cartesia.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/clickup.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/confluence.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/crawl4ai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/dalle.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/daytona.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/desi_vocal.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/discord.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/docker.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/duckdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/duckduckgo.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/e2b.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/eleven_labs.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/email.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/evm.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/exa.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/fal.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/file.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/file_generation.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/financial_datasets.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/firecrawl.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/giphy.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/github.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/gmail.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/google_bigquery.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/google_drive.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/google_maps.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/googlecalendar.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/googlesheets.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/hackernews.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/jina.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/jira.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/knowledge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/linear.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/linkup.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/local_file_system.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/lumalab.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/params.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mem0.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/memory.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/gemini.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/groq.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/morph.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models/nebius.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/models_labs.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/moviepy_video.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/nano_banana.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/neo4j.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/newspaper.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/newspaper4k.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/notion.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/openbb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/opencv.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/openweather.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/oxylabs.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/pandas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/parallel.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/postgres.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/pubmed.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/python.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/reasoning.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/reddit.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/redshift.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/replicate.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/resend.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/scrapegraph.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/searxng.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/serpapi.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/serper.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/shell.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/shopify.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/slack.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/sleep.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/spider.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/spotify.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/sql.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/streamlit/components.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/tavily.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/telegram.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/todoist.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/tool_registry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/toolkit.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/trafilatura.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/trello.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/twilio.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/user_control_flow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/valyu.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/visualization.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/webbrowser.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/webex.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/websearch.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/website.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/webtools.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/whatsapp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/wikipedia.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/workflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/x.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/yfinance.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/youtube.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/zendesk.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/zep.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tools/zoom.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tracing/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tracing/exporter.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tracing/schemas.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/tracing/setup.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/audio.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/certs.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/code_execution.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/common.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/cryptography.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/dttm.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/enum.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/env.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/events.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/format_str.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/functions.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/gemini.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/hooks.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/http.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/json_schema.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/knowledge.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/location.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/log.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/mcp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/media.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/merge_dict.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/message.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/claude.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/cohere.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/llama.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/mistral.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/models/watsonx.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/openai.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/os.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/pickle.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/pprint.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/prompts.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/reasoning.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/remote.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/response_iterator.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/safe_formatter.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/serialize.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/shell.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/streamlit.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/string.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/team.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/timer.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/tokens.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/tools.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/web.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/whatsapp.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/utils/yaml_io.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/base.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/distance.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/pgvector.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/search.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/__init__.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/agent.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/condition.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/loop.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/parallel.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/remote.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/router.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/step.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/steps.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno/workflow/types.py +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.4.3 → agno-2.4.5}/agno.egg-info/top_level.txt +0 -0
- {agno-2.4.3 → agno-2.4.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.5
|
|
4
4
|
Summary: Agno: a lightweight library for building Multi-Agent Systems
|
|
5
5
|
Author-email: Ashpreet Bedi <ashpreet@agno.com>
|
|
6
6
|
Project-URL: homepage, https://agno.com
|
|
@@ -132,6 +132,8 @@ Provides-Extra: evm
|
|
|
132
132
|
Requires-Dist: web3; extra == "evm"
|
|
133
133
|
Provides-Extra: exa
|
|
134
134
|
Requires-Dist: exa_py; extra == "exa"
|
|
135
|
+
Provides-Extra: seltz
|
|
136
|
+
Requires-Dist: seltz; extra == "seltz"
|
|
135
137
|
Provides-Extra: fal
|
|
136
138
|
Requires-Dist: fal_client; extra == "fal"
|
|
137
139
|
Provides-Extra: firecrawl
|
|
@@ -308,6 +310,7 @@ Provides-Extra: tools
|
|
|
308
310
|
Requires-Dist: agno[apify]; extra == "tools"
|
|
309
311
|
Requires-Dist: agno[arxiv]; extra == "tools"
|
|
310
312
|
Requires-Dist: agno[exa]; extra == "tools"
|
|
313
|
+
Requires-Dist: agno[seltz]; extra == "tools"
|
|
311
314
|
Requires-Dist: agno[cartesia]; extra == "tools"
|
|
312
315
|
Requires-Dist: agno[ddg]; extra == "tools"
|
|
313
316
|
Requires-Dist: agno[duckdb]; extra == "tools"
|
|
@@ -531,7 +534,7 @@ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
|
|
|
531
534
|
|
|
532
535
|
## Getting Started
|
|
533
536
|
|
|
534
|
-
1. Follow the [
|
|
537
|
+
1. Follow the [quickstart guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_quickstart)
|
|
535
538
|
2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
|
|
536
539
|
3. Read the [docs](https://docs.agno.com) to go deeper
|
|
537
540
|
|
|
@@ -98,7 +98,7 @@ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
|
|
|
98
98
|
|
|
99
99
|
## Getting Started
|
|
100
100
|
|
|
101
|
-
1. Follow the [
|
|
101
|
+
1. Follow the [quickstart guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_quickstart)
|
|
102
102
|
2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
|
|
103
103
|
3. Read the [docs](https://docs.agno.com) to go deeper
|
|
104
104
|
|
|
@@ -320,6 +320,8 @@ class Agent:
|
|
|
320
320
|
# Add a tool that allows the Model to search the knowledge base (aka Agentic RAG)
|
|
321
321
|
# Added only if knowledge is provided.
|
|
322
322
|
search_knowledge: bool = True
|
|
323
|
+
# If True, add search_knowledge instructions to the system prompt
|
|
324
|
+
add_search_knowledge_instructions: bool = True
|
|
323
325
|
# Add a tool that allows the Agent to update Knowledge.
|
|
324
326
|
update_knowledge: bool = False
|
|
325
327
|
# Add a tool that allows the Model to get the tool call history.
|
|
@@ -524,6 +526,7 @@ class Agent:
|
|
|
524
526
|
reasoning_max_steps: int = 10,
|
|
525
527
|
read_chat_history: bool = False,
|
|
526
528
|
search_knowledge: bool = True,
|
|
529
|
+
add_search_knowledge_instructions: bool = True,
|
|
527
530
|
update_knowledge: bool = False,
|
|
528
531
|
read_tool_call_history: bool = False,
|
|
529
532
|
send_media_to_model: bool = True,
|
|
@@ -661,6 +664,7 @@ class Agent:
|
|
|
661
664
|
|
|
662
665
|
self.read_chat_history = read_chat_history
|
|
663
666
|
self.search_knowledge = search_knowledge
|
|
667
|
+
self.add_search_knowledge_instructions = add_search_knowledge_instructions
|
|
664
668
|
self.update_knowledge = update_knowledge
|
|
665
669
|
self.read_tool_call_history = read_tool_call_history
|
|
666
670
|
self.send_media_to_model = send_media_to_model
|
|
@@ -7431,6 +7435,10 @@ class Agent:
|
|
|
7431
7435
|
config["enable_agentic_knowledge_filters"] = self.enable_agentic_knowledge_filters
|
|
7432
7436
|
if self.add_knowledge_to_context:
|
|
7433
7437
|
config["add_knowledge_to_context"] = self.add_knowledge_to_context
|
|
7438
|
+
if not self.search_knowledge:
|
|
7439
|
+
config["search_knowledge"] = self.search_knowledge
|
|
7440
|
+
if self.add_search_knowledge_instructions:
|
|
7441
|
+
config["add_search_knowledge_instructions"] = self.add_search_knowledge_instructions
|
|
7434
7442
|
# Skip knowledge_retriever as it's a callable
|
|
7435
7443
|
if self.references_format != "json":
|
|
7436
7444
|
config["references_format"] = self.references_format
|
|
@@ -7481,8 +7489,6 @@ class Agent:
|
|
|
7481
7489
|
# --- Default tools settings ---
|
|
7482
7490
|
if self.read_chat_history:
|
|
7483
7491
|
config["read_chat_history"] = self.read_chat_history
|
|
7484
|
-
if not self.search_knowledge:
|
|
7485
|
-
config["search_knowledge"] = self.search_knowledge
|
|
7486
7492
|
if self.update_knowledge:
|
|
7487
7493
|
config["update_knowledge"] = self.update_knowledge
|
|
7488
7494
|
if self.read_tool_call_history:
|
|
@@ -7806,6 +7812,7 @@ class Agent:
|
|
|
7806
7812
|
# --- Default tools settings ---
|
|
7807
7813
|
read_chat_history=config.get("read_chat_history", False),
|
|
7808
7814
|
search_knowledge=config.get("search_knowledge", True),
|
|
7815
|
+
add_search_knowledge_instructions=config.get("add_search_knowledge_instructions", True),
|
|
7809
7816
|
update_knowledge=config.get("update_knowledge", False),
|
|
7810
7817
|
read_tool_call_history=config.get("read_tool_call_history", False),
|
|
7811
7818
|
send_media_to_model=config.get("send_media_to_model", True),
|
|
@@ -8859,16 +8866,6 @@ class Agent:
|
|
|
8859
8866
|
if self.name is not None and self.add_name_to_context:
|
|
8860
8867
|
additional_information.append(f"Your name is: {self.name}.")
|
|
8861
8868
|
|
|
8862
|
-
# 3.2.5 Add knowledge context using protocol's build_context
|
|
8863
|
-
if self.knowledge is not None:
|
|
8864
|
-
build_context_fn = getattr(self.knowledge, "build_context", None)
|
|
8865
|
-
if callable(build_context_fn):
|
|
8866
|
-
knowledge_context = build_context_fn(
|
|
8867
|
-
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
8868
|
-
)
|
|
8869
|
-
if knowledge_context:
|
|
8870
|
-
additional_information.append(knowledge_context)
|
|
8871
|
-
|
|
8872
8869
|
# 3.3 Build the default system message for the Agent.
|
|
8873
8870
|
system_message_content: str = ""
|
|
8874
8871
|
# 3.3.1 First add the Agent description if provided
|
|
@@ -9045,12 +9042,22 @@ class Agent:
|
|
|
9045
9042
|
if learning_context:
|
|
9046
9043
|
system_message_content += learning_context + "\n"
|
|
9047
9044
|
|
|
9048
|
-
# 3.3.13
|
|
9045
|
+
# 3.3.13 then add search_knowledge instructions to the system prompt
|
|
9046
|
+
if self.knowledge is not None and self.search_knowledge and self.add_search_knowledge_instructions:
|
|
9047
|
+
build_context_fn = getattr(self.knowledge, "build_context", None)
|
|
9048
|
+
if callable(build_context_fn):
|
|
9049
|
+
knowledge_context = build_context_fn(
|
|
9050
|
+
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
9051
|
+
)
|
|
9052
|
+
if knowledge_context is not None:
|
|
9053
|
+
system_message_content += knowledge_context + "\n"
|
|
9054
|
+
|
|
9055
|
+
# 3.3.14 Add the system message from the Model
|
|
9049
9056
|
system_message_from_model = self.model.get_system_message_for_model(tools)
|
|
9050
9057
|
if system_message_from_model is not None:
|
|
9051
9058
|
system_message_content += system_message_from_model
|
|
9052
9059
|
|
|
9053
|
-
# 3.3.
|
|
9060
|
+
# 3.3.15 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
|
|
9054
9061
|
# or if use_json_mode is True
|
|
9055
9062
|
if (
|
|
9056
9063
|
output_schema is not None
|
|
@@ -9062,11 +9069,11 @@ class Agent:
|
|
|
9062
9069
|
):
|
|
9063
9070
|
system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
|
|
9064
9071
|
|
|
9065
|
-
# 3.3.
|
|
9072
|
+
# 3.3.16 Add the response model format prompt if output_schema is provided (Pydantic only)
|
|
9066
9073
|
if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
|
|
9067
9074
|
system_message_content += f"{get_response_model_format_prompt(output_schema)}"
|
|
9068
9075
|
|
|
9069
|
-
# 3.3.
|
|
9076
|
+
# 3.3.17 Add the session state to the system message
|
|
9070
9077
|
if add_session_state_to_context and session_state is not None:
|
|
9071
9078
|
system_message_content += f"\n<session_state>\n{session_state}\n</session_state>\n\n"
|
|
9072
9079
|
|
|
@@ -9196,24 +9203,6 @@ class Agent:
|
|
|
9196
9203
|
if self.name is not None and self.add_name_to_context:
|
|
9197
9204
|
additional_information.append(f"Your name is: {self.name}.")
|
|
9198
9205
|
|
|
9199
|
-
# 3.2.5 Add knowledge context using protocol's build_context (async)
|
|
9200
|
-
if self.knowledge is not None:
|
|
9201
|
-
# Prefer async version if available for async databases
|
|
9202
|
-
abuild_context_fn = getattr(self.knowledge, "abuild_context", None)
|
|
9203
|
-
build_context_fn = getattr(self.knowledge, "build_context", None)
|
|
9204
|
-
if callable(abuild_context_fn):
|
|
9205
|
-
knowledge_context = await abuild_context_fn(
|
|
9206
|
-
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
9207
|
-
)
|
|
9208
|
-
if knowledge_context:
|
|
9209
|
-
additional_information.append(knowledge_context)
|
|
9210
|
-
elif callable(build_context_fn):
|
|
9211
|
-
knowledge_context = build_context_fn(
|
|
9212
|
-
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
9213
|
-
)
|
|
9214
|
-
if knowledge_context:
|
|
9215
|
-
additional_information.append(knowledge_context)
|
|
9216
|
-
|
|
9217
9206
|
# 3.3 Build the default system message for the Agent.
|
|
9218
9207
|
system_message_content: str = ""
|
|
9219
9208
|
# 3.3.1 First add the Agent description if provided
|
|
@@ -9393,12 +9382,30 @@ class Agent:
|
|
|
9393
9382
|
if learning_context:
|
|
9394
9383
|
system_message_content += learning_context + "\n"
|
|
9395
9384
|
|
|
9396
|
-
# 3.3.13
|
|
9385
|
+
# 3.3.13 then add search_knowledge instructions to the system prompt
|
|
9386
|
+
if self.knowledge is not None and self.search_knowledge and self.add_search_knowledge_instructions:
|
|
9387
|
+
# Prefer async version if available for async databases
|
|
9388
|
+
abuild_context_fn = getattr(self.knowledge, "abuild_context", None)
|
|
9389
|
+
build_context_fn = getattr(self.knowledge, "build_context", None)
|
|
9390
|
+
if callable(abuild_context_fn):
|
|
9391
|
+
knowledge_context = await abuild_context_fn(
|
|
9392
|
+
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
9393
|
+
)
|
|
9394
|
+
if knowledge_context is not None:
|
|
9395
|
+
system_message_content += knowledge_context + "\n"
|
|
9396
|
+
elif callable(build_context_fn):
|
|
9397
|
+
knowledge_context = build_context_fn(
|
|
9398
|
+
enable_agentic_filters=self.enable_agentic_knowledge_filters,
|
|
9399
|
+
)
|
|
9400
|
+
if knowledge_context is not None:
|
|
9401
|
+
system_message_content += knowledge_context + "\n"
|
|
9402
|
+
|
|
9403
|
+
# 3.3.14 Add the system message from the Model
|
|
9397
9404
|
system_message_from_model = self.model.get_system_message_for_model(tools)
|
|
9398
9405
|
if system_message_from_model is not None:
|
|
9399
9406
|
system_message_content += system_message_from_model
|
|
9400
9407
|
|
|
9401
|
-
# 3.3.
|
|
9408
|
+
# 3.3.15 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
|
|
9402
9409
|
# or if use_json_mode is True
|
|
9403
9410
|
if (
|
|
9404
9411
|
output_schema is not None
|
|
@@ -9410,11 +9417,11 @@ class Agent:
|
|
|
9410
9417
|
):
|
|
9411
9418
|
system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
|
|
9412
9419
|
|
|
9413
|
-
# 3.3.
|
|
9420
|
+
# 3.3.16 Add the response model format prompt if output_schema is provided (Pydantic only)
|
|
9414
9421
|
if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
|
|
9415
9422
|
system_message_content += f"{get_response_model_format_prompt(output_schema)}"
|
|
9416
9423
|
|
|
9417
|
-
# 3.3.
|
|
9424
|
+
# 3.3.17 Add the session state to the system message
|
|
9418
9425
|
if add_session_state_to_context and session_state is not None:
|
|
9419
9426
|
system_message_content += self._get_formatted_session_state_for_system_message(session_state)
|
|
9420
9427
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import time
|
|
3
3
|
from datetime import date, datetime, timedelta, timezone
|
|
4
|
-
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union, cast
|
|
5
5
|
from uuid import uuid4
|
|
6
6
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
@@ -25,7 +25,7 @@ from agno.db.schemas.culture import CulturalKnowledge
|
|
|
25
25
|
from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
|
|
26
26
|
from agno.db.schemas.knowledge import KnowledgeRow
|
|
27
27
|
from agno.db.schemas.memory import UserMemory
|
|
28
|
-
from agno.db.utils import deserialize_session_json_fields
|
|
28
|
+
from agno.db.utils import deserialize_session_json_fields
|
|
29
29
|
from agno.session import AgentSession, Session, TeamSession, WorkflowSession
|
|
30
30
|
from agno.utils.log import log_debug, log_error, log_info
|
|
31
31
|
from agno.utils.string import generate_id
|
|
@@ -496,6 +496,29 @@ class FirestoreDb(BaseDb):
|
|
|
496
496
|
if doc_ref is None:
|
|
497
497
|
return None
|
|
498
498
|
|
|
499
|
+
# Check if session_data is stored as JSON string (legacy) or native map.
|
|
500
|
+
# Legacy sessions stored session_data as a JSON string, but Firestore's dot notation
|
|
501
|
+
# (e.g., "session_data.session_name") only works with native maps. Using dot notation
|
|
502
|
+
# on a JSON string overwrites the entire field, causing data loss.
|
|
503
|
+
# For legacy sessions, we use read-modify-write which also migrates them to native maps.
|
|
504
|
+
current_doc = doc_ref.get()
|
|
505
|
+
if not current_doc.exists:
|
|
506
|
+
return None
|
|
507
|
+
|
|
508
|
+
current_data = current_doc.to_dict()
|
|
509
|
+
session_data = current_data.get("session_data") if current_data else None
|
|
510
|
+
|
|
511
|
+
if session_data is None or isinstance(session_data, str):
|
|
512
|
+
existing_session = self.get_session(session_id, session_type, deserialize=True)
|
|
513
|
+
if existing_session is None:
|
|
514
|
+
return None
|
|
515
|
+
existing_session = cast(Session, existing_session)
|
|
516
|
+
if existing_session.session_data is None:
|
|
517
|
+
existing_session.session_data = {}
|
|
518
|
+
existing_session.session_data["session_name"] = session_name
|
|
519
|
+
return self.upsert_session(existing_session, deserialize=deserialize)
|
|
520
|
+
|
|
521
|
+
# Native map format - use efficient dot notation update
|
|
499
522
|
doc_ref.update({"session_data.session_name": session_name, "updated_at": int(time.time())})
|
|
500
523
|
|
|
501
524
|
updated_doc = doc_ref.get()
|
|
@@ -539,50 +562,50 @@ class FirestoreDb(BaseDb):
|
|
|
539
562
|
"""
|
|
540
563
|
try:
|
|
541
564
|
collection_ref = self._get_collection(table_type="sessions", create_collection_if_not_found=True)
|
|
542
|
-
|
|
565
|
+
session_dict = session.to_dict()
|
|
543
566
|
|
|
544
567
|
if isinstance(session, AgentSession):
|
|
545
568
|
record = {
|
|
546
|
-
"session_id":
|
|
569
|
+
"session_id": session_dict.get("session_id"),
|
|
547
570
|
"session_type": SessionType.AGENT.value,
|
|
548
|
-
"agent_id":
|
|
549
|
-
"user_id":
|
|
550
|
-
"runs":
|
|
551
|
-
"agent_data":
|
|
552
|
-
"session_data":
|
|
553
|
-
"summary":
|
|
554
|
-
"metadata":
|
|
555
|
-
"created_at":
|
|
571
|
+
"agent_id": session_dict.get("agent_id"),
|
|
572
|
+
"user_id": session_dict.get("user_id"),
|
|
573
|
+
"runs": session_dict.get("runs"),
|
|
574
|
+
"agent_data": session_dict.get("agent_data"),
|
|
575
|
+
"session_data": session_dict.get("session_data"),
|
|
576
|
+
"summary": session_dict.get("summary"),
|
|
577
|
+
"metadata": session_dict.get("metadata"),
|
|
578
|
+
"created_at": session_dict.get("created_at"),
|
|
556
579
|
"updated_at": int(time.time()),
|
|
557
580
|
}
|
|
558
581
|
|
|
559
582
|
elif isinstance(session, TeamSession):
|
|
560
583
|
record = {
|
|
561
|
-
"session_id":
|
|
584
|
+
"session_id": session_dict.get("session_id"),
|
|
562
585
|
"session_type": SessionType.TEAM.value,
|
|
563
|
-
"team_id":
|
|
564
|
-
"user_id":
|
|
565
|
-
"runs":
|
|
566
|
-
"team_data":
|
|
567
|
-
"session_data":
|
|
568
|
-
"summary":
|
|
569
|
-
"metadata":
|
|
570
|
-
"created_at":
|
|
586
|
+
"team_id": session_dict.get("team_id"),
|
|
587
|
+
"user_id": session_dict.get("user_id"),
|
|
588
|
+
"runs": session_dict.get("runs"),
|
|
589
|
+
"team_data": session_dict.get("team_data"),
|
|
590
|
+
"session_data": session_dict.get("session_data"),
|
|
591
|
+
"summary": session_dict.get("summary"),
|
|
592
|
+
"metadata": session_dict.get("metadata"),
|
|
593
|
+
"created_at": session_dict.get("created_at"),
|
|
571
594
|
"updated_at": int(time.time()),
|
|
572
595
|
}
|
|
573
596
|
|
|
574
597
|
elif isinstance(session, WorkflowSession):
|
|
575
598
|
record = {
|
|
576
|
-
"session_id":
|
|
599
|
+
"session_id": session_dict.get("session_id"),
|
|
577
600
|
"session_type": SessionType.WORKFLOW.value,
|
|
578
|
-
"workflow_id":
|
|
579
|
-
"user_id":
|
|
580
|
-
"runs":
|
|
581
|
-
"workflow_data":
|
|
582
|
-
"session_data":
|
|
583
|
-
"summary":
|
|
584
|
-
"metadata":
|
|
585
|
-
"created_at":
|
|
601
|
+
"workflow_id": session_dict.get("workflow_id"),
|
|
602
|
+
"user_id": session_dict.get("user_id"),
|
|
603
|
+
"runs": session_dict.get("runs"),
|
|
604
|
+
"workflow_data": session_dict.get("workflow_data"),
|
|
605
|
+
"session_data": session_dict.get("session_data"),
|
|
606
|
+
"summary": session_dict.get("summary"),
|
|
607
|
+
"metadata": session_dict.get("metadata"),
|
|
608
|
+
"created_at": session_dict.get("created_at"),
|
|
586
609
|
"updated_at": int(time.time()),
|
|
587
610
|
}
|
|
588
611
|
|
|
@@ -292,25 +292,25 @@ def get_schema(table_type: TableType, table_name: str) -> str:
|
|
|
292
292
|
elif table_type == "knowledge":
|
|
293
293
|
return dedent(f"""
|
|
294
294
|
{define_table}
|
|
295
|
-
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime
|
|
295
|
+
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
|
|
296
296
|
DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
|
|
297
297
|
""")
|
|
298
298
|
elif table_type == "culture":
|
|
299
299
|
return dedent(f"""
|
|
300
300
|
{define_table}
|
|
301
|
-
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime
|
|
301
|
+
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
|
|
302
302
|
DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
|
|
303
303
|
""")
|
|
304
304
|
elif table_type == "sessions":
|
|
305
305
|
return dedent(f"""
|
|
306
306
|
{define_table}
|
|
307
|
-
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime
|
|
307
|
+
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
|
|
308
308
|
DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
|
|
309
309
|
""")
|
|
310
310
|
elif table_type == "traces":
|
|
311
311
|
return dedent(f"""
|
|
312
312
|
{define_table}
|
|
313
|
-
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime
|
|
313
|
+
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
|
|
314
314
|
DEFINE INDEX idx_trace_id ON {table_name} FIELDS trace_id UNIQUE;
|
|
315
315
|
DEFINE INDEX idx_run_id ON {table_name} FIELDS run_id;
|
|
316
316
|
DEFINE INDEX idx_session_id ON {table_name} FIELDS session_id;
|
|
@@ -324,7 +324,7 @@ def get_schema(table_type: TableType, table_name: str) -> str:
|
|
|
324
324
|
elif table_type == "spans":
|
|
325
325
|
return dedent(f"""
|
|
326
326
|
{define_table}
|
|
327
|
-
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime
|
|
327
|
+
DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
|
|
328
328
|
DEFINE INDEX idx_span_id ON {table_name} FIELDS span_id UNIQUE;
|
|
329
329
|
DEFINE INDEX idx_trace_id ON {table_name} FIELDS trace_id;
|
|
330
330
|
DEFINE INDEX idx_parent_span_id ON {table_name} FIELDS parent_span_id;
|
|
@@ -287,6 +287,7 @@ class SurrealDb(BaseDb):
|
|
|
287
287
|
where = WhereClause()
|
|
288
288
|
if user_id is not None:
|
|
289
289
|
where = where.and_("user_id", user_id)
|
|
290
|
+
|
|
290
291
|
where_clause, where_vars = where.build()
|
|
291
292
|
query = dedent(f"""
|
|
292
293
|
SELECT *
|
|
@@ -295,7 +296,18 @@ class SurrealDb(BaseDb):
|
|
|
295
296
|
""")
|
|
296
297
|
vars = {"record": record, **where_vars}
|
|
297
298
|
raw = self._query_one(query, vars, dict)
|
|
298
|
-
if raw is None
|
|
299
|
+
if raw is None:
|
|
300
|
+
return None
|
|
301
|
+
|
|
302
|
+
# Verify session type matches
|
|
303
|
+
if session_type == SessionType.AGENT and raw.get("agent") is None:
|
|
304
|
+
return None
|
|
305
|
+
elif session_type == SessionType.TEAM and raw.get("team") is None:
|
|
306
|
+
return None
|
|
307
|
+
elif session_type == SessionType.WORKFLOW and raw.get("workflow") is None:
|
|
308
|
+
return None
|
|
309
|
+
|
|
310
|
+
if not deserialize:
|
|
299
311
|
return raw
|
|
300
312
|
|
|
301
313
|
return deserialize_session(session_type, raw)
|
|
@@ -37,6 +37,103 @@ class MarkdownChunking(ChunkingStrategy):
|
|
|
37
37
|
if not (1 <= split_on_headings <= 6):
|
|
38
38
|
raise ValueError("split_on_headings must be between 1 and 6 when using integer value")
|
|
39
39
|
|
|
40
|
+
def _split_large_section(self, section: str) -> List[str]:
|
|
41
|
+
"""
|
|
42
|
+
Split a large section into smaller chunks while preserving the heading context.
|
|
43
|
+
Each sub-chunk will include the original heading for context.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
section: The section content to split (may start with a heading)
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
List of chunks, each respecting chunk_size
|
|
50
|
+
"""
|
|
51
|
+
if len(section) <= self.chunk_size:
|
|
52
|
+
return [section]
|
|
53
|
+
|
|
54
|
+
# Extract heading and content from the section
|
|
55
|
+
lines = section.split("\n")
|
|
56
|
+
if lines and re.match(r"^#{1,6}\s+", lines[0]):
|
|
57
|
+
heading = lines[0]
|
|
58
|
+
content_lines = lines[1:]
|
|
59
|
+
else:
|
|
60
|
+
heading = ""
|
|
61
|
+
content_lines = lines
|
|
62
|
+
|
|
63
|
+
content = "\n".join(content_lines).strip()
|
|
64
|
+
|
|
65
|
+
# If just heading and small content, return as-is
|
|
66
|
+
if not content or len(section) <= self.chunk_size:
|
|
67
|
+
return [section]
|
|
68
|
+
|
|
69
|
+
# Split content by paragraphs
|
|
70
|
+
paragraphs = re.split(r"\n\n+", content)
|
|
71
|
+
|
|
72
|
+
chunks: List[str] = []
|
|
73
|
+
current_chunk_content: List[str] = []
|
|
74
|
+
# Account for heading size in each chunk
|
|
75
|
+
heading_size = len(heading) + 2 if heading else 0 # +2 for "\n\n"
|
|
76
|
+
|
|
77
|
+
for para in paragraphs:
|
|
78
|
+
para = para.strip()
|
|
79
|
+
if not para:
|
|
80
|
+
continue
|
|
81
|
+
|
|
82
|
+
current_size = sum(len(p) for p in current_chunk_content) + len(current_chunk_content) * 2 # \n\n
|
|
83
|
+
para_size = len(para)
|
|
84
|
+
|
|
85
|
+
# Check if adding this paragraph would exceed chunk_size
|
|
86
|
+
if current_chunk_content and (heading_size + current_size + para_size + 2) > self.chunk_size:
|
|
87
|
+
# Save current chunk
|
|
88
|
+
chunk_text = (
|
|
89
|
+
heading + "\n\n" + "\n\n".join(current_chunk_content)
|
|
90
|
+
if heading
|
|
91
|
+
else "\n\n".join(current_chunk_content)
|
|
92
|
+
)
|
|
93
|
+
chunks.append(chunk_text.strip())
|
|
94
|
+
current_chunk_content = []
|
|
95
|
+
|
|
96
|
+
# If single paragraph exceeds chunk_size, split it further
|
|
97
|
+
if para_size + heading_size > self.chunk_size:
|
|
98
|
+
# Save any accumulated content first
|
|
99
|
+
if current_chunk_content:
|
|
100
|
+
chunk_text = (
|
|
101
|
+
heading + "\n\n" + "\n\n".join(current_chunk_content)
|
|
102
|
+
if heading
|
|
103
|
+
else "\n\n".join(current_chunk_content)
|
|
104
|
+
)
|
|
105
|
+
chunks.append(chunk_text.strip())
|
|
106
|
+
current_chunk_content = []
|
|
107
|
+
|
|
108
|
+
# Split the large paragraph by sentences or fixed size
|
|
109
|
+
available_size = self.chunk_size - heading_size
|
|
110
|
+
words = para.split()
|
|
111
|
+
current_words: List[str] = []
|
|
112
|
+
current_word_len = 0
|
|
113
|
+
|
|
114
|
+
for word in words:
|
|
115
|
+
if current_word_len + len(word) + 1 > available_size and current_words:
|
|
116
|
+
chunk_text = heading + "\n\n" + " ".join(current_words) if heading else " ".join(current_words)
|
|
117
|
+
chunks.append(chunk_text.strip())
|
|
118
|
+
current_words = []
|
|
119
|
+
current_word_len = 0
|
|
120
|
+
current_words.append(word)
|
|
121
|
+
current_word_len += len(word) + 1
|
|
122
|
+
|
|
123
|
+
if current_words:
|
|
124
|
+
current_chunk_content.append(" ".join(current_words))
|
|
125
|
+
else:
|
|
126
|
+
current_chunk_content.append(para)
|
|
127
|
+
|
|
128
|
+
# add the remaining content
|
|
129
|
+
if current_chunk_content:
|
|
130
|
+
chunk_text = (
|
|
131
|
+
heading + "\n\n" + "\n\n".join(current_chunk_content) if heading else "\n\n".join(current_chunk_content)
|
|
132
|
+
)
|
|
133
|
+
chunks.append(chunk_text.strip())
|
|
134
|
+
|
|
135
|
+
return chunks if chunks else [section]
|
|
136
|
+
|
|
40
137
|
def _split_by_headings(self, content: str) -> List[str]:
|
|
41
138
|
"""
|
|
42
139
|
Split markdown content by headings, keeping each heading with its content.
|
|
@@ -163,18 +260,22 @@ class MarkdownChunking(ChunkingStrategy):
|
|
|
163
260
|
section_size = len(section)
|
|
164
261
|
|
|
165
262
|
# When split_on_headings is True or an int, each section becomes its own chunk
|
|
263
|
+
# But if section exceeds chunk_size, split it further
|
|
166
264
|
if self.split_on_headings:
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
265
|
+
# Split large sections to respect chunk_size
|
|
266
|
+
sub_chunks = self._split_large_section(section)
|
|
267
|
+
for sub_chunk in sub_chunks:
|
|
268
|
+
meta_data = chunk_meta_data.copy()
|
|
269
|
+
meta_data["chunk"] = chunk_number
|
|
270
|
+
chunk_id = None
|
|
271
|
+
if document.id:
|
|
272
|
+
chunk_id = f"{document.id}_{chunk_number}"
|
|
273
|
+
elif document.name:
|
|
274
|
+
chunk_id = f"{document.name}_{chunk_number}"
|
|
275
|
+
meta_data["chunk_size"] = len(sub_chunk)
|
|
276
|
+
|
|
277
|
+
chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=sub_chunk))
|
|
278
|
+
chunk_number += 1
|
|
178
279
|
elif current_size + section_size <= self.chunk_size:
|
|
179
280
|
current_chunk.append(section)
|
|
180
281
|
current_size += section_size
|
|
@@ -4451,12 +4451,10 @@ class Knowledge:
|
|
|
4451
4451
|
# ========================================================================
|
|
4452
4452
|
|
|
4453
4453
|
# Shared context strings
|
|
4454
|
-
|
|
4455
|
-
"You have
|
|
4456
|
-
"
|
|
4457
|
-
"
|
|
4458
|
-
"If the user question is ambiguous (e.g., 'the candidate') do NOT ask clarifying questions first—search the "
|
|
4459
|
-
"knowledge base to identify the relevant documents.\n"
|
|
4454
|
+
_SEARCH_KNOWLEDGE_INSTRUCTIONS = (
|
|
4455
|
+
"You have a knowledge base you can search using the search_knowledge_base tool. "
|
|
4456
|
+
"Search before answering questions—don't assume you know the answer. "
|
|
4457
|
+
"For ambiguous questions, search first rather than asking for clarification."
|
|
4460
4458
|
)
|
|
4461
4459
|
|
|
4462
4460
|
_AGENTIC_FILTER_INSTRUCTION_TEMPLATE = """
|
|
@@ -4499,7 +4497,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
|
|
|
4499
4497
|
Returns:
|
|
4500
4498
|
Context string to add to system prompt.
|
|
4501
4499
|
"""
|
|
4502
|
-
context_parts: List[str] = [self.
|
|
4500
|
+
context_parts: List[str] = [self._SEARCH_KNOWLEDGE_INSTRUCTIONS]
|
|
4503
4501
|
|
|
4504
4502
|
# Add filter instructions if agentic filters are enabled
|
|
4505
4503
|
if enable_agentic_filters:
|
|
@@ -4507,7 +4505,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
|
|
|
4507
4505
|
if valid_filters:
|
|
4508
4506
|
context_parts.append(self._get_agentic_filter_instructions(valid_filters))
|
|
4509
4507
|
|
|
4510
|
-
return "\n".join(context_parts)
|
|
4508
|
+
return "<knowledge_base>\n" + "\n".join(context_parts) + "\n</knowledge_base>"
|
|
4511
4509
|
|
|
4512
4510
|
async def abuild_context(
|
|
4513
4511
|
self,
|
|
@@ -4526,7 +4524,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
|
|
|
4526
4524
|
Returns:
|
|
4527
4525
|
Context string to add to system prompt.
|
|
4528
4526
|
"""
|
|
4529
|
-
context_parts: List[str] = [self.
|
|
4527
|
+
context_parts: List[str] = [self._SEARCH_KNOWLEDGE_INSTRUCTIONS]
|
|
4530
4528
|
|
|
4531
4529
|
# Add filter instructions if agentic filters are enabled
|
|
4532
4530
|
if enable_agentic_filters:
|
|
@@ -4534,7 +4532,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
|
|
|
4534
4532
|
if valid_filters:
|
|
4535
4533
|
context_parts.append(self._get_agentic_filter_instructions(valid_filters))
|
|
4536
4534
|
|
|
4537
|
-
return "\n".join(context_parts)
|
|
4535
|
+
return "<knowledge_base>\n" + "\n".join(context_parts) + "\n</knowledge_base>"
|
|
4538
4536
|
|
|
4539
4537
|
def get_tools(
|
|
4540
4538
|
self,
|
|
@@ -2109,6 +2109,7 @@ class Model(ABC):
|
|
|
2109
2109
|
tool_name=fc.function.name,
|
|
2110
2110
|
tool_args=fc.arguments,
|
|
2111
2111
|
requires_confirmation=True,
|
|
2112
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2112
2113
|
)
|
|
2113
2114
|
)
|
|
2114
2115
|
|
|
@@ -2128,6 +2129,7 @@ class Model(ABC):
|
|
|
2128
2129
|
tool_args=fc.arguments,
|
|
2129
2130
|
requires_user_input=True,
|
|
2130
2131
|
user_input_schema=user_input_schema,
|
|
2132
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2131
2133
|
)
|
|
2132
2134
|
)
|
|
2133
2135
|
|
|
@@ -2176,6 +2178,7 @@ class Model(ABC):
|
|
|
2176
2178
|
tool_name=fc.function.name,
|
|
2177
2179
|
tool_args=fc.arguments,
|
|
2178
2180
|
external_execution_required=True,
|
|
2181
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2179
2182
|
)
|
|
2180
2183
|
)
|
|
2181
2184
|
|
|
@@ -2270,6 +2273,7 @@ class Model(ABC):
|
|
|
2270
2273
|
tool_name=fc.function.name,
|
|
2271
2274
|
tool_args=fc.arguments,
|
|
2272
2275
|
requires_confirmation=True,
|
|
2276
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2273
2277
|
)
|
|
2274
2278
|
)
|
|
2275
2279
|
# If the function requires user input, we yield a message to the user
|
|
@@ -2288,6 +2292,7 @@ class Model(ABC):
|
|
|
2288
2292
|
tool_args=fc.arguments,
|
|
2289
2293
|
requires_user_input=True,
|
|
2290
2294
|
user_input_schema=user_input_schema,
|
|
2295
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2291
2296
|
)
|
|
2292
2297
|
)
|
|
2293
2298
|
# If the function is from the user control flow tools, we handle it here
|
|
@@ -2340,6 +2345,7 @@ class Model(ABC):
|
|
|
2340
2345
|
tool_name=fc.function.name,
|
|
2341
2346
|
tool_args=fc.arguments,
|
|
2342
2347
|
external_execution_required=True,
|
|
2348
|
+
external_execution_silent=fc.function.external_execution_silent,
|
|
2343
2349
|
)
|
|
2344
2350
|
)
|
|
2345
2351
|
|