agno 2.2.6__py3-none-any.whl → 2.2.8__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 +430 -416
- agno/api/os.py +1 -1
- agno/culture/manager.py +9 -4
- agno/guardrails/prompt_injection.py +1 -0
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/knowledge.py +37 -5
- agno/models/base.py +62 -54
- agno/models/openai/chat.py +6 -5
- agno/models/openai/responses.py +1 -58
- agno/models/requesty/requesty.py +5 -2
- agno/os/app.py +13 -12
- agno/os/schema.py +11 -8
- agno/run/__init__.py +6 -0
- agno/run/base.py +18 -1
- agno/run/team.py +11 -9
- agno/team/team.py +258 -361
- agno/tools/exa.py +21 -16
- agno/tools/function.py +93 -16
- agno/tools/mcp/mcp.py +8 -1
- agno/tools/notion.py +14 -11
- agno/utils/agent.py +78 -0
- agno/utils/hooks.py +1 -1
- agno/utils/models/claude.py +25 -8
- agno/vectordb/redis/__init__.py +5 -0
- agno/vectordb/redis/redisdb.py +687 -0
- agno/workflow/agent.py +10 -9
- agno/workflow/step.py +13 -2
- agno/workflow/workflow.py +85 -53
- {agno-2.2.6.dist-info → agno-2.2.8.dist-info}/METADATA +7 -3
- {agno-2.2.6.dist-info → agno-2.2.8.dist-info}/RECORD +33 -30
- {agno-2.2.6.dist-info → agno-2.2.8.dist-info}/WHEEL +0 -0
- {agno-2.2.6.dist-info → agno-2.2.8.dist-info}/licenses/LICENSE +0 -0
- {agno-2.2.6.dist-info → agno-2.2.8.dist-info}/top_level.txt +0 -0
agno/team/team.py
CHANGED
|
@@ -47,8 +47,8 @@ from agno.models.metrics import Metrics
|
|
|
47
47
|
from agno.models.response import ModelResponse, ModelResponseEvent
|
|
48
48
|
from agno.models.utils import get_model
|
|
49
49
|
from agno.reasoning.step import NextAction, ReasoningStep, ReasoningSteps
|
|
50
|
+
from agno.run import RunContext, RunStatus
|
|
50
51
|
from agno.run.agent import RunEvent, RunOutput, RunOutputEvent
|
|
51
|
-
from agno.run.base import RunStatus
|
|
52
52
|
from agno.run.cancel import (
|
|
53
53
|
cancel_run as cancel_run_global,
|
|
54
54
|
)
|
|
@@ -88,7 +88,9 @@ from agno.utils.agent import (
|
|
|
88
88
|
scrub_media_from_run_output,
|
|
89
89
|
scrub_tool_results_from_run_output,
|
|
90
90
|
set_session_name_util,
|
|
91
|
+
store_media_util,
|
|
91
92
|
update_session_state_util,
|
|
93
|
+
validate_media_object_id,
|
|
92
94
|
wait_for_background_tasks,
|
|
93
95
|
wait_for_background_tasks_stream,
|
|
94
96
|
)
|
|
@@ -336,9 +338,9 @@ class Team:
|
|
|
336
338
|
|
|
337
339
|
# --- Team Hooks ---
|
|
338
340
|
# Functions called right after team session is loaded, before processing starts
|
|
339
|
-
pre_hooks: Optional[Union[
|
|
341
|
+
pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
|
|
340
342
|
# Functions called after output is generated but before the response is returned
|
|
341
|
-
post_hooks: Optional[Union[
|
|
343
|
+
post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
|
|
342
344
|
|
|
343
345
|
# --- Structured output ---
|
|
344
346
|
# Input schema for validating input
|
|
@@ -495,8 +497,8 @@ class Team:
|
|
|
495
497
|
tool_call_limit: Optional[int] = None,
|
|
496
498
|
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
497
499
|
tool_hooks: Optional[List[Callable]] = None,
|
|
498
|
-
pre_hooks: Optional[Union[
|
|
499
|
-
post_hooks: Optional[Union[
|
|
500
|
+
pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
|
|
501
|
+
post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
|
|
500
502
|
input_schema: Optional[Type[BaseModel]] = None,
|
|
501
503
|
output_schema: Optional[Type[BaseModel]] = None,
|
|
502
504
|
parser_model: Optional[Union[Model, str]] = None,
|
|
@@ -990,9 +992,7 @@ class Team:
|
|
|
990
992
|
run_response: TeamRunOutput,
|
|
991
993
|
run_input: TeamRunInput,
|
|
992
994
|
session: TeamSession,
|
|
993
|
-
|
|
994
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
995
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
995
|
+
run_context: RunContext,
|
|
996
996
|
user_id: Optional[str] = None,
|
|
997
997
|
debug_mode: Optional[bool] = None,
|
|
998
998
|
**kwargs: Any,
|
|
@@ -1004,12 +1004,13 @@ class Team:
|
|
|
1004
1004
|
# Prepare all possible arguments once
|
|
1005
1005
|
all_args = {
|
|
1006
1006
|
"run_input": run_input,
|
|
1007
|
+
"run_context": run_context,
|
|
1007
1008
|
"team": self,
|
|
1008
1009
|
"session": session,
|
|
1009
1010
|
"user_id": user_id,
|
|
1010
|
-
"metadata": metadata,
|
|
1011
|
-
"session_state": session_state,
|
|
1012
|
-
"dependencies": dependencies,
|
|
1011
|
+
"metadata": run_context.metadata,
|
|
1012
|
+
"session_state": run_context.session_state,
|
|
1013
|
+
"dependencies": run_context.dependencies,
|
|
1013
1014
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1014
1015
|
}
|
|
1015
1016
|
all_args.update(kwargs)
|
|
@@ -1056,9 +1057,7 @@ class Team:
|
|
|
1056
1057
|
run_response: TeamRunOutput,
|
|
1057
1058
|
run_input: TeamRunInput,
|
|
1058
1059
|
session: TeamSession,
|
|
1059
|
-
|
|
1060
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1061
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1060
|
+
run_context: RunContext,
|
|
1062
1061
|
user_id: Optional[str] = None,
|
|
1063
1062
|
debug_mode: Optional[bool] = None,
|
|
1064
1063
|
**kwargs: Any,
|
|
@@ -1070,12 +1069,13 @@ class Team:
|
|
|
1070
1069
|
# Prepare all possible arguments once
|
|
1071
1070
|
all_args = {
|
|
1072
1071
|
"run_input": run_input,
|
|
1072
|
+
"run_context": run_context,
|
|
1073
1073
|
"team": self,
|
|
1074
1074
|
"session": session,
|
|
1075
1075
|
"user_id": user_id,
|
|
1076
|
-
"session_state": session_state,
|
|
1077
|
-
"dependencies": dependencies,
|
|
1078
|
-
"metadata": metadata,
|
|
1076
|
+
"session_state": run_context.session_state,
|
|
1077
|
+
"dependencies": run_context.dependencies,
|
|
1078
|
+
"metadata": run_context.metadata,
|
|
1079
1079
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1080
1080
|
}
|
|
1081
1081
|
all_args.update(kwargs)
|
|
@@ -1127,9 +1127,7 @@ class Team:
|
|
|
1127
1127
|
hooks: Optional[List[Callable[..., Any]]],
|
|
1128
1128
|
run_output: TeamRunOutput,
|
|
1129
1129
|
session: TeamSession,
|
|
1130
|
-
|
|
1131
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1132
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1130
|
+
run_context: RunContext,
|
|
1133
1131
|
user_id: Optional[str] = None,
|
|
1134
1132
|
debug_mode: Optional[bool] = None,
|
|
1135
1133
|
**kwargs: Any,
|
|
@@ -1141,12 +1139,13 @@ class Team:
|
|
|
1141
1139
|
# Prepare all possible arguments once
|
|
1142
1140
|
all_args = {
|
|
1143
1141
|
"run_output": run_output,
|
|
1142
|
+
"run_context": run_context,
|
|
1144
1143
|
"team": self,
|
|
1145
1144
|
"session": session,
|
|
1146
1145
|
"user_id": user_id,
|
|
1147
|
-
"session_state": session_state,
|
|
1148
|
-
"dependencies": dependencies,
|
|
1149
|
-
"metadata": metadata,
|
|
1146
|
+
"session_state": run_context.session_state,
|
|
1147
|
+
"dependencies": run_context.dependencies,
|
|
1148
|
+
"metadata": run_context.metadata,
|
|
1150
1149
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1151
1150
|
}
|
|
1152
1151
|
all_args.update(kwargs)
|
|
@@ -1188,10 +1187,8 @@ class Team:
|
|
|
1188
1187
|
hooks: Optional[List[Callable[..., Any]]],
|
|
1189
1188
|
run_output: TeamRunOutput,
|
|
1190
1189
|
session: TeamSession,
|
|
1190
|
+
run_context: RunContext,
|
|
1191
1191
|
user_id: Optional[str] = None,
|
|
1192
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
1193
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1194
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1195
1192
|
debug_mode: Optional[bool] = None,
|
|
1196
1193
|
**kwargs: Any,
|
|
1197
1194
|
) -> AsyncIterator[TeamRunOutputEvent]:
|
|
@@ -1202,12 +1199,13 @@ class Team:
|
|
|
1202
1199
|
# Prepare all possible arguments once
|
|
1203
1200
|
all_args = {
|
|
1204
1201
|
"run_output": run_output,
|
|
1202
|
+
"run_context": run_context,
|
|
1205
1203
|
"team": self,
|
|
1206
1204
|
"session": session,
|
|
1207
1205
|
"user_id": user_id,
|
|
1208
|
-
"session_state": session_state,
|
|
1209
|
-
"dependencies": dependencies,
|
|
1210
|
-
"metadata": metadata,
|
|
1206
|
+
"session_state": run_context.session_state,
|
|
1207
|
+
"dependencies": run_context.dependencies,
|
|
1208
|
+
"metadata": run_context.metadata,
|
|
1211
1209
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1212
1210
|
}
|
|
1213
1211
|
all_args.update(kwargs)
|
|
@@ -1252,15 +1250,12 @@ class Team:
|
|
|
1252
1250
|
self,
|
|
1253
1251
|
run_response: TeamRunOutput,
|
|
1254
1252
|
session: TeamSession,
|
|
1255
|
-
|
|
1253
|
+
run_context: RunContext,
|
|
1256
1254
|
user_id: Optional[str] = None,
|
|
1257
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1258
1255
|
add_history_to_context: Optional[bool] = None,
|
|
1259
1256
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1260
1257
|
add_session_state_to_context: Optional[bool] = None,
|
|
1261
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1262
1258
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1263
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1264
1259
|
debug_mode: Optional[bool] = None,
|
|
1265
1260
|
**kwargs: Any,
|
|
1266
1261
|
) -> TeamRunOutput:
|
|
@@ -1294,10 +1289,8 @@ class Team:
|
|
|
1294
1289
|
hooks=self.pre_hooks, # type: ignore
|
|
1295
1290
|
run_response=run_response,
|
|
1296
1291
|
run_input=run_input,
|
|
1292
|
+
run_context=run_context,
|
|
1297
1293
|
session=session,
|
|
1298
|
-
session_state=session_state,
|
|
1299
|
-
dependencies=dependencies,
|
|
1300
|
-
metadata=metadata,
|
|
1301
1294
|
user_id=user_id,
|
|
1302
1295
|
debug_mode=debug_mode,
|
|
1303
1296
|
**kwargs,
|
|
@@ -1312,12 +1305,11 @@ class Team:
|
|
|
1312
1305
|
_tools = self._determine_tools_for_model(
|
|
1313
1306
|
model=self.model,
|
|
1314
1307
|
run_response=run_response,
|
|
1308
|
+
run_context=run_context,
|
|
1315
1309
|
team_run_context=team_run_context,
|
|
1316
1310
|
session=session,
|
|
1317
|
-
session_state=session_state,
|
|
1318
1311
|
user_id=user_id,
|
|
1319
1312
|
async_mode=False,
|
|
1320
|
-
knowledge_filters=knowledge_filters,
|
|
1321
1313
|
input_message=run_input.input_content,
|
|
1322
1314
|
images=run_input.images,
|
|
1323
1315
|
videos=run_input.videos,
|
|
@@ -1326,28 +1318,23 @@ class Team:
|
|
|
1326
1318
|
debug_mode=debug_mode,
|
|
1327
1319
|
add_history_to_context=add_history_to_context,
|
|
1328
1320
|
add_session_state_to_context=add_session_state_to_context,
|
|
1329
|
-
dependencies=dependencies,
|
|
1330
1321
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1331
|
-
metadata=metadata,
|
|
1332
1322
|
)
|
|
1333
1323
|
|
|
1334
1324
|
# 3. Prepare run messages
|
|
1335
1325
|
run_messages: RunMessages = self._get_run_messages(
|
|
1336
1326
|
run_response=run_response,
|
|
1337
1327
|
session=session,
|
|
1338
|
-
|
|
1328
|
+
run_context=run_context,
|
|
1339
1329
|
user_id=user_id,
|
|
1340
1330
|
input_message=run_input.input_content,
|
|
1341
1331
|
audio=run_input.audios,
|
|
1342
1332
|
images=run_input.images,
|
|
1343
1333
|
videos=run_input.videos,
|
|
1344
1334
|
files=run_input.files,
|
|
1345
|
-
knowledge_filters=knowledge_filters,
|
|
1346
1335
|
add_history_to_context=add_history_to_context,
|
|
1347
|
-
dependencies=dependencies,
|
|
1348
1336
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1349
1337
|
add_session_state_to_context=add_session_state_to_context,
|
|
1350
|
-
metadata=metadata,
|
|
1351
1338
|
tools=_tools,
|
|
1352
1339
|
**kwargs,
|
|
1353
1340
|
)
|
|
@@ -1400,7 +1387,7 @@ class Team:
|
|
|
1400
1387
|
|
|
1401
1388
|
# 8. Store media if enabled
|
|
1402
1389
|
if self.store_media:
|
|
1403
|
-
|
|
1390
|
+
store_media_util(run_response, model_response)
|
|
1404
1391
|
|
|
1405
1392
|
# 9. Convert response to structured format
|
|
1406
1393
|
self._convert_response_to_structured_format(run_response=run_response)
|
|
@@ -1410,10 +1397,8 @@ class Team:
|
|
|
1410
1397
|
iterator = self._execute_post_hooks(
|
|
1411
1398
|
hooks=self.post_hooks, # type: ignore
|
|
1412
1399
|
run_output=run_response,
|
|
1400
|
+
run_context=run_context,
|
|
1413
1401
|
session=session,
|
|
1414
|
-
session_state=session_state,
|
|
1415
|
-
dependencies=dependencies,
|
|
1416
|
-
metadata=metadata,
|
|
1417
1402
|
user_id=user_id,
|
|
1418
1403
|
debug_mode=debug_mode,
|
|
1419
1404
|
**kwargs,
|
|
@@ -1465,15 +1450,12 @@ class Team:
|
|
|
1465
1450
|
def _run_stream(
|
|
1466
1451
|
self,
|
|
1467
1452
|
run_response: TeamRunOutput,
|
|
1453
|
+
run_context: RunContext,
|
|
1468
1454
|
session: TeamSession,
|
|
1469
|
-
session_state: Dict[str, Any],
|
|
1470
1455
|
user_id: Optional[str] = None,
|
|
1471
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1472
1456
|
add_history_to_context: Optional[bool] = None,
|
|
1473
1457
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1474
1458
|
add_session_state_to_context: Optional[bool] = None,
|
|
1475
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1476
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1477
1459
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1478
1460
|
stream_events: bool = False,
|
|
1479
1461
|
yield_run_response: bool = False,
|
|
@@ -1505,11 +1487,9 @@ class Team:
|
|
|
1505
1487
|
pre_hook_iterator = self._execute_pre_hooks(
|
|
1506
1488
|
hooks=self.pre_hooks, # type: ignore
|
|
1507
1489
|
run_response=run_response,
|
|
1490
|
+
run_context=run_context,
|
|
1508
1491
|
run_input=run_input,
|
|
1509
1492
|
session=session,
|
|
1510
|
-
session_state=session_state,
|
|
1511
|
-
dependencies=dependencies,
|
|
1512
|
-
metadata=metadata,
|
|
1513
1493
|
user_id=user_id,
|
|
1514
1494
|
debug_mode=debug_mode,
|
|
1515
1495
|
**kwargs,
|
|
@@ -1524,12 +1504,11 @@ class Team:
|
|
|
1524
1504
|
_tools = self._determine_tools_for_model(
|
|
1525
1505
|
model=self.model,
|
|
1526
1506
|
run_response=run_response,
|
|
1507
|
+
run_context=run_context,
|
|
1527
1508
|
team_run_context=team_run_context,
|
|
1528
1509
|
session=session,
|
|
1529
|
-
session_state=session_state,
|
|
1530
1510
|
user_id=user_id,
|
|
1531
1511
|
async_mode=False,
|
|
1532
|
-
knowledge_filters=knowledge_filters,
|
|
1533
1512
|
input_message=run_input.input_content,
|
|
1534
1513
|
images=run_input.images,
|
|
1535
1514
|
videos=run_input.videos,
|
|
@@ -1538,28 +1517,23 @@ class Team:
|
|
|
1538
1517
|
debug_mode=debug_mode,
|
|
1539
1518
|
add_history_to_context=add_history_to_context,
|
|
1540
1519
|
add_session_state_to_context=add_session_state_to_context,
|
|
1541
|
-
dependencies=dependencies,
|
|
1542
1520
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1543
|
-
metadata=metadata,
|
|
1544
1521
|
)
|
|
1545
1522
|
|
|
1546
1523
|
# 3. Prepare run messages
|
|
1547
1524
|
run_messages: RunMessages = self._get_run_messages(
|
|
1548
1525
|
run_response=run_response,
|
|
1526
|
+
run_context=run_context,
|
|
1549
1527
|
session=session,
|
|
1550
|
-
session_state=session_state,
|
|
1551
1528
|
user_id=user_id,
|
|
1552
1529
|
input_message=run_input.input_content,
|
|
1553
1530
|
audio=run_input.audios,
|
|
1554
1531
|
images=run_input.images,
|
|
1555
1532
|
videos=run_input.videos,
|
|
1556
1533
|
files=run_input.files,
|
|
1557
|
-
knowledge_filters=knowledge_filters,
|
|
1558
1534
|
add_history_to_context=add_history_to_context,
|
|
1559
|
-
dependencies=dependencies,
|
|
1560
1535
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1561
1536
|
add_session_state_to_context=add_session_state_to_context,
|
|
1562
|
-
metadata=metadata,
|
|
1563
1537
|
tools=_tools,
|
|
1564
1538
|
**kwargs,
|
|
1565
1539
|
)
|
|
@@ -1607,7 +1581,7 @@ class Team:
|
|
|
1607
1581
|
tools=_tools,
|
|
1608
1582
|
response_format=response_format,
|
|
1609
1583
|
stream_events=stream_events,
|
|
1610
|
-
session_state=session_state,
|
|
1584
|
+
session_state=run_context.session_state,
|
|
1611
1585
|
):
|
|
1612
1586
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1613
1587
|
yield event
|
|
@@ -1619,7 +1593,7 @@ class Team:
|
|
|
1619
1593
|
tools=_tools,
|
|
1620
1594
|
response_format=response_format,
|
|
1621
1595
|
stream_events=stream_events,
|
|
1622
|
-
session_state=session_state,
|
|
1596
|
+
session_state=run_context.session_state,
|
|
1623
1597
|
):
|
|
1624
1598
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1625
1599
|
from agno.run.team import IntermediateRunContentEvent, RunContentEvent
|
|
@@ -1663,9 +1637,7 @@ class Team:
|
|
|
1663
1637
|
yield from self._execute_post_hooks(
|
|
1664
1638
|
hooks=self.post_hooks, # type: ignore
|
|
1665
1639
|
run_output=run_response,
|
|
1666
|
-
|
|
1667
|
-
dependencies=dependencies,
|
|
1668
|
-
metadata=metadata,
|
|
1640
|
+
run_context=run_context,
|
|
1669
1641
|
session=session,
|
|
1670
1642
|
user_id=user_id,
|
|
1671
1643
|
debug_mode=debug_mode,
|
|
@@ -1856,14 +1828,14 @@ class Team:
|
|
|
1856
1828
|
# Normalise hook & guardails
|
|
1857
1829
|
if not self._hooks_normalised:
|
|
1858
1830
|
if self.pre_hooks:
|
|
1859
|
-
self.pre_hooks = normalize_hooks(self.pre_hooks)
|
|
1831
|
+
self.pre_hooks = normalize_hooks(self.pre_hooks) # type: ignore
|
|
1860
1832
|
if self.post_hooks:
|
|
1861
|
-
self.post_hooks = normalize_hooks(self.post_hooks)
|
|
1833
|
+
self.post_hooks = normalize_hooks(self.post_hooks) # type: ignore
|
|
1862
1834
|
self._hooks_normalised = True
|
|
1863
1835
|
|
|
1864
1836
|
session_id, user_id = self._initialize_session(session_id=session_id, user_id=user_id)
|
|
1865
1837
|
|
|
1866
|
-
image_artifacts, video_artifacts, audio_artifacts, file_artifacts =
|
|
1838
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = validate_media_object_id(
|
|
1867
1839
|
images=images, videos=videos, audios=audio, files=files
|
|
1868
1840
|
)
|
|
1869
1841
|
|
|
@@ -1888,11 +1860,20 @@ class Team:
|
|
|
1888
1860
|
session_state = self._load_session_state(session=team_session, session_state=session_state)
|
|
1889
1861
|
|
|
1890
1862
|
# Determine runtime dependencies
|
|
1891
|
-
|
|
1863
|
+
dependencies = dependencies if dependencies is not None else self.dependencies
|
|
1864
|
+
|
|
1865
|
+
# Initialize run context
|
|
1866
|
+
run_context = RunContext(
|
|
1867
|
+
run_id=run_id,
|
|
1868
|
+
session_id=session_id,
|
|
1869
|
+
user_id=user_id,
|
|
1870
|
+
session_state=session_state,
|
|
1871
|
+
dependencies=dependencies,
|
|
1872
|
+
)
|
|
1892
1873
|
|
|
1893
1874
|
# Resolve callable dependencies if present
|
|
1894
|
-
if
|
|
1895
|
-
self._resolve_run_dependencies(
|
|
1875
|
+
if run_context.dependencies is not None:
|
|
1876
|
+
self._resolve_run_dependencies(run_context=run_context)
|
|
1896
1877
|
|
|
1897
1878
|
# Determine runtime context parameters
|
|
1898
1879
|
add_dependencies = (
|
|
@@ -1905,12 +1886,9 @@ class Team:
|
|
|
1905
1886
|
)
|
|
1906
1887
|
add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
|
|
1907
1888
|
|
|
1908
|
-
# Initialize Knowledge Filters
|
|
1909
|
-
effective_filters = knowledge_filters
|
|
1910
|
-
|
|
1911
1889
|
# When filters are passed manually
|
|
1912
1890
|
if self.knowledge_filters or knowledge_filters:
|
|
1913
|
-
|
|
1891
|
+
run_context.knowledge_filters = self._get_effective_filters(knowledge_filters)
|
|
1914
1892
|
|
|
1915
1893
|
# Use stream override value when necessary
|
|
1916
1894
|
if stream is None:
|
|
@@ -1941,14 +1919,18 @@ class Team:
|
|
|
1941
1919
|
else:
|
|
1942
1920
|
merge_dictionaries(metadata, self.metadata)
|
|
1943
1921
|
|
|
1922
|
+
if metadata:
|
|
1923
|
+
run_context.metadata = metadata
|
|
1924
|
+
|
|
1944
1925
|
# Create a new run_response for this attempt
|
|
1945
1926
|
run_response = TeamRunOutput(
|
|
1946
1927
|
run_id=run_id,
|
|
1947
1928
|
session_id=session_id,
|
|
1929
|
+
user_id=user_id,
|
|
1948
1930
|
team_id=self.id,
|
|
1949
1931
|
team_name=self.name,
|
|
1950
|
-
metadata=metadata,
|
|
1951
|
-
session_state=session_state,
|
|
1932
|
+
metadata=run_context.metadata,
|
|
1933
|
+
session_state=run_context.session_state,
|
|
1952
1934
|
input=run_input,
|
|
1953
1935
|
)
|
|
1954
1936
|
|
|
@@ -1974,15 +1956,12 @@ class Team:
|
|
|
1974
1956
|
if stream:
|
|
1975
1957
|
response_iterator = self._run_stream(
|
|
1976
1958
|
run_response=run_response,
|
|
1959
|
+
run_context=run_context,
|
|
1977
1960
|
session=team_session,
|
|
1978
|
-
session_state=session_state,
|
|
1979
1961
|
user_id=user_id,
|
|
1980
|
-
knowledge_filters=effective_filters,
|
|
1981
1962
|
add_history_to_context=add_history,
|
|
1982
1963
|
add_dependencies_to_context=add_dependencies,
|
|
1983
1964
|
add_session_state_to_context=add_session_state,
|
|
1984
|
-
metadata=metadata,
|
|
1985
|
-
dependencies=run_dependencies,
|
|
1986
1965
|
response_format=response_format,
|
|
1987
1966
|
stream_events=stream_events,
|
|
1988
1967
|
yield_run_response=yield_run_response,
|
|
@@ -1994,15 +1973,12 @@ class Team:
|
|
|
1994
1973
|
else:
|
|
1995
1974
|
return self._run(
|
|
1996
1975
|
run_response=run_response,
|
|
1976
|
+
run_context=run_context,
|
|
1997
1977
|
session=team_session,
|
|
1998
|
-
session_state=session_state,
|
|
1999
1978
|
user_id=user_id,
|
|
2000
|
-
knowledge_filters=effective_filters,
|
|
2001
1979
|
add_history_to_context=add_history,
|
|
2002
1980
|
add_dependencies_to_context=add_dependencies,
|
|
2003
1981
|
add_session_state_to_context=add_session_state,
|
|
2004
|
-
metadata=metadata,
|
|
2005
|
-
dependencies=run_dependencies,
|
|
2006
1982
|
response_format=response_format,
|
|
2007
1983
|
debug_mode=debug_mode,
|
|
2008
1984
|
**kwargs,
|
|
@@ -2054,17 +2030,14 @@ class Team:
|
|
|
2054
2030
|
async def _arun(
|
|
2055
2031
|
self,
|
|
2056
2032
|
run_response: TeamRunOutput,
|
|
2033
|
+
run_context: RunContext,
|
|
2057
2034
|
session_id: str,
|
|
2058
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
2059
2035
|
user_id: Optional[str] = None,
|
|
2060
2036
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2061
2037
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2062
2038
|
add_session_state_to_context: Optional[bool] = None,
|
|
2063
2039
|
add_history_to_context: Optional[bool] = None,
|
|
2064
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2065
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
2066
2040
|
debug_mode: Optional[bool] = None,
|
|
2067
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
2068
2041
|
**kwargs: Any,
|
|
2069
2042
|
) -> TeamRunOutput:
|
|
2070
2043
|
"""Run the Team and return the response.
|
|
@@ -2090,8 +2063,8 @@ class Team:
|
|
|
2090
2063
|
|
|
2091
2064
|
register_run(run_response.run_id) # type: ignore
|
|
2092
2065
|
|
|
2093
|
-
if dependencies is not None:
|
|
2094
|
-
await self._aresolve_run_dependencies(
|
|
2066
|
+
if run_context.dependencies is not None:
|
|
2067
|
+
await self._aresolve_run_dependencies(run_context=run_context)
|
|
2095
2068
|
|
|
2096
2069
|
# 1. Read or create session. Reads from the database if provided.
|
|
2097
2070
|
if self._has_async_db():
|
|
@@ -2102,11 +2075,17 @@ class Team:
|
|
|
2102
2075
|
# 2. Update metadata and session state
|
|
2103
2076
|
self._update_metadata(session=team_session)
|
|
2104
2077
|
# Initialize session state
|
|
2105
|
-
session_state = self._initialize_session_state(
|
|
2106
|
-
session_state=session_state or {},
|
|
2078
|
+
run_context.session_state = self._initialize_session_state(
|
|
2079
|
+
session_state=run_context.session_state or {},
|
|
2080
|
+
user_id=user_id,
|
|
2081
|
+
session_id=session_id,
|
|
2082
|
+
run_id=run_response.run_id,
|
|
2107
2083
|
)
|
|
2108
2084
|
# Update session state from DB
|
|
2109
|
-
session_state
|
|
2085
|
+
if run_context.session_state is not None:
|
|
2086
|
+
run_context.session_state = self._load_session_state(
|
|
2087
|
+
session=team_session, session_state=run_context.session_state
|
|
2088
|
+
)
|
|
2110
2089
|
|
|
2111
2090
|
run_input = cast(TeamRunInput, run_response.input)
|
|
2112
2091
|
|
|
@@ -2115,13 +2094,11 @@ class Team:
|
|
|
2115
2094
|
pre_hook_iterator = self._aexecute_pre_hooks(
|
|
2116
2095
|
hooks=self.pre_hooks, # type: ignore
|
|
2117
2096
|
run_response=run_response,
|
|
2097
|
+
run_context=run_context,
|
|
2118
2098
|
run_input=run_input,
|
|
2119
2099
|
session=team_session,
|
|
2120
2100
|
user_id=user_id,
|
|
2121
2101
|
debug_mode=debug_mode,
|
|
2122
|
-
session_state=session_state,
|
|
2123
|
-
dependencies=dependencies,
|
|
2124
|
-
metadata=metadata,
|
|
2125
2102
|
**kwargs,
|
|
2126
2103
|
)
|
|
2127
2104
|
|
|
@@ -2136,12 +2113,11 @@ class Team:
|
|
|
2136
2113
|
_tools = self._determine_tools_for_model(
|
|
2137
2114
|
model=self.model,
|
|
2138
2115
|
run_response=run_response,
|
|
2116
|
+
run_context=run_context,
|
|
2139
2117
|
team_run_context=team_run_context,
|
|
2140
2118
|
session=team_session,
|
|
2141
|
-
session_state=session_state,
|
|
2142
2119
|
user_id=user_id,
|
|
2143
2120
|
async_mode=True,
|
|
2144
|
-
knowledge_filters=knowledge_filters,
|
|
2145
2121
|
input_message=run_input.input_content,
|
|
2146
2122
|
images=run_input.images,
|
|
2147
2123
|
videos=run_input.videos,
|
|
@@ -2151,27 +2127,22 @@ class Team:
|
|
|
2151
2127
|
add_history_to_context=add_history_to_context,
|
|
2152
2128
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2153
2129
|
add_session_state_to_context=add_session_state_to_context,
|
|
2154
|
-
dependencies=dependencies,
|
|
2155
|
-
metadata=metadata,
|
|
2156
2130
|
)
|
|
2157
2131
|
|
|
2158
2132
|
# 5. Prepare run messages
|
|
2159
2133
|
run_messages = await self._aget_run_messages(
|
|
2160
2134
|
run_response=run_response,
|
|
2135
|
+
run_context=run_context,
|
|
2161
2136
|
session=team_session, # type: ignore
|
|
2162
|
-
session_state=session_state,
|
|
2163
2137
|
user_id=user_id,
|
|
2164
2138
|
input_message=run_input.input_content,
|
|
2165
2139
|
audio=run_input.audios,
|
|
2166
2140
|
images=run_input.images,
|
|
2167
2141
|
videos=run_input.videos,
|
|
2168
2142
|
files=run_input.files,
|
|
2169
|
-
knowledge_filters=knowledge_filters,
|
|
2170
2143
|
add_history_to_context=add_history_to_context,
|
|
2171
|
-
dependencies=dependencies,
|
|
2172
2144
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2173
2145
|
add_session_state_to_context=add_session_state_to_context,
|
|
2174
|
-
metadata=metadata,
|
|
2175
2146
|
tools=_tools,
|
|
2176
2147
|
**kwargs,
|
|
2177
2148
|
)
|
|
@@ -2204,6 +2175,7 @@ class Team:
|
|
|
2204
2175
|
tool_call_limit=self.tool_call_limit,
|
|
2205
2176
|
response_format=response_format,
|
|
2206
2177
|
send_media_to_model=self.send_media_to_model,
|
|
2178
|
+
run_response=run_response,
|
|
2207
2179
|
) # type: ignore
|
|
2208
2180
|
|
|
2209
2181
|
# Check for cancellation after model call
|
|
@@ -2222,7 +2194,7 @@ class Team:
|
|
|
2222
2194
|
|
|
2223
2195
|
# 10. Store media if enabled
|
|
2224
2196
|
if self.store_media:
|
|
2225
|
-
|
|
2197
|
+
store_media_util(run_response, model_response)
|
|
2226
2198
|
|
|
2227
2199
|
# 11. Convert response to structured format
|
|
2228
2200
|
self._convert_response_to_structured_format(run_response=run_response)
|
|
@@ -2232,10 +2204,8 @@ class Team:
|
|
|
2232
2204
|
async for _ in self._aexecute_post_hooks(
|
|
2233
2205
|
hooks=self.post_hooks, # type: ignore
|
|
2234
2206
|
run_output=run_response,
|
|
2207
|
+
run_context=run_context,
|
|
2235
2208
|
session=team_session,
|
|
2236
|
-
session_state=session_state,
|
|
2237
|
-
dependencies=dependencies,
|
|
2238
|
-
metadata=metadata,
|
|
2239
2209
|
user_id=user_id,
|
|
2240
2210
|
debug_mode=debug_mode,
|
|
2241
2211
|
**kwargs,
|
|
@@ -2294,8 +2264,8 @@ class Team:
|
|
|
2294
2264
|
async def _arun_stream(
|
|
2295
2265
|
self,
|
|
2296
2266
|
run_response: TeamRunOutput,
|
|
2267
|
+
run_context: RunContext,
|
|
2297
2268
|
session_id: str,
|
|
2298
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
2299
2269
|
user_id: Optional[str] = None,
|
|
2300
2270
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2301
2271
|
stream_events: bool = False,
|
|
@@ -2304,10 +2274,7 @@ class Team:
|
|
|
2304
2274
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2305
2275
|
add_session_state_to_context: Optional[bool] = None,
|
|
2306
2276
|
add_history_to_context: Optional[bool] = None,
|
|
2307
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2308
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
2309
2277
|
debug_mode: Optional[bool] = None,
|
|
2310
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
2311
2278
|
**kwargs: Any,
|
|
2312
2279
|
) -> AsyncIterator[Union[TeamRunOutputEvent, RunOutputEvent, TeamRunOutput]]:
|
|
2313
2280
|
"""Run the Team and return the response.
|
|
@@ -2329,8 +2296,8 @@ class Team:
|
|
|
2329
2296
|
"""
|
|
2330
2297
|
|
|
2331
2298
|
# 1. Resolve dependencies
|
|
2332
|
-
if dependencies is not None:
|
|
2333
|
-
await self._aresolve_run_dependencies(
|
|
2299
|
+
if run_context.dependencies is not None:
|
|
2300
|
+
await self._aresolve_run_dependencies(run_context=run_context)
|
|
2334
2301
|
|
|
2335
2302
|
# 2. Read or create session. Reads from the database if provided.
|
|
2336
2303
|
if self._has_async_db():
|
|
@@ -2341,11 +2308,17 @@ class Team:
|
|
|
2341
2308
|
# 3. Update metadata and session state
|
|
2342
2309
|
self._update_metadata(session=team_session)
|
|
2343
2310
|
# Initialize session state
|
|
2344
|
-
session_state = self._initialize_session_state(
|
|
2345
|
-
session_state=session_state or {},
|
|
2311
|
+
run_context.session_state = self._initialize_session_state(
|
|
2312
|
+
session_state=run_context.session_state or {},
|
|
2313
|
+
user_id=user_id,
|
|
2314
|
+
session_id=session_id,
|
|
2315
|
+
run_id=run_response.run_id,
|
|
2346
2316
|
)
|
|
2347
2317
|
# Update session state from DB
|
|
2348
|
-
session_state
|
|
2318
|
+
if run_context.session_state is not None:
|
|
2319
|
+
run_context.session_state = self._load_session_state(
|
|
2320
|
+
session=team_session, session_state=run_context.session_state
|
|
2321
|
+
) # type: ignore
|
|
2349
2322
|
|
|
2350
2323
|
# 4. Execute pre-hooks
|
|
2351
2324
|
run_input = cast(TeamRunInput, run_response.input)
|
|
@@ -2354,13 +2327,11 @@ class Team:
|
|
|
2354
2327
|
pre_hook_iterator = self._aexecute_pre_hooks(
|
|
2355
2328
|
hooks=self.pre_hooks, # type: ignore
|
|
2356
2329
|
run_response=run_response,
|
|
2330
|
+
run_context=run_context,
|
|
2357
2331
|
run_input=run_input,
|
|
2358
2332
|
session=team_session,
|
|
2359
2333
|
user_id=user_id,
|
|
2360
2334
|
debug_mode=debug_mode,
|
|
2361
|
-
session_state=session_state,
|
|
2362
|
-
dependencies=dependencies,
|
|
2363
|
-
metadata=metadata,
|
|
2364
2335
|
**kwargs,
|
|
2365
2336
|
)
|
|
2366
2337
|
async for pre_hook_event in pre_hook_iterator:
|
|
@@ -2373,12 +2344,11 @@ class Team:
|
|
|
2373
2344
|
_tools = self._determine_tools_for_model(
|
|
2374
2345
|
model=self.model,
|
|
2375
2346
|
run_response=run_response,
|
|
2347
|
+
run_context=run_context,
|
|
2376
2348
|
team_run_context=team_run_context,
|
|
2377
2349
|
session=team_session, # type: ignore
|
|
2378
|
-
session_state=session_state,
|
|
2379
2350
|
user_id=user_id,
|
|
2380
2351
|
async_mode=True,
|
|
2381
|
-
knowledge_filters=knowledge_filters,
|
|
2382
2352
|
input_message=run_input.input_content,
|
|
2383
2353
|
images=run_input.images,
|
|
2384
2354
|
videos=run_input.videos,
|
|
@@ -2386,27 +2356,22 @@ class Team:
|
|
|
2386
2356
|
files=run_input.files,
|
|
2387
2357
|
debug_mode=debug_mode,
|
|
2388
2358
|
add_history_to_context=add_history_to_context,
|
|
2389
|
-
dependencies=dependencies,
|
|
2390
|
-
metadata=metadata,
|
|
2391
2359
|
)
|
|
2392
2360
|
|
|
2393
2361
|
# 6. Prepare run messages
|
|
2394
2362
|
run_messages = await self._aget_run_messages(
|
|
2395
2363
|
run_response=run_response,
|
|
2364
|
+
run_context=run_context,
|
|
2396
2365
|
session=team_session, # type: ignore
|
|
2397
|
-
session_state=session_state,
|
|
2398
2366
|
user_id=user_id,
|
|
2399
2367
|
input_message=run_input.input_content,
|
|
2400
2368
|
audio=run_input.audios,
|
|
2401
2369
|
images=run_input.images,
|
|
2402
2370
|
videos=run_input.videos,
|
|
2403
2371
|
files=run_input.files,
|
|
2404
|
-
knowledge_filters=knowledge_filters,
|
|
2405
2372
|
add_history_to_context=add_history_to_context,
|
|
2406
|
-
dependencies=dependencies,
|
|
2407
2373
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2408
2374
|
add_session_state_to_context=add_session_state_to_context,
|
|
2409
|
-
metadata=metadata,
|
|
2410
2375
|
tools=_tools,
|
|
2411
2376
|
**kwargs,
|
|
2412
2377
|
)
|
|
@@ -2456,7 +2421,7 @@ class Team:
|
|
|
2456
2421
|
tools=_tools,
|
|
2457
2422
|
response_format=response_format,
|
|
2458
2423
|
stream_events=stream_events,
|
|
2459
|
-
session_state=session_state,
|
|
2424
|
+
session_state=run_context.session_state,
|
|
2460
2425
|
):
|
|
2461
2426
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
2462
2427
|
yield event
|
|
@@ -2468,7 +2433,7 @@ class Team:
|
|
|
2468
2433
|
tools=_tools,
|
|
2469
2434
|
response_format=response_format,
|
|
2470
2435
|
stream_events=stream_events,
|
|
2471
|
-
session_state=session_state,
|
|
2436
|
+
session_state=run_context.session_state,
|
|
2472
2437
|
):
|
|
2473
2438
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
2474
2439
|
from agno.run.team import IntermediateRunContentEvent, RunContentEvent
|
|
@@ -2514,9 +2479,7 @@ class Team:
|
|
|
2514
2479
|
async for event in self._aexecute_post_hooks(
|
|
2515
2480
|
hooks=self.post_hooks, # type: ignore
|
|
2516
2481
|
run_output=run_response,
|
|
2517
|
-
|
|
2518
|
-
dependencies=dependencies,
|
|
2519
|
-
metadata=metadata,
|
|
2482
|
+
run_context=run_context,
|
|
2520
2483
|
session=team_session,
|
|
2521
2484
|
user_id=user_id,
|
|
2522
2485
|
debug_mode=debug_mode,
|
|
@@ -2713,9 +2676,9 @@ class Team:
|
|
|
2713
2676
|
# Normalise hook & guardails
|
|
2714
2677
|
if not self._hooks_normalised:
|
|
2715
2678
|
if self.pre_hooks:
|
|
2716
|
-
self.pre_hooks = normalize_hooks(self.pre_hooks, async_mode=True)
|
|
2679
|
+
self.pre_hooks = normalize_hooks(self.pre_hooks, async_mode=True) # type: ignore
|
|
2717
2680
|
if self.post_hooks:
|
|
2718
|
-
self.post_hooks = normalize_hooks(self.post_hooks, async_mode=True)
|
|
2681
|
+
self.post_hooks = normalize_hooks(self.post_hooks, async_mode=True) # type: ignore
|
|
2719
2682
|
self._hooks_normalised = True
|
|
2720
2683
|
|
|
2721
2684
|
session_id, user_id = self._initialize_session(session_id=session_id, user_id=user_id)
|
|
@@ -2723,12 +2686,12 @@ class Team:
|
|
|
2723
2686
|
# Initialize Team
|
|
2724
2687
|
self.initialize_team(debug_mode=debug_mode)
|
|
2725
2688
|
|
|
2726
|
-
image_artifacts, video_artifacts, audio_artifacts, file_artifacts =
|
|
2689
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = validate_media_object_id(
|
|
2727
2690
|
images=images, videos=videos, audios=audio, files=files
|
|
2728
2691
|
)
|
|
2729
2692
|
|
|
2730
2693
|
# Resolve variables
|
|
2731
|
-
|
|
2694
|
+
dependencies = dependencies if dependencies is not None else self.dependencies
|
|
2732
2695
|
add_dependencies = (
|
|
2733
2696
|
add_dependencies_to_context if add_dependencies_to_context is not None else self.add_dependencies_to_context
|
|
2734
2697
|
)
|
|
@@ -2783,14 +2746,26 @@ class Team:
|
|
|
2783
2746
|
if self.knowledge_filters or knowledge_filters:
|
|
2784
2747
|
effective_filters = self._get_effective_filters(knowledge_filters)
|
|
2785
2748
|
|
|
2749
|
+
# Initialize run context
|
|
2750
|
+
run_context = RunContext(
|
|
2751
|
+
run_id=run_id,
|
|
2752
|
+
session_id=session_id,
|
|
2753
|
+
user_id=user_id,
|
|
2754
|
+
session_state=session_state,
|
|
2755
|
+
dependencies=dependencies,
|
|
2756
|
+
knowledge_filters=effective_filters,
|
|
2757
|
+
metadata=metadata,
|
|
2758
|
+
)
|
|
2759
|
+
|
|
2786
2760
|
# Create a new run_response for this attempt
|
|
2787
2761
|
run_response = TeamRunOutput(
|
|
2788
2762
|
run_id=run_id,
|
|
2763
|
+
user_id=user_id,
|
|
2789
2764
|
session_id=session_id,
|
|
2790
2765
|
team_id=self.id,
|
|
2791
2766
|
team_name=self.name,
|
|
2792
|
-
metadata=metadata,
|
|
2793
|
-
session_state=session_state,
|
|
2767
|
+
metadata=run_context.metadata,
|
|
2768
|
+
session_state=run_context.session_state,
|
|
2794
2769
|
input=run_input,
|
|
2795
2770
|
)
|
|
2796
2771
|
|
|
@@ -2815,16 +2790,13 @@ class Team:
|
|
|
2815
2790
|
response_iterator = self._arun_stream(
|
|
2816
2791
|
input=validated_input,
|
|
2817
2792
|
run_response=run_response,
|
|
2793
|
+
run_context=run_context,
|
|
2818
2794
|
session_id=session_id,
|
|
2819
|
-
session_state=session_state,
|
|
2820
2795
|
user_id=user_id,
|
|
2821
|
-
knowledge_filters=effective_filters,
|
|
2822
2796
|
add_history_to_context=add_history,
|
|
2823
2797
|
add_dependencies_to_context=add_dependencies,
|
|
2824
2798
|
add_session_state_to_context=add_session_state,
|
|
2825
|
-
metadata=metadata,
|
|
2826
2799
|
response_format=response_format,
|
|
2827
|
-
dependencies=run_dependencies,
|
|
2828
2800
|
stream_events=stream_events,
|
|
2829
2801
|
yield_run_response=yield_run_response,
|
|
2830
2802
|
debug_mode=debug_mode,
|
|
@@ -2835,17 +2807,14 @@ class Team:
|
|
|
2835
2807
|
return self._arun( # type: ignore
|
|
2836
2808
|
input=validated_input,
|
|
2837
2809
|
run_response=run_response,
|
|
2810
|
+
run_context=run_context,
|
|
2838
2811
|
session_id=session_id,
|
|
2839
|
-
session_state=session_state,
|
|
2840
2812
|
user_id=user_id,
|
|
2841
|
-
knowledge_filters=effective_filters,
|
|
2842
2813
|
add_history_to_context=add_history,
|
|
2843
2814
|
add_dependencies_to_context=add_dependencies,
|
|
2844
2815
|
add_session_state_to_context=add_session_state,
|
|
2845
|
-
metadata=metadata,
|
|
2846
2816
|
response_format=response_format,
|
|
2847
2817
|
debug_mode=debug_mode,
|
|
2848
|
-
dependencies=run_dependencies,
|
|
2849
2818
|
**kwargs,
|
|
2850
2819
|
)
|
|
2851
2820
|
|
|
@@ -2891,25 +2860,6 @@ class Team:
|
|
|
2891
2860
|
|
|
2892
2861
|
raise Exception(f"Failed after {num_attempts} attempts.")
|
|
2893
2862
|
|
|
2894
|
-
def _store_media(self, run_response: TeamRunOutput, model_response: ModelResponse):
|
|
2895
|
-
"""Store media from model response in run_response for persistence"""
|
|
2896
|
-
# Handle generated media fields from ModelResponse (generated media)
|
|
2897
|
-
if model_response.images is not None:
|
|
2898
|
-
for image in model_response.images:
|
|
2899
|
-
self._add_image(image, run_response) # Generated images go to run_response.images
|
|
2900
|
-
|
|
2901
|
-
if model_response.videos is not None:
|
|
2902
|
-
for video in model_response.videos:
|
|
2903
|
-
self._add_video(video, run_response) # Generated videos go to run_response.videos
|
|
2904
|
-
|
|
2905
|
-
if model_response.audios is not None:
|
|
2906
|
-
for audio in model_response.audios:
|
|
2907
|
-
self._add_audio(audio, run_response) # Generated audio go to run_response.audio
|
|
2908
|
-
|
|
2909
|
-
if model_response.files is not None:
|
|
2910
|
-
for file in model_response.files:
|
|
2911
|
-
self._add_file(file, run_response) # Generated files go to run_response.files
|
|
2912
|
-
|
|
2913
2863
|
def _update_run_response(
|
|
2914
2864
|
self, model_response: ModelResponse, run_response: TeamRunOutput, run_messages: RunMessages
|
|
2915
2865
|
):
|
|
@@ -3087,6 +3037,7 @@ class Team:
|
|
|
3087
3037
|
tool_call_limit=self.tool_call_limit,
|
|
3088
3038
|
stream_model_response=stream_model_response,
|
|
3089
3039
|
send_media_to_model=self.send_media_to_model,
|
|
3040
|
+
run_response=run_response,
|
|
3090
3041
|
) # type: ignore
|
|
3091
3042
|
async for model_response_event in model_stream:
|
|
3092
3043
|
for event in self._handle_model_response_chunk(
|
|
@@ -3272,7 +3223,9 @@ class Team:
|
|
|
3272
3223
|
|
|
3273
3224
|
if model_response_event.images is not None:
|
|
3274
3225
|
for image in model_response_event.images:
|
|
3275
|
-
|
|
3226
|
+
if run_response.images is None:
|
|
3227
|
+
run_response.images = []
|
|
3228
|
+
run_response.images.append(image)
|
|
3276
3229
|
|
|
3277
3230
|
should_yield = True
|
|
3278
3231
|
|
|
@@ -3342,15 +3295,27 @@ class Team:
|
|
|
3342
3295
|
|
|
3343
3296
|
if model_response_event.images is not None:
|
|
3344
3297
|
for image in model_response_event.images:
|
|
3345
|
-
|
|
3298
|
+
if run_response.images is None:
|
|
3299
|
+
run_response.images = []
|
|
3300
|
+
run_response.images.append(image)
|
|
3346
3301
|
|
|
3347
3302
|
if model_response_event.videos is not None:
|
|
3348
3303
|
for video in model_response_event.videos:
|
|
3349
|
-
|
|
3304
|
+
if run_response.videos is None:
|
|
3305
|
+
run_response.videos = []
|
|
3306
|
+
run_response.videos.append(video)
|
|
3350
3307
|
|
|
3351
3308
|
if model_response_event.audios is not None:
|
|
3352
3309
|
for audio in model_response_event.audios:
|
|
3353
|
-
|
|
3310
|
+
if run_response.audio is None:
|
|
3311
|
+
run_response.audio = []
|
|
3312
|
+
run_response.audio.append(audio)
|
|
3313
|
+
|
|
3314
|
+
if model_response_event.files is not None:
|
|
3315
|
+
for file_obj in model_response_event.files:
|
|
3316
|
+
if run_response.files is None:
|
|
3317
|
+
run_response.files = []
|
|
3318
|
+
run_response.files.append(file_obj)
|
|
3354
3319
|
|
|
3355
3320
|
reasoning_step: Optional[ReasoningStep] = None
|
|
3356
3321
|
tool_executions_list = model_response_event.tool_executions
|
|
@@ -4159,55 +4124,6 @@ class Team:
|
|
|
4159
4124
|
if isinstance(member_response, TeamRunOutput) and member_response.member_responses:
|
|
4160
4125
|
member._scrub_member_responses(member_response.member_responses) # type: ignore
|
|
4161
4126
|
|
|
4162
|
-
def _validate_media_object_id(
|
|
4163
|
-
self,
|
|
4164
|
-
images: Optional[Sequence[Image]] = None,
|
|
4165
|
-
videos: Optional[Sequence[Video]] = None,
|
|
4166
|
-
audios: Optional[Sequence[Audio]] = None,
|
|
4167
|
-
files: Optional[Sequence[File]] = None,
|
|
4168
|
-
) -> tuple:
|
|
4169
|
-
image_list = None
|
|
4170
|
-
if images:
|
|
4171
|
-
image_list = []
|
|
4172
|
-
for img in images:
|
|
4173
|
-
if not img.id:
|
|
4174
|
-
from uuid import uuid4
|
|
4175
|
-
|
|
4176
|
-
img.id = str(uuid4())
|
|
4177
|
-
image_list.append(img)
|
|
4178
|
-
|
|
4179
|
-
video_list = None
|
|
4180
|
-
if videos:
|
|
4181
|
-
video_list = []
|
|
4182
|
-
for vid in videos:
|
|
4183
|
-
if not vid.id:
|
|
4184
|
-
from uuid import uuid4
|
|
4185
|
-
|
|
4186
|
-
vid.id = str(uuid4())
|
|
4187
|
-
video_list.append(vid)
|
|
4188
|
-
|
|
4189
|
-
audio_list = None
|
|
4190
|
-
if audios:
|
|
4191
|
-
audio_list = []
|
|
4192
|
-
for aud in audios:
|
|
4193
|
-
if not aud.id:
|
|
4194
|
-
from uuid import uuid4
|
|
4195
|
-
|
|
4196
|
-
aud.id = str(uuid4())
|
|
4197
|
-
audio_list.append(aud)
|
|
4198
|
-
|
|
4199
|
-
file_list = None
|
|
4200
|
-
if files:
|
|
4201
|
-
file_list = []
|
|
4202
|
-
for file in files:
|
|
4203
|
-
if not file.id:
|
|
4204
|
-
from uuid import uuid4
|
|
4205
|
-
|
|
4206
|
-
file.id = str(uuid4())
|
|
4207
|
-
file_list.append(file)
|
|
4208
|
-
|
|
4209
|
-
return image_list, video_list, audio_list, file_list
|
|
4210
|
-
|
|
4211
4127
|
def cli_app(
|
|
4212
4128
|
self,
|
|
4213
4129
|
input: Optional[str] = None,
|
|
@@ -4951,38 +4867,38 @@ class Team:
|
|
|
4951
4867
|
store_events=self.store_events,
|
|
4952
4868
|
)
|
|
4953
4869
|
|
|
4954
|
-
def _resolve_run_dependencies(self,
|
|
4870
|
+
def _resolve_run_dependencies(self, run_context: RunContext) -> None:
|
|
4955
4871
|
from inspect import signature
|
|
4956
4872
|
|
|
4957
4873
|
log_debug("Resolving dependencies")
|
|
4958
|
-
if not isinstance(dependencies, dict):
|
|
4874
|
+
if not isinstance(run_context.dependencies, dict):
|
|
4959
4875
|
log_warning("Dependencies is not a dict")
|
|
4960
4876
|
return
|
|
4961
4877
|
|
|
4962
|
-
for key, value in dependencies.items():
|
|
4878
|
+
for key, value in run_context.dependencies.items():
|
|
4963
4879
|
if not callable(value):
|
|
4964
|
-
dependencies[key] = value
|
|
4880
|
+
run_context.dependencies[key] = value
|
|
4965
4881
|
continue
|
|
4966
4882
|
|
|
4967
4883
|
try:
|
|
4968
4884
|
sig = signature(value)
|
|
4969
4885
|
resolved_value = value(agent=self) if "agent" in sig.parameters else value()
|
|
4970
4886
|
|
|
4971
|
-
dependencies[key] = resolved_value
|
|
4887
|
+
run_context.dependencies[key] = resolved_value
|
|
4972
4888
|
except Exception as e:
|
|
4973
4889
|
log_warning(f"Failed to resolve dependencies for {key}: {e}")
|
|
4974
4890
|
|
|
4975
|
-
async def _aresolve_run_dependencies(self,
|
|
4891
|
+
async def _aresolve_run_dependencies(self, run_context: RunContext) -> None:
|
|
4976
4892
|
from inspect import iscoroutine, signature
|
|
4977
4893
|
|
|
4978
4894
|
log_debug("Resolving context (async)")
|
|
4979
|
-
if not isinstance(dependencies, dict):
|
|
4895
|
+
if not isinstance(run_context.dependencies, dict):
|
|
4980
4896
|
log_warning("Dependencies is not a dict")
|
|
4981
4897
|
return
|
|
4982
4898
|
|
|
4983
|
-
for key, value in dependencies.items():
|
|
4899
|
+
for key, value in run_context.dependencies.items():
|
|
4984
4900
|
if not callable(value):
|
|
4985
|
-
dependencies[key] = value
|
|
4901
|
+
run_context.dependencies[key] = value
|
|
4986
4902
|
continue
|
|
4987
4903
|
|
|
4988
4904
|
try:
|
|
@@ -4992,7 +4908,7 @@ class Team:
|
|
|
4992
4908
|
if iscoroutine(resolved_value):
|
|
4993
4909
|
resolved_value = await resolved_value
|
|
4994
4910
|
|
|
4995
|
-
dependencies[key] = resolved_value
|
|
4911
|
+
run_context.dependencies[key] = resolved_value
|
|
4996
4912
|
except Exception as e:
|
|
4997
4913
|
log_warning(f"Failed to resolve context for '{key}': {e}")
|
|
4998
4914
|
|
|
@@ -5023,12 +4939,11 @@ class Team:
|
|
|
5023
4939
|
self,
|
|
5024
4940
|
model: Model,
|
|
5025
4941
|
run_response: TeamRunOutput,
|
|
4942
|
+
run_context: RunContext,
|
|
5026
4943
|
team_run_context: Dict[str, Any],
|
|
5027
4944
|
session: TeamSession,
|
|
5028
|
-
session_state: Dict[str, Any],
|
|
5029
4945
|
user_id: Optional[str] = None,
|
|
5030
4946
|
async_mode: bool = False,
|
|
5031
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
5032
4947
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
5033
4948
|
images: Optional[Sequence[Image]] = None,
|
|
5034
4949
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -5036,10 +4951,8 @@ class Team:
|
|
|
5036
4951
|
files: Optional[Sequence[File]] = None,
|
|
5037
4952
|
debug_mode: Optional[bool] = None,
|
|
5038
4953
|
add_history_to_context: Optional[bool] = None,
|
|
5039
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5040
4954
|
add_dependencies_to_context: Optional[bool] = None,
|
|
5041
4955
|
add_session_state_to_context: Optional[bool] = None,
|
|
5042
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5043
4956
|
check_mcp_tools: bool = True,
|
|
5044
4957
|
) -> List[Union[Function, dict]]:
|
|
5045
4958
|
# Prepare tools
|
|
@@ -5085,13 +4998,17 @@ class Team:
|
|
|
5085
4998
|
if self.enable_agentic_knowledge_filters:
|
|
5086
4999
|
_tools.append(
|
|
5087
5000
|
self._get_search_knowledge_base_with_agentic_filters_function(
|
|
5088
|
-
run_response=run_response,
|
|
5001
|
+
run_response=run_response,
|
|
5002
|
+
knowledge_filters=run_context.knowledge_filters,
|
|
5003
|
+
async_mode=async_mode,
|
|
5089
5004
|
)
|
|
5090
5005
|
)
|
|
5091
5006
|
else:
|
|
5092
5007
|
_tools.append(
|
|
5093
5008
|
self._get_search_knowledge_base_function(
|
|
5094
|
-
run_response=run_response,
|
|
5009
|
+
run_response=run_response,
|
|
5010
|
+
knowledge_filters=run_context.knowledge_filters,
|
|
5011
|
+
async_mode=async_mode,
|
|
5095
5012
|
)
|
|
5096
5013
|
)
|
|
5097
5014
|
|
|
@@ -5104,23 +5021,21 @@ class Team:
|
|
|
5104
5021
|
if self.determine_input_for_members is False:
|
|
5105
5022
|
user_message = self._get_user_message(
|
|
5106
5023
|
run_response=run_response,
|
|
5107
|
-
|
|
5024
|
+
run_context=run_context,
|
|
5108
5025
|
input_message=input_message,
|
|
5109
5026
|
user_id=user_id,
|
|
5110
5027
|
audio=audio,
|
|
5111
5028
|
images=images,
|
|
5112
5029
|
videos=videos,
|
|
5113
5030
|
files=files,
|
|
5114
|
-
dependencies=dependencies,
|
|
5115
5031
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
5116
|
-
metadata=metadata,
|
|
5117
5032
|
)
|
|
5118
5033
|
user_message_content = user_message.content if user_message is not None else None
|
|
5119
5034
|
|
|
5120
5035
|
delegate_task_func = self._get_delegate_task_function(
|
|
5121
5036
|
run_response=run_response,
|
|
5037
|
+
run_context=run_context,
|
|
5122
5038
|
session=session,
|
|
5123
|
-
session_state=session_state,
|
|
5124
5039
|
team_run_context=team_run_context,
|
|
5125
5040
|
input=user_message_content,
|
|
5126
5041
|
user_id=user_id,
|
|
@@ -5131,12 +5046,9 @@ class Team:
|
|
|
5131
5046
|
videos=videos, # type: ignore
|
|
5132
5047
|
audio=audio, # type: ignore
|
|
5133
5048
|
files=files, # type: ignore
|
|
5134
|
-
knowledge_filters=knowledge_filters,
|
|
5135
5049
|
add_history_to_context=add_history_to_context,
|
|
5136
|
-
dependencies=dependencies,
|
|
5137
5050
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
5138
5051
|
add_session_state_to_context=add_session_state_to_context,
|
|
5139
|
-
metadata=metadata,
|
|
5140
5052
|
debug_mode=debug_mode,
|
|
5141
5053
|
)
|
|
5142
5054
|
|
|
@@ -5243,8 +5155,9 @@ class Team:
|
|
|
5243
5155
|
|
|
5244
5156
|
for func in _functions: # type: ignore
|
|
5245
5157
|
if isinstance(func, Function):
|
|
5246
|
-
func.
|
|
5247
|
-
func.
|
|
5158
|
+
func._run_context = run_context
|
|
5159
|
+
func._session_state = run_context.session_state
|
|
5160
|
+
func._dependencies = run_context.dependencies
|
|
5248
5161
|
func._images = joint_images
|
|
5249
5162
|
func._files = joint_files
|
|
5250
5163
|
func._audios = joint_audios
|
|
@@ -5287,18 +5200,30 @@ class Team:
|
|
|
5287
5200
|
def get_system_message(
|
|
5288
5201
|
self,
|
|
5289
5202
|
session: TeamSession,
|
|
5290
|
-
|
|
5203
|
+
run_context: Optional[RunContext] = None,
|
|
5291
5204
|
user_id: Optional[str] = None,
|
|
5292
5205
|
audio: Optional[Sequence[Audio]] = None,
|
|
5293
5206
|
images: Optional[Sequence[Image]] = None,
|
|
5294
5207
|
videos: Optional[Sequence[Video]] = None,
|
|
5295
5208
|
files: Optional[Sequence[File]] = None,
|
|
5296
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5297
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5298
5209
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5299
5210
|
add_session_state_to_context: Optional[bool] = None,
|
|
5211
|
+
session_state: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5212
|
+
dependencies: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5213
|
+
metadata: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5300
5214
|
) -> Optional[Message]:
|
|
5301
|
-
"""Get the system message for the team.
|
|
5215
|
+
"""Get the system message for the team.
|
|
5216
|
+
|
|
5217
|
+
1. If the system_message is provided, use that.
|
|
5218
|
+
2. If build_context is False, return None.
|
|
5219
|
+
3. Build and return the default system message for the Team.
|
|
5220
|
+
"""
|
|
5221
|
+
|
|
5222
|
+
# Consider both run_context and session_state, dependencies, metadata (deprecated fields)
|
|
5223
|
+
if run_context is not None:
|
|
5224
|
+
session_state = run_context.session_state or session_state
|
|
5225
|
+
dependencies = run_context.dependencies or dependencies
|
|
5226
|
+
metadata = run_context.metadata or metadata
|
|
5302
5227
|
|
|
5303
5228
|
# 1. If the system_message is provided, use that.
|
|
5304
5229
|
if self.system_message is not None:
|
|
@@ -5581,19 +5506,26 @@ class Team:
|
|
|
5581
5506
|
async def aget_system_message(
|
|
5582
5507
|
self,
|
|
5583
5508
|
session: TeamSession,
|
|
5584
|
-
|
|
5509
|
+
run_context: Optional[RunContext] = None,
|
|
5585
5510
|
user_id: Optional[str] = None,
|
|
5586
5511
|
audio: Optional[Sequence[Audio]] = None,
|
|
5587
5512
|
images: Optional[Sequence[Image]] = None,
|
|
5588
5513
|
videos: Optional[Sequence[Video]] = None,
|
|
5589
5514
|
files: Optional[Sequence[File]] = None,
|
|
5590
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5591
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5592
5515
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5593
5516
|
add_session_state_to_context: Optional[bool] = None,
|
|
5517
|
+
session_state: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5518
|
+
dependencies: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5519
|
+
metadata: Optional[Dict[str, Any]] = None, # Deprecated
|
|
5594
5520
|
) -> Optional[Message]:
|
|
5595
5521
|
"""Get the system message for the team."""
|
|
5596
5522
|
|
|
5523
|
+
# Consider both run_context and session_state, dependencies, metadata (deprecated fields)
|
|
5524
|
+
if run_context is not None:
|
|
5525
|
+
session_state = run_context.session_state or session_state
|
|
5526
|
+
dependencies = run_context.dependencies or dependencies
|
|
5527
|
+
metadata = run_context.metadata or metadata
|
|
5528
|
+
|
|
5597
5529
|
# 1. If the system_message is provided, use that.
|
|
5598
5530
|
if self.system_message is not None:
|
|
5599
5531
|
if isinstance(self.system_message, Message):
|
|
@@ -5687,7 +5619,7 @@ class Team:
|
|
|
5687
5619
|
additional_information.append(f"Your name is: {self.name}.")
|
|
5688
5620
|
|
|
5689
5621
|
if self.knowledge is not None and self.enable_agentic_knowledge_filters:
|
|
5690
|
-
valid_filters =
|
|
5622
|
+
valid_filters = await self.knowledge.aget_valid_filters()
|
|
5691
5623
|
if valid_filters:
|
|
5692
5624
|
valid_filters_str = ", ".join(valid_filters)
|
|
5693
5625
|
additional_information.append(
|
|
@@ -5863,8 +5795,8 @@ class Team:
|
|
|
5863
5795
|
f"<additional_context>\n{self.additional_context.strip()}\n</additional_context>\n\n"
|
|
5864
5796
|
)
|
|
5865
5797
|
|
|
5866
|
-
if
|
|
5867
|
-
system_message_content +=
|
|
5798
|
+
if add_session_state_to_context and session_state is not None:
|
|
5799
|
+
system_message_content += self._get_formatted_session_state_for_system_message(session_state)
|
|
5868
5800
|
|
|
5869
5801
|
# Add the JSON output prompt if output_schema is provided and structured_outputs is False
|
|
5870
5802
|
if (
|
|
@@ -5884,20 +5816,17 @@ class Team:
|
|
|
5884
5816
|
self,
|
|
5885
5817
|
*,
|
|
5886
5818
|
run_response: TeamRunOutput,
|
|
5819
|
+
run_context: RunContext,
|
|
5887
5820
|
session: TeamSession,
|
|
5888
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
5889
5821
|
user_id: Optional[str] = None,
|
|
5890
5822
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
5891
5823
|
audio: Optional[Sequence[Audio]] = None,
|
|
5892
5824
|
images: Optional[Sequence[Image]] = None,
|
|
5893
5825
|
videos: Optional[Sequence[Video]] = None,
|
|
5894
5826
|
files: Optional[Sequence[File]] = None,
|
|
5895
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
5896
5827
|
add_history_to_context: Optional[bool] = None,
|
|
5897
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5898
5828
|
add_dependencies_to_context: Optional[bool] = None,
|
|
5899
5829
|
add_session_state_to_context: Optional[bool] = None,
|
|
5900
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5901
5830
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5902
5831
|
**kwargs: Any,
|
|
5903
5832
|
) -> RunMessages:
|
|
@@ -5920,14 +5849,12 @@ class Team:
|
|
|
5920
5849
|
# 1. Add system message to run_messages
|
|
5921
5850
|
system_message = self.get_system_message(
|
|
5922
5851
|
session=session,
|
|
5923
|
-
|
|
5852
|
+
run_context=run_context,
|
|
5924
5853
|
user_id=user_id,
|
|
5925
5854
|
images=images,
|
|
5926
5855
|
audio=audio,
|
|
5927
5856
|
videos=videos,
|
|
5928
5857
|
files=files,
|
|
5929
|
-
dependencies=dependencies,
|
|
5930
|
-
metadata=metadata,
|
|
5931
5858
|
add_session_state_to_context=add_session_state_to_context,
|
|
5932
5859
|
tools=tools,
|
|
5933
5860
|
)
|
|
@@ -6001,17 +5928,14 @@ class Team:
|
|
|
6001
5928
|
# 5.1 Build user message if message is None, str or list
|
|
6002
5929
|
user_message = self._get_user_message(
|
|
6003
5930
|
run_response=run_response,
|
|
6004
|
-
|
|
5931
|
+
run_context=run_context,
|
|
6005
5932
|
input_message=input_message,
|
|
6006
5933
|
user_id=user_id,
|
|
6007
5934
|
audio=audio,
|
|
6008
5935
|
images=images,
|
|
6009
5936
|
videos=videos,
|
|
6010
5937
|
files=files,
|
|
6011
|
-
knowledge_filters=knowledge_filters,
|
|
6012
|
-
dependencies=dependencies,
|
|
6013
5938
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
6014
|
-
metadata=metadata,
|
|
6015
5939
|
**kwargs,
|
|
6016
5940
|
)
|
|
6017
5941
|
# Add user message to run_messages
|
|
@@ -6025,20 +5949,17 @@ class Team:
|
|
|
6025
5949
|
self,
|
|
6026
5950
|
*,
|
|
6027
5951
|
run_response: TeamRunOutput,
|
|
5952
|
+
run_context: RunContext,
|
|
6028
5953
|
session: TeamSession,
|
|
6029
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
6030
5954
|
user_id: Optional[str] = None,
|
|
6031
5955
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
6032
5956
|
audio: Optional[Sequence[Audio]] = None,
|
|
6033
5957
|
images: Optional[Sequence[Image]] = None,
|
|
6034
5958
|
videos: Optional[Sequence[Video]] = None,
|
|
6035
5959
|
files: Optional[Sequence[File]] = None,
|
|
6036
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6037
5960
|
add_history_to_context: Optional[bool] = None,
|
|
6038
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6039
5961
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6040
5962
|
add_session_state_to_context: Optional[bool] = None,
|
|
6041
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6042
5963
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
6043
5964
|
**kwargs: Any,
|
|
6044
5965
|
) -> RunMessages:
|
|
@@ -6061,14 +5982,12 @@ class Team:
|
|
|
6061
5982
|
# 1. Add system message to run_messages
|
|
6062
5983
|
system_message = await self.aget_system_message(
|
|
6063
5984
|
session=session,
|
|
6064
|
-
|
|
5985
|
+
run_context=run_context,
|
|
6065
5986
|
user_id=user_id,
|
|
6066
5987
|
images=images,
|
|
6067
5988
|
audio=audio,
|
|
6068
5989
|
videos=videos,
|
|
6069
5990
|
files=files,
|
|
6070
|
-
dependencies=dependencies,
|
|
6071
|
-
metadata=metadata,
|
|
6072
5991
|
add_session_state_to_context=add_session_state_to_context,
|
|
6073
5992
|
tools=tools,
|
|
6074
5993
|
)
|
|
@@ -6141,17 +6060,14 @@ class Team:
|
|
|
6141
6060
|
# 5.1 Build user message if message is None, str or list
|
|
6142
6061
|
user_message = self._get_user_message(
|
|
6143
6062
|
run_response=run_response,
|
|
6144
|
-
|
|
6063
|
+
run_context=run_context,
|
|
6145
6064
|
input_message=input_message,
|
|
6146
6065
|
user_id=user_id,
|
|
6147
6066
|
audio=audio,
|
|
6148
6067
|
images=images,
|
|
6149
6068
|
videos=videos,
|
|
6150
6069
|
files=files,
|
|
6151
|
-
knowledge_filters=knowledge_filters,
|
|
6152
|
-
dependencies=dependencies,
|
|
6153
6070
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
6154
|
-
metadata=metadata,
|
|
6155
6071
|
**kwargs,
|
|
6156
6072
|
)
|
|
6157
6073
|
# Add user message to run_messages
|
|
@@ -6165,17 +6081,14 @@ class Team:
|
|
|
6165
6081
|
self,
|
|
6166
6082
|
*,
|
|
6167
6083
|
run_response: TeamRunOutput,
|
|
6168
|
-
|
|
6084
|
+
run_context: RunContext,
|
|
6169
6085
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
6170
6086
|
user_id: Optional[str] = None,
|
|
6171
6087
|
audio: Optional[Sequence[Audio]] = None,
|
|
6172
6088
|
images: Optional[Sequence[Image]] = None,
|
|
6173
6089
|
videos: Optional[Sequence[Video]] = None,
|
|
6174
6090
|
files: Optional[Sequence[File]] = None,
|
|
6175
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6176
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6177
6091
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6178
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6179
6092
|
**kwargs,
|
|
6180
6093
|
):
|
|
6181
6094
|
# Get references from the knowledge base to use in the user message
|
|
@@ -6259,7 +6172,7 @@ class Team:
|
|
|
6259
6172
|
retrieval_timer = Timer()
|
|
6260
6173
|
retrieval_timer.start()
|
|
6261
6174
|
docs_from_knowledge = self.get_relevant_docs_from_knowledge(
|
|
6262
|
-
query=user_msg_content, filters=knowledge_filters, **kwargs
|
|
6175
|
+
query=user_msg_content, filters=run_context.knowledge_filters, **kwargs
|
|
6263
6176
|
)
|
|
6264
6177
|
if docs_from_knowledge is not None:
|
|
6265
6178
|
references = MessageReferences(
|
|
@@ -6280,9 +6193,9 @@ class Team:
|
|
|
6280
6193
|
user_msg_content = self._format_message_with_state_variables(
|
|
6281
6194
|
user_msg_content,
|
|
6282
6195
|
user_id=user_id,
|
|
6283
|
-
session_state=session_state,
|
|
6284
|
-
dependencies=dependencies,
|
|
6285
|
-
metadata=metadata,
|
|
6196
|
+
session_state=run_context.session_state,
|
|
6197
|
+
dependencies=run_context.dependencies,
|
|
6198
|
+
metadata=run_context.metadata,
|
|
6286
6199
|
)
|
|
6287
6200
|
|
|
6288
6201
|
# Convert to string for concatenation operations
|
|
@@ -6300,9 +6213,9 @@ class Team:
|
|
|
6300
6213
|
user_msg_content_str += self._convert_documents_to_string(references.references) + "\n"
|
|
6301
6214
|
user_msg_content_str += "</references>"
|
|
6302
6215
|
# 4.2 Add context to user message
|
|
6303
|
-
if add_dependencies_to_context and dependencies is not None:
|
|
6216
|
+
if add_dependencies_to_context and run_context.dependencies is not None:
|
|
6304
6217
|
user_msg_content_str += "\n\n<additional context>\n"
|
|
6305
|
-
user_msg_content_str += self._convert_dependencies_to_string(dependencies) + "\n"
|
|
6218
|
+
user_msg_content_str += self._convert_dependencies_to_string(run_context.dependencies) + "\n"
|
|
6306
6219
|
user_msg_content_str += "</additional context>"
|
|
6307
6220
|
|
|
6308
6221
|
# Use the string version for the final content
|
|
@@ -6380,10 +6293,10 @@ class Team:
|
|
|
6380
6293
|
def _format_message_with_state_variables(
|
|
6381
6294
|
self,
|
|
6382
6295
|
message: Any,
|
|
6383
|
-
user_id: Optional[str] = None,
|
|
6384
6296
|
session_state: Optional[Dict[str, Any]] = None,
|
|
6385
6297
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
6386
6298
|
metadata: Optional[Dict[str, Any]] = None,
|
|
6299
|
+
user_id: Optional[str] = None,
|
|
6387
6300
|
) -> Any:
|
|
6388
6301
|
"""Format a message with the session state variables."""
|
|
6389
6302
|
import re
|
|
@@ -6889,8 +6802,8 @@ class Team:
|
|
|
6889
6802
|
def _get_delegate_task_function(
|
|
6890
6803
|
self,
|
|
6891
6804
|
run_response: TeamRunOutput,
|
|
6805
|
+
run_context: RunContext,
|
|
6892
6806
|
session: TeamSession,
|
|
6893
|
-
session_state: Dict[str, Any],
|
|
6894
6807
|
team_run_context: Dict[str, Any],
|
|
6895
6808
|
user_id: Optional[str] = None,
|
|
6896
6809
|
stream: bool = False,
|
|
@@ -6901,12 +6814,9 @@ class Team:
|
|
|
6901
6814
|
videos: Optional[List[Video]] = None,
|
|
6902
6815
|
audio: Optional[List[Audio]] = None,
|
|
6903
6816
|
files: Optional[List[File]] = None,
|
|
6904
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6905
6817
|
add_history_to_context: Optional[bool] = None,
|
|
6906
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6907
6818
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6908
6819
|
add_session_state_to_context: Optional[bool] = None,
|
|
6909
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6910
6820
|
debug_mode: Optional[bool] = None,
|
|
6911
6821
|
) -> Function:
|
|
6912
6822
|
if not images:
|
|
@@ -7022,7 +6932,7 @@ class Team:
|
|
|
7022
6932
|
session.upsert_run(member_agent_run_response)
|
|
7023
6933
|
|
|
7024
6934
|
# Update team session state
|
|
7025
|
-
merge_dictionaries(session_state, member_session_state_copy) # type: ignore
|
|
6935
|
+
merge_dictionaries(run_context.session_state, member_session_state_copy) # type: ignore
|
|
7026
6936
|
|
|
7027
6937
|
# Update the team media
|
|
7028
6938
|
if member_agent_run_response is not None:
|
|
@@ -7055,7 +6965,7 @@ class Team:
|
|
|
7055
6965
|
# Make sure for the member agent, we are using the agent logger
|
|
7056
6966
|
use_agent_logger()
|
|
7057
6967
|
|
|
7058
|
-
member_session_state_copy = copy(session_state)
|
|
6968
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7059
6969
|
|
|
7060
6970
|
if stream:
|
|
7061
6971
|
member_agent_run_response_stream = member_agent.run(
|
|
@@ -7071,11 +6981,11 @@ class Team:
|
|
|
7071
6981
|
stream=True,
|
|
7072
6982
|
stream_events=stream_events,
|
|
7073
6983
|
debug_mode=debug_mode,
|
|
7074
|
-
dependencies=dependencies,
|
|
6984
|
+
dependencies=run_context.dependencies,
|
|
7075
6985
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7076
|
-
metadata=metadata,
|
|
6986
|
+
metadata=run_context.metadata,
|
|
7077
6987
|
add_session_state_to_context=add_session_state_to_context,
|
|
7078
|
-
knowledge_filters=knowledge_filters
|
|
6988
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7079
6989
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7080
6990
|
else None,
|
|
7081
6991
|
yield_run_response=True,
|
|
@@ -7099,7 +7009,7 @@ class Team:
|
|
|
7099
7009
|
yield member_agent_run_output_event
|
|
7100
7010
|
else:
|
|
7101
7011
|
member_agent_run_response = member_agent.run( # type: ignore
|
|
7102
|
-
input=member_agent_task if not history else history,
|
|
7012
|
+
input=member_agent_task if not history else history, # type: ignore
|
|
7103
7013
|
user_id=user_id,
|
|
7104
7014
|
# All members have the same session_id
|
|
7105
7015
|
session_id=session.session_id,
|
|
@@ -7110,11 +7020,11 @@ class Team:
|
|
|
7110
7020
|
files=files,
|
|
7111
7021
|
stream=False,
|
|
7112
7022
|
debug_mode=debug_mode,
|
|
7113
|
-
dependencies=dependencies,
|
|
7023
|
+
dependencies=run_context.dependencies,
|
|
7114
7024
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7115
7025
|
add_session_state_to_context=add_session_state_to_context,
|
|
7116
|
-
metadata=metadata,
|
|
7117
|
-
knowledge_filters=knowledge_filters
|
|
7026
|
+
metadata=run_context.metadata,
|
|
7027
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7118
7028
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7119
7029
|
else None,
|
|
7120
7030
|
)
|
|
@@ -7152,7 +7062,10 @@ class Team:
|
|
|
7152
7062
|
use_team_logger()
|
|
7153
7063
|
|
|
7154
7064
|
_process_delegate_task_to_member(
|
|
7155
|
-
member_agent_run_response,
|
|
7065
|
+
member_agent_run_response,
|
|
7066
|
+
member_agent,
|
|
7067
|
+
member_agent_task, # type: ignore
|
|
7068
|
+
member_session_state_copy, # type: ignore
|
|
7156
7069
|
)
|
|
7157
7070
|
|
|
7158
7071
|
async def adelegate_task_to_member(
|
|
@@ -7182,7 +7095,7 @@ class Team:
|
|
|
7182
7095
|
# Make sure for the member agent, we are using the agent logger
|
|
7183
7096
|
use_agent_logger()
|
|
7184
7097
|
|
|
7185
|
-
member_session_state_copy = copy(session_state)
|
|
7098
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7186
7099
|
|
|
7187
7100
|
if stream:
|
|
7188
7101
|
member_agent_run_response_stream = member_agent.arun( # type: ignore
|
|
@@ -7198,11 +7111,11 @@ class Team:
|
|
|
7198
7111
|
stream=True,
|
|
7199
7112
|
stream_events=stream_events,
|
|
7200
7113
|
debug_mode=debug_mode,
|
|
7201
|
-
dependencies=dependencies,
|
|
7114
|
+
dependencies=run_context.dependencies,
|
|
7202
7115
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7203
7116
|
add_session_state_to_context=add_session_state_to_context,
|
|
7204
|
-
metadata=metadata,
|
|
7205
|
-
knowledge_filters=knowledge_filters
|
|
7117
|
+
metadata=run_context.metadata,
|
|
7118
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7206
7119
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7207
7120
|
else None,
|
|
7208
7121
|
yield_run_response=True,
|
|
@@ -7237,11 +7150,11 @@ class Team:
|
|
|
7237
7150
|
files=files,
|
|
7238
7151
|
stream=False,
|
|
7239
7152
|
debug_mode=debug_mode,
|
|
7240
|
-
dependencies=dependencies,
|
|
7153
|
+
dependencies=run_context.dependencies,
|
|
7241
7154
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7242
7155
|
add_session_state_to_context=add_session_state_to_context,
|
|
7243
|
-
metadata=metadata,
|
|
7244
|
-
knowledge_filters=knowledge_filters
|
|
7156
|
+
metadata=run_context.metadata,
|
|
7157
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7245
7158
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7246
7159
|
else None,
|
|
7247
7160
|
)
|
|
@@ -7275,7 +7188,10 @@ class Team:
|
|
|
7275
7188
|
use_team_logger()
|
|
7276
7189
|
|
|
7277
7190
|
_process_delegate_task_to_member(
|
|
7278
|
-
member_agent_run_response,
|
|
7191
|
+
member_agent_run_response,
|
|
7192
|
+
member_agent,
|
|
7193
|
+
member_agent_task, # type: ignore
|
|
7194
|
+
member_session_state_copy, # type: ignore
|
|
7279
7195
|
)
|
|
7280
7196
|
|
|
7281
7197
|
# When the task should be delegated to all members
|
|
@@ -7296,7 +7212,7 @@ class Team:
|
|
|
7296
7212
|
member_agent=member_agent, task_description=task
|
|
7297
7213
|
)
|
|
7298
7214
|
|
|
7299
|
-
member_session_state_copy = copy(session_state)
|
|
7215
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7300
7216
|
if stream:
|
|
7301
7217
|
member_agent_run_response_stream = member_agent.run(
|
|
7302
7218
|
input=member_agent_task if not history else history,
|
|
@@ -7310,14 +7226,14 @@ class Team:
|
|
|
7310
7226
|
files=files,
|
|
7311
7227
|
stream=True,
|
|
7312
7228
|
stream_events=stream_events,
|
|
7313
|
-
knowledge_filters=knowledge_filters
|
|
7229
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7314
7230
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7315
7231
|
else None,
|
|
7316
7232
|
debug_mode=debug_mode,
|
|
7317
|
-
dependencies=dependencies,
|
|
7233
|
+
dependencies=run_context.dependencies,
|
|
7318
7234
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7319
7235
|
add_session_state_to_context=add_session_state_to_context,
|
|
7320
|
-
metadata=metadata,
|
|
7236
|
+
metadata=run_context.metadata,
|
|
7321
7237
|
yield_run_response=True,
|
|
7322
7238
|
)
|
|
7323
7239
|
member_agent_run_response = None
|
|
@@ -7350,14 +7266,14 @@ class Team:
|
|
|
7350
7266
|
audio=audio,
|
|
7351
7267
|
files=files,
|
|
7352
7268
|
stream=False,
|
|
7353
|
-
knowledge_filters=knowledge_filters
|
|
7269
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7354
7270
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7355
7271
|
else None,
|
|
7356
7272
|
debug_mode=debug_mode,
|
|
7357
|
-
dependencies=dependencies,
|
|
7273
|
+
dependencies=run_context.dependencies,
|
|
7358
7274
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7359
7275
|
add_session_state_to_context=add_session_state_to_context,
|
|
7360
|
-
metadata=metadata,
|
|
7276
|
+
metadata=run_context.metadata,
|
|
7361
7277
|
)
|
|
7362
7278
|
|
|
7363
7279
|
check_if_run_cancelled(member_agent_run_response) # type: ignore
|
|
@@ -7384,7 +7300,10 @@ class Team:
|
|
|
7384
7300
|
yield f"Agent {member_agent.name}: Error - {str(e)}"
|
|
7385
7301
|
|
|
7386
7302
|
_process_delegate_task_to_member(
|
|
7387
|
-
member_agent_run_response,
|
|
7303
|
+
member_agent_run_response,
|
|
7304
|
+
member_agent,
|
|
7305
|
+
member_agent_task, # type: ignore
|
|
7306
|
+
member_session_state_copy, # type: ignore
|
|
7388
7307
|
)
|
|
7389
7308
|
|
|
7390
7309
|
# After all the member runs, switch back to the team logger
|
|
@@ -7410,7 +7329,7 @@ class Team:
|
|
|
7410
7329
|
member_agent_task, history = _setup_delegate_task_to_member(
|
|
7411
7330
|
member_agent=agent, task_description=task
|
|
7412
7331
|
) # type: ignore
|
|
7413
|
-
member_session_state_copy = copy(session_state)
|
|
7332
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7414
7333
|
|
|
7415
7334
|
member_stream = agent.arun( # type: ignore
|
|
7416
7335
|
input=member_agent_task if not history else history,
|
|
@@ -7424,13 +7343,13 @@ class Team:
|
|
|
7424
7343
|
stream=True,
|
|
7425
7344
|
stream_events=stream_events,
|
|
7426
7345
|
debug_mode=debug_mode,
|
|
7427
|
-
knowledge_filters=knowledge_filters
|
|
7346
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7428
7347
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7429
7348
|
else None,
|
|
7430
|
-
dependencies=dependencies,
|
|
7349
|
+
dependencies=run_context.dependencies,
|
|
7431
7350
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7432
7351
|
add_session_state_to_context=add_session_state_to_context,
|
|
7433
|
-
metadata=metadata,
|
|
7352
|
+
metadata=run_context.metadata,
|
|
7434
7353
|
yield_run_response=True,
|
|
7435
7354
|
)
|
|
7436
7355
|
member_agent_run_response = None
|
|
@@ -7448,7 +7367,10 @@ class Team:
|
|
|
7448
7367
|
await queue.put(member_agent_run_output_event)
|
|
7449
7368
|
finally:
|
|
7450
7369
|
_process_delegate_task_to_member(
|
|
7451
|
-
member_agent_run_response,
|
|
7370
|
+
member_agent_run_response,
|
|
7371
|
+
member_agent,
|
|
7372
|
+
member_agent_task, # type: ignore
|
|
7373
|
+
member_session_state_copy, # type: ignore
|
|
7452
7374
|
)
|
|
7453
7375
|
await queue.put(done_marker)
|
|
7454
7376
|
|
|
@@ -7487,7 +7409,7 @@ class Team:
|
|
|
7487
7409
|
)
|
|
7488
7410
|
|
|
7489
7411
|
async def run_member_agent(agent=current_agent) -> str:
|
|
7490
|
-
member_session_state_copy = copy(session_state)
|
|
7412
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7491
7413
|
|
|
7492
7414
|
member_agent_run_response = await agent.arun(
|
|
7493
7415
|
input=member_agent_task if not history else history,
|
|
@@ -7502,18 +7424,21 @@ class Team:
|
|
|
7502
7424
|
stream=False,
|
|
7503
7425
|
stream_events=stream_events,
|
|
7504
7426
|
debug_mode=debug_mode,
|
|
7505
|
-
knowledge_filters=knowledge_filters
|
|
7427
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7506
7428
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7507
7429
|
else None,
|
|
7508
|
-
dependencies=dependencies,
|
|
7430
|
+
dependencies=run_context.dependencies,
|
|
7509
7431
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7510
7432
|
add_session_state_to_context=add_session_state_to_context,
|
|
7511
|
-
metadata=metadata,
|
|
7433
|
+
metadata=run_context.metadata,
|
|
7512
7434
|
)
|
|
7513
7435
|
check_if_run_cancelled(member_agent_run_response)
|
|
7514
7436
|
|
|
7515
7437
|
_process_delegate_task_to_member(
|
|
7516
|
-
member_agent_run_response,
|
|
7438
|
+
member_agent_run_response,
|
|
7439
|
+
member_agent,
|
|
7440
|
+
member_agent_task, # type: ignore
|
|
7441
|
+
member_session_state_copy, # type: ignore
|
|
7517
7442
|
)
|
|
7518
7443
|
|
|
7519
7444
|
member_name = member_agent.name if member_agent.name else f"agent_{member_agent_index}"
|
|
@@ -8316,37 +8241,9 @@ class Team:
|
|
|
8316
8241
|
return await self.memory_manager.aget_user_memories(user_id=user_id)
|
|
8317
8242
|
|
|
8318
8243
|
###########################################################################
|
|
8319
|
-
# Handle
|
|
8244
|
+
# Handle reasoning content
|
|
8320
8245
|
###########################################################################
|
|
8321
8246
|
|
|
8322
|
-
def _add_image(self, image: Image, run_response: TeamRunOutput) -> None:
|
|
8323
|
-
"""Add an image to both the agent's stateful storage and the current run response"""
|
|
8324
|
-
# Add to run response
|
|
8325
|
-
if run_response.images is None:
|
|
8326
|
-
run_response.images = []
|
|
8327
|
-
run_response.images.append(image)
|
|
8328
|
-
|
|
8329
|
-
def _add_video(self, video: Video, run_response: TeamRunOutput) -> None:
|
|
8330
|
-
"""Add a video to both the agent's stateful storage and the current run response"""
|
|
8331
|
-
# Add to run response
|
|
8332
|
-
if run_response.videos is None:
|
|
8333
|
-
run_response.videos = []
|
|
8334
|
-
run_response.videos.append(video)
|
|
8335
|
-
|
|
8336
|
-
def _add_audio(self, audio: Audio, run_response: TeamRunOutput) -> None:
|
|
8337
|
-
"""Add audio to both the agent's stateful storage and the current run response"""
|
|
8338
|
-
# Add to run response
|
|
8339
|
-
if run_response.audio is None:
|
|
8340
|
-
run_response.audio = []
|
|
8341
|
-
run_response.audio.append(audio)
|
|
8342
|
-
|
|
8343
|
-
def _add_file(self, file: File, run_response: TeamRunOutput) -> None:
|
|
8344
|
-
"""Add file to both the agent's stateful storage and the current run response"""
|
|
8345
|
-
# Add to run response
|
|
8346
|
-
if run_response.files is None:
|
|
8347
|
-
run_response.files = []
|
|
8348
|
-
run_response.files.append(file)
|
|
8349
|
-
|
|
8350
8247
|
def _update_reasoning_content_from_tool_call(
|
|
8351
8248
|
self, run_response: TeamRunOutput, tool_name: str, tool_args: Dict[str, Any]
|
|
8352
8249
|
) -> Optional[ReasoningStep]:
|
|
@@ -8542,7 +8439,7 @@ class Team:
|
|
|
8542
8439
|
|
|
8543
8440
|
# Validate the filters against known valid filter keys
|
|
8544
8441
|
if self.knowledge is not None:
|
|
8545
|
-
valid_filters, invalid_keys = self.knowledge.
|
|
8442
|
+
valid_filters, invalid_keys = await self.knowledge.async_validate_filters(filters) # type: ignore
|
|
8546
8443
|
|
|
8547
8444
|
# Warn about invalid filter keys
|
|
8548
8445
|
if invalid_keys:
|