agno 2.3.9__tar.gz → 2.3.10__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.3.9 → agno-2.3.10}/PKG-INFO +1 -1
- {agno-2.3.9 → agno-2.3.10}/agno/agent/agent.py +0 -12
- {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/async_sqlite.py +1 -1
- {agno-2.3.9 → agno-2.3.10}/agno/eval/accuracy.py +11 -8
- {agno-2.3.9 → agno-2.3.10}/agno/eval/agent_as_judge.py +9 -8
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/openai.py +1 -1
- {agno-2.3.9 → agno-2.3.10}/agno/models/base.py +34 -1
- {agno-2.3.9 → agno-2.3.10}/agno/models/google/gemini.py +69 -40
- {agno-2.3.9 → agno-2.3.10}/agno/models/message.py +3 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/utils.py +15 -37
- {agno-2.3.9 → agno-2.3.10}/agno/team/team.py +14 -8
- {agno-2.3.9 → agno-2.3.10}/agno/tools/function.py +37 -23
- agno-2.3.10/agno/tools/shopify.py +1519 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/spotify.py +2 -5
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/pgvector.py +1 -1
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/parallel.py +2 -0
- {agno-2.3.9 → agno-2.3.10}/agno.egg-info/PKG-INFO +1 -1
- {agno-2.3.9 → agno-2.3.10}/agno.egg-info/SOURCES.txt +1 -0
- {agno-2.3.9 → agno-2.3.10}/pyproject.toml +1 -1
- {agno-2.3.9 → agno-2.3.10}/LICENSE +0 -0
- {agno-2.3.9 → agno-2.3.10}/README.md +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/agent/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/api.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/evals.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/os.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/routes.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/evals.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/os.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/response.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/workflows.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/settings.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/api/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/compression/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/compression/manager.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/culture/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/culture/manager.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/dynamo.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/firestore.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/gcs_json_db.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/in_memory_db.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/json/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/json/json_db.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/json/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/manager.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/versions/v2_3_0.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/async_mongo.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/mongo.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/async_mysql.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/mysql.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/async_postgres.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/postgres.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/redis/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/redis/redis.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/redis/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/redis/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/culture.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/evals.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/memory.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/metrics.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/singlestore.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/sqlite.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/models.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/surrealdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/db/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/debug.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/eval/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/eval/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/eval/performance.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/eval/reliability.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/eval/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/exceptions.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/filters.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/guardrails/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/guardrails/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/guardrails/openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/guardrails/pii.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/hooks/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/hooks/decorator.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/integrations/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/integrations/discord/client.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/document.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/markdown.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/semantic.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/strategy.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/content.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/document/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/knowledge.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/arxiv_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/csv_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/docx_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/firecrawl_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/json_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/markdown_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/pdf_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/pptx_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/s3_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/tavily_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/text_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/web_search_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/website_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/wikipedia_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/youtube_reader.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/types.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/knowledge/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/media.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/manager.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/types.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/anthropic/claude.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/aws/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/aws/bedrock.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/aws/claude.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/azure/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cohere/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cohere/chat.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/defaults.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/google/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/google/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/groq/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/groq/groq.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/ibm/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/internlm/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/internlm/internlm.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/langdb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/langdb/langdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/chat.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/meta/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/meta/llama.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/metrics.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/mistral/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/mistral/mistral.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nebius/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nebius/nebius.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nexus/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nexus/nexus.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/ollama/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/ollama/chat.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openai/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openai/chat.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openai/like.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openai/responses.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/portkey/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/portkey/portkey.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/requesty/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/requesty/requesty.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/response.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/together/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/together/together.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vercel/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vercel/v0.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vertexai/claude.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vllm/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/vllm/vllm.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/xai/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/models/xai/xai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/app.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/auth.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/config.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/mcp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/middleware/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/middleware/jwt.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/schema.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/health.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/home.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/knowledge.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/session/session.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/schema.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/schema.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/schema.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/settings.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/os/utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/py.typed +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/anthropic.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/deepseek.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/default.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/gemini.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/groq.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/helpers.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/ollama.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/step.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/reasoning/vertexai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/cancel.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/messages.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/requirement.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/run/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/session/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/session/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/session/summary.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/session/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/session/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/table.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/team/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/agentql.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/airflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/api.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/apify.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/arxiv.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/aws_lambda.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/aws_ses.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/baidusearch.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/bitbucket.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/brandfetch.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/bravesearch.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/brightdata.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/browserbase.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/calcom.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/calculator.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/cartesia.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/clickup.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/confluence.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/crawl4ai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/dalle.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/daytona.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/decorator.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/desi_vocal.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/discord.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/docker.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/duckdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/duckduckgo.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/e2b.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/eleven_labs.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/email.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/evm.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/exa.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/fal.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/file.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/file_generation.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/financial_datasets.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/firecrawl.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/giphy.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/github.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/gmail.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/google_bigquery.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/google_drive.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/google_maps.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/googlecalendar.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/googlesheets.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/hackernews.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/jina.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/jira.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/knowledge.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/linear.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/linkup.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/local_file_system.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/lumalab.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/params.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mem0.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/memory.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/mlx_transcribe.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/gemini.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/groq.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/morph.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models/nebius.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/models_labs.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/moviepy_video.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/nano_banana.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/neo4j.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/newspaper.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/newspaper4k.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/notion.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/openbb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/opencv.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/openweather.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/oxylabs.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/pandas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/parallel.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/postgres.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/pubmed.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/python.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/reasoning.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/reddit.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/redshift.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/replicate.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/resend.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/scrapegraph.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/searxng.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/serpapi.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/serper.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/shell.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/slack.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/sleep.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/spider.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/sql.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/streamlit/components.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/tavily.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/telegram.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/todoist.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/tool_registry.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/toolkit.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/trafilatura.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/trello.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/twilio.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/user_control_flow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/valyu.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/visualization.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/webbrowser.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/webex.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/website.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/webtools.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/whatsapp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/wikipedia.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/x.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/yfinance.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/youtube.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/zendesk.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/zep.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tools/zoom.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tracing/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tracing/exporter.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tracing/schemas.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/tracing/setup.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/audio.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/certs.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/code_execution.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/common.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/dttm.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/enum.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/env.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/events.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/format_str.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/functions.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/gemini.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/hooks.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/http.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/json_schema.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/knowledge.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/location.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/log.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/mcp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/media.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/merge_dict.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/message.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/claude.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/cohere.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/llama.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/mistral.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/models/watsonx.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/openai.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/pickle.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/pprint.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/prompts.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/reasoning.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/response.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/response_iterator.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/safe_formatter.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/serialize.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/shell.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/streamlit.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/string.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/team.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/timer.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/tokens.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/tools.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/web.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/whatsapp.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/utils/yaml_io.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/base.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/cassandra.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/chroma/chromadb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/couchbase/couchbase.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/distance.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/milvus/milvus.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/mongodb/mongodb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pineconedb/pineconedb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/qdrant/qdrant.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/redis/redisdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/search.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/singlestore.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/surrealdb/surrealdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/weaviate.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/__init__.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/agent.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/condition.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/loop.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/router.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/step.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/steps.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/types.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno/workflow/workflow.py +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno.egg-info/requires.txt +0 -0
- {agno-2.3.9 → agno-2.3.10}/agno.egg-info/top_level.txt +0 -0
- {agno-2.3.9 → agno-2.3.10}/setup.cfg +0 -0
|
@@ -1785,9 +1785,6 @@ class Agent:
|
|
|
1785
1785
|
if stream_events is None:
|
|
1786
1786
|
stream_events = False if self.stream_events is None else self.stream_events
|
|
1787
1787
|
|
|
1788
|
-
self.stream = self.stream or stream
|
|
1789
|
-
self.stream_events = self.stream_events or stream_events
|
|
1790
|
-
|
|
1791
1788
|
# Prepare arguments for the model
|
|
1792
1789
|
response_format = (
|
|
1793
1790
|
self._get_response_format(run_context=run_context) if self.parser_model is None else None
|
|
@@ -2711,9 +2708,6 @@ class Agent:
|
|
|
2711
2708
|
if stream_events is None:
|
|
2712
2709
|
stream_events = False if self.stream_events is None else self.stream_events
|
|
2713
2710
|
|
|
2714
|
-
self.stream = self.stream or stream
|
|
2715
|
-
self.stream_events = self.stream_events or stream_events
|
|
2716
|
-
|
|
2717
2711
|
self.model = cast(Model, self.model)
|
|
2718
2712
|
|
|
2719
2713
|
# Get knowledge filters
|
|
@@ -3020,9 +3014,6 @@ class Agent:
|
|
|
3020
3014
|
if stream is False:
|
|
3021
3015
|
stream_events = False
|
|
3022
3016
|
|
|
3023
|
-
self.stream = self.stream or stream
|
|
3024
|
-
self.stream_events = self.stream_events or stream_events
|
|
3025
|
-
|
|
3026
3017
|
# Run can be continued from previous run response or from passed run_response context
|
|
3027
3018
|
if run_response is not None:
|
|
3028
3019
|
# The run is continued from a provided run_response. This contains the updated tools.
|
|
@@ -3589,9 +3580,6 @@ class Agent:
|
|
|
3589
3580
|
if stream is False:
|
|
3590
3581
|
stream_events = False
|
|
3591
3582
|
|
|
3592
|
-
self.stream = self.stream or stream
|
|
3593
|
-
self.stream_events = self.stream_events or stream_events
|
|
3594
|
-
|
|
3595
3583
|
# Get knowledge filters
|
|
3596
3584
|
knowledge_filters = knowledge_filters
|
|
3597
3585
|
if self.knowledge_filters or knowledge_filters:
|
|
@@ -1825,7 +1825,7 @@ class AsyncSqliteDb(AsyncBaseDb):
|
|
|
1825
1825
|
Optional[KnowledgeRow]: The upserted knowledge row, or None if the operation fails.
|
|
1826
1826
|
"""
|
|
1827
1827
|
try:
|
|
1828
|
-
table = await self._get_table(table_type="knowledge")
|
|
1828
|
+
table = await self._get_table(table_type="knowledge", create_table_if_not_found=True)
|
|
1829
1829
|
if table is None:
|
|
1830
1830
|
return None
|
|
1831
1831
|
|
|
@@ -282,7 +282,8 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
282
282
|
) -> Optional[AccuracyEvaluation]:
|
|
283
283
|
"""Orchestrate the evaluation process."""
|
|
284
284
|
try:
|
|
285
|
-
|
|
285
|
+
response = evaluator_agent.run(evaluation_input, stream=False)
|
|
286
|
+
accuracy_agent_response = response.content
|
|
286
287
|
if accuracy_agent_response is None or not isinstance(accuracy_agent_response, AccuracyAgentResponse):
|
|
287
288
|
raise EvalError(f"Evaluator Agent returned an invalid response: {accuracy_agent_response}")
|
|
288
289
|
return AccuracyEvaluation(
|
|
@@ -306,7 +307,7 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
306
307
|
) -> Optional[AccuracyEvaluation]:
|
|
307
308
|
"""Orchestrate the evaluation process asynchronously."""
|
|
308
309
|
try:
|
|
309
|
-
response = await evaluator_agent.arun(evaluation_input)
|
|
310
|
+
response = await evaluator_agent.arun(evaluation_input, stream=False)
|
|
310
311
|
accuracy_agent_response = response.content
|
|
311
312
|
if accuracy_agent_response is None or not isinstance(accuracy_agent_response, AccuracyAgentResponse):
|
|
312
313
|
raise EvalError(f"Evaluator Agent returned an invalid response: {accuracy_agent_response}")
|
|
@@ -362,9 +363,11 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
362
363
|
agent_session_id = f"eval_{self.eval_id}_{i + 1}"
|
|
363
364
|
|
|
364
365
|
if self.agent is not None:
|
|
365
|
-
|
|
366
|
+
agent_response = self.agent.run(input=eval_input, session_id=agent_session_id, stream=False)
|
|
367
|
+
output = agent_response.content
|
|
366
368
|
elif self.team is not None:
|
|
367
|
-
|
|
369
|
+
team_response = self.team.run(input=eval_input, session_id=agent_session_id, stream=False)
|
|
370
|
+
output = team_response.content
|
|
368
371
|
|
|
369
372
|
if not output:
|
|
370
373
|
logger.error(f"Failed to generate a valid answer on iteration {i + 1}: {output}")
|
|
@@ -505,11 +508,11 @@ Remember: You must only compare the agent_output to the expected_output. The exp
|
|
|
505
508
|
agent_session_id = f"eval_{self.eval_id}_{i + 1}"
|
|
506
509
|
|
|
507
510
|
if self.agent is not None:
|
|
508
|
-
|
|
509
|
-
output =
|
|
511
|
+
agent_response = await self.agent.arun(input=eval_input, session_id=agent_session_id, stream=False)
|
|
512
|
+
output = agent_response.content
|
|
510
513
|
elif self.team is not None:
|
|
511
|
-
|
|
512
|
-
output =
|
|
514
|
+
team_response = await self.team.arun(input=eval_input, session_id=agent_session_id, stream=False)
|
|
515
|
+
output = team_response.content
|
|
513
516
|
|
|
514
517
|
if not output:
|
|
515
518
|
logger.error(f"Failed to generate a valid answer on iteration {i + 1}: {output}")
|
|
@@ -281,24 +281,25 @@ class AgentAsJudgeEval(BaseEval):
|
|
|
281
281
|
</output>
|
|
282
282
|
""")
|
|
283
283
|
|
|
284
|
-
response = evaluator_agent.run(prompt)
|
|
285
|
-
|
|
286
|
-
|
|
284
|
+
response = evaluator_agent.run(prompt, stream=False)
|
|
285
|
+
judge_response = response.content
|
|
286
|
+
if not isinstance(judge_response, (NumericJudgeResponse, BinaryJudgeResponse)):
|
|
287
|
+
raise EvalError(f"Invalid response: {judge_response}")
|
|
287
288
|
|
|
288
289
|
# Determine pass/fail based on scoring strategy and response type
|
|
289
|
-
if isinstance(
|
|
290
|
-
score =
|
|
290
|
+
if isinstance(judge_response, NumericJudgeResponse):
|
|
291
|
+
score = judge_response.score
|
|
291
292
|
passed = score >= self.threshold
|
|
292
293
|
else: # BinaryJudgeResponse
|
|
293
294
|
score = None
|
|
294
|
-
passed =
|
|
295
|
+
passed = judge_response.passed
|
|
295
296
|
|
|
296
297
|
evaluation = AgentAsJudgeEvaluation(
|
|
297
298
|
input=input,
|
|
298
299
|
output=output,
|
|
299
300
|
criteria=self.criteria,
|
|
300
301
|
score=score,
|
|
301
|
-
reason=
|
|
302
|
+
reason=judge_response.reason,
|
|
302
303
|
passed=passed,
|
|
303
304
|
)
|
|
304
305
|
|
|
@@ -332,7 +333,7 @@ class AgentAsJudgeEval(BaseEval):
|
|
|
332
333
|
</output>
|
|
333
334
|
""")
|
|
334
335
|
|
|
335
|
-
response = await evaluator_agent.arun(prompt)
|
|
336
|
+
response = await evaluator_agent.arun(prompt, stream=False)
|
|
336
337
|
judge_response = response.content
|
|
337
338
|
if not isinstance(judge_response, (NumericJudgeResponse, BinaryJudgeResponse)):
|
|
338
339
|
raise EvalError(f"Invalid response: {judge_response}")
|
|
@@ -4,7 +4,7 @@ from typing import Any, Dict, List, Optional, Tuple
|
|
|
4
4
|
from typing_extensions import Literal
|
|
5
5
|
|
|
6
6
|
from agno.knowledge.embedder.base import Embedder
|
|
7
|
-
from agno.utils.log import
|
|
7
|
+
from agno.utils.log import log_info, log_warning
|
|
8
8
|
|
|
9
9
|
try:
|
|
10
10
|
from openai import AsyncOpenAI
|
|
@@ -1801,6 +1801,17 @@ class Model(ABC):
|
|
|
1801
1801
|
log_error(f"Error while iterating function result generator for {function_call.function.name}: {e}")
|
|
1802
1802
|
function_call.error = str(e)
|
|
1803
1803
|
function_call_success = False
|
|
1804
|
+
|
|
1805
|
+
# For generators, re-capture updated_session_state after consumption
|
|
1806
|
+
# since session_state modifications were made during iteration
|
|
1807
|
+
if function_execution_result.updated_session_state is None:
|
|
1808
|
+
if (
|
|
1809
|
+
function_call.function._run_context is not None
|
|
1810
|
+
and function_call.function._run_context.session_state is not None
|
|
1811
|
+
):
|
|
1812
|
+
function_execution_result.updated_session_state = function_call.function._run_context.session_state
|
|
1813
|
+
elif function_call.function._session_state is not None:
|
|
1814
|
+
function_execution_result.updated_session_state = function_call.function._session_state
|
|
1804
1815
|
else:
|
|
1805
1816
|
from agno.tools.function import ToolResult
|
|
1806
1817
|
|
|
@@ -2327,7 +2338,29 @@ class Model(ABC):
|
|
|
2327
2338
|
log_error(f"Error while iterating function result generator for {function_call.function.name}: {e}")
|
|
2328
2339
|
function_call.error = str(e)
|
|
2329
2340
|
function_call_success = False
|
|
2330
|
-
|
|
2341
|
+
|
|
2342
|
+
# For generators (sync or async), re-capture updated_session_state after consumption
|
|
2343
|
+
# since session_state modifications were made during iteration
|
|
2344
|
+
if async_function_call_output is not None or isinstance(
|
|
2345
|
+
function_call.result,
|
|
2346
|
+
(GeneratorType, collections.abc.Iterator, AsyncGeneratorType, collections.abc.AsyncIterator),
|
|
2347
|
+
):
|
|
2348
|
+
if updated_session_state is None:
|
|
2349
|
+
if (
|
|
2350
|
+
function_call.function._run_context is not None
|
|
2351
|
+
and function_call.function._run_context.session_state is not None
|
|
2352
|
+
):
|
|
2353
|
+
updated_session_state = function_call.function._run_context.session_state
|
|
2354
|
+
elif function_call.function._session_state is not None:
|
|
2355
|
+
updated_session_state = function_call.function._session_state
|
|
2356
|
+
|
|
2357
|
+
if not (
|
|
2358
|
+
async_function_call_output is not None
|
|
2359
|
+
or isinstance(
|
|
2360
|
+
function_call.result,
|
|
2361
|
+
(GeneratorType, collections.abc.Iterator, AsyncGeneratorType, collections.abc.AsyncIterator),
|
|
2362
|
+
)
|
|
2363
|
+
):
|
|
2331
2364
|
from agno.tools.function import ToolResult
|
|
2332
2365
|
|
|
2333
2366
|
if isinstance(function_execution_result.result, ToolResult):
|
|
@@ -36,6 +36,7 @@ try:
|
|
|
36
36
|
GenerateContentResponseUsageMetadata,
|
|
37
37
|
GoogleSearch,
|
|
38
38
|
GoogleSearchRetrieval,
|
|
39
|
+
GroundingMetadata,
|
|
39
40
|
Operation,
|
|
40
41
|
Part,
|
|
41
42
|
Retrieval,
|
|
@@ -244,8 +245,8 @@ class Gemini(Model):
|
|
|
244
245
|
builtin_tools = []
|
|
245
246
|
|
|
246
247
|
if self.grounding:
|
|
247
|
-
|
|
248
|
-
"Grounding enabled. This is a legacy tool. For Gemini 2.0+ Please use enable `search` flag instead."
|
|
248
|
+
log_debug(
|
|
249
|
+
"Gemini Grounding enabled. This is a legacy tool. For Gemini 2.0+ Please use enable `search` flag instead."
|
|
249
250
|
)
|
|
250
251
|
builtin_tools.append(
|
|
251
252
|
Tool(
|
|
@@ -258,15 +259,15 @@ class Gemini(Model):
|
|
|
258
259
|
)
|
|
259
260
|
|
|
260
261
|
if self.search:
|
|
261
|
-
|
|
262
|
+
log_debug("Gemini Google Search enabled.")
|
|
262
263
|
builtin_tools.append(Tool(google_search=GoogleSearch()))
|
|
263
264
|
|
|
264
265
|
if self.url_context:
|
|
265
|
-
|
|
266
|
+
log_debug("Gemini URL context enabled.")
|
|
266
267
|
builtin_tools.append(Tool(url_context=UrlContext()))
|
|
267
268
|
|
|
268
269
|
if self.vertexai_search:
|
|
269
|
-
|
|
270
|
+
log_debug("Gemini Vertex AI Search enabled.")
|
|
270
271
|
if not self.vertexai_search_datastore:
|
|
271
272
|
log_error("vertexai_search_datastore must be provided when vertexai_search is enabled.")
|
|
272
273
|
raise ValueError("vertexai_search_datastore must be provided when vertexai_search is enabled.")
|
|
@@ -1008,27 +1009,24 @@ class Gemini(Model):
|
|
|
1008
1009
|
citations = Citations()
|
|
1009
1010
|
citations_raw = {}
|
|
1010
1011
|
citations_urls = []
|
|
1012
|
+
web_search_queries: List[str] = []
|
|
1011
1013
|
|
|
1012
1014
|
if response.candidates and response.candidates[0].grounding_metadata is not None:
|
|
1013
|
-
grounding_metadata = response.candidates[0].grounding_metadata
|
|
1014
|
-
citations_raw["grounding_metadata"] = grounding_metadata
|
|
1015
|
+
grounding_metadata: GroundingMetadata = response.candidates[0].grounding_metadata
|
|
1016
|
+
citations_raw["grounding_metadata"] = grounding_metadata.model_dump()
|
|
1015
1017
|
|
|
1016
|
-
chunks = grounding_metadata.
|
|
1017
|
-
|
|
1018
|
+
chunks = grounding_metadata.grounding_chunks or []
|
|
1019
|
+
web_search_queries = grounding_metadata.web_search_queries or []
|
|
1018
1020
|
for chunk in chunks:
|
|
1019
|
-
if not
|
|
1021
|
+
if not chunk:
|
|
1020
1022
|
continue
|
|
1021
|
-
web = chunk.
|
|
1022
|
-
if not
|
|
1023
|
+
web = chunk.web
|
|
1024
|
+
if not web:
|
|
1023
1025
|
continue
|
|
1024
|
-
uri = web.
|
|
1025
|
-
title = web.
|
|
1026
|
+
uri = web.uri
|
|
1027
|
+
title = web.title
|
|
1026
1028
|
if uri:
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
# Create citation objects from filtered pairs
|
|
1030
|
-
grounding_urls = [UrlCitation(url=url, title=title) for url, title in citation_pairs]
|
|
1031
|
-
citations_urls.extend(grounding_urls)
|
|
1029
|
+
citations_urls.append(UrlCitation(url=uri, title=title))
|
|
1032
1030
|
|
|
1033
1031
|
# Handle URLs from URL context tool
|
|
1034
1032
|
if (
|
|
@@ -1036,22 +1034,29 @@ class Gemini(Model):
|
|
|
1036
1034
|
and hasattr(response.candidates[0], "url_context_metadata")
|
|
1037
1035
|
and response.candidates[0].url_context_metadata is not None
|
|
1038
1036
|
):
|
|
1039
|
-
url_context_metadata = response.candidates[0].url_context_metadata
|
|
1040
|
-
citations_raw["url_context_metadata"] = url_context_metadata
|
|
1037
|
+
url_context_metadata = response.candidates[0].url_context_metadata
|
|
1038
|
+
citations_raw["url_context_metadata"] = url_context_metadata.model_dump()
|
|
1041
1039
|
|
|
1042
|
-
url_metadata_list = url_context_metadata.
|
|
1040
|
+
url_metadata_list = url_context_metadata.url_metadata or []
|
|
1043
1041
|
for url_meta in url_metadata_list:
|
|
1044
|
-
retrieved_url = url_meta.
|
|
1045
|
-
status =
|
|
1042
|
+
retrieved_url = url_meta.retrieved_url
|
|
1043
|
+
status = "UNKNOWN"
|
|
1044
|
+
if url_meta.url_retrieval_status:
|
|
1045
|
+
status = url_meta.url_retrieval_status.value
|
|
1046
1046
|
if retrieved_url and status == "URL_RETRIEVAL_STATUS_SUCCESS":
|
|
1047
1047
|
# Avoid duplicate URLs
|
|
1048
1048
|
existing_urls = [citation.url for citation in citations_urls]
|
|
1049
1049
|
if retrieved_url not in existing_urls:
|
|
1050
1050
|
citations_urls.append(UrlCitation(url=retrieved_url, title=retrieved_url))
|
|
1051
1051
|
|
|
1052
|
+
if citations_raw:
|
|
1053
|
+
citations.raw = citations_raw
|
|
1054
|
+
if citations_urls:
|
|
1055
|
+
citations.urls = citations_urls
|
|
1056
|
+
if web_search_queries:
|
|
1057
|
+
citations.search_queries = web_search_queries
|
|
1058
|
+
|
|
1052
1059
|
if citations_raw or citations_urls:
|
|
1053
|
-
citations.raw = citations_raw if citations_raw else None
|
|
1054
|
-
citations.urls = citations_urls if citations_urls else None
|
|
1055
1060
|
model_response.citations = citations
|
|
1056
1061
|
|
|
1057
1062
|
# Extract usage metadata if present
|
|
@@ -1150,28 +1155,52 @@ class Gemini(Model):
|
|
|
1150
1155
|
|
|
1151
1156
|
model_response.tool_calls.append(tool_call)
|
|
1152
1157
|
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
citations.raw = grounding_metadata
|
|
1158
|
+
citations = Citations()
|
|
1159
|
+
citations.raw = {}
|
|
1160
|
+
citations.urls = []
|
|
1157
1161
|
|
|
1162
|
+
if (
|
|
1163
|
+
hasattr(response_delta.candidates[0], "grounding_metadata")
|
|
1164
|
+
and response_delta.candidates[0].grounding_metadata is not None
|
|
1165
|
+
):
|
|
1166
|
+
grounding_metadata = response_delta.candidates[0].grounding_metadata
|
|
1167
|
+
citations.raw["grounding_metadata"] = grounding_metadata.model_dump()
|
|
1168
|
+
citations.search_queries = grounding_metadata.web_search_queries or []
|
|
1158
1169
|
# Extract url and title
|
|
1159
|
-
chunks = grounding_metadata.
|
|
1160
|
-
citation_pairs = []
|
|
1170
|
+
chunks = grounding_metadata.grounding_chunks or []
|
|
1161
1171
|
for chunk in chunks:
|
|
1162
|
-
if not
|
|
1172
|
+
if not chunk:
|
|
1163
1173
|
continue
|
|
1164
|
-
web = chunk.
|
|
1165
|
-
if not
|
|
1174
|
+
web = chunk.web
|
|
1175
|
+
if not web:
|
|
1166
1176
|
continue
|
|
1167
|
-
uri = web.
|
|
1168
|
-
title = web.
|
|
1177
|
+
uri = web.uri
|
|
1178
|
+
title = web.title
|
|
1169
1179
|
if uri:
|
|
1170
|
-
|
|
1180
|
+
citations.urls.append(UrlCitation(url=uri, title=title))
|
|
1181
|
+
|
|
1182
|
+
# Handle URLs from URL context tool
|
|
1183
|
+
if (
|
|
1184
|
+
hasattr(response_delta.candidates[0], "url_context_metadata")
|
|
1185
|
+
and response_delta.candidates[0].url_context_metadata is not None
|
|
1186
|
+
):
|
|
1187
|
+
url_context_metadata = response_delta.candidates[0].url_context_metadata
|
|
1171
1188
|
|
|
1172
|
-
|
|
1173
|
-
|
|
1189
|
+
citations.raw["url_context_metadata"] = url_context_metadata.model_dump()
|
|
1190
|
+
|
|
1191
|
+
url_metadata_list = url_context_metadata.url_metadata or []
|
|
1192
|
+
for url_meta in url_metadata_list:
|
|
1193
|
+
retrieved_url = url_meta.retrieved_url
|
|
1194
|
+
status = "UNKNOWN"
|
|
1195
|
+
if url_meta.url_retrieval_status:
|
|
1196
|
+
status = url_meta.url_retrieval_status.value
|
|
1197
|
+
if retrieved_url and status == "URL_RETRIEVAL_STATUS_SUCCESS":
|
|
1198
|
+
# Avoid duplicate URLs
|
|
1199
|
+
existing_urls = [citation.url for citation in citations.urls]
|
|
1200
|
+
if retrieved_url not in existing_urls:
|
|
1201
|
+
citations.urls.append(UrlCitation(url=retrieved_url, title=retrieved_url))
|
|
1174
1202
|
|
|
1203
|
+
if citations.raw or citations.urls:
|
|
1175
1204
|
model_response.citations = citations
|
|
1176
1205
|
|
|
1177
1206
|
# Extract usage metadata if present
|
|
@@ -42,6 +42,9 @@ class Citations(BaseModel):
|
|
|
42
42
|
# Raw citations from the model
|
|
43
43
|
raw: Optional[Any] = None
|
|
44
44
|
|
|
45
|
+
# Search queries used to retrieve the citations
|
|
46
|
+
search_queries: Optional[List[str]] = None
|
|
47
|
+
|
|
45
48
|
# URLs of the citations.
|
|
46
49
|
urls: Optional[List[UrlCitation]] = None
|
|
47
50
|
|
|
@@ -66,14 +66,14 @@ async def run_agent_as_judge_eval(
|
|
|
66
66
|
|
|
67
67
|
# Run agent/team to get output
|
|
68
68
|
if agent:
|
|
69
|
-
agent_response = await agent.arun(eval_run_input.input)
|
|
69
|
+
agent_response = await agent.arun(eval_run_input.input, stream=False)
|
|
70
70
|
output = str(agent_response.content) if agent_response.content else ""
|
|
71
71
|
model_id = agent.model.id if agent and agent.model else None
|
|
72
72
|
model_provider = agent.model.provider if agent and agent.model else None
|
|
73
73
|
agent_id = agent.id
|
|
74
74
|
team_id = None
|
|
75
75
|
elif team:
|
|
76
|
-
team_response = await team.arun(eval_run_input.input)
|
|
76
|
+
team_response = await team.arun(eval_run_input.input, stream=False)
|
|
77
77
|
output = str(team_response.content) if team_response.content else ""
|
|
78
78
|
model_id = team.model.id if team and team.model else None
|
|
79
79
|
model_provider = team.model.provider if team and team.model else None
|
|
@@ -125,39 +125,21 @@ async def run_performance_eval(
|
|
|
125
125
|
default_model: Optional[Model] = None,
|
|
126
126
|
) -> EvalSchema:
|
|
127
127
|
"""Run a performance evaluation for the given agent or team"""
|
|
128
|
-
|
|
129
|
-
if isinstance(db, AsyncBaseDb):
|
|
130
|
-
if agent:
|
|
131
|
-
|
|
132
|
-
async def run_component(): # type: ignore
|
|
133
|
-
return await agent.arun(eval_run_input.input)
|
|
134
|
-
|
|
135
|
-
model_id = agent.model.id if agent and agent.model else None
|
|
136
|
-
model_provider = agent.model.provider if agent and agent.model else None
|
|
137
|
-
|
|
138
|
-
elif team:
|
|
139
|
-
|
|
140
|
-
async def run_component(): # type: ignore
|
|
141
|
-
return await team.arun(eval_run_input.input)
|
|
142
|
-
|
|
143
|
-
model_id = team.model.id if team and team.model else None
|
|
144
|
-
model_provider = team.model.provider if team and team.model else None
|
|
145
|
-
else:
|
|
146
|
-
if agent:
|
|
128
|
+
if agent:
|
|
147
129
|
|
|
148
|
-
|
|
149
|
-
|
|
130
|
+
async def run_component(): # type: ignore
|
|
131
|
+
return await agent.arun(eval_run_input.input, stream=False)
|
|
150
132
|
|
|
151
|
-
|
|
152
|
-
|
|
133
|
+
model_id = agent.model.id if agent and agent.model else None
|
|
134
|
+
model_provider = agent.model.provider if agent and agent.model else None
|
|
153
135
|
|
|
154
|
-
|
|
136
|
+
elif team:
|
|
155
137
|
|
|
156
|
-
|
|
157
|
-
|
|
138
|
+
async def run_component(): # type: ignore
|
|
139
|
+
return await team.arun(eval_run_input.input, stream=False)
|
|
158
140
|
|
|
159
|
-
|
|
160
|
-
|
|
141
|
+
model_id = team.model.id if team and team.model else None
|
|
142
|
+
model_provider = team.model.provider if team and team.model else None
|
|
161
143
|
|
|
162
144
|
performance_eval = PerformanceEval(
|
|
163
145
|
db=db,
|
|
@@ -171,11 +153,7 @@ async def run_performance_eval(
|
|
|
171
153
|
model_provider=model_provider,
|
|
172
154
|
)
|
|
173
155
|
|
|
174
|
-
|
|
175
|
-
if isinstance(db, AsyncBaseDb):
|
|
176
|
-
result = await performance_eval.arun(print_results=False, print_summary=False)
|
|
177
|
-
else:
|
|
178
|
-
result = performance_eval.run(print_results=False, print_summary=False)
|
|
156
|
+
result = await performance_eval.arun(print_results=False, print_summary=False)
|
|
179
157
|
if not result:
|
|
180
158
|
raise HTTPException(status_code=500, detail="Failed to run performance evaluation")
|
|
181
159
|
|
|
@@ -210,7 +188,7 @@ async def run_reliability_eval(
|
|
|
210
188
|
raise HTTPException(status_code=400, detail="expected_tool_calls is required for reliability evaluations")
|
|
211
189
|
|
|
212
190
|
if agent:
|
|
213
|
-
agent_response = await agent.arun(eval_run_input.input)
|
|
191
|
+
agent_response = await agent.arun(eval_run_input.input, stream=False)
|
|
214
192
|
reliability_eval = ReliabilityEval(
|
|
215
193
|
db=db,
|
|
216
194
|
name=eval_run_input.name,
|
|
@@ -221,7 +199,7 @@ async def run_reliability_eval(
|
|
|
221
199
|
model_provider = agent.model.provider if agent and agent.model else None
|
|
222
200
|
|
|
223
201
|
elif team:
|
|
224
|
-
team_response = await team.arun(eval_run_input.input)
|
|
202
|
+
team_response = await team.arun(eval_run_input.input, stream=False)
|
|
225
203
|
reliability_eval = ReliabilityEval(
|
|
226
204
|
db=db,
|
|
227
205
|
name=eval_run_input.name,
|
|
@@ -1541,6 +1541,8 @@ class Team:
|
|
|
1541
1541
|
add_history_to_context=add_history_to_context,
|
|
1542
1542
|
add_session_state_to_context=add_session_state_to_context,
|
|
1543
1543
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1544
|
+
stream=False,
|
|
1545
|
+
stream_events=False,
|
|
1544
1546
|
)
|
|
1545
1547
|
|
|
1546
1548
|
# 3. Prepare run messages
|
|
@@ -1753,6 +1755,8 @@ class Team:
|
|
|
1753
1755
|
add_history_to_context=add_history_to_context,
|
|
1754
1756
|
add_session_state_to_context=add_session_state_to_context,
|
|
1755
1757
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1758
|
+
stream=True,
|
|
1759
|
+
stream_events=stream_events,
|
|
1756
1760
|
)
|
|
1757
1761
|
|
|
1758
1762
|
# 3. Prepare run messages
|
|
@@ -2182,9 +2186,6 @@ class Team:
|
|
|
2182
2186
|
if stream_events is None:
|
|
2183
2187
|
stream_events = False if self.stream_events is None else self.stream_events
|
|
2184
2188
|
|
|
2185
|
-
self.stream = self.stream or stream
|
|
2186
|
-
self.stream_events = self.stream_events or stream_events
|
|
2187
|
-
|
|
2188
2189
|
self.model = cast(Model, self.model)
|
|
2189
2190
|
|
|
2190
2191
|
if self.metadata is not None:
|
|
@@ -2394,6 +2395,8 @@ class Team:
|
|
|
2394
2395
|
add_history_to_context=add_history_to_context,
|
|
2395
2396
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2396
2397
|
add_session_state_to_context=add_session_state_to_context,
|
|
2398
|
+
stream=False,
|
|
2399
|
+
stream_events=False,
|
|
2397
2400
|
)
|
|
2398
2401
|
|
|
2399
2402
|
# 5. Prepare run messages
|
|
@@ -2638,6 +2641,10 @@ class Team:
|
|
|
2638
2641
|
files=run_input.files,
|
|
2639
2642
|
debug_mode=debug_mode,
|
|
2640
2643
|
add_history_to_context=add_history_to_context,
|
|
2644
|
+
add_dependencies_to_context=add_dependencies_to_context,
|
|
2645
|
+
add_session_state_to_context=add_session_state_to_context,
|
|
2646
|
+
stream=True,
|
|
2647
|
+
stream_events=stream_events,
|
|
2641
2648
|
)
|
|
2642
2649
|
|
|
2643
2650
|
# 6. Prepare run messages
|
|
@@ -3046,9 +3053,6 @@ class Team:
|
|
|
3046
3053
|
if stream_events is None:
|
|
3047
3054
|
stream_events = False if self.stream_events is None else self.stream_events
|
|
3048
3055
|
|
|
3049
|
-
self.stream = self.stream or stream
|
|
3050
|
-
self.stream_events = self.stream_events or stream_events
|
|
3051
|
-
|
|
3052
3056
|
self.model = cast(Model, self.model)
|
|
3053
3057
|
|
|
3054
3058
|
if self.metadata is not None:
|
|
@@ -5397,6 +5401,8 @@ class Team:
|
|
|
5397
5401
|
add_history_to_context: Optional[bool] = None,
|
|
5398
5402
|
add_dependencies_to_context: Optional[bool] = None,
|
|
5399
5403
|
add_session_state_to_context: Optional[bool] = None,
|
|
5404
|
+
stream: Optional[bool] = None,
|
|
5405
|
+
stream_events: Optional[bool] = None,
|
|
5400
5406
|
check_mcp_tools: bool = True,
|
|
5401
5407
|
) -> List[Union[Function, dict]]:
|
|
5402
5408
|
# Connect tools that require connection management
|
|
@@ -5491,8 +5497,8 @@ class Team:
|
|
|
5491
5497
|
team_run_context=team_run_context,
|
|
5492
5498
|
input=user_message_content,
|
|
5493
5499
|
user_id=user_id,
|
|
5494
|
-
stream=
|
|
5495
|
-
stream_events=
|
|
5500
|
+
stream=stream or False,
|
|
5501
|
+
stream_events=stream_events or False,
|
|
5496
5502
|
async_mode=async_mode,
|
|
5497
5503
|
images=images, # type: ignore
|
|
5498
5504
|
videos=videos, # type: ignore
|
|
@@ -908,21 +908,16 @@ class FunctionCall(BaseModel):
|
|
|
908
908
|
else:
|
|
909
909
|
result = self.function.entrypoint(**entrypoint_args, **self.arguments) # type: ignore
|
|
910
910
|
|
|
911
|
-
updated_session_state = None
|
|
912
|
-
if entrypoint_args.get("run_context") is not None:
|
|
913
|
-
run_context = entrypoint_args.get("run_context")
|
|
914
|
-
updated_session_state = (
|
|
915
|
-
run_context.session_state
|
|
916
|
-
if run_context is not None and run_context.session_state is not None
|
|
917
|
-
else None
|
|
918
|
-
)
|
|
919
|
-
else:
|
|
920
|
-
if self.function._session_state is not None:
|
|
921
|
-
updated_session_state = self.function._session_state
|
|
922
|
-
|
|
923
911
|
# Handle generator case
|
|
924
912
|
if isgenerator(result):
|
|
925
913
|
self.result = result # Store generator directly, can't cache
|
|
914
|
+
# For generators, don't capture updated_session_state yet -
|
|
915
|
+
# session_state is passed by reference, so mutations made during
|
|
916
|
+
# generator iteration are already reflected in the original dict.
|
|
917
|
+
# Returning None prevents stale state from being merged later.
|
|
918
|
+
execution_result = FunctionExecutionResult(
|
|
919
|
+
status="success", result=self.result, updated_session_state=None
|
|
920
|
+
)
|
|
926
921
|
else:
|
|
927
922
|
self.result = result
|
|
928
923
|
# Only cache non-generator results
|
|
@@ -931,9 +926,21 @@ class FunctionCall(BaseModel):
|
|
|
931
926
|
cache_file = self.function._get_cache_file_path(cache_key)
|
|
932
927
|
self.function._save_to_cache(cache_file, self.result)
|
|
933
928
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
929
|
+
updated_session_state = None
|
|
930
|
+
if entrypoint_args.get("run_context") is not None:
|
|
931
|
+
run_context = entrypoint_args.get("run_context")
|
|
932
|
+
updated_session_state = (
|
|
933
|
+
run_context.session_state
|
|
934
|
+
if run_context is not None and run_context.session_state is not None
|
|
935
|
+
else None
|
|
936
|
+
)
|
|
937
|
+
else:
|
|
938
|
+
if self.function._session_state is not None:
|
|
939
|
+
updated_session_state = self.function._session_state
|
|
940
|
+
|
|
941
|
+
execution_result = FunctionExecutionResult(
|
|
942
|
+
status="success", result=self.result, updated_session_state=updated_session_state
|
|
943
|
+
)
|
|
937
944
|
|
|
938
945
|
except AgentRunException as e:
|
|
939
946
|
log_debug(f"{e.__class__.__name__}: {e}")
|
|
@@ -1143,14 +1150,21 @@ class FunctionCall(BaseModel):
|
|
|
1143
1150
|
cache_file = self.function._get_cache_file_path(cache_key)
|
|
1144
1151
|
self.function._save_to_cache(cache_file, self.result)
|
|
1145
1152
|
|
|
1146
|
-
updated_session_state
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1153
|
+
# For generators, don't capture updated_session_state -
|
|
1154
|
+
# session_state is passed by reference, so mutations made during
|
|
1155
|
+
# generator iteration are already reflected in the original dict.
|
|
1156
|
+
# Returning None prevents stale state from being merged later.
|
|
1157
|
+
if isgenerator(self.result) or isasyncgen(self.result):
|
|
1158
|
+
updated_session_state = None
|
|
1159
|
+
else:
|
|
1160
|
+
updated_session_state = None
|
|
1161
|
+
if entrypoint_args.get("run_context") is not None:
|
|
1162
|
+
run_context = entrypoint_args.get("run_context")
|
|
1163
|
+
updated_session_state = (
|
|
1164
|
+
run_context.session_state
|
|
1165
|
+
if run_context is not None and run_context.session_state is not None
|
|
1166
|
+
else None
|
|
1167
|
+
)
|
|
1154
1168
|
|
|
1155
1169
|
execution_result = FunctionExecutionResult(
|
|
1156
1170
|
status="success", result=self.result, updated_session_state=updated_session_state
|