agno 2.3.23__tar.gz → 2.3.25__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.23 → agno-2.3.25}/PKG-INFO +24 -2
- {agno-2.3.23 → agno-2.3.25}/agno/agent/agent.py +303 -11
- {agno-2.3.23 → agno-2.3.25}/agno/db/base.py +214 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/dynamo/dynamo.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/firestore/firestore.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/gcs_json/gcs_json_db.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/in_memory/in_memory_db.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/json/json_db.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mongo/async_mongo.py +229 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mongo/mongo.py +56 -1
- {agno-2.3.23 → agno-2.3.25}/agno/db/mongo/schemas.py +16 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mysql/async_mysql.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mysql/mysql.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/postgres/async_postgres.py +231 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/postgres/postgres.py +239 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/postgres/schemas.py +19 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/redis/redis.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/singlestore/singlestore.py +47 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/sqlite/async_sqlite.py +242 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/sqlite/schemas.py +18 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/sqlite/sqlite.py +239 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/surrealdb.py +47 -0
- agno-2.3.25/agno/knowledge/chunking/code.py +90 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/document.py +62 -2
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/markdown.py +94 -8
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/semantic.py +2 -2
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/strategy.py +14 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/knowledge.py +216 -202
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/arxiv_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/csv_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/docx_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/firecrawl_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/json_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/markdown_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/pdf_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/pptx_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/s3_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/tavily_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/text_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/web_search_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/website_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/wikipedia_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/youtube_reader.py +1 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/utils.py +1 -0
- agno-2.3.25/agno/learn/__init__.py +65 -0
- agno-2.3.25/agno/learn/config.py +463 -0
- agno-2.3.25/agno/learn/curate.py +185 -0
- agno-2.3.25/agno/learn/machine.py +690 -0
- agno-2.3.25/agno/learn/schemas.py +1043 -0
- agno-2.3.25/agno/learn/stores/__init__.py +35 -0
- agno-2.3.25/agno/learn/stores/entity_memory.py +3275 -0
- agno-2.3.25/agno/learn/stores/learned_knowledge.py +1583 -0
- agno-2.3.25/agno/learn/stores/protocol.py +117 -0
- agno-2.3.25/agno/learn/stores/session_context.py +1217 -0
- agno-2.3.25/agno/learn/stores/user_memory.py +1495 -0
- agno-2.3.25/agno/learn/stores/user_profile.py +1220 -0
- agno-2.3.25/agno/learn/utils.py +209 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/base.py +87 -8
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/knowledge/knowledge.py +26 -3
- {agno-2.3.23 → agno-2.3.25}/agno/os/utils.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/team/team.py +5 -3
- {agno-2.3.23 → agno-2.3.25}/agno/tools/browserbase.py +78 -6
- {agno-2.3.23 → agno-2.3.25}/agno/tools/crawl4ai.py +3 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/file.py +14 -13
- {agno-2.3.23 → agno-2.3.25}/agno/tools/function.py +9 -1
- {agno-2.3.23 → agno-2.3.25}/agno/tools/google_bigquery.py +11 -2
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mlx_transcribe.py +10 -7
- {agno-2.3.23 → agno-2.3.25}/agno/tools/python.py +14 -6
- {agno-2.3.23 → agno-2.3.25}/agno/tools/toolkit.py +33 -2
- {agno-2.3.23 → agno-2.3.25}/agno/utils/agent.py +30 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/cassandra/cassandra.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/chroma/chromadb.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/clickhouse/clickhousedb.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/couchbase/couchbase.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/milvus/milvus.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/mongodb/mongodb.py +13 -3
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/pgvector/pgvector.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/pineconedb/pineconedb.py +2 -2
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/qdrant/qdrant.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/redis/redisdb.py +2 -2
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/singlestore/singlestore.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/surrealdb/surrealdb.py +2 -2
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/weaviate/weaviate.py +1 -1
- {agno-2.3.23 → agno-2.3.25}/agno.egg-info/PKG-INFO +24 -2
- {agno-2.3.23 → agno-2.3.25}/agno.egg-info/SOURCES.txt +14 -0
- {agno-2.3.23 → agno-2.3.25}/agno.egg-info/requires.txt +24 -1
- {agno-2.3.23 → agno-2.3.25}/pyproject.toml +26 -3
- {agno-2.3.23 → agno-2.3.25}/LICENSE +0 -0
- {agno-2.3.23 → agno-2.3.25}/README.md +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/agent/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/agent/remote.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/api.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/evals.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/os.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/routes.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/evals.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/os.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/response.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/schemas/workflows.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/settings.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/api/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/a2a/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/a2a/client.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/a2a/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/a2a/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/client/os.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/cloud/aws/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/cloud/aws/s3/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/cloud/aws/s3/api_client.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/cloud/aws/s3/bucket.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/cloud/aws/s3/object.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/compression/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/compression/manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/culture/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/culture/manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/async_postgres/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/dynamo/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/dynamo/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/dynamo/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/firestore/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/firestore/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/firestore/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/gcs_json/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/gcs_json/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/in_memory/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/in_memory/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/json/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/json/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/v1_to_v2.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/versions/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/migrations/versions/v2_3_0.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mongo/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mongo/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mysql/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mysql/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/mysql/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/postgres/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/postgres/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/redis/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/redis/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/redis/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/culture.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/evals.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/knowledge.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/memory.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/schemas/metrics.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/singlestore/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/singlestore/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/singlestore/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/sqlite/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/sqlite/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/metrics.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/models.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/queries.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/surrealdb/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/db/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/debug.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/accuracy.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/agent_as_judge.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/performance.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/reliability.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/eval/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/exceptions.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/filters.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/guardrails/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/guardrails/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/guardrails/openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/guardrails/pii.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/guardrails/prompt_injection.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/hooks/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/hooks/decorator.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/integrations/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/integrations/discord/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/integrations/discord/client.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/agentic.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/fixed.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/recursive.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/chunking/row.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/content.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/document/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/document/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/aws_bedrock.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/azure_openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/cohere.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/fastembed.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/fireworks.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/google.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/huggingface.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/jina.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/langdb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/mistral.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/nebius.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/ollama.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/sentence_transformer.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/together.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/vllm.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/embedder/voyageai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reader/reader_factory.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/remote_content/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/remote_content/remote_content.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reranker/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reranker/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reranker/cohere.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reranker/infinity.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/reranker/sentence_transformer.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/knowledge/types.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/media.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/strategies/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/strategies/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/strategies/summarize.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/memory/strategies/types.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/aimlapi/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/aimlapi/aimlapi.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/anthropic/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/anthropic/claude.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/aws/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/aws/bedrock.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/aws/claude.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/azure/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/azure/ai_foundry.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/azure/openai_chat.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cerebras/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cerebras/cerebras.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cerebras/cerebras_openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cohere/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cohere/chat.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cometapi/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/cometapi/cometapi.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/dashscope/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/dashscope/dashscope.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/deepinfra/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/deepinfra/deepinfra.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/deepseek/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/deepseek/deepseek.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/defaults.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/fireworks/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/fireworks/fireworks.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/google/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/google/gemini.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/google/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/groq/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/groq/groq.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/huggingface/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/huggingface/huggingface.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/ibm/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/ibm/watsonx.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/internlm/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/internlm/internlm.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/langdb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/langdb/langdb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/litellm/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/litellm/chat.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/litellm/litellm_openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/llama_cpp/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/llama_cpp/llama_cpp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/lmstudio/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/lmstudio/lmstudio.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/message.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/meta/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/meta/llama.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/meta/llama_openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/metrics.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/mistral/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/mistral/mistral.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nebius/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nebius/nebius.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nexus/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nexus/nexus.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nvidia/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/nvidia/nvidia.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/ollama/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/ollama/chat.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openai/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openai/chat.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openai/like.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openai/responses.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openrouter/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/openrouter/openrouter.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/perplexity/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/perplexity/perplexity.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/portkey/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/portkey/portkey.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/requesty/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/requesty/requesty.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/response.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/sambanova/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/sambanova/sambanova.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/siliconflow/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/siliconflow/siliconflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/together/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/together/together.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vercel/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vercel/v0.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vertexai/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vertexai/claude.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vllm/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/vllm/vllm.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/xai/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/models/xai/xai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/app.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/auth.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/config.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/a2a/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/a2a/a2a.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/a2a/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/a2a/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/agui/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/agui/agui.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/agui/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/agui/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/slack/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/slack/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/slack/security.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/slack/slack.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/whatsapp/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/whatsapp/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/whatsapp/security.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/managers.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/mcp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/middleware/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/middleware/jwt.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/agents/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/agents/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/agents/schema.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/database.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/evals/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/evals/evals.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/evals/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/evals/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/health.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/home.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/knowledge/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/knowledge/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/memory/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/memory/memory.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/memory/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/metrics/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/metrics/metrics.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/metrics/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/session/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/session/session.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/teams/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/teams/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/teams/schema.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/traces/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/traces/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/traces/traces.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/workflows/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/workflows/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/routers/workflows/schema.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/schema.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/scopes.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/os/settings.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/py.typed +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/anthropic.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/azure_ai_foundry.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/deepseek.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/default.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/gemini.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/groq.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/helpers.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/ollama.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/step.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/reasoning/vertexai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/remote/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/remote/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/cancel.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/cancellation_management/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/cancellation_management/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/messages.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/requirement.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/run/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/session/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/session/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/session/summary.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/session/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/session/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/agent_skills.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/errors.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/loaders/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/loaders/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/loaders/local.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/skill.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/skills/validator.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/table.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/team/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/team/remote.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/agentql.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/airflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/api.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/apify.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/arxiv.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/aws_lambda.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/aws_ses.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/baidusearch.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/bitbucket.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/brandfetch.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/bravesearch.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/brightdata.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/calcom.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/calculator.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/cartesia.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/clickup.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/confluence.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/csv_toolkit.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/dalle.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/daytona.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/decorator.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/desi_vocal.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/discord.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/docker.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/duckdb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/duckduckgo.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/e2b.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/eleven_labs.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/email.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/evm.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/exa.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/fal.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/file_generation.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/financial_datasets.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/firecrawl.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/giphy.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/github.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/gmail.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/google_drive.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/google_maps.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/googlecalendar.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/googlesheets.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/hackernews.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/jina.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/jira.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/knowledge.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/linear.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/linkup.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/local_file_system.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/lumalab.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mcp/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mcp/mcp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mcp/multi_mcp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mcp/params.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mcp_toolbox.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/mem0.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/memory.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/azure_openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/gemini.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/groq.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/morph.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models/nebius.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/models_labs.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/moviepy_video.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/nano_banana.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/neo4j.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/newspaper.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/newspaper4k.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/notion.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/openbb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/opencv.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/openweather.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/oxylabs.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/pandas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/parallel.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/postgres.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/pubmed.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/reasoning.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/reddit.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/redshift.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/replicate.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/resend.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/scrapegraph.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/searxng.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/serpapi.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/serper.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/shell.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/shopify.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/slack.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/sleep.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/spider.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/spotify.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/sql.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/streamlit/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/streamlit/components.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/tavily.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/telegram.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/todoist.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/tool_registry.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/trafilatura.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/trello.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/twilio.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/user_control_flow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/valyu.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/visualization.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/webbrowser.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/webex.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/website.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/webtools.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/whatsapp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/wikipedia.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/x.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/yfinance.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/youtube.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/zendesk.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/zep.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tools/zoom.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tracing/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tracing/exporter.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tracing/schemas.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/tracing/setup.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/audio.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/certs.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/code_execution.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/common.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/cryptography.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/dttm.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/enum.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/env.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/events.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/format_str.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/functions.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/gemini.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/hooks.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/http.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/json_schema.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/knowledge.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/location.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/log.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/mcp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/media.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/merge_dict.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/message.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/ai_foundry.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/claude.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/cohere.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/llama.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/mistral.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/openai_responses.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/schema_utils.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/models/watsonx.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/openai.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/os.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/pickle.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/pprint.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/print_response/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/print_response/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/print_response/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/print_response/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/prompts.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/reasoning.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/remote.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/response.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/response_iterator.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/safe_formatter.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/serialize.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/shell.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/streamlit.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/string.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/team.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/timer.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/tokens.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/tools.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/web.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/whatsapp.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/utils/yaml_io.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/base.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/cassandra/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/cassandra/index.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/chroma/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/clickhouse/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/clickhouse/index.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/couchbase/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/distance.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/lancedb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/lancedb/lance_db.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/langchaindb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/langchaindb/langchaindb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/lightrag/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/lightrag/lightrag.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/llamaindex/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/milvus/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/mongodb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/pgvector/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/pgvector/index.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/pineconedb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/qdrant/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/redis/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/search.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/singlestore/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/singlestore/index.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/surrealdb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/upstashdb/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/upstashdb/upstashdb.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/weaviate/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/vectordb/weaviate/index.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/__init__.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/agent.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/condition.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/loop.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/parallel.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/remote.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/router.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/step.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/steps.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/types.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno/workflow/workflow.py +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno.egg-info/dependency_links.txt +0 -0
- {agno-2.3.23 → agno-2.3.25}/agno.egg-info/top_level.txt +0 -0
- {agno-2.3.23 → agno-2.3.25}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agno
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.25
|
|
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
|
|
@@ -264,7 +264,8 @@ Requires-Dist: unstructured; extra == "markdown"
|
|
|
264
264
|
Requires-Dist: markdown; extra == "markdown"
|
|
265
265
|
Requires-Dist: aiofiles; extra == "markdown"
|
|
266
266
|
Provides-Extra: chonkie
|
|
267
|
-
Requires-Dist: chonkie[
|
|
267
|
+
Requires-Dist: chonkie[semantic]; extra == "chonkie"
|
|
268
|
+
Requires-Dist: chonkie[code]; extra == "chonkie"
|
|
268
269
|
Requires-Dist: chonkie; extra == "chonkie"
|
|
269
270
|
Provides-Extra: agui
|
|
270
271
|
Requires-Dist: ag-ui-protocol; extra == "agui"
|
|
@@ -400,6 +401,27 @@ Requires-Dist: yfinance; extra == "integration-tests"
|
|
|
400
401
|
Requires-Dist: sqlalchemy; extra == "integration-tests"
|
|
401
402
|
Requires-Dist: Pillow; extra == "integration-tests"
|
|
402
403
|
Requires-Dist: fastmcp; extra == "integration-tests"
|
|
404
|
+
Provides-Extra: demo
|
|
405
|
+
Requires-Dist: anthropic; extra == "demo"
|
|
406
|
+
Requires-Dist: chromadb; extra == "demo"
|
|
407
|
+
Requires-Dist: ddgs; extra == "demo"
|
|
408
|
+
Requires-Dist: fastapi[standard]; extra == "demo"
|
|
409
|
+
Requires-Dist: google-genai; extra == "demo"
|
|
410
|
+
Requires-Dist: mcp; extra == "demo"
|
|
411
|
+
Requires-Dist: nest_asyncio; extra == "demo"
|
|
412
|
+
Requires-Dist: openai; extra == "demo"
|
|
413
|
+
Requires-Dist: openinference-instrumentation-agno; extra == "demo"
|
|
414
|
+
Requires-Dist: opentelemetry-api; extra == "demo"
|
|
415
|
+
Requires-Dist: opentelemetry-sdk; extra == "demo"
|
|
416
|
+
Requires-Dist: pandas; extra == "demo"
|
|
417
|
+
Requires-Dist: parallel-web; extra == "demo"
|
|
418
|
+
Requires-Dist: pgvector; extra == "demo"
|
|
419
|
+
Requires-Dist: pillow; extra == "demo"
|
|
420
|
+
Requires-Dist: psycopg[binary]; extra == "demo"
|
|
421
|
+
Requires-Dist: pypdf; extra == "demo"
|
|
422
|
+
Requires-Dist: sqlalchemy; extra == "demo"
|
|
423
|
+
Requires-Dist: yfinance; extra == "demo"
|
|
424
|
+
Requires-Dist: youtube-transcript-api; extra == "demo"
|
|
403
425
|
Dynamic: license-file
|
|
404
426
|
|
|
405
427
|
<div align="center" id="top">
|
|
@@ -46,6 +46,7 @@ from agno.filters import FilterExpr
|
|
|
46
46
|
from agno.guardrails import BaseGuardrail
|
|
47
47
|
from agno.knowledge.knowledge import Knowledge
|
|
48
48
|
from agno.knowledge.types import KnowledgeFilter
|
|
49
|
+
from agno.learn.machine import LearningMachine
|
|
49
50
|
from agno.media import Audio, File, Image, Video
|
|
50
51
|
from agno.memory import MemoryManager
|
|
51
52
|
from agno.models.base import Model
|
|
@@ -359,6 +360,12 @@ class Agent:
|
|
|
359
360
|
# If True, resolve session_state, dependencies, and metadata in the user and system messages
|
|
360
361
|
resolve_in_context: bool = True
|
|
361
362
|
|
|
363
|
+
# --- Learning Machine ---
|
|
364
|
+
# LearningMachine for unified learning capabilities
|
|
365
|
+
learning: Optional[Union[bool, LearningMachine]] = None
|
|
366
|
+
# Add learnings context to system prompt
|
|
367
|
+
add_learnings_to_context: bool = True
|
|
368
|
+
|
|
362
369
|
# --- Extra Messages ---
|
|
363
370
|
# A list of extra messages added after the system message and before the user message.
|
|
364
371
|
# Use these for few-shot learning or to provide additional context to the Model.
|
|
@@ -527,6 +534,8 @@ class Agent:
|
|
|
527
534
|
add_location_to_context: bool = False,
|
|
528
535
|
timezone_identifier: Optional[str] = None,
|
|
529
536
|
resolve_in_context: bool = True,
|
|
537
|
+
learning: Optional[Union[bool, LearningMachine]] = None,
|
|
538
|
+
add_learnings_to_context: bool = True,
|
|
530
539
|
additional_input: Optional[List[Union[str, Dict, BaseModel, Message]]] = None,
|
|
531
540
|
user_message_role: str = "user",
|
|
532
541
|
build_user_context: bool = True,
|
|
@@ -656,6 +665,8 @@ class Agent:
|
|
|
656
665
|
self.add_location_to_context = add_location_to_context
|
|
657
666
|
self.timezone_identifier = timezone_identifier
|
|
658
667
|
self.resolve_in_context = resolve_in_context
|
|
668
|
+
self.learning = learning
|
|
669
|
+
self.add_learnings_to_context = add_learnings_to_context
|
|
659
670
|
self.additional_input = additional_input
|
|
660
671
|
self.user_message_role = user_message_role
|
|
661
672
|
self.build_user_context = build_user_context
|
|
@@ -705,6 +716,10 @@ class Agent:
|
|
|
705
716
|
self.debug_level = debug_level
|
|
706
717
|
self.telemetry = telemetry
|
|
707
718
|
|
|
719
|
+
# Internal use: _learning holds the resolved LearningMachine instance
|
|
720
|
+
# use get_learning_machine() to access it.
|
|
721
|
+
self._learning: Optional[LearningMachine] = None
|
|
722
|
+
|
|
708
723
|
# If we are caching the agent session
|
|
709
724
|
self._cached_session: Optional[AgentSession] = None
|
|
710
725
|
|
|
@@ -811,6 +826,49 @@ class Agent:
|
|
|
811
826
|
self.enable_user_memories or self.enable_agentic_memory or self.memory_manager is not None
|
|
812
827
|
)
|
|
813
828
|
|
|
829
|
+
def _set_learning_machine(self) -> None:
|
|
830
|
+
"""Initialize LearningMachine with agent's db and model.
|
|
831
|
+
|
|
832
|
+
Sets the internal _learning field without modifying the public learning field.
|
|
833
|
+
|
|
834
|
+
Handles:
|
|
835
|
+
- learning=True: Create default LearningMachine
|
|
836
|
+
- learning=False/None: Disabled
|
|
837
|
+
- learning=LearningMachine(...): Use provided, inject db/model/knowledge
|
|
838
|
+
"""
|
|
839
|
+
# Handle learning=False or learning=None
|
|
840
|
+
if self.learning is None or self.learning is False:
|
|
841
|
+
self._learning = None
|
|
842
|
+
return
|
|
843
|
+
|
|
844
|
+
# Check db requirement
|
|
845
|
+
if self.db is None:
|
|
846
|
+
log_warning("Database not provided. LearningMachine not initialized.")
|
|
847
|
+
self._learning = None
|
|
848
|
+
return
|
|
849
|
+
|
|
850
|
+
# Handle learning=True: create default LearningMachine
|
|
851
|
+
if self.learning is True:
|
|
852
|
+
self._learning = LearningMachine(db=self.db, model=self.model, user_profile=True)
|
|
853
|
+
return
|
|
854
|
+
|
|
855
|
+
# Handle learning=LearningMachine(...): inject dependencies
|
|
856
|
+
if isinstance(self.learning, LearningMachine):
|
|
857
|
+
if self.learning.db is None:
|
|
858
|
+
self.learning.db = self.db
|
|
859
|
+
if self.learning.model is None:
|
|
860
|
+
self.learning.model = self.model
|
|
861
|
+
self._learning = self.learning
|
|
862
|
+
|
|
863
|
+
def get_learning_machine(self) -> Optional[LearningMachine]:
|
|
864
|
+
"""Get the resolved LearningMachine instance.
|
|
865
|
+
|
|
866
|
+
Returns:
|
|
867
|
+
The LearningMachine instance if learning is enabled and initialized,
|
|
868
|
+
None otherwise.
|
|
869
|
+
"""
|
|
870
|
+
return self._learning
|
|
871
|
+
|
|
814
872
|
def _set_session_summary_manager(self) -> None:
|
|
815
873
|
if self.enable_session_summaries and self.session_summary_manager is None:
|
|
816
874
|
self.session_summary_manager = SessionSummaryManager(model=self.model)
|
|
@@ -871,6 +929,8 @@ class Agent:
|
|
|
871
929
|
self._set_session_summary_manager()
|
|
872
930
|
if self.compress_tool_results or self.compression_manager is not None:
|
|
873
931
|
self._set_compression_manager()
|
|
932
|
+
if self.learning is not None and self.learning is not False:
|
|
933
|
+
self._set_learning_machine()
|
|
874
934
|
|
|
875
935
|
log_debug(f"Agent ID: {self.id}", center=True)
|
|
876
936
|
|
|
@@ -1008,6 +1068,7 @@ class Agent:
|
|
|
1008
1068
|
13. Cleanup and store the run response and session
|
|
1009
1069
|
"""
|
|
1010
1070
|
memory_future = None
|
|
1071
|
+
learning_future = None
|
|
1011
1072
|
cultural_knowledge_future = None
|
|
1012
1073
|
|
|
1013
1074
|
try:
|
|
@@ -1083,6 +1144,14 @@ class Agent:
|
|
|
1083
1144
|
existing_future=memory_future,
|
|
1084
1145
|
)
|
|
1085
1146
|
|
|
1147
|
+
# Start learning extraction as a background task (runs concurrently with the main execution)
|
|
1148
|
+
learning_future = self._start_learning_future(
|
|
1149
|
+
run_messages=run_messages,
|
|
1150
|
+
session=session,
|
|
1151
|
+
user_id=user_id,
|
|
1152
|
+
existing_future=learning_future,
|
|
1153
|
+
)
|
|
1154
|
+
|
|
1086
1155
|
# Start cultural knowledge creation in background thread
|
|
1087
1156
|
cultural_knowledge_future = self._start_cultural_knowledge_future(
|
|
1088
1157
|
run_messages=run_messages,
|
|
@@ -1130,6 +1199,7 @@ class Agent:
|
|
|
1130
1199
|
wait_for_open_threads(
|
|
1131
1200
|
memory_future=memory_future, # type: ignore
|
|
1132
1201
|
cultural_knowledge_future=cultural_knowledge_future, # type: ignore
|
|
1202
|
+
learning_future=learning_future, # type: ignore
|
|
1133
1203
|
)
|
|
1134
1204
|
|
|
1135
1205
|
return self._handle_agent_run_paused(
|
|
@@ -1164,6 +1234,7 @@ class Agent:
|
|
|
1164
1234
|
wait_for_open_threads(
|
|
1165
1235
|
memory_future=memory_future, # type: ignore
|
|
1166
1236
|
cultural_knowledge_future=cultural_knowledge_future, # type: ignore
|
|
1237
|
+
learning_future=learning_future, # type: ignore
|
|
1167
1238
|
)
|
|
1168
1239
|
|
|
1169
1240
|
# 12. Create session summary
|
|
@@ -1251,6 +1322,8 @@ class Agent:
|
|
|
1251
1322
|
memory_future.cancel()
|
|
1252
1323
|
if cultural_knowledge_future is not None and not cultural_knowledge_future.done():
|
|
1253
1324
|
cultural_knowledge_future.cancel()
|
|
1325
|
+
if learning_future is not None and not learning_future.done():
|
|
1326
|
+
learning_future.cancel()
|
|
1254
1327
|
|
|
1255
1328
|
# Always disconnect connectable tools
|
|
1256
1329
|
self._disconnect_connectable_tools()
|
|
@@ -1290,6 +1363,7 @@ class Agent:
|
|
|
1290
1363
|
10. Cleanup and store the run response and session
|
|
1291
1364
|
"""
|
|
1292
1365
|
memory_future = None
|
|
1366
|
+
learning_future = None
|
|
1293
1367
|
cultural_knowledge_future = None
|
|
1294
1368
|
|
|
1295
1369
|
try:
|
|
@@ -1366,6 +1440,14 @@ class Agent:
|
|
|
1366
1440
|
existing_future=memory_future,
|
|
1367
1441
|
)
|
|
1368
1442
|
|
|
1443
|
+
# Start learning extraction as a background task (runs concurrently with the main execution)
|
|
1444
|
+
learning_future = self._start_learning_future(
|
|
1445
|
+
run_messages=run_messages,
|
|
1446
|
+
session=session,
|
|
1447
|
+
user_id=user_id,
|
|
1448
|
+
existing_future=learning_future,
|
|
1449
|
+
)
|
|
1450
|
+
|
|
1369
1451
|
# Start cultural knowledge creation in background thread
|
|
1370
1452
|
cultural_knowledge_future = self._start_cultural_knowledge_future(
|
|
1371
1453
|
run_messages=run_messages,
|
|
@@ -1454,6 +1536,7 @@ class Agent:
|
|
|
1454
1536
|
yield from wait_for_thread_tasks_stream(
|
|
1455
1537
|
memory_future=memory_future, # type: ignore
|
|
1456
1538
|
cultural_knowledge_future=cultural_knowledge_future, # type: ignore
|
|
1539
|
+
learning_future=learning_future, # type: ignore
|
|
1457
1540
|
stream_events=stream_events,
|
|
1458
1541
|
run_response=run_response,
|
|
1459
1542
|
events_to_skip=self.events_to_skip,
|
|
@@ -1493,6 +1576,7 @@ class Agent:
|
|
|
1493
1576
|
yield from wait_for_thread_tasks_stream(
|
|
1494
1577
|
memory_future=memory_future, # type: ignore
|
|
1495
1578
|
cultural_knowledge_future=cultural_knowledge_future, # type: ignore
|
|
1579
|
+
learning_future=learning_future, # type: ignore
|
|
1496
1580
|
stream_events=stream_events,
|
|
1497
1581
|
run_response=run_response,
|
|
1498
1582
|
)
|
|
@@ -1643,6 +1727,8 @@ class Agent:
|
|
|
1643
1727
|
memory_future.cancel()
|
|
1644
1728
|
if cultural_knowledge_future is not None and not cultural_knowledge_future.done():
|
|
1645
1729
|
cultural_knowledge_future.cancel()
|
|
1730
|
+
if learning_future is not None and not learning_future.done():
|
|
1731
|
+
learning_future.cancel()
|
|
1646
1732
|
|
|
1647
1733
|
# Always disconnect connectable tools
|
|
1648
1734
|
self._disconnect_connectable_tools()
|
|
@@ -1964,8 +2050,9 @@ class Agent:
|
|
|
1964
2050
|
await aregister_run(run_context.run_id)
|
|
1965
2051
|
log_debug(f"Agent Run Start: {run_response.run_id}", center=True)
|
|
1966
2052
|
|
|
1967
|
-
cultural_knowledge_task = None
|
|
1968
2053
|
memory_task = None
|
|
2054
|
+
learning_task = None
|
|
2055
|
+
cultural_knowledge_task = None
|
|
1969
2056
|
|
|
1970
2057
|
# Set up retry logic
|
|
1971
2058
|
num_attempts = self.retries + 1
|
|
@@ -2063,6 +2150,14 @@ class Agent:
|
|
|
2063
2150
|
existing_task=memory_task,
|
|
2064
2151
|
)
|
|
2065
2152
|
|
|
2153
|
+
# Start learning extraction as a background task
|
|
2154
|
+
learning_task = await self._astart_learning_task(
|
|
2155
|
+
run_messages=run_messages,
|
|
2156
|
+
session=agent_session,
|
|
2157
|
+
user_id=user_id,
|
|
2158
|
+
existing_task=learning_task,
|
|
2159
|
+
)
|
|
2160
|
+
|
|
2066
2161
|
# Start cultural knowledge creation as a background task (runs concurrently with the main execution)
|
|
2067
2162
|
cultural_knowledge_task = await self._astart_cultural_knowledge_task(
|
|
2068
2163
|
run_messages=run_messages,
|
|
@@ -2114,7 +2209,9 @@ class Agent:
|
|
|
2114
2209
|
# We should break out of the run function
|
|
2115
2210
|
if any(tool_call.is_paused for tool_call in run_response.tools or []):
|
|
2116
2211
|
await await_for_open_threads(
|
|
2117
|
-
memory_task=memory_task,
|
|
2212
|
+
memory_task=memory_task,
|
|
2213
|
+
cultural_knowledge_task=cultural_knowledge_task,
|
|
2214
|
+
learning_task=learning_task,
|
|
2118
2215
|
)
|
|
2119
2216
|
return await self._ahandle_agent_run_paused(
|
|
2120
2217
|
run_response=run_response, session=agent_session, user_id=user_id
|
|
@@ -2146,7 +2243,9 @@ class Agent:
|
|
|
2146
2243
|
|
|
2147
2244
|
# 14. Wait for background memory creation
|
|
2148
2245
|
await await_for_open_threads(
|
|
2149
|
-
memory_task=memory_task,
|
|
2246
|
+
memory_task=memory_task,
|
|
2247
|
+
cultural_knowledge_task=cultural_knowledge_task,
|
|
2248
|
+
learning_task=learning_task,
|
|
2150
2249
|
)
|
|
2151
2250
|
|
|
2152
2251
|
# 15. Create session summary
|
|
@@ -2262,6 +2361,12 @@ class Agent:
|
|
|
2262
2361
|
await cultural_knowledge_task
|
|
2263
2362
|
except asyncio.CancelledError:
|
|
2264
2363
|
pass
|
|
2364
|
+
if learning_task is not None and not learning_task.done():
|
|
2365
|
+
learning_task.cancel()
|
|
2366
|
+
try:
|
|
2367
|
+
await learning_task
|
|
2368
|
+
except asyncio.CancelledError:
|
|
2369
|
+
pass
|
|
2265
2370
|
|
|
2266
2371
|
# Always clean up the run tracking
|
|
2267
2372
|
await acleanup_run(run_response.run_id) # type: ignore
|
|
@@ -2306,6 +2411,7 @@ class Agent:
|
|
|
2306
2411
|
|
|
2307
2412
|
memory_task = None
|
|
2308
2413
|
cultural_knowledge_task = None
|
|
2414
|
+
learning_task = None
|
|
2309
2415
|
|
|
2310
2416
|
# 1. Read or create session. Reads from the database if provided.
|
|
2311
2417
|
agent_session = await self._aread_or_create_session(session_id=session_id, user_id=user_id)
|
|
@@ -2411,6 +2517,14 @@ class Agent:
|
|
|
2411
2517
|
existing_task=memory_task,
|
|
2412
2518
|
)
|
|
2413
2519
|
|
|
2520
|
+
# Start learning extraction as a background task
|
|
2521
|
+
learning_task = await self._astart_learning_task(
|
|
2522
|
+
run_messages=run_messages,
|
|
2523
|
+
session=agent_session,
|
|
2524
|
+
user_id=user_id,
|
|
2525
|
+
existing_task=learning_task,
|
|
2526
|
+
)
|
|
2527
|
+
|
|
2414
2528
|
# Start cultural knowledge creation as a background task (runs concurrently with the main execution)
|
|
2415
2529
|
cultural_knowledge_task = await self._astart_cultural_knowledge_task(
|
|
2416
2530
|
run_messages=run_messages,
|
|
@@ -2503,6 +2617,7 @@ class Agent:
|
|
|
2503
2617
|
async for item in await_for_thread_tasks_stream(
|
|
2504
2618
|
memory_task=memory_task,
|
|
2505
2619
|
cultural_knowledge_task=cultural_knowledge_task,
|
|
2620
|
+
learning_task=learning_task,
|
|
2506
2621
|
stream_events=stream_events,
|
|
2507
2622
|
run_response=run_response,
|
|
2508
2623
|
):
|
|
@@ -2533,6 +2648,7 @@ class Agent:
|
|
|
2533
2648
|
async for item in await_for_thread_tasks_stream(
|
|
2534
2649
|
memory_task=memory_task,
|
|
2535
2650
|
cultural_knowledge_task=cultural_knowledge_task,
|
|
2651
|
+
learning_task=learning_task,
|
|
2536
2652
|
stream_events=stream_events,
|
|
2537
2653
|
run_response=run_response,
|
|
2538
2654
|
events_to_skip=self.events_to_skip,
|
|
@@ -2728,6 +2844,13 @@ class Agent:
|
|
|
2728
2844
|
except asyncio.CancelledError:
|
|
2729
2845
|
pass
|
|
2730
2846
|
|
|
2847
|
+
if learning_task is not None and not learning_task.done():
|
|
2848
|
+
learning_task.cancel()
|
|
2849
|
+
try:
|
|
2850
|
+
await learning_task
|
|
2851
|
+
except asyncio.CancelledError:
|
|
2852
|
+
pass
|
|
2853
|
+
|
|
2731
2854
|
# Always clean up the run tracking
|
|
2732
2855
|
await acleanup_run(run_response.run_id) # type: ignore
|
|
2733
2856
|
|
|
@@ -3302,6 +3425,9 @@ class Agent:
|
|
|
3302
3425
|
tools=tools,
|
|
3303
3426
|
tool_choice=self.tool_choice,
|
|
3304
3427
|
tool_call_limit=self.tool_call_limit,
|
|
3428
|
+
run_response=run_response,
|
|
3429
|
+
send_media_to_model=self.send_media_to_model,
|
|
3430
|
+
compression_manager=self.compression_manager if self.compress_tool_results else None,
|
|
3305
3431
|
)
|
|
3306
3432
|
|
|
3307
3433
|
# Check for cancellation after model processing
|
|
@@ -4015,6 +4141,9 @@ class Agent:
|
|
|
4015
4141
|
tools=_tools,
|
|
4016
4142
|
tool_choice=self.tool_choice,
|
|
4017
4143
|
tool_call_limit=self.tool_call_limit,
|
|
4144
|
+
run_response=run_response,
|
|
4145
|
+
send_media_to_model=self.send_media_to_model,
|
|
4146
|
+
compression_manager=self.compression_manager if self.compress_tool_results else None,
|
|
4018
4147
|
)
|
|
4019
4148
|
# Check for cancellation after model call
|
|
4020
4149
|
await araise_if_cancelled(run_response.run_id) # type: ignore
|
|
@@ -6246,6 +6375,93 @@ class Agent:
|
|
|
6246
6375
|
|
|
6247
6376
|
return None
|
|
6248
6377
|
|
|
6378
|
+
def _process_learnings(
|
|
6379
|
+
self,
|
|
6380
|
+
run_messages: RunMessages,
|
|
6381
|
+
session: AgentSession,
|
|
6382
|
+
user_id: Optional[str],
|
|
6383
|
+
) -> None:
|
|
6384
|
+
"""Process learnings from conversation (runs in background thread)."""
|
|
6385
|
+
if self._learning is None:
|
|
6386
|
+
return
|
|
6387
|
+
|
|
6388
|
+
try:
|
|
6389
|
+
# Convert run messages to list format expected by LearningMachine
|
|
6390
|
+
messages = run_messages.messages if run_messages else []
|
|
6391
|
+
|
|
6392
|
+
self._learning.process(
|
|
6393
|
+
messages=messages,
|
|
6394
|
+
user_id=user_id,
|
|
6395
|
+
session_id=session.session_id if session else None,
|
|
6396
|
+
agent_id=self.id,
|
|
6397
|
+
team_id=self.team_id,
|
|
6398
|
+
)
|
|
6399
|
+
log_debug("Learning extraction completed.")
|
|
6400
|
+
except Exception as e:
|
|
6401
|
+
log_warning(f"Error processing learnings: {e}")
|
|
6402
|
+
|
|
6403
|
+
async def _astart_learning_task(
|
|
6404
|
+
self,
|
|
6405
|
+
run_messages: RunMessages,
|
|
6406
|
+
session: AgentSession,
|
|
6407
|
+
user_id: Optional[str],
|
|
6408
|
+
existing_task: Optional[Task] = None,
|
|
6409
|
+
) -> Optional[Task]:
|
|
6410
|
+
"""Start learning extraction as async task.
|
|
6411
|
+
|
|
6412
|
+
Args:
|
|
6413
|
+
run_messages: The run messages containing conversation.
|
|
6414
|
+
session: The agent session.
|
|
6415
|
+
user_id: The user ID for learning extraction.
|
|
6416
|
+
existing_task: An existing task to cancel before starting a new one.
|
|
6417
|
+
|
|
6418
|
+
Returns:
|
|
6419
|
+
A new learning task if conditions are met, None otherwise.
|
|
6420
|
+
"""
|
|
6421
|
+
# Cancel any existing task from a previous retry attempt
|
|
6422
|
+
if existing_task is not None and not existing_task.done():
|
|
6423
|
+
existing_task.cancel()
|
|
6424
|
+
try:
|
|
6425
|
+
await existing_task
|
|
6426
|
+
except CancelledError:
|
|
6427
|
+
pass
|
|
6428
|
+
|
|
6429
|
+
# Create new task if learning is enabled
|
|
6430
|
+
if self._learning is not None:
|
|
6431
|
+
log_debug("Starting learning extraction as async task.")
|
|
6432
|
+
return create_task(
|
|
6433
|
+
self._aprocess_learnings(
|
|
6434
|
+
run_messages=run_messages,
|
|
6435
|
+
session=session,
|
|
6436
|
+
user_id=user_id,
|
|
6437
|
+
)
|
|
6438
|
+
)
|
|
6439
|
+
|
|
6440
|
+
return None
|
|
6441
|
+
|
|
6442
|
+
async def _aprocess_learnings(
|
|
6443
|
+
self,
|
|
6444
|
+
run_messages: RunMessages,
|
|
6445
|
+
session: AgentSession,
|
|
6446
|
+
user_id: Optional[str],
|
|
6447
|
+
) -> None:
|
|
6448
|
+
"""Async process learnings from conversation."""
|
|
6449
|
+
if self._learning is None:
|
|
6450
|
+
return
|
|
6451
|
+
|
|
6452
|
+
try:
|
|
6453
|
+
messages = run_messages.messages if run_messages else []
|
|
6454
|
+
await self._learning.aprocess(
|
|
6455
|
+
messages=messages,
|
|
6456
|
+
user_id=user_id,
|
|
6457
|
+
session_id=session.session_id if session else None,
|
|
6458
|
+
agent_id=self.id,
|
|
6459
|
+
team_id=self.team_id,
|
|
6460
|
+
)
|
|
6461
|
+
log_debug("Learning extraction completed.")
|
|
6462
|
+
except Exception as e:
|
|
6463
|
+
log_warning(f"Error processing learnings: {e}")
|
|
6464
|
+
|
|
6249
6465
|
def _start_memory_future(
|
|
6250
6466
|
self,
|
|
6251
6467
|
run_messages: RunMessages,
|
|
@@ -6279,6 +6495,40 @@ class Agent:
|
|
|
6279
6495
|
|
|
6280
6496
|
return None
|
|
6281
6497
|
|
|
6498
|
+
def _start_learning_future(
|
|
6499
|
+
self,
|
|
6500
|
+
run_messages: RunMessages,
|
|
6501
|
+
session: AgentSession,
|
|
6502
|
+
user_id: Optional[str],
|
|
6503
|
+
existing_future: Optional[Future] = None,
|
|
6504
|
+
) -> Optional[Future]:
|
|
6505
|
+
"""Start learning extraction in background thread.
|
|
6506
|
+
|
|
6507
|
+
Args:
|
|
6508
|
+
run_messages: The run messages containing conversation.
|
|
6509
|
+
session: The agent session.
|
|
6510
|
+
user_id: The user ID for learning extraction.
|
|
6511
|
+
existing_future: An existing future to cancel before starting a new one.
|
|
6512
|
+
|
|
6513
|
+
Returns:
|
|
6514
|
+
A new learning future if conditions are met, None otherwise.
|
|
6515
|
+
"""
|
|
6516
|
+
# Cancel any existing future from a previous retry attempt
|
|
6517
|
+
if existing_future is not None and not existing_future.done():
|
|
6518
|
+
existing_future.cancel()
|
|
6519
|
+
|
|
6520
|
+
# Create new future if learning is enabled
|
|
6521
|
+
if self._learning is not None:
|
|
6522
|
+
log_debug("Starting learning extraction in background thread.")
|
|
6523
|
+
return self.background_executor.submit(
|
|
6524
|
+
self._process_learnings,
|
|
6525
|
+
run_messages=run_messages,
|
|
6526
|
+
session=session,
|
|
6527
|
+
user_id=user_id,
|
|
6528
|
+
)
|
|
6529
|
+
|
|
6530
|
+
return None
|
|
6531
|
+
|
|
6282
6532
|
def _start_cultural_knowledge_future(
|
|
6283
6533
|
self,
|
|
6284
6534
|
run_messages: RunMessages,
|
|
@@ -6370,6 +6620,15 @@ class Agent:
|
|
|
6370
6620
|
if self.enable_agentic_memory:
|
|
6371
6621
|
agent_tools.append(self._get_update_user_memory_function(user_id=user_id, async_mode=False))
|
|
6372
6622
|
|
|
6623
|
+
# Add learning machine tools
|
|
6624
|
+
if self._learning is not None:
|
|
6625
|
+
learning_tools = self._learning.get_tools(
|
|
6626
|
+
user_id=user_id,
|
|
6627
|
+
session_id=session.session_id if session else None,
|
|
6628
|
+
agent_id=self.id,
|
|
6629
|
+
)
|
|
6630
|
+
agent_tools.extend(learning_tools)
|
|
6631
|
+
|
|
6373
6632
|
if self.enable_agentic_culture:
|
|
6374
6633
|
agent_tools.append(self._get_update_cultural_knowledge_function(async_mode=False))
|
|
6375
6634
|
|
|
@@ -6479,6 +6738,18 @@ class Agent:
|
|
|
6479
6738
|
if self.enable_agentic_memory:
|
|
6480
6739
|
agent_tools.append(self._get_update_user_memory_function(user_id=user_id, async_mode=True))
|
|
6481
6740
|
|
|
6741
|
+
# Add learning machine tools (async)
|
|
6742
|
+
if self._learning is not None:
|
|
6743
|
+
learning_tools = await self._learning.aget_tools(
|
|
6744
|
+
user_id=user_id,
|
|
6745
|
+
session_id=session.session_id if session else None,
|
|
6746
|
+
agent_id=self.id,
|
|
6747
|
+
)
|
|
6748
|
+
agent_tools.extend(learning_tools)
|
|
6749
|
+
|
|
6750
|
+
if self.enable_agentic_culture:
|
|
6751
|
+
agent_tools.append(self._get_update_cultural_knowledge_function(async_mode=True))
|
|
6752
|
+
|
|
6482
6753
|
if self.enable_agentic_state:
|
|
6483
6754
|
agent_tools.append(Function(name="update_session_state", entrypoint=self._update_session_state_tool))
|
|
6484
6755
|
|
|
@@ -8091,12 +8362,22 @@ class Agent:
|
|
|
8091
8362
|
"You should ALWAYS prefer information from this conversation over the past summary.\n\n"
|
|
8092
8363
|
)
|
|
8093
8364
|
|
|
8094
|
-
# 3.3.12
|
|
8365
|
+
# 3.3.12 then add learnings to the system prompt
|
|
8366
|
+
if self._learning is not None and self.add_learnings_to_context:
|
|
8367
|
+
learning_context = self._learning.build_context(
|
|
8368
|
+
user_id=user_id,
|
|
8369
|
+
session_id=session.session_id if session else None,
|
|
8370
|
+
agent_id=self.id,
|
|
8371
|
+
)
|
|
8372
|
+
if learning_context:
|
|
8373
|
+
system_message_content += learning_context + "\n"
|
|
8374
|
+
|
|
8375
|
+
# 3.3.13 Add the system message from the Model
|
|
8095
8376
|
system_message_from_model = self.model.get_system_message_for_model(tools)
|
|
8096
8377
|
if system_message_from_model is not None:
|
|
8097
8378
|
system_message_content += system_message_from_model
|
|
8098
8379
|
|
|
8099
|
-
# 3.3.
|
|
8380
|
+
# 3.3.14 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
|
|
8100
8381
|
# or if use_json_mode is True
|
|
8101
8382
|
if (
|
|
8102
8383
|
output_schema is not None
|
|
@@ -8108,11 +8389,11 @@ class Agent:
|
|
|
8108
8389
|
):
|
|
8109
8390
|
system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
|
|
8110
8391
|
|
|
8111
|
-
# 3.3.
|
|
8392
|
+
# 3.3.15 Add the response model format prompt if output_schema is provided (Pydantic only)
|
|
8112
8393
|
if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
|
|
8113
8394
|
system_message_content += f"{get_response_model_format_prompt(output_schema)}"
|
|
8114
8395
|
|
|
8115
|
-
# 3.3.
|
|
8396
|
+
# 3.3.16 Add the session state to the system message
|
|
8116
8397
|
if add_session_state_to_context and session_state is not None:
|
|
8117
8398
|
system_message_content += f"\n<session_state>\n{session_state}\n</session_state>\n\n"
|
|
8118
8399
|
|
|
@@ -8443,12 +8724,22 @@ class Agent:
|
|
|
8443
8724
|
"You should ALWAYS prefer information from this conversation over the past summary.\n\n"
|
|
8444
8725
|
)
|
|
8445
8726
|
|
|
8446
|
-
# 3.3.12
|
|
8727
|
+
# 3.3.12 then add learnings to the system prompt
|
|
8728
|
+
if self._learning is not None and self.add_learnings_to_context:
|
|
8729
|
+
learning_context = await self._learning.abuild_context(
|
|
8730
|
+
user_id=user_id,
|
|
8731
|
+
session_id=session.session_id if session else None,
|
|
8732
|
+
agent_id=self.id,
|
|
8733
|
+
)
|
|
8734
|
+
if learning_context:
|
|
8735
|
+
system_message_content += learning_context + "\n"
|
|
8736
|
+
|
|
8737
|
+
# 3.3.13 Add the system message from the Model
|
|
8447
8738
|
system_message_from_model = self.model.get_system_message_for_model(tools)
|
|
8448
8739
|
if system_message_from_model is not None:
|
|
8449
8740
|
system_message_content += system_message_from_model
|
|
8450
8741
|
|
|
8451
|
-
# 3.3.
|
|
8742
|
+
# 3.3.14 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
|
|
8452
8743
|
# or if use_json_mode is True
|
|
8453
8744
|
if (
|
|
8454
8745
|
output_schema is not None
|
|
@@ -8460,11 +8751,11 @@ class Agent:
|
|
|
8460
8751
|
):
|
|
8461
8752
|
system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
|
|
8462
8753
|
|
|
8463
|
-
# 3.3.
|
|
8754
|
+
# 3.3.15 Add the response model format prompt if output_schema is provided (Pydantic only)
|
|
8464
8755
|
if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
|
|
8465
8756
|
system_message_content += f"{get_response_model_format_prompt(output_schema)}"
|
|
8466
8757
|
|
|
8467
|
-
# 3.3.
|
|
8758
|
+
# 3.3.16 Add the session state to the system message
|
|
8468
8759
|
if add_session_state_to_context and session_state is not None:
|
|
8469
8760
|
system_message_content += self._get_formatted_session_state_for_system_message(session_state)
|
|
8470
8761
|
|
|
@@ -11285,6 +11576,7 @@ class Agent:
|
|
|
11285
11576
|
"has_memory": self.enable_user_memories is True
|
|
11286
11577
|
or self.enable_agentic_memory is True
|
|
11287
11578
|
or self.memory_manager is not None,
|
|
11579
|
+
"has_learnings": self._learning is not None,
|
|
11288
11580
|
"has_culture": self.enable_agentic_culture is True
|
|
11289
11581
|
or self.update_cultural_knowledge is True
|
|
11290
11582
|
or self.culture_manager is not None,
|