agno 2.2.10__py3-none-any.whl → 2.2.12__py3-none-any.whl
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/agent/agent.py +75 -48
- agno/db/dynamo/utils.py +1 -1
- agno/db/firestore/utils.py +1 -1
- agno/db/gcs_json/utils.py +1 -1
- agno/db/in_memory/utils.py +1 -1
- agno/db/json/utils.py +1 -1
- agno/db/mongo/utils.py +3 -3
- agno/db/mysql/mysql.py +1 -1
- agno/db/mysql/utils.py +1 -1
- agno/db/postgres/utils.py +1 -1
- agno/db/redis/utils.py +1 -1
- agno/db/singlestore/singlestore.py +1 -1
- agno/db/singlestore/utils.py +1 -1
- agno/db/sqlite/async_sqlite.py +1 -1
- agno/db/sqlite/sqlite.py +1 -1
- agno/db/sqlite/utils.py +1 -1
- agno/filters.py +354 -0
- agno/knowledge/chunking/agentic.py +8 -9
- agno/knowledge/chunking/strategy.py +59 -15
- agno/knowledge/embedder/sentence_transformer.py +6 -2
- agno/knowledge/knowledge.py +43 -22
- agno/knowledge/reader/base.py +6 -2
- agno/knowledge/utils.py +20 -0
- agno/models/anthropic/claude.py +45 -9
- agno/models/base.py +4 -0
- agno/os/app.py +23 -7
- agno/os/interfaces/slack/router.py +53 -33
- agno/os/interfaces/slack/slack.py +9 -1
- agno/os/router.py +25 -1
- agno/os/routers/health.py +5 -3
- agno/os/routers/knowledge/knowledge.py +43 -17
- agno/os/routers/knowledge/schemas.py +4 -3
- agno/run/agent.py +11 -1
- agno/run/base.py +3 -2
- agno/session/agent.py +10 -5
- agno/team/team.py +57 -18
- agno/tools/file_generation.py +4 -4
- agno/tools/gmail.py +179 -0
- agno/tools/parallel.py +314 -0
- agno/utils/agent.py +22 -17
- agno/utils/gemini.py +15 -5
- agno/utils/knowledge.py +12 -5
- agno/utils/log.py +1 -0
- agno/utils/models/claude.py +2 -1
- agno/utils/print_response/agent.py +5 -4
- agno/utils/print_response/team.py +5 -4
- agno/vectordb/base.py +2 -4
- agno/vectordb/cassandra/cassandra.py +12 -5
- agno/vectordb/chroma/chromadb.py +10 -4
- agno/vectordb/clickhouse/clickhousedb.py +12 -4
- agno/vectordb/couchbase/couchbase.py +12 -3
- agno/vectordb/lancedb/lance_db.py +69 -144
- agno/vectordb/langchaindb/langchaindb.py +13 -4
- agno/vectordb/lightrag/lightrag.py +8 -3
- agno/vectordb/llamaindex/llamaindexdb.py +10 -4
- agno/vectordb/milvus/milvus.py +16 -5
- agno/vectordb/mongodb/mongodb.py +14 -3
- agno/vectordb/pgvector/pgvector.py +73 -15
- agno/vectordb/pineconedb/pineconedb.py +6 -2
- agno/vectordb/qdrant/qdrant.py +25 -13
- agno/vectordb/redis/redisdb.py +37 -30
- agno/vectordb/singlestore/singlestore.py +9 -4
- agno/vectordb/surrealdb/surrealdb.py +13 -3
- agno/vectordb/upstashdb/upstashdb.py +8 -5
- agno/vectordb/weaviate/weaviate.py +29 -12
- agno/workflow/step.py +3 -2
- agno/workflow/types.py +20 -1
- agno/workflow/workflow.py +103 -14
- {agno-2.2.10.dist-info → agno-2.2.12.dist-info}/METADATA +4 -1
- {agno-2.2.10.dist-info → agno-2.2.12.dist-info}/RECORD +73 -71
- {agno-2.2.10.dist-info → agno-2.2.12.dist-info}/WHEEL +0 -0
- {agno-2.2.10.dist-info → agno-2.2.12.dist-info}/licenses/LICENSE +0 -0
- {agno-2.2.10.dist-info → agno-2.2.12.dist-info}/top_level.txt +0 -0
agno/agent/agent.py
CHANGED
|
@@ -38,6 +38,7 @@ from agno.exceptions import (
|
|
|
38
38
|
RunCancelledException,
|
|
39
39
|
StopAgentRun,
|
|
40
40
|
)
|
|
41
|
+
from agno.filters import FilterExpr
|
|
41
42
|
from agno.guardrails import BaseGuardrail
|
|
42
43
|
from agno.knowledge.knowledge import Knowledge
|
|
43
44
|
from agno.knowledge.types import KnowledgeFilter
|
|
@@ -233,7 +234,7 @@ class Agent:
|
|
|
233
234
|
knowledge: Optional[Knowledge] = None
|
|
234
235
|
# Enable RAG by adding references from Knowledge to the user prompt.
|
|
235
236
|
# Add knowledge_filters to the Agent class attributes
|
|
236
|
-
knowledge_filters: Optional[Dict[str, Any]] = None
|
|
237
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None
|
|
237
238
|
# Let the agent choose the knowledge filters
|
|
238
239
|
enable_agentic_knowledge_filters: Optional[bool] = False
|
|
239
240
|
add_knowledge_to_context: bool = False
|
|
@@ -450,7 +451,7 @@ class Agent:
|
|
|
450
451
|
store_tool_messages: bool = True,
|
|
451
452
|
store_history_messages: bool = True,
|
|
452
453
|
knowledge: Optional[Knowledge] = None,
|
|
453
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
454
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
454
455
|
enable_agentic_knowledge_filters: Optional[bool] = None,
|
|
455
456
|
add_knowledge_to_context: bool = False,
|
|
456
457
|
knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
|
|
@@ -1460,7 +1461,7 @@ class Agent:
|
|
|
1460
1461
|
videos: Optional[Sequence[Video]] = None,
|
|
1461
1462
|
files: Optional[Sequence[File]] = None,
|
|
1462
1463
|
retries: Optional[int] = None,
|
|
1463
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1464
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
1464
1465
|
add_history_to_context: Optional[bool] = None,
|
|
1465
1466
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1466
1467
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -1487,7 +1488,7 @@ class Agent:
|
|
|
1487
1488
|
videos: Optional[Sequence[Video]] = None,
|
|
1488
1489
|
files: Optional[Sequence[File]] = None,
|
|
1489
1490
|
retries: Optional[int] = None,
|
|
1490
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1491
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
1491
1492
|
add_history_to_context: Optional[bool] = None,
|
|
1492
1493
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1493
1494
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -1515,7 +1516,7 @@ class Agent:
|
|
|
1515
1516
|
videos: Optional[Sequence[Video]] = None,
|
|
1516
1517
|
files: Optional[Sequence[File]] = None,
|
|
1517
1518
|
retries: Optional[int] = None,
|
|
1518
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1519
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
1519
1520
|
add_history_to_context: Optional[bool] = None,
|
|
1520
1521
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1521
1522
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -2385,7 +2386,7 @@ class Agent:
|
|
|
2385
2386
|
stream_events: Optional[bool] = None,
|
|
2386
2387
|
stream_intermediate_steps: Optional[bool] = None,
|
|
2387
2388
|
retries: Optional[int] = None,
|
|
2388
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2389
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2389
2390
|
add_history_to_context: Optional[bool] = None,
|
|
2390
2391
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2391
2392
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -2411,7 +2412,7 @@ class Agent:
|
|
|
2411
2412
|
stream_events: Optional[bool] = None,
|
|
2412
2413
|
stream_intermediate_steps: Optional[bool] = None,
|
|
2413
2414
|
retries: Optional[int] = None,
|
|
2414
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2415
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2415
2416
|
add_history_to_context: Optional[bool] = None,
|
|
2416
2417
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2417
2418
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -2439,7 +2440,7 @@ class Agent:
|
|
|
2439
2440
|
stream_events: Optional[bool] = None,
|
|
2440
2441
|
stream_intermediate_steps: Optional[bool] = None,
|
|
2441
2442
|
retries: Optional[int] = None,
|
|
2442
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2443
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2443
2444
|
add_history_to_context: Optional[bool] = None,
|
|
2444
2445
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2445
2446
|
add_session_state_to_context: Optional[bool] = None,
|
|
@@ -2662,7 +2663,7 @@ class Agent:
|
|
|
2662
2663
|
user_id: Optional[str] = None,
|
|
2663
2664
|
session_id: Optional[str] = None,
|
|
2664
2665
|
retries: Optional[int] = None,
|
|
2665
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2666
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2666
2667
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2667
2668
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2668
2669
|
debug_mode: Optional[bool] = None,
|
|
@@ -2681,7 +2682,7 @@ class Agent:
|
|
|
2681
2682
|
user_id: Optional[str] = None,
|
|
2682
2683
|
session_id: Optional[str] = None,
|
|
2683
2684
|
retries: Optional[int] = None,
|
|
2684
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2685
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2685
2686
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2686
2687
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2687
2688
|
debug_mode: Optional[bool] = None,
|
|
@@ -2700,7 +2701,7 @@ class Agent:
|
|
|
2700
2701
|
session_id: Optional[str] = None,
|
|
2701
2702
|
run_context: Optional[RunContext] = None,
|
|
2702
2703
|
retries: Optional[int] = None,
|
|
2703
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2704
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
2704
2705
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
2705
2706
|
metadata: Optional[Dict[str, Any]] = None,
|
|
2706
2707
|
debug_mode: Optional[bool] = None,
|
|
@@ -3223,7 +3224,7 @@ class Agent:
|
|
|
3223
3224
|
user_id: Optional[str] = None,
|
|
3224
3225
|
session_id: Optional[str] = None,
|
|
3225
3226
|
retries: Optional[int] = None,
|
|
3226
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
3227
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
3227
3228
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
3228
3229
|
metadata: Optional[Dict[str, Any]] = None,
|
|
3229
3230
|
debug_mode: Optional[bool] = None,
|
|
@@ -3242,7 +3243,7 @@ class Agent:
|
|
|
3242
3243
|
user_id: Optional[str] = None,
|
|
3243
3244
|
session_id: Optional[str] = None,
|
|
3244
3245
|
retries: Optional[int] = None,
|
|
3245
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
3246
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
3246
3247
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
3247
3248
|
metadata: Optional[Dict[str, Any]] = None,
|
|
3248
3249
|
debug_mode: Optional[bool] = None,
|
|
@@ -3261,7 +3262,7 @@ class Agent:
|
|
|
3261
3262
|
session_id: Optional[str] = None,
|
|
3262
3263
|
run_context: Optional[RunContext] = None,
|
|
3263
3264
|
retries: Optional[int] = None,
|
|
3264
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
3265
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
3265
3266
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
3266
3267
|
metadata: Optional[Dict[str, Any]] = None,
|
|
3267
3268
|
debug_mode: Optional[bool] = None,
|
|
@@ -5344,13 +5345,9 @@ class Agent:
|
|
|
5344
5345
|
run_context: RunContext,
|
|
5345
5346
|
session: AgentSession,
|
|
5346
5347
|
user_id: Optional[str] = None,
|
|
5347
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
5348
5348
|
) -> List[Union[Toolkit, Callable, Function, Dict]]:
|
|
5349
5349
|
agent_tools: List[Union[Toolkit, Callable, Function, Dict]] = []
|
|
5350
5350
|
|
|
5351
|
-
# Consider both run_context.knowledge_filters and knowledge_filters (deprecated)
|
|
5352
|
-
run_context.knowledge_filters = run_context.knowledge_filters or knowledge_filters
|
|
5353
|
-
|
|
5354
5351
|
# Add provided tools
|
|
5355
5352
|
if self.tools is not None:
|
|
5356
5353
|
# If not running in async mode, raise if any tool is async
|
|
@@ -5419,14 +5416,10 @@ class Agent:
|
|
|
5419
5416
|
run_context: RunContext,
|
|
5420
5417
|
session: AgentSession,
|
|
5421
5418
|
user_id: Optional[str] = None,
|
|
5422
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
5423
5419
|
check_mcp_tools: bool = True,
|
|
5424
5420
|
) -> List[Union[Toolkit, Callable, Function, Dict]]:
|
|
5425
5421
|
agent_tools: List[Union[Toolkit, Callable, Function, Dict]] = []
|
|
5426
5422
|
|
|
5427
|
-
# Consider both run_context.knowledge_filters and knowledge_filters (deprecated)
|
|
5428
|
-
run_context.knowledge_filters = run_context.knowledge_filters or knowledge_filters
|
|
5429
|
-
|
|
5430
5423
|
# Connect MCP tools
|
|
5431
5424
|
await self._connect_mcp_tools()
|
|
5432
5425
|
|
|
@@ -5763,6 +5756,9 @@ class Agent:
|
|
|
5763
5756
|
raise ValueError("Db not initialized")
|
|
5764
5757
|
return self.db.get_session(session_id=session_id, session_type=session_type) # type: ignore
|
|
5765
5758
|
except Exception as e:
|
|
5759
|
+
import traceback
|
|
5760
|
+
|
|
5761
|
+
traceback.print_exc(limit=3)
|
|
5766
5762
|
log_warning(f"Error getting session from db: {e}")
|
|
5767
5763
|
return None
|
|
5768
5764
|
|
|
@@ -5773,12 +5769,17 @@ class Agent:
|
|
|
5773
5769
|
try:
|
|
5774
5770
|
if not self.db:
|
|
5775
5771
|
raise ValueError("Db not initialized")
|
|
5776
|
-
return await self.db.get_session(session_id=session_id, session_type=
|
|
5772
|
+
return await self.db.get_session(session_id=session_id, session_type=session_type) # type: ignore
|
|
5777
5773
|
except Exception as e:
|
|
5774
|
+
import traceback
|
|
5775
|
+
|
|
5776
|
+
traceback.print_exc(limit=3)
|
|
5778
5777
|
log_warning(f"Error getting session from db: {e}")
|
|
5779
5778
|
return None
|
|
5780
5779
|
|
|
5781
|
-
def _upsert_session(
|
|
5780
|
+
def _upsert_session(
|
|
5781
|
+
self, session: Union[AgentSession, TeamSession, WorkflowSession]
|
|
5782
|
+
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession]]:
|
|
5782
5783
|
"""Upsert a Session into the database."""
|
|
5783
5784
|
|
|
5784
5785
|
try:
|
|
@@ -5786,16 +5787,24 @@ class Agent:
|
|
|
5786
5787
|
raise ValueError("Db not initialized")
|
|
5787
5788
|
return self.db.upsert_session(session=session) # type: ignore
|
|
5788
5789
|
except Exception as e:
|
|
5790
|
+
import traceback
|
|
5791
|
+
|
|
5792
|
+
traceback.print_exc(limit=3)
|
|
5789
5793
|
log_warning(f"Error upserting session into db: {e}")
|
|
5790
5794
|
return None
|
|
5791
5795
|
|
|
5792
|
-
async def _aupsert_session(
|
|
5796
|
+
async def _aupsert_session(
|
|
5797
|
+
self, session: Union[AgentSession, TeamSession, WorkflowSession]
|
|
5798
|
+
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession]]:
|
|
5793
5799
|
"""Upsert a Session into the database."""
|
|
5794
5800
|
try:
|
|
5795
5801
|
if not self.db:
|
|
5796
5802
|
raise ValueError("Db not initialized")
|
|
5797
5803
|
return await self.db.upsert_session(session=session) # type: ignore
|
|
5798
5804
|
except Exception as e:
|
|
5805
|
+
import traceback
|
|
5806
|
+
|
|
5807
|
+
traceback.print_exc(limit=3)
|
|
5799
5808
|
log_warning(f"Error upserting session into db: {e}")
|
|
5800
5809
|
return None
|
|
5801
5810
|
|
|
@@ -6000,7 +6009,7 @@ class Agent:
|
|
|
6000
6009
|
def get_session(
|
|
6001
6010
|
self,
|
|
6002
6011
|
session_id: Optional[str] = None,
|
|
6003
|
-
) -> Optional[AgentSession]:
|
|
6012
|
+
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession]]:
|
|
6004
6013
|
"""Load an AgentSession from database or cache.
|
|
6005
6014
|
|
|
6006
6015
|
Args:
|
|
@@ -6061,7 +6070,7 @@ class Agent:
|
|
|
6061
6070
|
async def aget_session(
|
|
6062
6071
|
self,
|
|
6063
6072
|
session_id: Optional[str] = None,
|
|
6064
|
-
) -> Optional[AgentSession]:
|
|
6073
|
+
) -> Optional[Union[AgentSession, TeamSession, WorkflowSession]]:
|
|
6065
6074
|
"""Load an AgentSession from database or cache.
|
|
6066
6075
|
|
|
6067
6076
|
Args:
|
|
@@ -6116,7 +6125,7 @@ class Agent:
|
|
|
6116
6125
|
log_debug(f"AgentSession {session_id_to_load} not found in db")
|
|
6117
6126
|
return None
|
|
6118
6127
|
|
|
6119
|
-
def save_session(self, session: AgentSession) -> None:
|
|
6128
|
+
def save_session(self, session: Union[AgentSession, TeamSession, WorkflowSession]) -> None:
|
|
6120
6129
|
"""
|
|
6121
6130
|
Save the AgentSession to storage
|
|
6122
6131
|
"""
|
|
@@ -6138,7 +6147,7 @@ class Agent:
|
|
|
6138
6147
|
self._upsert_session(session=session)
|
|
6139
6148
|
log_debug(f"Created or updated AgentSession record: {session.session_id}")
|
|
6140
6149
|
|
|
6141
|
-
async def asave_session(self, session: AgentSession) -> None:
|
|
6150
|
+
async def asave_session(self, session: Union[AgentSession, TeamSession, WorkflowSession]) -> None:
|
|
6142
6151
|
"""
|
|
6143
6152
|
Save the AgentSession to storage
|
|
6144
6153
|
"""
|
|
@@ -6214,12 +6223,16 @@ class Agent:
|
|
|
6214
6223
|
if session is None:
|
|
6215
6224
|
raise Exception("Session not found")
|
|
6216
6225
|
|
|
6226
|
+
if not hasattr(session, "agent_data"):
|
|
6227
|
+
raise Exception("Session is not an AgentSession")
|
|
6228
|
+
|
|
6217
6229
|
# -*- Rename Agent
|
|
6218
6230
|
self.name = name
|
|
6219
|
-
|
|
6220
|
-
|
|
6231
|
+
|
|
6232
|
+
if session.agent_data is not None: # type: ignore
|
|
6233
|
+
session.agent_data["name"] = name # type: ignore
|
|
6221
6234
|
else:
|
|
6222
|
-
session.agent_data = {"name": name}
|
|
6235
|
+
session.agent_data = {"name": name} # type: ignore
|
|
6223
6236
|
|
|
6224
6237
|
# -*- Save to storage
|
|
6225
6238
|
if self._has_async_db():
|
|
@@ -6473,7 +6486,7 @@ class Agent:
|
|
|
6473
6486
|
raise Exception("Session not found")
|
|
6474
6487
|
|
|
6475
6488
|
# Only filter by agent_id if this is part of a team
|
|
6476
|
-
return session.get_messages_from_last_n_runs(
|
|
6489
|
+
return session.get_messages_from_last_n_runs( # type: ignore
|
|
6477
6490
|
agent_id=self.id if self.team_id is not None else None,
|
|
6478
6491
|
)
|
|
6479
6492
|
|
|
@@ -6496,7 +6509,7 @@ class Agent:
|
|
|
6496
6509
|
raise Exception("Session not found")
|
|
6497
6510
|
|
|
6498
6511
|
# Only filter by agent_id if this is part of a team
|
|
6499
|
-
return session.get_messages_from_last_n_runs(
|
|
6512
|
+
return session.get_messages_from_last_n_runs( # type: ignore
|
|
6500
6513
|
agent_id=self.id if self.team_id is not None else None,
|
|
6501
6514
|
)
|
|
6502
6515
|
|
|
@@ -6517,7 +6530,7 @@ class Agent:
|
|
|
6517
6530
|
if session is None:
|
|
6518
6531
|
raise Exception(f"Session {session_id} not found")
|
|
6519
6532
|
|
|
6520
|
-
return session.get_session_summary()
|
|
6533
|
+
return session.get_session_summary() # type: ignore
|
|
6521
6534
|
|
|
6522
6535
|
async def aget_session_summary(self, session_id: Optional[str] = None) -> Optional[SessionSummary]:
|
|
6523
6536
|
"""Get the session summary for the given session ID and user ID.
|
|
@@ -6536,7 +6549,7 @@ class Agent:
|
|
|
6536
6549
|
if session is None:
|
|
6537
6550
|
raise Exception(f"Session {session_id} not found")
|
|
6538
6551
|
|
|
6539
|
-
return session.get_session_summary()
|
|
6552
|
+
return session.get_session_summary() # type: ignore
|
|
6540
6553
|
|
|
6541
6554
|
def get_user_memories(self, user_id: Optional[str] = None) -> Optional[List[UserMemory]]:
|
|
6542
6555
|
"""Get the user memories for the given user ID.
|
|
@@ -7358,7 +7371,7 @@ class Agent:
|
|
|
7358
7371
|
videos: Optional[Sequence[Video]] = None,
|
|
7359
7372
|
files: Optional[Sequence[File]] = None,
|
|
7360
7373
|
add_dependencies_to_context: Optional[bool] = None,
|
|
7361
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
7374
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
7362
7375
|
**kwargs: Any,
|
|
7363
7376
|
) -> Optional[Message]:
|
|
7364
7377
|
"""Return the user message for the Agent.
|
|
@@ -7373,7 +7386,6 @@ class Agent:
|
|
|
7373
7386
|
dependencies = run_context.dependencies or dependencies
|
|
7374
7387
|
metadata = run_context.metadata or metadata
|
|
7375
7388
|
knowledge_filters = run_context.knowledge_filters or knowledge_filters
|
|
7376
|
-
|
|
7377
7389
|
# Get references from the knowledge base to use in the user message
|
|
7378
7390
|
references = None
|
|
7379
7391
|
|
|
@@ -7734,7 +7746,7 @@ class Agent:
|
|
|
7734
7746
|
images: Optional[Sequence[Image]] = None,
|
|
7735
7747
|
videos: Optional[Sequence[Video]] = None,
|
|
7736
7748
|
files: Optional[Sequence[File]] = None,
|
|
7737
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
7749
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
7738
7750
|
add_history_to_context: Optional[bool] = None,
|
|
7739
7751
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
7740
7752
|
add_dependencies_to_context: Optional[bool] = None,
|
|
@@ -8029,7 +8041,7 @@ class Agent:
|
|
|
8029
8041
|
self,
|
|
8030
8042
|
query: str,
|
|
8031
8043
|
num_documents: Optional[int] = None,
|
|
8032
|
-
filters: Optional[Dict[str, Any]] = None,
|
|
8044
|
+
filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
8033
8045
|
**kwargs,
|
|
8034
8046
|
) -> Optional[List[Union[Dict[str, Any], str]]]:
|
|
8035
8047
|
"""Get relevant docs from the knowledge base to answer a query.
|
|
@@ -8062,6 +8074,10 @@ class Agent:
|
|
|
8062
8074
|
if not filters:
|
|
8063
8075
|
log_warning("No valid filters remain after validation. Search will proceed without filters.")
|
|
8064
8076
|
|
|
8077
|
+
if invalid_keys == [] and valid_filters == {}:
|
|
8078
|
+
log_warning("No valid filters provided. Search will proceed without filters.")
|
|
8079
|
+
filters = None
|
|
8080
|
+
|
|
8065
8081
|
if self.knowledge_retriever is not None and callable(self.knowledge_retriever):
|
|
8066
8082
|
from inspect import signature
|
|
8067
8083
|
|
|
@@ -8108,7 +8124,7 @@ class Agent:
|
|
|
8108
8124
|
self,
|
|
8109
8125
|
query: str,
|
|
8110
8126
|
num_documents: Optional[int] = None,
|
|
8111
|
-
filters: Optional[Dict[str, Any]] = None,
|
|
8127
|
+
filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
8112
8128
|
**kwargs,
|
|
8113
8129
|
) -> Optional[List[Union[Dict[str, Any], str]]]:
|
|
8114
8130
|
"""Get relevant documents from knowledge base asynchronously."""
|
|
@@ -8131,6 +8147,10 @@ class Agent:
|
|
|
8131
8147
|
if not filters:
|
|
8132
8148
|
log_warning("No valid filters remain after validation. Search will proceed without filters.")
|
|
8133
8149
|
|
|
8150
|
+
if invalid_keys == [] and valid_filters == {}:
|
|
8151
|
+
log_warning("No valid filters provided. Search will proceed without filters.")
|
|
8152
|
+
filters = None
|
|
8153
|
+
|
|
8134
8154
|
if self.knowledge_retriever is not None and callable(self.knowledge_retriever):
|
|
8135
8155
|
from inspect import isawaitable, signature
|
|
8136
8156
|
|
|
@@ -9452,7 +9472,7 @@ class Agent:
|
|
|
9452
9472
|
def _get_search_knowledge_base_function(
|
|
9453
9473
|
self,
|
|
9454
9474
|
run_response: RunOutput,
|
|
9455
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
9475
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
9456
9476
|
async_mode: bool = False,
|
|
9457
9477
|
) -> Function:
|
|
9458
9478
|
"""Factory function to create a search_knowledge_base function with filters."""
|
|
@@ -9528,7 +9548,7 @@ class Agent:
|
|
|
9528
9548
|
def _search_knowledge_base_with_agentic_filters_function(
|
|
9529
9549
|
self,
|
|
9530
9550
|
run_response: RunOutput,
|
|
9531
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
9551
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
9532
9552
|
async_mode: bool = False,
|
|
9533
9553
|
) -> Function:
|
|
9534
9554
|
"""Factory function to create a search_knowledge_base function with filters."""
|
|
@@ -9798,7 +9818,7 @@ class Agent:
|
|
|
9798
9818
|
stream_events: Optional[bool] = None,
|
|
9799
9819
|
stream_intermediate_steps: Optional[bool] = None,
|
|
9800
9820
|
markdown: Optional[bool] = None,
|
|
9801
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
9821
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
9802
9822
|
add_history_to_context: Optional[bool] = None,
|
|
9803
9823
|
add_dependencies_to_context: Optional[bool] = None,
|
|
9804
9824
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
@@ -9912,7 +9932,7 @@ class Agent:
|
|
|
9912
9932
|
stream_events: Optional[bool] = None,
|
|
9913
9933
|
stream_intermediate_steps: Optional[bool] = None,
|
|
9914
9934
|
markdown: Optional[bool] = None,
|
|
9915
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
9935
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
|
|
9916
9936
|
add_history_to_context: Optional[bool] = None,
|
|
9917
9937
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
9918
9938
|
add_dependencies_to_context: Optional[bool] = None,
|
|
@@ -10093,7 +10113,9 @@ class Agent:
|
|
|
10093
10113
|
|
|
10094
10114
|
return None
|
|
10095
10115
|
|
|
10096
|
-
def _get_effective_filters(
|
|
10116
|
+
def _get_effective_filters(
|
|
10117
|
+
self, knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None
|
|
10118
|
+
) -> Optional[Any]:
|
|
10097
10119
|
"""
|
|
10098
10120
|
Determine which knowledge filters to use, with priority to run-level filters.
|
|
10099
10121
|
|
|
@@ -10112,8 +10134,13 @@ class Agent:
|
|
|
10112
10134
|
# If run has filters, they override agent filters
|
|
10113
10135
|
if knowledge_filters:
|
|
10114
10136
|
if effective_filters:
|
|
10115
|
-
|
|
10116
|
-
|
|
10137
|
+
if isinstance(knowledge_filters, dict):
|
|
10138
|
+
if isinstance(effective_filters, dict):
|
|
10139
|
+
effective_filters.update(knowledge_filters)
|
|
10140
|
+
else:
|
|
10141
|
+
effective_filters = knowledge_filters
|
|
10142
|
+
elif isinstance(knowledge_filters, list):
|
|
10143
|
+
effective_filters = [*effective_filters, *knowledge_filters]
|
|
10117
10144
|
else:
|
|
10118
10145
|
effective_filters = knowledge_filters
|
|
10119
10146
|
|
agno/db/dynamo/utils.py
CHANGED
|
@@ -343,7 +343,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
343
343
|
]
|
|
344
344
|
all_user_ids = set()
|
|
345
345
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
346
|
-
sessions = sessions_data.get(session_type, [])
|
|
346
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
347
347
|
metrics[sessions_count_key] = len(sessions)
|
|
348
348
|
for session in sessions:
|
|
349
349
|
if session.get("user_id"):
|
agno/db/firestore/utils.py
CHANGED
|
@@ -194,7 +194,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
194
194
|
all_user_ids = set()
|
|
195
195
|
|
|
196
196
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
197
|
-
sessions = sessions_data.get(session_type, [])
|
|
197
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
198
198
|
metrics[sessions_count_key] = len(sessions)
|
|
199
199
|
|
|
200
200
|
for session in sessions:
|
agno/db/gcs_json/utils.py
CHANGED
|
@@ -78,7 +78,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
78
78
|
all_user_ids = set()
|
|
79
79
|
|
|
80
80
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
81
|
-
sessions = sessions_data.get(session_type, [])
|
|
81
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
82
82
|
metrics[sessions_count_key] = len(sessions)
|
|
83
83
|
|
|
84
84
|
for session in sessions:
|
agno/db/in_memory/utils.py
CHANGED
|
@@ -78,7 +78,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
78
78
|
all_user_ids = set()
|
|
79
79
|
|
|
80
80
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
81
|
-
sessions = sessions_data.get(session_type, [])
|
|
81
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
82
82
|
metrics[sessions_count_key] = len(sessions)
|
|
83
83
|
|
|
84
84
|
for session in sessions:
|
agno/db/json/utils.py
CHANGED
|
@@ -78,7 +78,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
78
78
|
all_user_ids = set()
|
|
79
79
|
|
|
80
80
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
81
|
-
sessions = sessions_data.get(session_type, [])
|
|
81
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
82
82
|
metrics[sessions_count_key] = len(sessions)
|
|
83
83
|
|
|
84
84
|
for session in sessions:
|
agno/db/mongo/utils.py
CHANGED
|
@@ -89,14 +89,14 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
89
89
|
all_user_ids = set()
|
|
90
90
|
|
|
91
91
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
92
|
-
sessions = sessions_data.get(session_type, [])
|
|
92
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
93
93
|
metrics[sessions_count_key] = len(sessions)
|
|
94
94
|
|
|
95
95
|
for session in sessions:
|
|
96
96
|
if session.get("user_id"):
|
|
97
97
|
all_user_ids.add(session["user_id"])
|
|
98
|
-
runs = session.get("runs", [])
|
|
99
|
-
metrics[runs_count_key] += len(
|
|
98
|
+
runs = session.get("runs", [])
|
|
99
|
+
metrics[runs_count_key] += len(runs)
|
|
100
100
|
|
|
101
101
|
if runs := session.get("runs", []):
|
|
102
102
|
if isinstance(runs, str):
|
agno/db/mysql/mysql.py
CHANGED
|
@@ -134,7 +134,7 @@ class MySQLDb(BaseDb):
|
|
|
134
134
|
try:
|
|
135
135
|
table_schema = get_table_schema_definition(table_type)
|
|
136
136
|
|
|
137
|
-
log_debug(f"Creating table {
|
|
137
|
+
log_debug(f"Creating table {table_name}")
|
|
138
138
|
|
|
139
139
|
columns: List[Column] = []
|
|
140
140
|
indexes: List[str] = []
|
agno/db/mysql/utils.py
CHANGED
|
@@ -205,7 +205,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
205
205
|
all_user_ids = set()
|
|
206
206
|
|
|
207
207
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
208
|
-
sessions = sessions_data.get(session_type, [])
|
|
208
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
209
209
|
metrics[sessions_count_key] = len(sessions)
|
|
210
210
|
|
|
211
211
|
for session in sessions:
|
agno/db/postgres/utils.py
CHANGED
|
@@ -292,7 +292,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
292
292
|
all_user_ids = set()
|
|
293
293
|
|
|
294
294
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
295
|
-
sessions = sessions_data.get(session_type, [])
|
|
295
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
296
296
|
metrics[sessions_count_key] = len(sessions)
|
|
297
297
|
|
|
298
298
|
for session in sessions:
|
agno/db/redis/utils.py
CHANGED
|
@@ -200,7 +200,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
200
200
|
all_user_ids = set()
|
|
201
201
|
|
|
202
202
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
203
|
-
sessions = sessions_data.get(session_type, [])
|
|
203
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
204
204
|
metrics[sessions_count_key] = len(sessions)
|
|
205
205
|
|
|
206
206
|
for session in sessions:
|
|
@@ -197,7 +197,7 @@ class SingleStoreDb(BaseDb):
|
|
|
197
197
|
try:
|
|
198
198
|
table_schema = get_table_schema_definition(table_type)
|
|
199
199
|
|
|
200
|
-
log_debug(f"Creating table {table_ref}
|
|
200
|
+
log_debug(f"Creating table {table_ref}")
|
|
201
201
|
|
|
202
202
|
columns: List[Column] = []
|
|
203
203
|
indexes: List[str] = []
|
agno/db/singlestore/utils.py
CHANGED
|
@@ -234,7 +234,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
234
234
|
all_user_ids = set()
|
|
235
235
|
|
|
236
236
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
237
|
-
sessions = sessions_data.get(session_type, [])
|
|
237
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
238
238
|
metrics[sessions_count_key] = len(sessions)
|
|
239
239
|
|
|
240
240
|
for session in sessions:
|
agno/db/sqlite/async_sqlite.py
CHANGED
|
@@ -150,7 +150,7 @@ class AsyncSqliteDb(AsyncBaseDb):
|
|
|
150
150
|
"""
|
|
151
151
|
try:
|
|
152
152
|
table_schema = get_table_schema_definition(table_type)
|
|
153
|
-
log_debug(f"Creating table {table_name}
|
|
153
|
+
log_debug(f"Creating table {table_name}")
|
|
154
154
|
|
|
155
155
|
columns: List[Column] = []
|
|
156
156
|
indexes: List[str] = []
|
agno/db/sqlite/sqlite.py
CHANGED
|
@@ -151,7 +151,7 @@ class SqliteDb(BaseDb):
|
|
|
151
151
|
"""
|
|
152
152
|
try:
|
|
153
153
|
table_schema = get_table_schema_definition(table_type)
|
|
154
|
-
log_debug(f"Creating table {table_name}
|
|
154
|
+
log_debug(f"Creating table {table_name}")
|
|
155
155
|
|
|
156
156
|
columns: List[Column] = []
|
|
157
157
|
indexes: List[str] = []
|
agno/db/sqlite/utils.py
CHANGED
|
@@ -270,7 +270,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
|
|
|
270
270
|
all_user_ids = set()
|
|
271
271
|
|
|
272
272
|
for session_type, sessions_count_key, runs_count_key in session_types:
|
|
273
|
-
sessions = sessions_data.get(session_type, [])
|
|
273
|
+
sessions = sessions_data.get(session_type, []) or []
|
|
274
274
|
metrics[sessions_count_key] = len(sessions)
|
|
275
275
|
|
|
276
276
|
for session in sessions:
|