agno 2.2.5__py3-none-any.whl → 2.2.7__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 +500 -423
- agno/api/os.py +1 -1
- agno/culture/manager.py +12 -8
- agno/guardrails/prompt_injection.py +1 -0
- agno/knowledge/chunking/agentic.py +6 -2
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/knowledge.py +37 -5
- agno/memory/manager.py +9 -4
- agno/models/anthropic/claude.py +1 -2
- agno/models/azure/ai_foundry.py +31 -14
- agno/models/azure/openai_chat.py +12 -4
- agno/models/base.py +106 -65
- agno/models/cerebras/cerebras.py +11 -6
- agno/models/groq/groq.py +7 -4
- agno/models/meta/llama.py +12 -6
- agno/models/meta/llama_openai.py +5 -1
- agno/models/openai/chat.py +26 -17
- agno/models/openai/responses.py +11 -63
- agno/models/requesty/requesty.py +5 -2
- agno/models/utils.py +254 -8
- agno/models/vertexai/claude.py +9 -13
- agno/os/app.py +13 -12
- agno/os/routers/evals/evals.py +8 -8
- agno/os/routers/evals/utils.py +1 -0
- agno/os/schema.py +56 -38
- agno/os/utils.py +27 -0
- agno/run/__init__.py +6 -0
- agno/run/agent.py +5 -0
- agno/run/base.py +18 -1
- agno/run/team.py +13 -9
- agno/run/workflow.py +39 -0
- agno/session/summary.py +8 -2
- agno/session/workflow.py +4 -3
- agno/team/team.py +302 -369
- agno/tools/exa.py +21 -16
- agno/tools/file.py +153 -25
- agno/tools/function.py +98 -17
- agno/tools/mcp/mcp.py +8 -1
- agno/tools/notion.py +204 -0
- agno/utils/agent.py +78 -0
- agno/utils/events.py +2 -0
- agno/utils/hooks.py +1 -1
- agno/utils/models/claude.py +25 -8
- agno/utils/print_response/workflow.py +115 -16
- agno/vectordb/__init__.py +2 -1
- agno/vectordb/milvus/milvus.py +5 -0
- agno/vectordb/redis/__init__.py +5 -0
- agno/vectordb/redis/redisdb.py +687 -0
- agno/workflow/__init__.py +2 -0
- agno/workflow/agent.py +299 -0
- agno/workflow/step.py +13 -2
- agno/workflow/workflow.py +969 -72
- {agno-2.2.5.dist-info → agno-2.2.7.dist-info}/METADATA +10 -3
- {agno-2.2.5.dist-info → agno-2.2.7.dist-info}/RECORD +57 -52
- {agno-2.2.5.dist-info → agno-2.2.7.dist-info}/WHEEL +0 -0
- {agno-2.2.5.dist-info → agno-2.2.7.dist-info}/licenses/LICENSE +0 -0
- {agno-2.2.5.dist-info → agno-2.2.7.dist-info}/top_level.txt +0 -0
agno/team/team.py
CHANGED
|
@@ -45,9 +45,10 @@ from agno.models.base import Model
|
|
|
45
45
|
from agno.models.message import Message, MessageReferences
|
|
46
46
|
from agno.models.metrics import Metrics
|
|
47
47
|
from agno.models.response import ModelResponse, ModelResponseEvent
|
|
48
|
+
from agno.models.utils import get_model
|
|
48
49
|
from agno.reasoning.step import NextAction, ReasoningStep, ReasoningSteps
|
|
50
|
+
from agno.run import RunContext, RunStatus
|
|
49
51
|
from agno.run.agent import RunEvent, RunOutput, RunOutputEvent
|
|
50
|
-
from agno.run.base import RunStatus
|
|
51
52
|
from agno.run.cancel import (
|
|
52
53
|
cancel_run as cancel_run_global,
|
|
53
54
|
)
|
|
@@ -87,7 +88,9 @@ from agno.utils.agent import (
|
|
|
87
88
|
scrub_media_from_run_output,
|
|
88
89
|
scrub_tool_results_from_run_output,
|
|
89
90
|
set_session_name_util,
|
|
91
|
+
store_media_util,
|
|
90
92
|
update_session_state_util,
|
|
93
|
+
validate_media_object_id,
|
|
91
94
|
wait_for_background_tasks,
|
|
92
95
|
wait_for_background_tasks_stream,
|
|
93
96
|
)
|
|
@@ -335,9 +338,9 @@ class Team:
|
|
|
335
338
|
|
|
336
339
|
# --- Team Hooks ---
|
|
337
340
|
# Functions called right after team session is loaded, before processing starts
|
|
338
|
-
pre_hooks: Optional[Union[
|
|
341
|
+
pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
|
|
339
342
|
# Functions called after output is generated but before the response is returned
|
|
340
|
-
post_hooks: Optional[Union[
|
|
343
|
+
post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None
|
|
341
344
|
|
|
342
345
|
# --- Structured output ---
|
|
343
346
|
# Input schema for validating input
|
|
@@ -437,7 +440,7 @@ class Team:
|
|
|
437
440
|
self,
|
|
438
441
|
members: List[Union[Agent, "Team"]],
|
|
439
442
|
id: Optional[str] = None,
|
|
440
|
-
model: Optional[Model] = None,
|
|
443
|
+
model: Optional[Union[Model, str]] = None,
|
|
441
444
|
name: Optional[str] = None,
|
|
442
445
|
role: Optional[str] = None,
|
|
443
446
|
respond_directly: bool = False,
|
|
@@ -494,13 +497,13 @@ class Team:
|
|
|
494
497
|
tool_call_limit: Optional[int] = None,
|
|
495
498
|
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
496
499
|
tool_hooks: Optional[List[Callable]] = None,
|
|
497
|
-
pre_hooks: Optional[Union[
|
|
498
|
-
post_hooks: Optional[Union[
|
|
500
|
+
pre_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
|
|
501
|
+
post_hooks: Optional[List[Union[Callable[..., Any], BaseGuardrail]]] = None,
|
|
499
502
|
input_schema: Optional[Type[BaseModel]] = None,
|
|
500
503
|
output_schema: Optional[Type[BaseModel]] = None,
|
|
501
|
-
parser_model: Optional[Model] = None,
|
|
504
|
+
parser_model: Optional[Union[Model, str]] = None,
|
|
502
505
|
parser_model_prompt: Optional[str] = None,
|
|
503
|
-
output_model: Optional[Model] = None,
|
|
506
|
+
output_model: Optional[Union[Model, str]] = None,
|
|
504
507
|
output_model_prompt: Optional[str] = None,
|
|
505
508
|
use_json_mode: bool = False,
|
|
506
509
|
parse_response: bool = True,
|
|
@@ -514,7 +517,7 @@ class Team:
|
|
|
514
517
|
add_session_summary_to_context: Optional[bool] = None,
|
|
515
518
|
metadata: Optional[Dict[str, Any]] = None,
|
|
516
519
|
reasoning: bool = False,
|
|
517
|
-
reasoning_model: Optional[Model] = None,
|
|
520
|
+
reasoning_model: Optional[Union[Model, str]] = None,
|
|
518
521
|
reasoning_agent: Optional[Agent] = None,
|
|
519
522
|
reasoning_min_steps: int = 1,
|
|
520
523
|
reasoning_max_steps: int = 10,
|
|
@@ -535,7 +538,7 @@ class Team:
|
|
|
535
538
|
):
|
|
536
539
|
self.members = members
|
|
537
540
|
|
|
538
|
-
self.model = model
|
|
541
|
+
self.model = model # type: ignore[assignment]
|
|
539
542
|
|
|
540
543
|
self.name = name
|
|
541
544
|
self.id = id
|
|
@@ -618,9 +621,9 @@ class Team:
|
|
|
618
621
|
|
|
619
622
|
self.input_schema = input_schema
|
|
620
623
|
self.output_schema = output_schema
|
|
621
|
-
self.parser_model = parser_model
|
|
624
|
+
self.parser_model = parser_model # type: ignore[assignment]
|
|
622
625
|
self.parser_model_prompt = parser_model_prompt
|
|
623
|
-
self.output_model = output_model
|
|
626
|
+
self.output_model = output_model # type: ignore[assignment]
|
|
624
627
|
self.output_model_prompt = output_model_prompt
|
|
625
628
|
self.use_json_mode = use_json_mode
|
|
626
629
|
self.parse_response = parse_response
|
|
@@ -637,7 +640,7 @@ class Team:
|
|
|
637
640
|
self.metadata = metadata
|
|
638
641
|
|
|
639
642
|
self.reasoning = reasoning
|
|
640
|
-
self.reasoning_model = reasoning_model
|
|
643
|
+
self.reasoning_model = reasoning_model # type: ignore[assignment]
|
|
641
644
|
self.reasoning_agent = reasoning_agent
|
|
642
645
|
self.reasoning_min_steps = reasoning_min_steps
|
|
643
646
|
self.reasoning_max_steps = reasoning_max_steps
|
|
@@ -694,6 +697,8 @@ class Team:
|
|
|
694
697
|
# Lazy-initialized shared thread pool executor for background tasks (memory, cultural knowledge, etc.)
|
|
695
698
|
self._background_executor: Optional[Any] = None
|
|
696
699
|
|
|
700
|
+
self._resolve_models()
|
|
701
|
+
|
|
697
702
|
@property
|
|
698
703
|
def background_executor(self) -> Any:
|
|
699
704
|
"""Lazy initialization of shared thread pool executor for background tasks.
|
|
@@ -902,6 +907,17 @@ class Team:
|
|
|
902
907
|
"""Return True if the db the team is equipped with is an Async implementation"""
|
|
903
908
|
return self.db is not None and isinstance(self.db, AsyncBaseDb)
|
|
904
909
|
|
|
910
|
+
def _resolve_models(self) -> None:
|
|
911
|
+
"""Resolve model strings to Model instances."""
|
|
912
|
+
if self.model is not None:
|
|
913
|
+
self.model = get_model(self.model)
|
|
914
|
+
if self.reasoning_model is not None:
|
|
915
|
+
self.reasoning_model = get_model(self.reasoning_model)
|
|
916
|
+
if self.parser_model is not None:
|
|
917
|
+
self.parser_model = get_model(self.parser_model)
|
|
918
|
+
if self.output_model is not None:
|
|
919
|
+
self.output_model = get_model(self.output_model)
|
|
920
|
+
|
|
905
921
|
def initialize_team(self, debug_mode: Optional[bool] = None) -> None:
|
|
906
922
|
# Make sure for the team, we are using the team logger
|
|
907
923
|
use_team_logger()
|
|
@@ -976,9 +992,7 @@ class Team:
|
|
|
976
992
|
run_response: TeamRunOutput,
|
|
977
993
|
run_input: TeamRunInput,
|
|
978
994
|
session: TeamSession,
|
|
979
|
-
|
|
980
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
981
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
995
|
+
run_context: RunContext,
|
|
982
996
|
user_id: Optional[str] = None,
|
|
983
997
|
debug_mode: Optional[bool] = None,
|
|
984
998
|
**kwargs: Any,
|
|
@@ -990,12 +1004,13 @@ class Team:
|
|
|
990
1004
|
# Prepare all possible arguments once
|
|
991
1005
|
all_args = {
|
|
992
1006
|
"run_input": run_input,
|
|
1007
|
+
"run_context": run_context,
|
|
993
1008
|
"team": self,
|
|
994
1009
|
"session": session,
|
|
995
1010
|
"user_id": user_id,
|
|
996
|
-
"metadata": metadata,
|
|
997
|
-
"session_state": session_state,
|
|
998
|
-
"dependencies": dependencies,
|
|
1011
|
+
"metadata": run_context.metadata,
|
|
1012
|
+
"session_state": run_context.session_state,
|
|
1013
|
+
"dependencies": run_context.dependencies,
|
|
999
1014
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1000
1015
|
}
|
|
1001
1016
|
all_args.update(kwargs)
|
|
@@ -1042,9 +1057,7 @@ class Team:
|
|
|
1042
1057
|
run_response: TeamRunOutput,
|
|
1043
1058
|
run_input: TeamRunInput,
|
|
1044
1059
|
session: TeamSession,
|
|
1045
|
-
|
|
1046
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1047
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1060
|
+
run_context: RunContext,
|
|
1048
1061
|
user_id: Optional[str] = None,
|
|
1049
1062
|
debug_mode: Optional[bool] = None,
|
|
1050
1063
|
**kwargs: Any,
|
|
@@ -1056,12 +1069,13 @@ class Team:
|
|
|
1056
1069
|
# Prepare all possible arguments once
|
|
1057
1070
|
all_args = {
|
|
1058
1071
|
"run_input": run_input,
|
|
1072
|
+
"run_context": run_context,
|
|
1059
1073
|
"team": self,
|
|
1060
1074
|
"session": session,
|
|
1061
1075
|
"user_id": user_id,
|
|
1062
|
-
"session_state": session_state,
|
|
1063
|
-
"dependencies": dependencies,
|
|
1064
|
-
"metadata": metadata,
|
|
1076
|
+
"session_state": run_context.session_state,
|
|
1077
|
+
"dependencies": run_context.dependencies,
|
|
1078
|
+
"metadata": run_context.metadata,
|
|
1065
1079
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1066
1080
|
}
|
|
1067
1081
|
all_args.update(kwargs)
|
|
@@ -1113,9 +1127,7 @@ class Team:
|
|
|
1113
1127
|
hooks: Optional[List[Callable[..., Any]]],
|
|
1114
1128
|
run_output: TeamRunOutput,
|
|
1115
1129
|
session: TeamSession,
|
|
1116
|
-
|
|
1117
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1118
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1130
|
+
run_context: RunContext,
|
|
1119
1131
|
user_id: Optional[str] = None,
|
|
1120
1132
|
debug_mode: Optional[bool] = None,
|
|
1121
1133
|
**kwargs: Any,
|
|
@@ -1127,12 +1139,13 @@ class Team:
|
|
|
1127
1139
|
# Prepare all possible arguments once
|
|
1128
1140
|
all_args = {
|
|
1129
1141
|
"run_output": run_output,
|
|
1142
|
+
"run_context": run_context,
|
|
1130
1143
|
"team": self,
|
|
1131
1144
|
"session": session,
|
|
1132
1145
|
"user_id": user_id,
|
|
1133
|
-
"session_state": session_state,
|
|
1134
|
-
"dependencies": dependencies,
|
|
1135
|
-
"metadata": metadata,
|
|
1146
|
+
"session_state": run_context.session_state,
|
|
1147
|
+
"dependencies": run_context.dependencies,
|
|
1148
|
+
"metadata": run_context.metadata,
|
|
1136
1149
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1137
1150
|
}
|
|
1138
1151
|
all_args.update(kwargs)
|
|
@@ -1174,10 +1187,8 @@ class Team:
|
|
|
1174
1187
|
hooks: Optional[List[Callable[..., Any]]],
|
|
1175
1188
|
run_output: TeamRunOutput,
|
|
1176
1189
|
session: TeamSession,
|
|
1190
|
+
run_context: RunContext,
|
|
1177
1191
|
user_id: Optional[str] = None,
|
|
1178
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
1179
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1180
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1181
1192
|
debug_mode: Optional[bool] = None,
|
|
1182
1193
|
**kwargs: Any,
|
|
1183
1194
|
) -> AsyncIterator[TeamRunOutputEvent]:
|
|
@@ -1188,12 +1199,13 @@ class Team:
|
|
|
1188
1199
|
# Prepare all possible arguments once
|
|
1189
1200
|
all_args = {
|
|
1190
1201
|
"run_output": run_output,
|
|
1202
|
+
"run_context": run_context,
|
|
1191
1203
|
"team": self,
|
|
1192
1204
|
"session": session,
|
|
1193
1205
|
"user_id": user_id,
|
|
1194
|
-
"session_state": session_state,
|
|
1195
|
-
"dependencies": dependencies,
|
|
1196
|
-
"metadata": metadata,
|
|
1206
|
+
"session_state": run_context.session_state,
|
|
1207
|
+
"dependencies": run_context.dependencies,
|
|
1208
|
+
"metadata": run_context.metadata,
|
|
1197
1209
|
"debug_mode": debug_mode or self.debug_mode,
|
|
1198
1210
|
}
|
|
1199
1211
|
all_args.update(kwargs)
|
|
@@ -1238,15 +1250,12 @@ class Team:
|
|
|
1238
1250
|
self,
|
|
1239
1251
|
run_response: TeamRunOutput,
|
|
1240
1252
|
session: TeamSession,
|
|
1241
|
-
|
|
1253
|
+
run_context: RunContext,
|
|
1242
1254
|
user_id: Optional[str] = None,
|
|
1243
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1244
1255
|
add_history_to_context: Optional[bool] = None,
|
|
1245
1256
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1246
1257
|
add_session_state_to_context: Optional[bool] = None,
|
|
1247
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1248
1258
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1249
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1250
1259
|
debug_mode: Optional[bool] = None,
|
|
1251
1260
|
**kwargs: Any,
|
|
1252
1261
|
) -> TeamRunOutput:
|
|
@@ -1280,10 +1289,8 @@ class Team:
|
|
|
1280
1289
|
hooks=self.pre_hooks, # type: ignore
|
|
1281
1290
|
run_response=run_response,
|
|
1282
1291
|
run_input=run_input,
|
|
1292
|
+
run_context=run_context,
|
|
1283
1293
|
session=session,
|
|
1284
|
-
session_state=session_state,
|
|
1285
|
-
dependencies=dependencies,
|
|
1286
|
-
metadata=metadata,
|
|
1287
1294
|
user_id=user_id,
|
|
1288
1295
|
debug_mode=debug_mode,
|
|
1289
1296
|
**kwargs,
|
|
@@ -1298,12 +1305,11 @@ class Team:
|
|
|
1298
1305
|
_tools = self._determine_tools_for_model(
|
|
1299
1306
|
model=self.model,
|
|
1300
1307
|
run_response=run_response,
|
|
1308
|
+
run_context=run_context,
|
|
1301
1309
|
team_run_context=team_run_context,
|
|
1302
1310
|
session=session,
|
|
1303
|
-
session_state=session_state,
|
|
1304
1311
|
user_id=user_id,
|
|
1305
1312
|
async_mode=False,
|
|
1306
|
-
knowledge_filters=knowledge_filters,
|
|
1307
1313
|
input_message=run_input.input_content,
|
|
1308
1314
|
images=run_input.images,
|
|
1309
1315
|
videos=run_input.videos,
|
|
@@ -1312,28 +1318,23 @@ class Team:
|
|
|
1312
1318
|
debug_mode=debug_mode,
|
|
1313
1319
|
add_history_to_context=add_history_to_context,
|
|
1314
1320
|
add_session_state_to_context=add_session_state_to_context,
|
|
1315
|
-
dependencies=dependencies,
|
|
1316
1321
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1317
|
-
metadata=metadata,
|
|
1318
1322
|
)
|
|
1319
1323
|
|
|
1320
1324
|
# 3. Prepare run messages
|
|
1321
1325
|
run_messages: RunMessages = self._get_run_messages(
|
|
1322
1326
|
run_response=run_response,
|
|
1323
1327
|
session=session,
|
|
1324
|
-
|
|
1328
|
+
run_context=run_context,
|
|
1325
1329
|
user_id=user_id,
|
|
1326
1330
|
input_message=run_input.input_content,
|
|
1327
1331
|
audio=run_input.audios,
|
|
1328
1332
|
images=run_input.images,
|
|
1329
1333
|
videos=run_input.videos,
|
|
1330
1334
|
files=run_input.files,
|
|
1331
|
-
knowledge_filters=knowledge_filters,
|
|
1332
1335
|
add_history_to_context=add_history_to_context,
|
|
1333
|
-
dependencies=dependencies,
|
|
1334
1336
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1335
1337
|
add_session_state_to_context=add_session_state_to_context,
|
|
1336
|
-
metadata=metadata,
|
|
1337
1338
|
tools=_tools,
|
|
1338
1339
|
**kwargs,
|
|
1339
1340
|
)
|
|
@@ -1386,7 +1387,7 @@ class Team:
|
|
|
1386
1387
|
|
|
1387
1388
|
# 8. Store media if enabled
|
|
1388
1389
|
if self.store_media:
|
|
1389
|
-
|
|
1390
|
+
store_media_util(run_response, model_response)
|
|
1390
1391
|
|
|
1391
1392
|
# 9. Convert response to structured format
|
|
1392
1393
|
self._convert_response_to_structured_format(run_response=run_response)
|
|
@@ -1396,10 +1397,8 @@ class Team:
|
|
|
1396
1397
|
iterator = self._execute_post_hooks(
|
|
1397
1398
|
hooks=self.post_hooks, # type: ignore
|
|
1398
1399
|
run_output=run_response,
|
|
1400
|
+
run_context=run_context,
|
|
1399
1401
|
session=session,
|
|
1400
|
-
session_state=session_state,
|
|
1401
|
-
dependencies=dependencies,
|
|
1402
|
-
metadata=metadata,
|
|
1403
1402
|
user_id=user_id,
|
|
1404
1403
|
debug_mode=debug_mode,
|
|
1405
1404
|
**kwargs,
|
|
@@ -1451,15 +1450,12 @@ class Team:
|
|
|
1451
1450
|
def _run_stream(
|
|
1452
1451
|
self,
|
|
1453
1452
|
run_response: TeamRunOutput,
|
|
1453
|
+
run_context: RunContext,
|
|
1454
1454
|
session: TeamSession,
|
|
1455
|
-
session_state: Dict[str, Any],
|
|
1456
1455
|
user_id: Optional[str] = None,
|
|
1457
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
1458
1456
|
add_history_to_context: Optional[bool] = None,
|
|
1459
1457
|
add_dependencies_to_context: Optional[bool] = None,
|
|
1460
1458
|
add_session_state_to_context: Optional[bool] = None,
|
|
1461
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
1462
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
1463
1459
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
1464
1460
|
stream_events: bool = False,
|
|
1465
1461
|
yield_run_response: bool = False,
|
|
@@ -1491,11 +1487,9 @@ class Team:
|
|
|
1491
1487
|
pre_hook_iterator = self._execute_pre_hooks(
|
|
1492
1488
|
hooks=self.pre_hooks, # type: ignore
|
|
1493
1489
|
run_response=run_response,
|
|
1490
|
+
run_context=run_context,
|
|
1494
1491
|
run_input=run_input,
|
|
1495
1492
|
session=session,
|
|
1496
|
-
session_state=session_state,
|
|
1497
|
-
dependencies=dependencies,
|
|
1498
|
-
metadata=metadata,
|
|
1499
1493
|
user_id=user_id,
|
|
1500
1494
|
debug_mode=debug_mode,
|
|
1501
1495
|
**kwargs,
|
|
@@ -1510,12 +1504,11 @@ class Team:
|
|
|
1510
1504
|
_tools = self._determine_tools_for_model(
|
|
1511
1505
|
model=self.model,
|
|
1512
1506
|
run_response=run_response,
|
|
1507
|
+
run_context=run_context,
|
|
1513
1508
|
team_run_context=team_run_context,
|
|
1514
1509
|
session=session,
|
|
1515
|
-
session_state=session_state,
|
|
1516
1510
|
user_id=user_id,
|
|
1517
1511
|
async_mode=False,
|
|
1518
|
-
knowledge_filters=knowledge_filters,
|
|
1519
1512
|
input_message=run_input.input_content,
|
|
1520
1513
|
images=run_input.images,
|
|
1521
1514
|
videos=run_input.videos,
|
|
@@ -1524,28 +1517,23 @@ class Team:
|
|
|
1524
1517
|
debug_mode=debug_mode,
|
|
1525
1518
|
add_history_to_context=add_history_to_context,
|
|
1526
1519
|
add_session_state_to_context=add_session_state_to_context,
|
|
1527
|
-
dependencies=dependencies,
|
|
1528
1520
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1529
|
-
metadata=metadata,
|
|
1530
1521
|
)
|
|
1531
1522
|
|
|
1532
1523
|
# 3. Prepare run messages
|
|
1533
1524
|
run_messages: RunMessages = self._get_run_messages(
|
|
1534
1525
|
run_response=run_response,
|
|
1526
|
+
run_context=run_context,
|
|
1535
1527
|
session=session,
|
|
1536
|
-
session_state=session_state,
|
|
1537
1528
|
user_id=user_id,
|
|
1538
1529
|
input_message=run_input.input_content,
|
|
1539
1530
|
audio=run_input.audios,
|
|
1540
1531
|
images=run_input.images,
|
|
1541
1532
|
videos=run_input.videos,
|
|
1542
1533
|
files=run_input.files,
|
|
1543
|
-
knowledge_filters=knowledge_filters,
|
|
1544
1534
|
add_history_to_context=add_history_to_context,
|
|
1545
|
-
dependencies=dependencies,
|
|
1546
1535
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
1547
1536
|
add_session_state_to_context=add_session_state_to_context,
|
|
1548
|
-
metadata=metadata,
|
|
1549
1537
|
tools=_tools,
|
|
1550
1538
|
**kwargs,
|
|
1551
1539
|
)
|
|
@@ -1593,6 +1581,7 @@ class Team:
|
|
|
1593
1581
|
tools=_tools,
|
|
1594
1582
|
response_format=response_format,
|
|
1595
1583
|
stream_events=stream_events,
|
|
1584
|
+
session_state=run_context.session_state,
|
|
1596
1585
|
):
|
|
1597
1586
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1598
1587
|
yield event
|
|
@@ -1604,6 +1593,7 @@ class Team:
|
|
|
1604
1593
|
tools=_tools,
|
|
1605
1594
|
response_format=response_format,
|
|
1606
1595
|
stream_events=stream_events,
|
|
1596
|
+
session_state=run_context.session_state,
|
|
1607
1597
|
):
|
|
1608
1598
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
1609
1599
|
from agno.run.team import IntermediateRunContentEvent, RunContentEvent
|
|
@@ -1647,9 +1637,7 @@ class Team:
|
|
|
1647
1637
|
yield from self._execute_post_hooks(
|
|
1648
1638
|
hooks=self.post_hooks, # type: ignore
|
|
1649
1639
|
run_output=run_response,
|
|
1650
|
-
|
|
1651
|
-
dependencies=dependencies,
|
|
1652
|
-
metadata=metadata,
|
|
1640
|
+
run_context=run_context,
|
|
1653
1641
|
session=session,
|
|
1654
1642
|
user_id=user_id,
|
|
1655
1643
|
debug_mode=debug_mode,
|
|
@@ -1840,14 +1828,14 @@ class Team:
|
|
|
1840
1828
|
# Normalise hook & guardails
|
|
1841
1829
|
if not self._hooks_normalised:
|
|
1842
1830
|
if self.pre_hooks:
|
|
1843
|
-
self.pre_hooks = normalize_hooks(self.pre_hooks)
|
|
1831
|
+
self.pre_hooks = normalize_hooks(self.pre_hooks) # type: ignore
|
|
1844
1832
|
if self.post_hooks:
|
|
1845
|
-
self.post_hooks = normalize_hooks(self.post_hooks)
|
|
1833
|
+
self.post_hooks = normalize_hooks(self.post_hooks) # type: ignore
|
|
1846
1834
|
self._hooks_normalised = True
|
|
1847
1835
|
|
|
1848
1836
|
session_id, user_id = self._initialize_session(session_id=session_id, user_id=user_id)
|
|
1849
1837
|
|
|
1850
|
-
image_artifacts, video_artifacts, audio_artifacts, file_artifacts =
|
|
1838
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = validate_media_object_id(
|
|
1851
1839
|
images=images, videos=videos, audios=audio, files=files
|
|
1852
1840
|
)
|
|
1853
1841
|
|
|
@@ -1872,11 +1860,20 @@ class Team:
|
|
|
1872
1860
|
session_state = self._load_session_state(session=team_session, session_state=session_state)
|
|
1873
1861
|
|
|
1874
1862
|
# Determine runtime dependencies
|
|
1875
|
-
|
|
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
|
+
)
|
|
1876
1873
|
|
|
1877
1874
|
# Resolve callable dependencies if present
|
|
1878
|
-
if
|
|
1879
|
-
self._resolve_run_dependencies(
|
|
1875
|
+
if run_context.dependencies is not None:
|
|
1876
|
+
self._resolve_run_dependencies(run_context=run_context)
|
|
1880
1877
|
|
|
1881
1878
|
# Determine runtime context parameters
|
|
1882
1879
|
add_dependencies = (
|
|
@@ -1889,12 +1886,9 @@ class Team:
|
|
|
1889
1886
|
)
|
|
1890
1887
|
add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
|
|
1891
1888
|
|
|
1892
|
-
# Initialize Knowledge Filters
|
|
1893
|
-
effective_filters = knowledge_filters
|
|
1894
|
-
|
|
1895
1889
|
# When filters are passed manually
|
|
1896
1890
|
if self.knowledge_filters or knowledge_filters:
|
|
1897
|
-
|
|
1891
|
+
run_context.knowledge_filters = self._get_effective_filters(knowledge_filters)
|
|
1898
1892
|
|
|
1899
1893
|
# Use stream override value when necessary
|
|
1900
1894
|
if stream is None:
|
|
@@ -1925,13 +1919,18 @@ class Team:
|
|
|
1925
1919
|
else:
|
|
1926
1920
|
merge_dictionaries(metadata, self.metadata)
|
|
1927
1921
|
|
|
1922
|
+
if metadata:
|
|
1923
|
+
run_context.metadata = metadata
|
|
1924
|
+
|
|
1928
1925
|
# Create a new run_response for this attempt
|
|
1929
1926
|
run_response = TeamRunOutput(
|
|
1930
1927
|
run_id=run_id,
|
|
1931
1928
|
session_id=session_id,
|
|
1929
|
+
user_id=user_id,
|
|
1932
1930
|
team_id=self.id,
|
|
1933
1931
|
team_name=self.name,
|
|
1934
|
-
metadata=metadata,
|
|
1932
|
+
metadata=run_context.metadata,
|
|
1933
|
+
session_state=run_context.session_state,
|
|
1935
1934
|
input=run_input,
|
|
1936
1935
|
)
|
|
1937
1936
|
|
|
@@ -1957,15 +1956,12 @@ class Team:
|
|
|
1957
1956
|
if stream:
|
|
1958
1957
|
response_iterator = self._run_stream(
|
|
1959
1958
|
run_response=run_response,
|
|
1959
|
+
run_context=run_context,
|
|
1960
1960
|
session=team_session,
|
|
1961
|
-
session_state=session_state,
|
|
1962
1961
|
user_id=user_id,
|
|
1963
|
-
knowledge_filters=effective_filters,
|
|
1964
1962
|
add_history_to_context=add_history,
|
|
1965
1963
|
add_dependencies_to_context=add_dependencies,
|
|
1966
1964
|
add_session_state_to_context=add_session_state,
|
|
1967
|
-
metadata=metadata,
|
|
1968
|
-
dependencies=run_dependencies,
|
|
1969
1965
|
response_format=response_format,
|
|
1970
1966
|
stream_events=stream_events,
|
|
1971
1967
|
yield_run_response=yield_run_response,
|
|
@@ -1977,15 +1973,12 @@ class Team:
|
|
|
1977
1973
|
else:
|
|
1978
1974
|
return self._run(
|
|
1979
1975
|
run_response=run_response,
|
|
1976
|
+
run_context=run_context,
|
|
1980
1977
|
session=team_session,
|
|
1981
|
-
session_state=session_state,
|
|
1982
1978
|
user_id=user_id,
|
|
1983
|
-
knowledge_filters=effective_filters,
|
|
1984
1979
|
add_history_to_context=add_history,
|
|
1985
1980
|
add_dependencies_to_context=add_dependencies,
|
|
1986
1981
|
add_session_state_to_context=add_session_state,
|
|
1987
|
-
metadata=metadata,
|
|
1988
|
-
dependencies=run_dependencies,
|
|
1989
1982
|
response_format=response_format,
|
|
1990
1983
|
debug_mode=debug_mode,
|
|
1991
1984
|
**kwargs,
|
|
@@ -2037,17 +2030,14 @@ class Team:
|
|
|
2037
2030
|
async def _arun(
|
|
2038
2031
|
self,
|
|
2039
2032
|
run_response: TeamRunOutput,
|
|
2033
|
+
run_context: RunContext,
|
|
2040
2034
|
session_id: str,
|
|
2041
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
2042
2035
|
user_id: Optional[str] = None,
|
|
2043
2036
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2044
2037
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2045
2038
|
add_session_state_to_context: Optional[bool] = None,
|
|
2046
2039
|
add_history_to_context: Optional[bool] = None,
|
|
2047
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2048
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
2049
2040
|
debug_mode: Optional[bool] = None,
|
|
2050
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
2051
2041
|
**kwargs: Any,
|
|
2052
2042
|
) -> TeamRunOutput:
|
|
2053
2043
|
"""Run the Team and return the response.
|
|
@@ -2073,8 +2063,8 @@ class Team:
|
|
|
2073
2063
|
|
|
2074
2064
|
register_run(run_response.run_id) # type: ignore
|
|
2075
2065
|
|
|
2076
|
-
if dependencies is not None:
|
|
2077
|
-
await self._aresolve_run_dependencies(
|
|
2066
|
+
if run_context.dependencies is not None:
|
|
2067
|
+
await self._aresolve_run_dependencies(run_context=run_context)
|
|
2078
2068
|
|
|
2079
2069
|
# 1. Read or create session. Reads from the database if provided.
|
|
2080
2070
|
if self._has_async_db():
|
|
@@ -2085,11 +2075,17 @@ class Team:
|
|
|
2085
2075
|
# 2. Update metadata and session state
|
|
2086
2076
|
self._update_metadata(session=team_session)
|
|
2087
2077
|
# Initialize session state
|
|
2088
|
-
session_state = self._initialize_session_state(
|
|
2089
|
-
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,
|
|
2090
2083
|
)
|
|
2091
2084
|
# Update session state from DB
|
|
2092
|
-
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
|
+
)
|
|
2093
2089
|
|
|
2094
2090
|
run_input = cast(TeamRunInput, run_response.input)
|
|
2095
2091
|
|
|
@@ -2098,13 +2094,11 @@ class Team:
|
|
|
2098
2094
|
pre_hook_iterator = self._aexecute_pre_hooks(
|
|
2099
2095
|
hooks=self.pre_hooks, # type: ignore
|
|
2100
2096
|
run_response=run_response,
|
|
2097
|
+
run_context=run_context,
|
|
2101
2098
|
run_input=run_input,
|
|
2102
2099
|
session=team_session,
|
|
2103
2100
|
user_id=user_id,
|
|
2104
2101
|
debug_mode=debug_mode,
|
|
2105
|
-
session_state=session_state,
|
|
2106
|
-
dependencies=dependencies,
|
|
2107
|
-
metadata=metadata,
|
|
2108
2102
|
**kwargs,
|
|
2109
2103
|
)
|
|
2110
2104
|
|
|
@@ -2119,12 +2113,11 @@ class Team:
|
|
|
2119
2113
|
_tools = self._determine_tools_for_model(
|
|
2120
2114
|
model=self.model,
|
|
2121
2115
|
run_response=run_response,
|
|
2116
|
+
run_context=run_context,
|
|
2122
2117
|
team_run_context=team_run_context,
|
|
2123
2118
|
session=team_session,
|
|
2124
|
-
session_state=session_state,
|
|
2125
2119
|
user_id=user_id,
|
|
2126
2120
|
async_mode=True,
|
|
2127
|
-
knowledge_filters=knowledge_filters,
|
|
2128
2121
|
input_message=run_input.input_content,
|
|
2129
2122
|
images=run_input.images,
|
|
2130
2123
|
videos=run_input.videos,
|
|
@@ -2134,27 +2127,22 @@ class Team:
|
|
|
2134
2127
|
add_history_to_context=add_history_to_context,
|
|
2135
2128
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2136
2129
|
add_session_state_to_context=add_session_state_to_context,
|
|
2137
|
-
dependencies=dependencies,
|
|
2138
|
-
metadata=metadata,
|
|
2139
2130
|
)
|
|
2140
2131
|
|
|
2141
2132
|
# 5. Prepare run messages
|
|
2142
2133
|
run_messages = await self._aget_run_messages(
|
|
2143
2134
|
run_response=run_response,
|
|
2135
|
+
run_context=run_context,
|
|
2144
2136
|
session=team_session, # type: ignore
|
|
2145
|
-
session_state=session_state,
|
|
2146
2137
|
user_id=user_id,
|
|
2147
2138
|
input_message=run_input.input_content,
|
|
2148
2139
|
audio=run_input.audios,
|
|
2149
2140
|
images=run_input.images,
|
|
2150
2141
|
videos=run_input.videos,
|
|
2151
2142
|
files=run_input.files,
|
|
2152
|
-
knowledge_filters=knowledge_filters,
|
|
2153
2143
|
add_history_to_context=add_history_to_context,
|
|
2154
|
-
dependencies=dependencies,
|
|
2155
2144
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2156
2145
|
add_session_state_to_context=add_session_state_to_context,
|
|
2157
|
-
metadata=metadata,
|
|
2158
2146
|
tools=_tools,
|
|
2159
2147
|
**kwargs,
|
|
2160
2148
|
)
|
|
@@ -2187,6 +2175,7 @@ class Team:
|
|
|
2187
2175
|
tool_call_limit=self.tool_call_limit,
|
|
2188
2176
|
response_format=response_format,
|
|
2189
2177
|
send_media_to_model=self.send_media_to_model,
|
|
2178
|
+
run_response=run_response,
|
|
2190
2179
|
) # type: ignore
|
|
2191
2180
|
|
|
2192
2181
|
# Check for cancellation after model call
|
|
@@ -2205,7 +2194,7 @@ class Team:
|
|
|
2205
2194
|
|
|
2206
2195
|
# 10. Store media if enabled
|
|
2207
2196
|
if self.store_media:
|
|
2208
|
-
|
|
2197
|
+
store_media_util(run_response, model_response)
|
|
2209
2198
|
|
|
2210
2199
|
# 11. Convert response to structured format
|
|
2211
2200
|
self._convert_response_to_structured_format(run_response=run_response)
|
|
@@ -2215,10 +2204,8 @@ class Team:
|
|
|
2215
2204
|
async for _ in self._aexecute_post_hooks(
|
|
2216
2205
|
hooks=self.post_hooks, # type: ignore
|
|
2217
2206
|
run_output=run_response,
|
|
2207
|
+
run_context=run_context,
|
|
2218
2208
|
session=team_session,
|
|
2219
|
-
session_state=session_state,
|
|
2220
|
-
dependencies=dependencies,
|
|
2221
|
-
metadata=metadata,
|
|
2222
2209
|
user_id=user_id,
|
|
2223
2210
|
debug_mode=debug_mode,
|
|
2224
2211
|
**kwargs,
|
|
@@ -2277,8 +2264,8 @@ class Team:
|
|
|
2277
2264
|
async def _arun_stream(
|
|
2278
2265
|
self,
|
|
2279
2266
|
run_response: TeamRunOutput,
|
|
2267
|
+
run_context: RunContext,
|
|
2280
2268
|
session_id: str,
|
|
2281
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
2282
2269
|
user_id: Optional[str] = None,
|
|
2283
2270
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2284
2271
|
stream_events: bool = False,
|
|
@@ -2287,10 +2274,7 @@ class Team:
|
|
|
2287
2274
|
add_dependencies_to_context: Optional[bool] = None,
|
|
2288
2275
|
add_session_state_to_context: Optional[bool] = None,
|
|
2289
2276
|
add_history_to_context: Optional[bool] = None,
|
|
2290
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
2291
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
2292
2277
|
debug_mode: Optional[bool] = None,
|
|
2293
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
2294
2278
|
**kwargs: Any,
|
|
2295
2279
|
) -> AsyncIterator[Union[TeamRunOutputEvent, RunOutputEvent, TeamRunOutput]]:
|
|
2296
2280
|
"""Run the Team and return the response.
|
|
@@ -2312,8 +2296,8 @@ class Team:
|
|
|
2312
2296
|
"""
|
|
2313
2297
|
|
|
2314
2298
|
# 1. Resolve dependencies
|
|
2315
|
-
if dependencies is not None:
|
|
2316
|
-
await self._aresolve_run_dependencies(
|
|
2299
|
+
if run_context.dependencies is not None:
|
|
2300
|
+
await self._aresolve_run_dependencies(run_context=run_context)
|
|
2317
2301
|
|
|
2318
2302
|
# 2. Read or create session. Reads from the database if provided.
|
|
2319
2303
|
if self._has_async_db():
|
|
@@ -2324,11 +2308,17 @@ class Team:
|
|
|
2324
2308
|
# 3. Update metadata and session state
|
|
2325
2309
|
self._update_metadata(session=team_session)
|
|
2326
2310
|
# Initialize session state
|
|
2327
|
-
session_state = self._initialize_session_state(
|
|
2328
|
-
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,
|
|
2329
2316
|
)
|
|
2330
2317
|
# Update session state from DB
|
|
2331
|
-
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
|
|
2332
2322
|
|
|
2333
2323
|
# 4. Execute pre-hooks
|
|
2334
2324
|
run_input = cast(TeamRunInput, run_response.input)
|
|
@@ -2337,13 +2327,11 @@ class Team:
|
|
|
2337
2327
|
pre_hook_iterator = self._aexecute_pre_hooks(
|
|
2338
2328
|
hooks=self.pre_hooks, # type: ignore
|
|
2339
2329
|
run_response=run_response,
|
|
2330
|
+
run_context=run_context,
|
|
2340
2331
|
run_input=run_input,
|
|
2341
2332
|
session=team_session,
|
|
2342
2333
|
user_id=user_id,
|
|
2343
2334
|
debug_mode=debug_mode,
|
|
2344
|
-
session_state=session_state,
|
|
2345
|
-
dependencies=dependencies,
|
|
2346
|
-
metadata=metadata,
|
|
2347
2335
|
**kwargs,
|
|
2348
2336
|
)
|
|
2349
2337
|
async for pre_hook_event in pre_hook_iterator:
|
|
@@ -2356,12 +2344,11 @@ class Team:
|
|
|
2356
2344
|
_tools = self._determine_tools_for_model(
|
|
2357
2345
|
model=self.model,
|
|
2358
2346
|
run_response=run_response,
|
|
2347
|
+
run_context=run_context,
|
|
2359
2348
|
team_run_context=team_run_context,
|
|
2360
2349
|
session=team_session, # type: ignore
|
|
2361
|
-
session_state=session_state,
|
|
2362
2350
|
user_id=user_id,
|
|
2363
2351
|
async_mode=True,
|
|
2364
|
-
knowledge_filters=knowledge_filters,
|
|
2365
2352
|
input_message=run_input.input_content,
|
|
2366
2353
|
images=run_input.images,
|
|
2367
2354
|
videos=run_input.videos,
|
|
@@ -2369,27 +2356,22 @@ class Team:
|
|
|
2369
2356
|
files=run_input.files,
|
|
2370
2357
|
debug_mode=debug_mode,
|
|
2371
2358
|
add_history_to_context=add_history_to_context,
|
|
2372
|
-
dependencies=dependencies,
|
|
2373
|
-
metadata=metadata,
|
|
2374
2359
|
)
|
|
2375
2360
|
|
|
2376
2361
|
# 6. Prepare run messages
|
|
2377
2362
|
run_messages = await self._aget_run_messages(
|
|
2378
2363
|
run_response=run_response,
|
|
2364
|
+
run_context=run_context,
|
|
2379
2365
|
session=team_session, # type: ignore
|
|
2380
|
-
session_state=session_state,
|
|
2381
2366
|
user_id=user_id,
|
|
2382
2367
|
input_message=run_input.input_content,
|
|
2383
2368
|
audio=run_input.audios,
|
|
2384
2369
|
images=run_input.images,
|
|
2385
2370
|
videos=run_input.videos,
|
|
2386
2371
|
files=run_input.files,
|
|
2387
|
-
knowledge_filters=knowledge_filters,
|
|
2388
2372
|
add_history_to_context=add_history_to_context,
|
|
2389
|
-
dependencies=dependencies,
|
|
2390
2373
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
2391
2374
|
add_session_state_to_context=add_session_state_to_context,
|
|
2392
|
-
metadata=metadata,
|
|
2393
2375
|
tools=_tools,
|
|
2394
2376
|
**kwargs,
|
|
2395
2377
|
)
|
|
@@ -2439,6 +2421,7 @@ class Team:
|
|
|
2439
2421
|
tools=_tools,
|
|
2440
2422
|
response_format=response_format,
|
|
2441
2423
|
stream_events=stream_events,
|
|
2424
|
+
session_state=run_context.session_state,
|
|
2442
2425
|
):
|
|
2443
2426
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
2444
2427
|
yield event
|
|
@@ -2450,6 +2433,7 @@ class Team:
|
|
|
2450
2433
|
tools=_tools,
|
|
2451
2434
|
response_format=response_format,
|
|
2452
2435
|
stream_events=stream_events,
|
|
2436
|
+
session_state=run_context.session_state,
|
|
2453
2437
|
):
|
|
2454
2438
|
raise_if_cancelled(run_response.run_id) # type: ignore
|
|
2455
2439
|
from agno.run.team import IntermediateRunContentEvent, RunContentEvent
|
|
@@ -2495,9 +2479,7 @@ class Team:
|
|
|
2495
2479
|
async for event in self._aexecute_post_hooks(
|
|
2496
2480
|
hooks=self.post_hooks, # type: ignore
|
|
2497
2481
|
run_output=run_response,
|
|
2498
|
-
|
|
2499
|
-
dependencies=dependencies,
|
|
2500
|
-
metadata=metadata,
|
|
2482
|
+
run_context=run_context,
|
|
2501
2483
|
session=team_session,
|
|
2502
2484
|
user_id=user_id,
|
|
2503
2485
|
debug_mode=debug_mode,
|
|
@@ -2694,9 +2676,9 @@ class Team:
|
|
|
2694
2676
|
# Normalise hook & guardails
|
|
2695
2677
|
if not self._hooks_normalised:
|
|
2696
2678
|
if self.pre_hooks:
|
|
2697
|
-
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
|
|
2698
2680
|
if self.post_hooks:
|
|
2699
|
-
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
|
|
2700
2682
|
self._hooks_normalised = True
|
|
2701
2683
|
|
|
2702
2684
|
session_id, user_id = self._initialize_session(session_id=session_id, user_id=user_id)
|
|
@@ -2704,12 +2686,12 @@ class Team:
|
|
|
2704
2686
|
# Initialize Team
|
|
2705
2687
|
self.initialize_team(debug_mode=debug_mode)
|
|
2706
2688
|
|
|
2707
|
-
image_artifacts, video_artifacts, audio_artifacts, file_artifacts =
|
|
2689
|
+
image_artifacts, video_artifacts, audio_artifacts, file_artifacts = validate_media_object_id(
|
|
2708
2690
|
images=images, videos=videos, audios=audio, files=files
|
|
2709
2691
|
)
|
|
2710
2692
|
|
|
2711
2693
|
# Resolve variables
|
|
2712
|
-
|
|
2694
|
+
dependencies = dependencies if dependencies is not None else self.dependencies
|
|
2713
2695
|
add_dependencies = (
|
|
2714
2696
|
add_dependencies_to_context if add_dependencies_to_context is not None else self.add_dependencies_to_context
|
|
2715
2697
|
)
|
|
@@ -2764,13 +2746,26 @@ class Team:
|
|
|
2764
2746
|
if self.knowledge_filters or knowledge_filters:
|
|
2765
2747
|
effective_filters = self._get_effective_filters(knowledge_filters)
|
|
2766
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
|
+
|
|
2767
2760
|
# Create a new run_response for this attempt
|
|
2768
2761
|
run_response = TeamRunOutput(
|
|
2769
2762
|
run_id=run_id,
|
|
2763
|
+
user_id=user_id,
|
|
2770
2764
|
session_id=session_id,
|
|
2771
2765
|
team_id=self.id,
|
|
2772
2766
|
team_name=self.name,
|
|
2773
|
-
metadata=metadata,
|
|
2767
|
+
metadata=run_context.metadata,
|
|
2768
|
+
session_state=run_context.session_state,
|
|
2774
2769
|
input=run_input,
|
|
2775
2770
|
)
|
|
2776
2771
|
|
|
@@ -2795,16 +2790,13 @@ class Team:
|
|
|
2795
2790
|
response_iterator = self._arun_stream(
|
|
2796
2791
|
input=validated_input,
|
|
2797
2792
|
run_response=run_response,
|
|
2793
|
+
run_context=run_context,
|
|
2798
2794
|
session_id=session_id,
|
|
2799
|
-
session_state=session_state,
|
|
2800
2795
|
user_id=user_id,
|
|
2801
|
-
knowledge_filters=effective_filters,
|
|
2802
2796
|
add_history_to_context=add_history,
|
|
2803
2797
|
add_dependencies_to_context=add_dependencies,
|
|
2804
2798
|
add_session_state_to_context=add_session_state,
|
|
2805
|
-
metadata=metadata,
|
|
2806
2799
|
response_format=response_format,
|
|
2807
|
-
dependencies=run_dependencies,
|
|
2808
2800
|
stream_events=stream_events,
|
|
2809
2801
|
yield_run_response=yield_run_response,
|
|
2810
2802
|
debug_mode=debug_mode,
|
|
@@ -2815,17 +2807,14 @@ class Team:
|
|
|
2815
2807
|
return self._arun( # type: ignore
|
|
2816
2808
|
input=validated_input,
|
|
2817
2809
|
run_response=run_response,
|
|
2810
|
+
run_context=run_context,
|
|
2818
2811
|
session_id=session_id,
|
|
2819
|
-
session_state=session_state,
|
|
2820
2812
|
user_id=user_id,
|
|
2821
|
-
knowledge_filters=effective_filters,
|
|
2822
2813
|
add_history_to_context=add_history,
|
|
2823
2814
|
add_dependencies_to_context=add_dependencies,
|
|
2824
2815
|
add_session_state_to_context=add_session_state,
|
|
2825
|
-
metadata=metadata,
|
|
2826
2816
|
response_format=response_format,
|
|
2827
2817
|
debug_mode=debug_mode,
|
|
2828
|
-
dependencies=run_dependencies,
|
|
2829
2818
|
**kwargs,
|
|
2830
2819
|
)
|
|
2831
2820
|
|
|
@@ -2871,25 +2860,6 @@ class Team:
|
|
|
2871
2860
|
|
|
2872
2861
|
raise Exception(f"Failed after {num_attempts} attempts.")
|
|
2873
2862
|
|
|
2874
|
-
def _store_media(self, run_response: TeamRunOutput, model_response: ModelResponse):
|
|
2875
|
-
"""Store media from model response in run_response for persistence"""
|
|
2876
|
-
# Handle generated media fields from ModelResponse (generated media)
|
|
2877
|
-
if model_response.images is not None:
|
|
2878
|
-
for image in model_response.images:
|
|
2879
|
-
self._add_image(image, run_response) # Generated images go to run_response.images
|
|
2880
|
-
|
|
2881
|
-
if model_response.videos is not None:
|
|
2882
|
-
for video in model_response.videos:
|
|
2883
|
-
self._add_video(video, run_response) # Generated videos go to run_response.videos
|
|
2884
|
-
|
|
2885
|
-
if model_response.audios is not None:
|
|
2886
|
-
for audio in model_response.audios:
|
|
2887
|
-
self._add_audio(audio, run_response) # Generated audio go to run_response.audio
|
|
2888
|
-
|
|
2889
|
-
if model_response.files is not None:
|
|
2890
|
-
for file in model_response.files:
|
|
2891
|
-
self._add_file(file, run_response) # Generated files go to run_response.files
|
|
2892
|
-
|
|
2893
2863
|
def _update_run_response(
|
|
2894
2864
|
self, model_response: ModelResponse, run_response: TeamRunOutput, run_messages: RunMessages
|
|
2895
2865
|
):
|
|
@@ -2930,6 +2900,12 @@ class Team:
|
|
|
2930
2900
|
if model_response.audio is not None:
|
|
2931
2901
|
run_response.response_audio = model_response.audio
|
|
2932
2902
|
|
|
2903
|
+
# Update session_state with changes from model response
|
|
2904
|
+
if model_response.updated_session_state is not None and run_response.session_state is not None:
|
|
2905
|
+
from agno.utils.merge_dict import merge_dictionaries
|
|
2906
|
+
|
|
2907
|
+
merge_dictionaries(run_response.session_state, model_response.updated_session_state)
|
|
2908
|
+
|
|
2933
2909
|
# Build a list of messages that should be added to the RunOutput
|
|
2934
2910
|
messages_for_run_response = [m for m in run_messages.messages if m.add_to_agent_memory]
|
|
2935
2911
|
|
|
@@ -2954,6 +2930,7 @@ class Team:
|
|
|
2954
2930
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
2955
2931
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
2956
2932
|
stream_events: bool = False,
|
|
2933
|
+
session_state: Optional[Dict[str, Any]] = None,
|
|
2957
2934
|
) -> Iterator[Union[TeamRunOutputEvent, RunOutputEvent]]:
|
|
2958
2935
|
self.model = cast(Model, self.model)
|
|
2959
2936
|
|
|
@@ -2985,6 +2962,7 @@ class Team:
|
|
|
2985
2962
|
reasoning_state=reasoning_state,
|
|
2986
2963
|
stream_events=stream_events,
|
|
2987
2964
|
parse_structured_output=self.should_parse_structured_output,
|
|
2965
|
+
session_state=session_state,
|
|
2988
2966
|
)
|
|
2989
2967
|
|
|
2990
2968
|
# 3. Update TeamRunOutput
|
|
@@ -3036,6 +3014,7 @@ class Team:
|
|
|
3036
3014
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
3037
3015
|
response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
|
|
3038
3016
|
stream_events: bool = False,
|
|
3017
|
+
session_state: Optional[Dict[str, Any]] = None,
|
|
3039
3018
|
) -> AsyncIterator[Union[TeamRunOutputEvent, RunOutputEvent]]:
|
|
3040
3019
|
self.model = cast(Model, self.model)
|
|
3041
3020
|
|
|
@@ -3058,6 +3037,7 @@ class Team:
|
|
|
3058
3037
|
tool_call_limit=self.tool_call_limit,
|
|
3059
3038
|
stream_model_response=stream_model_response,
|
|
3060
3039
|
send_media_to_model=self.send_media_to_model,
|
|
3040
|
+
run_response=run_response,
|
|
3061
3041
|
) # type: ignore
|
|
3062
3042
|
async for model_response_event in model_stream:
|
|
3063
3043
|
for event in self._handle_model_response_chunk(
|
|
@@ -3068,6 +3048,7 @@ class Team:
|
|
|
3068
3048
|
reasoning_state=reasoning_state,
|
|
3069
3049
|
stream_events=stream_events,
|
|
3070
3050
|
parse_structured_output=self.should_parse_structured_output,
|
|
3051
|
+
session_state=session_state,
|
|
3071
3052
|
):
|
|
3072
3053
|
yield event
|
|
3073
3054
|
|
|
@@ -3122,6 +3103,7 @@ class Team:
|
|
|
3122
3103
|
reasoning_state: Optional[Dict[str, Any]] = None,
|
|
3123
3104
|
stream_events: bool = False,
|
|
3124
3105
|
parse_structured_output: bool = False,
|
|
3106
|
+
session_state: Optional[Dict[str, Any]] = None,
|
|
3125
3107
|
) -> Iterator[Union[TeamRunOutputEvent, RunOutputEvent]]:
|
|
3126
3108
|
if isinstance(model_response_event, tuple(get_args(RunOutputEvent))) or isinstance(
|
|
3127
3109
|
model_response_event, tuple(get_args(TeamRunOutputEvent))
|
|
@@ -3241,7 +3223,9 @@ class Team:
|
|
|
3241
3223
|
|
|
3242
3224
|
if model_response_event.images is not None:
|
|
3243
3225
|
for image in model_response_event.images:
|
|
3244
|
-
|
|
3226
|
+
if run_response.images is None:
|
|
3227
|
+
run_response.images = []
|
|
3228
|
+
run_response.images.append(image)
|
|
3245
3229
|
|
|
3246
3230
|
should_yield = True
|
|
3247
3231
|
|
|
@@ -3299,22 +3283,39 @@ class Team:
|
|
|
3299
3283
|
|
|
3300
3284
|
# If the model response is a tool_call_completed, update the existing tool call in the run_response
|
|
3301
3285
|
elif model_response_event.event == ModelResponseEvent.tool_call_completed.value:
|
|
3302
|
-
if model_response_event.updated_session_state is not None
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3286
|
+
if model_response_event.updated_session_state is not None:
|
|
3287
|
+
# Update the session_state variable that TeamRunOutput references
|
|
3288
|
+
if session_state is not None:
|
|
3289
|
+
merge_dictionaries(session_state, model_response_event.updated_session_state)
|
|
3290
|
+
# Also update the DB session object
|
|
3291
|
+
if session.session_data is not None:
|
|
3292
|
+
merge_dictionaries(
|
|
3293
|
+
session.session_data["session_state"], model_response_event.updated_session_state
|
|
3294
|
+
)
|
|
3306
3295
|
|
|
3307
3296
|
if model_response_event.images is not None:
|
|
3308
3297
|
for image in model_response_event.images:
|
|
3309
|
-
|
|
3298
|
+
if run_response.images is None:
|
|
3299
|
+
run_response.images = []
|
|
3300
|
+
run_response.images.append(image)
|
|
3310
3301
|
|
|
3311
3302
|
if model_response_event.videos is not None:
|
|
3312
3303
|
for video in model_response_event.videos:
|
|
3313
|
-
|
|
3304
|
+
if run_response.videos is None:
|
|
3305
|
+
run_response.videos = []
|
|
3306
|
+
run_response.videos.append(video)
|
|
3314
3307
|
|
|
3315
3308
|
if model_response_event.audios is not None:
|
|
3316
3309
|
for audio in model_response_event.audios:
|
|
3317
|
-
|
|
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)
|
|
3318
3319
|
|
|
3319
3320
|
reasoning_step: Optional[ReasoningStep] = None
|
|
3320
3321
|
tool_executions_list = model_response_event.tool_executions
|
|
@@ -4123,55 +4124,6 @@ class Team:
|
|
|
4123
4124
|
if isinstance(member_response, TeamRunOutput) and member_response.member_responses:
|
|
4124
4125
|
member._scrub_member_responses(member_response.member_responses) # type: ignore
|
|
4125
4126
|
|
|
4126
|
-
def _validate_media_object_id(
|
|
4127
|
-
self,
|
|
4128
|
-
images: Optional[Sequence[Image]] = None,
|
|
4129
|
-
videos: Optional[Sequence[Video]] = None,
|
|
4130
|
-
audios: Optional[Sequence[Audio]] = None,
|
|
4131
|
-
files: Optional[Sequence[File]] = None,
|
|
4132
|
-
) -> tuple:
|
|
4133
|
-
image_list = None
|
|
4134
|
-
if images:
|
|
4135
|
-
image_list = []
|
|
4136
|
-
for img in images:
|
|
4137
|
-
if not img.id:
|
|
4138
|
-
from uuid import uuid4
|
|
4139
|
-
|
|
4140
|
-
img.id = str(uuid4())
|
|
4141
|
-
image_list.append(img)
|
|
4142
|
-
|
|
4143
|
-
video_list = None
|
|
4144
|
-
if videos:
|
|
4145
|
-
video_list = []
|
|
4146
|
-
for vid in videos:
|
|
4147
|
-
if not vid.id:
|
|
4148
|
-
from uuid import uuid4
|
|
4149
|
-
|
|
4150
|
-
vid.id = str(uuid4())
|
|
4151
|
-
video_list.append(vid)
|
|
4152
|
-
|
|
4153
|
-
audio_list = None
|
|
4154
|
-
if audios:
|
|
4155
|
-
audio_list = []
|
|
4156
|
-
for aud in audios:
|
|
4157
|
-
if not aud.id:
|
|
4158
|
-
from uuid import uuid4
|
|
4159
|
-
|
|
4160
|
-
aud.id = str(uuid4())
|
|
4161
|
-
audio_list.append(aud)
|
|
4162
|
-
|
|
4163
|
-
file_list = None
|
|
4164
|
-
if files:
|
|
4165
|
-
file_list = []
|
|
4166
|
-
for file in files:
|
|
4167
|
-
if not file.id:
|
|
4168
|
-
from uuid import uuid4
|
|
4169
|
-
|
|
4170
|
-
file.id = str(uuid4())
|
|
4171
|
-
file_list.append(file)
|
|
4172
|
-
|
|
4173
|
-
return image_list, video_list, audio_list, file_list
|
|
4174
|
-
|
|
4175
4127
|
def cli_app(
|
|
4176
4128
|
self,
|
|
4177
4129
|
input: Optional[str] = None,
|
|
@@ -4498,7 +4450,7 @@ class Team:
|
|
|
4498
4450
|
store_events=self.store_events,
|
|
4499
4451
|
)
|
|
4500
4452
|
else:
|
|
4501
|
-
|
|
4453
|
+
log_info(
|
|
4502
4454
|
f"Reasoning model: {reasoning_model.__class__.__name__} is not a native reasoning model, defaulting to manual Chain-of-Thought reasoning"
|
|
4503
4455
|
)
|
|
4504
4456
|
use_default_reasoning = True
|
|
@@ -4779,7 +4731,7 @@ class Team:
|
|
|
4779
4731
|
store_events=self.store_events,
|
|
4780
4732
|
)
|
|
4781
4733
|
else:
|
|
4782
|
-
|
|
4734
|
+
log_info(
|
|
4783
4735
|
f"Reasoning model: {reasoning_model.__class__.__name__} is not a native reasoning model, defaulting to manual Chain-of-Thought reasoning"
|
|
4784
4736
|
)
|
|
4785
4737
|
use_default_reasoning = True
|
|
@@ -4915,38 +4867,38 @@ class Team:
|
|
|
4915
4867
|
store_events=self.store_events,
|
|
4916
4868
|
)
|
|
4917
4869
|
|
|
4918
|
-
def _resolve_run_dependencies(self,
|
|
4870
|
+
def _resolve_run_dependencies(self, run_context: RunContext) -> None:
|
|
4919
4871
|
from inspect import signature
|
|
4920
4872
|
|
|
4921
4873
|
log_debug("Resolving dependencies")
|
|
4922
|
-
if not isinstance(dependencies, dict):
|
|
4874
|
+
if not isinstance(run_context.dependencies, dict):
|
|
4923
4875
|
log_warning("Dependencies is not a dict")
|
|
4924
4876
|
return
|
|
4925
4877
|
|
|
4926
|
-
for key, value in dependencies.items():
|
|
4878
|
+
for key, value in run_context.dependencies.items():
|
|
4927
4879
|
if not callable(value):
|
|
4928
|
-
dependencies[key] = value
|
|
4880
|
+
run_context.dependencies[key] = value
|
|
4929
4881
|
continue
|
|
4930
4882
|
|
|
4931
4883
|
try:
|
|
4932
4884
|
sig = signature(value)
|
|
4933
4885
|
resolved_value = value(agent=self) if "agent" in sig.parameters else value()
|
|
4934
4886
|
|
|
4935
|
-
dependencies[key] = resolved_value
|
|
4887
|
+
run_context.dependencies[key] = resolved_value
|
|
4936
4888
|
except Exception as e:
|
|
4937
4889
|
log_warning(f"Failed to resolve dependencies for {key}: {e}")
|
|
4938
4890
|
|
|
4939
|
-
async def _aresolve_run_dependencies(self,
|
|
4891
|
+
async def _aresolve_run_dependencies(self, run_context: RunContext) -> None:
|
|
4940
4892
|
from inspect import iscoroutine, signature
|
|
4941
4893
|
|
|
4942
4894
|
log_debug("Resolving context (async)")
|
|
4943
|
-
if not isinstance(dependencies, dict):
|
|
4895
|
+
if not isinstance(run_context.dependencies, dict):
|
|
4944
4896
|
log_warning("Dependencies is not a dict")
|
|
4945
4897
|
return
|
|
4946
4898
|
|
|
4947
|
-
for key, value in dependencies.items():
|
|
4899
|
+
for key, value in run_context.dependencies.items():
|
|
4948
4900
|
if not callable(value):
|
|
4949
|
-
dependencies[key] = value
|
|
4901
|
+
run_context.dependencies[key] = value
|
|
4950
4902
|
continue
|
|
4951
4903
|
|
|
4952
4904
|
try:
|
|
@@ -4956,7 +4908,7 @@ class Team:
|
|
|
4956
4908
|
if iscoroutine(resolved_value):
|
|
4957
4909
|
resolved_value = await resolved_value
|
|
4958
4910
|
|
|
4959
|
-
dependencies[key] = resolved_value
|
|
4911
|
+
run_context.dependencies[key] = resolved_value
|
|
4960
4912
|
except Exception as e:
|
|
4961
4913
|
log_warning(f"Failed to resolve context for '{key}': {e}")
|
|
4962
4914
|
|
|
@@ -4987,12 +4939,11 @@ class Team:
|
|
|
4987
4939
|
self,
|
|
4988
4940
|
model: Model,
|
|
4989
4941
|
run_response: TeamRunOutput,
|
|
4942
|
+
run_context: RunContext,
|
|
4990
4943
|
team_run_context: Dict[str, Any],
|
|
4991
4944
|
session: TeamSession,
|
|
4992
|
-
session_state: Dict[str, Any],
|
|
4993
4945
|
user_id: Optional[str] = None,
|
|
4994
4946
|
async_mode: bool = False,
|
|
4995
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
4996
4947
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
4997
4948
|
images: Optional[Sequence[Image]] = None,
|
|
4998
4949
|
videos: Optional[Sequence[Video]] = None,
|
|
@@ -5000,10 +4951,8 @@ class Team:
|
|
|
5000
4951
|
files: Optional[Sequence[File]] = None,
|
|
5001
4952
|
debug_mode: Optional[bool] = None,
|
|
5002
4953
|
add_history_to_context: Optional[bool] = None,
|
|
5003
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5004
4954
|
add_dependencies_to_context: Optional[bool] = None,
|
|
5005
4955
|
add_session_state_to_context: Optional[bool] = None,
|
|
5006
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5007
4956
|
check_mcp_tools: bool = True,
|
|
5008
4957
|
) -> List[Union[Function, dict]]:
|
|
5009
4958
|
# Prepare tools
|
|
@@ -5049,13 +4998,17 @@ class Team:
|
|
|
5049
4998
|
if self.enable_agentic_knowledge_filters:
|
|
5050
4999
|
_tools.append(
|
|
5051
5000
|
self._get_search_knowledge_base_with_agentic_filters_function(
|
|
5052
|
-
run_response=run_response,
|
|
5001
|
+
run_response=run_response,
|
|
5002
|
+
knowledge_filters=run_context.knowledge_filters,
|
|
5003
|
+
async_mode=async_mode,
|
|
5053
5004
|
)
|
|
5054
5005
|
)
|
|
5055
5006
|
else:
|
|
5056
5007
|
_tools.append(
|
|
5057
5008
|
self._get_search_knowledge_base_function(
|
|
5058
|
-
run_response=run_response,
|
|
5009
|
+
run_response=run_response,
|
|
5010
|
+
knowledge_filters=run_context.knowledge_filters,
|
|
5011
|
+
async_mode=async_mode,
|
|
5059
5012
|
)
|
|
5060
5013
|
)
|
|
5061
5014
|
|
|
@@ -5068,23 +5021,21 @@ class Team:
|
|
|
5068
5021
|
if self.determine_input_for_members is False:
|
|
5069
5022
|
user_message = self._get_user_message(
|
|
5070
5023
|
run_response=run_response,
|
|
5071
|
-
|
|
5024
|
+
run_context=run_context,
|
|
5072
5025
|
input_message=input_message,
|
|
5073
5026
|
user_id=user_id,
|
|
5074
5027
|
audio=audio,
|
|
5075
5028
|
images=images,
|
|
5076
5029
|
videos=videos,
|
|
5077
5030
|
files=files,
|
|
5078
|
-
dependencies=dependencies,
|
|
5079
5031
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
5080
|
-
metadata=metadata,
|
|
5081
5032
|
)
|
|
5082
5033
|
user_message_content = user_message.content if user_message is not None else None
|
|
5083
5034
|
|
|
5084
5035
|
delegate_task_func = self._get_delegate_task_function(
|
|
5085
5036
|
run_response=run_response,
|
|
5037
|
+
run_context=run_context,
|
|
5086
5038
|
session=session,
|
|
5087
|
-
session_state=session_state,
|
|
5088
5039
|
team_run_context=team_run_context,
|
|
5089
5040
|
input=user_message_content,
|
|
5090
5041
|
user_id=user_id,
|
|
@@ -5095,12 +5046,9 @@ class Team:
|
|
|
5095
5046
|
videos=videos, # type: ignore
|
|
5096
5047
|
audio=audio, # type: ignore
|
|
5097
5048
|
files=files, # type: ignore
|
|
5098
|
-
knowledge_filters=knowledge_filters,
|
|
5099
5049
|
add_history_to_context=add_history_to_context,
|
|
5100
|
-
dependencies=dependencies,
|
|
5101
5050
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
5102
5051
|
add_session_state_to_context=add_session_state_to_context,
|
|
5103
|
-
metadata=metadata,
|
|
5104
5052
|
debug_mode=debug_mode,
|
|
5105
5053
|
)
|
|
5106
5054
|
|
|
@@ -5207,8 +5155,9 @@ class Team:
|
|
|
5207
5155
|
|
|
5208
5156
|
for func in _functions: # type: ignore
|
|
5209
5157
|
if isinstance(func, Function):
|
|
5210
|
-
func.
|
|
5211
|
-
func.
|
|
5158
|
+
func._run_context = run_context
|
|
5159
|
+
func._session_state = run_context.session_state
|
|
5160
|
+
func._dependencies = run_context.dependencies
|
|
5212
5161
|
func._images = joint_images
|
|
5213
5162
|
func._files = joint_files
|
|
5214
5163
|
func._audios = joint_audios
|
|
@@ -5251,18 +5200,30 @@ class Team:
|
|
|
5251
5200
|
def get_system_message(
|
|
5252
5201
|
self,
|
|
5253
5202
|
session: TeamSession,
|
|
5254
|
-
|
|
5203
|
+
run_context: Optional[RunContext] = None,
|
|
5255
5204
|
user_id: Optional[str] = None,
|
|
5256
5205
|
audio: Optional[Sequence[Audio]] = None,
|
|
5257
5206
|
images: Optional[Sequence[Image]] = None,
|
|
5258
5207
|
videos: Optional[Sequence[Video]] = None,
|
|
5259
5208
|
files: Optional[Sequence[File]] = None,
|
|
5260
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5261
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5262
5209
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5263
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
|
|
5264
5214
|
) -> Optional[Message]:
|
|
5265
|
-
"""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
|
|
5266
5227
|
|
|
5267
5228
|
# 1. If the system_message is provided, use that.
|
|
5268
5229
|
if self.system_message is not None:
|
|
@@ -5545,19 +5506,26 @@ class Team:
|
|
|
5545
5506
|
async def aget_system_message(
|
|
5546
5507
|
self,
|
|
5547
5508
|
session: TeamSession,
|
|
5548
|
-
|
|
5509
|
+
run_context: Optional[RunContext] = None,
|
|
5549
5510
|
user_id: Optional[str] = None,
|
|
5550
5511
|
audio: Optional[Sequence[Audio]] = None,
|
|
5551
5512
|
images: Optional[Sequence[Image]] = None,
|
|
5552
5513
|
videos: Optional[Sequence[Video]] = None,
|
|
5553
5514
|
files: Optional[Sequence[File]] = None,
|
|
5554
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5555
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5556
5515
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5557
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
|
|
5558
5520
|
) -> Optional[Message]:
|
|
5559
5521
|
"""Get the system message for the team."""
|
|
5560
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
|
+
|
|
5561
5529
|
# 1. If the system_message is provided, use that.
|
|
5562
5530
|
if self.system_message is not None:
|
|
5563
5531
|
if isinstance(self.system_message, Message):
|
|
@@ -5651,7 +5619,7 @@ class Team:
|
|
|
5651
5619
|
additional_information.append(f"Your name is: {self.name}.")
|
|
5652
5620
|
|
|
5653
5621
|
if self.knowledge is not None and self.enable_agentic_knowledge_filters:
|
|
5654
|
-
valid_filters =
|
|
5622
|
+
valid_filters = await self.knowledge.aget_valid_filters()
|
|
5655
5623
|
if valid_filters:
|
|
5656
5624
|
valid_filters_str = ", ".join(valid_filters)
|
|
5657
5625
|
additional_information.append(
|
|
@@ -5827,8 +5795,8 @@ class Team:
|
|
|
5827
5795
|
f"<additional_context>\n{self.additional_context.strip()}\n</additional_context>\n\n"
|
|
5828
5796
|
)
|
|
5829
5797
|
|
|
5830
|
-
if
|
|
5831
|
-
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)
|
|
5832
5800
|
|
|
5833
5801
|
# Add the JSON output prompt if output_schema is provided and structured_outputs is False
|
|
5834
5802
|
if (
|
|
@@ -5848,20 +5816,17 @@ class Team:
|
|
|
5848
5816
|
self,
|
|
5849
5817
|
*,
|
|
5850
5818
|
run_response: TeamRunOutput,
|
|
5819
|
+
run_context: RunContext,
|
|
5851
5820
|
session: TeamSession,
|
|
5852
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
5853
5821
|
user_id: Optional[str] = None,
|
|
5854
5822
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
5855
5823
|
audio: Optional[Sequence[Audio]] = None,
|
|
5856
5824
|
images: Optional[Sequence[Image]] = None,
|
|
5857
5825
|
videos: Optional[Sequence[Video]] = None,
|
|
5858
5826
|
files: Optional[Sequence[File]] = None,
|
|
5859
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
5860
5827
|
add_history_to_context: Optional[bool] = None,
|
|
5861
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
5862
5828
|
add_dependencies_to_context: Optional[bool] = None,
|
|
5863
5829
|
add_session_state_to_context: Optional[bool] = None,
|
|
5864
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
5865
5830
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
5866
5831
|
**kwargs: Any,
|
|
5867
5832
|
) -> RunMessages:
|
|
@@ -5884,14 +5849,12 @@ class Team:
|
|
|
5884
5849
|
# 1. Add system message to run_messages
|
|
5885
5850
|
system_message = self.get_system_message(
|
|
5886
5851
|
session=session,
|
|
5887
|
-
|
|
5852
|
+
run_context=run_context,
|
|
5888
5853
|
user_id=user_id,
|
|
5889
5854
|
images=images,
|
|
5890
5855
|
audio=audio,
|
|
5891
5856
|
videos=videos,
|
|
5892
5857
|
files=files,
|
|
5893
|
-
dependencies=dependencies,
|
|
5894
|
-
metadata=metadata,
|
|
5895
5858
|
add_session_state_to_context=add_session_state_to_context,
|
|
5896
5859
|
tools=tools,
|
|
5897
5860
|
)
|
|
@@ -5965,17 +5928,14 @@ class Team:
|
|
|
5965
5928
|
# 5.1 Build user message if message is None, str or list
|
|
5966
5929
|
user_message = self._get_user_message(
|
|
5967
5930
|
run_response=run_response,
|
|
5968
|
-
|
|
5931
|
+
run_context=run_context,
|
|
5969
5932
|
input_message=input_message,
|
|
5970
5933
|
user_id=user_id,
|
|
5971
5934
|
audio=audio,
|
|
5972
5935
|
images=images,
|
|
5973
5936
|
videos=videos,
|
|
5974
5937
|
files=files,
|
|
5975
|
-
knowledge_filters=knowledge_filters,
|
|
5976
|
-
dependencies=dependencies,
|
|
5977
5938
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
5978
|
-
metadata=metadata,
|
|
5979
5939
|
**kwargs,
|
|
5980
5940
|
)
|
|
5981
5941
|
# Add user message to run_messages
|
|
@@ -5989,20 +5949,17 @@ class Team:
|
|
|
5989
5949
|
self,
|
|
5990
5950
|
*,
|
|
5991
5951
|
run_response: TeamRunOutput,
|
|
5952
|
+
run_context: RunContext,
|
|
5992
5953
|
session: TeamSession,
|
|
5993
|
-
session_state: Optional[Dict[str, Any]] = None,
|
|
5994
5954
|
user_id: Optional[str] = None,
|
|
5995
5955
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
5996
5956
|
audio: Optional[Sequence[Audio]] = None,
|
|
5997
5957
|
images: Optional[Sequence[Image]] = None,
|
|
5998
5958
|
videos: Optional[Sequence[Video]] = None,
|
|
5999
5959
|
files: Optional[Sequence[File]] = None,
|
|
6000
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6001
5960
|
add_history_to_context: Optional[bool] = None,
|
|
6002
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6003
5961
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6004
5962
|
add_session_state_to_context: Optional[bool] = None,
|
|
6005
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6006
5963
|
tools: Optional[List[Union[Function, dict]]] = None,
|
|
6007
5964
|
**kwargs: Any,
|
|
6008
5965
|
) -> RunMessages:
|
|
@@ -6025,14 +5982,12 @@ class Team:
|
|
|
6025
5982
|
# 1. Add system message to run_messages
|
|
6026
5983
|
system_message = await self.aget_system_message(
|
|
6027
5984
|
session=session,
|
|
6028
|
-
|
|
5985
|
+
run_context=run_context,
|
|
6029
5986
|
user_id=user_id,
|
|
6030
5987
|
images=images,
|
|
6031
5988
|
audio=audio,
|
|
6032
5989
|
videos=videos,
|
|
6033
5990
|
files=files,
|
|
6034
|
-
dependencies=dependencies,
|
|
6035
|
-
metadata=metadata,
|
|
6036
5991
|
add_session_state_to_context=add_session_state_to_context,
|
|
6037
5992
|
tools=tools,
|
|
6038
5993
|
)
|
|
@@ -6105,17 +6060,14 @@ class Team:
|
|
|
6105
6060
|
# 5.1 Build user message if message is None, str or list
|
|
6106
6061
|
user_message = self._get_user_message(
|
|
6107
6062
|
run_response=run_response,
|
|
6108
|
-
|
|
6063
|
+
run_context=run_context,
|
|
6109
6064
|
input_message=input_message,
|
|
6110
6065
|
user_id=user_id,
|
|
6111
6066
|
audio=audio,
|
|
6112
6067
|
images=images,
|
|
6113
6068
|
videos=videos,
|
|
6114
6069
|
files=files,
|
|
6115
|
-
knowledge_filters=knowledge_filters,
|
|
6116
|
-
dependencies=dependencies,
|
|
6117
6070
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
6118
|
-
metadata=metadata,
|
|
6119
6071
|
**kwargs,
|
|
6120
6072
|
)
|
|
6121
6073
|
# Add user message to run_messages
|
|
@@ -6129,17 +6081,14 @@ class Team:
|
|
|
6129
6081
|
self,
|
|
6130
6082
|
*,
|
|
6131
6083
|
run_response: TeamRunOutput,
|
|
6132
|
-
|
|
6084
|
+
run_context: RunContext,
|
|
6133
6085
|
input_message: Optional[Union[str, List, Dict, Message, BaseModel, List[Message]]] = None,
|
|
6134
6086
|
user_id: Optional[str] = None,
|
|
6135
6087
|
audio: Optional[Sequence[Audio]] = None,
|
|
6136
6088
|
images: Optional[Sequence[Image]] = None,
|
|
6137
6089
|
videos: Optional[Sequence[Video]] = None,
|
|
6138
6090
|
files: Optional[Sequence[File]] = None,
|
|
6139
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6140
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6141
6091
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6142
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6143
6092
|
**kwargs,
|
|
6144
6093
|
):
|
|
6145
6094
|
# Get references from the knowledge base to use in the user message
|
|
@@ -6223,7 +6172,7 @@ class Team:
|
|
|
6223
6172
|
retrieval_timer = Timer()
|
|
6224
6173
|
retrieval_timer.start()
|
|
6225
6174
|
docs_from_knowledge = self.get_relevant_docs_from_knowledge(
|
|
6226
|
-
query=user_msg_content, filters=knowledge_filters, **kwargs
|
|
6175
|
+
query=user_msg_content, filters=run_context.knowledge_filters, **kwargs
|
|
6227
6176
|
)
|
|
6228
6177
|
if docs_from_knowledge is not None:
|
|
6229
6178
|
references = MessageReferences(
|
|
@@ -6244,9 +6193,9 @@ class Team:
|
|
|
6244
6193
|
user_msg_content = self._format_message_with_state_variables(
|
|
6245
6194
|
user_msg_content,
|
|
6246
6195
|
user_id=user_id,
|
|
6247
|
-
session_state=session_state,
|
|
6248
|
-
dependencies=dependencies,
|
|
6249
|
-
metadata=metadata,
|
|
6196
|
+
session_state=run_context.session_state,
|
|
6197
|
+
dependencies=run_context.dependencies,
|
|
6198
|
+
metadata=run_context.metadata,
|
|
6250
6199
|
)
|
|
6251
6200
|
|
|
6252
6201
|
# Convert to string for concatenation operations
|
|
@@ -6264,9 +6213,9 @@ class Team:
|
|
|
6264
6213
|
user_msg_content_str += self._convert_documents_to_string(references.references) + "\n"
|
|
6265
6214
|
user_msg_content_str += "</references>"
|
|
6266
6215
|
# 4.2 Add context to user message
|
|
6267
|
-
if add_dependencies_to_context and dependencies is not None:
|
|
6216
|
+
if add_dependencies_to_context and run_context.dependencies is not None:
|
|
6268
6217
|
user_msg_content_str += "\n\n<additional context>\n"
|
|
6269
|
-
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"
|
|
6270
6219
|
user_msg_content_str += "</additional context>"
|
|
6271
6220
|
|
|
6272
6221
|
# Use the string version for the final content
|
|
@@ -6344,10 +6293,10 @@ class Team:
|
|
|
6344
6293
|
def _format_message_with_state_variables(
|
|
6345
6294
|
self,
|
|
6346
6295
|
message: Any,
|
|
6347
|
-
user_id: Optional[str] = None,
|
|
6348
6296
|
session_state: Optional[Dict[str, Any]] = None,
|
|
6349
6297
|
dependencies: Optional[Dict[str, Any]] = None,
|
|
6350
6298
|
metadata: Optional[Dict[str, Any]] = None,
|
|
6299
|
+
user_id: Optional[str] = None,
|
|
6351
6300
|
) -> Any:
|
|
6352
6301
|
"""Format a message with the session state variables."""
|
|
6353
6302
|
import re
|
|
@@ -6853,8 +6802,8 @@ class Team:
|
|
|
6853
6802
|
def _get_delegate_task_function(
|
|
6854
6803
|
self,
|
|
6855
6804
|
run_response: TeamRunOutput,
|
|
6805
|
+
run_context: RunContext,
|
|
6856
6806
|
session: TeamSession,
|
|
6857
|
-
session_state: Dict[str, Any],
|
|
6858
6807
|
team_run_context: Dict[str, Any],
|
|
6859
6808
|
user_id: Optional[str] = None,
|
|
6860
6809
|
stream: bool = False,
|
|
@@ -6865,12 +6814,9 @@ class Team:
|
|
|
6865
6814
|
videos: Optional[List[Video]] = None,
|
|
6866
6815
|
audio: Optional[List[Audio]] = None,
|
|
6867
6816
|
files: Optional[List[File]] = None,
|
|
6868
|
-
knowledge_filters: Optional[Dict[str, Any]] = None,
|
|
6869
6817
|
add_history_to_context: Optional[bool] = None,
|
|
6870
|
-
dependencies: Optional[Dict[str, Any]] = None,
|
|
6871
6818
|
add_dependencies_to_context: Optional[bool] = None,
|
|
6872
6819
|
add_session_state_to_context: Optional[bool] = None,
|
|
6873
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
6874
6820
|
debug_mode: Optional[bool] = None,
|
|
6875
6821
|
) -> Function:
|
|
6876
6822
|
if not images:
|
|
@@ -6986,7 +6932,7 @@ class Team:
|
|
|
6986
6932
|
session.upsert_run(member_agent_run_response)
|
|
6987
6933
|
|
|
6988
6934
|
# Update team session state
|
|
6989
|
-
merge_dictionaries(session_state, member_session_state_copy) # type: ignore
|
|
6935
|
+
merge_dictionaries(run_context.session_state, member_session_state_copy) # type: ignore
|
|
6990
6936
|
|
|
6991
6937
|
# Update the team media
|
|
6992
6938
|
if member_agent_run_response is not None:
|
|
@@ -7019,7 +6965,7 @@ class Team:
|
|
|
7019
6965
|
# Make sure for the member agent, we are using the agent logger
|
|
7020
6966
|
use_agent_logger()
|
|
7021
6967
|
|
|
7022
|
-
member_session_state_copy = copy(session_state)
|
|
6968
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7023
6969
|
|
|
7024
6970
|
if stream:
|
|
7025
6971
|
member_agent_run_response_stream = member_agent.run(
|
|
@@ -7035,11 +6981,11 @@ class Team:
|
|
|
7035
6981
|
stream=True,
|
|
7036
6982
|
stream_events=stream_events,
|
|
7037
6983
|
debug_mode=debug_mode,
|
|
7038
|
-
dependencies=dependencies,
|
|
6984
|
+
dependencies=run_context.dependencies,
|
|
7039
6985
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7040
|
-
metadata=metadata,
|
|
6986
|
+
metadata=run_context.metadata,
|
|
7041
6987
|
add_session_state_to_context=add_session_state_to_context,
|
|
7042
|
-
knowledge_filters=knowledge_filters
|
|
6988
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7043
6989
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7044
6990
|
else None,
|
|
7045
6991
|
yield_run_response=True,
|
|
@@ -7063,7 +7009,7 @@ class Team:
|
|
|
7063
7009
|
yield member_agent_run_output_event
|
|
7064
7010
|
else:
|
|
7065
7011
|
member_agent_run_response = member_agent.run( # type: ignore
|
|
7066
|
-
input=member_agent_task if not history else history,
|
|
7012
|
+
input=member_agent_task if not history else history, # type: ignore
|
|
7067
7013
|
user_id=user_id,
|
|
7068
7014
|
# All members have the same session_id
|
|
7069
7015
|
session_id=session.session_id,
|
|
@@ -7074,11 +7020,11 @@ class Team:
|
|
|
7074
7020
|
files=files,
|
|
7075
7021
|
stream=False,
|
|
7076
7022
|
debug_mode=debug_mode,
|
|
7077
|
-
dependencies=dependencies,
|
|
7023
|
+
dependencies=run_context.dependencies,
|
|
7078
7024
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7079
7025
|
add_session_state_to_context=add_session_state_to_context,
|
|
7080
|
-
metadata=metadata,
|
|
7081
|
-
knowledge_filters=knowledge_filters
|
|
7026
|
+
metadata=run_context.metadata,
|
|
7027
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7082
7028
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7083
7029
|
else None,
|
|
7084
7030
|
)
|
|
@@ -7116,7 +7062,10 @@ class Team:
|
|
|
7116
7062
|
use_team_logger()
|
|
7117
7063
|
|
|
7118
7064
|
_process_delegate_task_to_member(
|
|
7119
|
-
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
|
|
7120
7069
|
)
|
|
7121
7070
|
|
|
7122
7071
|
async def adelegate_task_to_member(
|
|
@@ -7146,7 +7095,7 @@ class Team:
|
|
|
7146
7095
|
# Make sure for the member agent, we are using the agent logger
|
|
7147
7096
|
use_agent_logger()
|
|
7148
7097
|
|
|
7149
|
-
member_session_state_copy = copy(session_state)
|
|
7098
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7150
7099
|
|
|
7151
7100
|
if stream:
|
|
7152
7101
|
member_agent_run_response_stream = member_agent.arun( # type: ignore
|
|
@@ -7162,11 +7111,11 @@ class Team:
|
|
|
7162
7111
|
stream=True,
|
|
7163
7112
|
stream_events=stream_events,
|
|
7164
7113
|
debug_mode=debug_mode,
|
|
7165
|
-
dependencies=dependencies,
|
|
7114
|
+
dependencies=run_context.dependencies,
|
|
7166
7115
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7167
7116
|
add_session_state_to_context=add_session_state_to_context,
|
|
7168
|
-
metadata=metadata,
|
|
7169
|
-
knowledge_filters=knowledge_filters
|
|
7117
|
+
metadata=run_context.metadata,
|
|
7118
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7170
7119
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7171
7120
|
else None,
|
|
7172
7121
|
yield_run_response=True,
|
|
@@ -7201,11 +7150,11 @@ class Team:
|
|
|
7201
7150
|
files=files,
|
|
7202
7151
|
stream=False,
|
|
7203
7152
|
debug_mode=debug_mode,
|
|
7204
|
-
dependencies=dependencies,
|
|
7153
|
+
dependencies=run_context.dependencies,
|
|
7205
7154
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7206
7155
|
add_session_state_to_context=add_session_state_to_context,
|
|
7207
|
-
metadata=metadata,
|
|
7208
|
-
knowledge_filters=knowledge_filters
|
|
7156
|
+
metadata=run_context.metadata,
|
|
7157
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7209
7158
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7210
7159
|
else None,
|
|
7211
7160
|
)
|
|
@@ -7239,7 +7188,10 @@ class Team:
|
|
|
7239
7188
|
use_team_logger()
|
|
7240
7189
|
|
|
7241
7190
|
_process_delegate_task_to_member(
|
|
7242
|
-
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
|
|
7243
7195
|
)
|
|
7244
7196
|
|
|
7245
7197
|
# When the task should be delegated to all members
|
|
@@ -7260,7 +7212,7 @@ class Team:
|
|
|
7260
7212
|
member_agent=member_agent, task_description=task
|
|
7261
7213
|
)
|
|
7262
7214
|
|
|
7263
|
-
member_session_state_copy = copy(session_state)
|
|
7215
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7264
7216
|
if stream:
|
|
7265
7217
|
member_agent_run_response_stream = member_agent.run(
|
|
7266
7218
|
input=member_agent_task if not history else history,
|
|
@@ -7274,14 +7226,14 @@ class Team:
|
|
|
7274
7226
|
files=files,
|
|
7275
7227
|
stream=True,
|
|
7276
7228
|
stream_events=stream_events,
|
|
7277
|
-
knowledge_filters=knowledge_filters
|
|
7229
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7278
7230
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7279
7231
|
else None,
|
|
7280
7232
|
debug_mode=debug_mode,
|
|
7281
|
-
dependencies=dependencies,
|
|
7233
|
+
dependencies=run_context.dependencies,
|
|
7282
7234
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7283
7235
|
add_session_state_to_context=add_session_state_to_context,
|
|
7284
|
-
metadata=metadata,
|
|
7236
|
+
metadata=run_context.metadata,
|
|
7285
7237
|
yield_run_response=True,
|
|
7286
7238
|
)
|
|
7287
7239
|
member_agent_run_response = None
|
|
@@ -7314,14 +7266,14 @@ class Team:
|
|
|
7314
7266
|
audio=audio,
|
|
7315
7267
|
files=files,
|
|
7316
7268
|
stream=False,
|
|
7317
|
-
knowledge_filters=knowledge_filters
|
|
7269
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7318
7270
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7319
7271
|
else None,
|
|
7320
7272
|
debug_mode=debug_mode,
|
|
7321
|
-
dependencies=dependencies,
|
|
7273
|
+
dependencies=run_context.dependencies,
|
|
7322
7274
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7323
7275
|
add_session_state_to_context=add_session_state_to_context,
|
|
7324
|
-
metadata=metadata,
|
|
7276
|
+
metadata=run_context.metadata,
|
|
7325
7277
|
)
|
|
7326
7278
|
|
|
7327
7279
|
check_if_run_cancelled(member_agent_run_response) # type: ignore
|
|
@@ -7348,7 +7300,10 @@ class Team:
|
|
|
7348
7300
|
yield f"Agent {member_agent.name}: Error - {str(e)}"
|
|
7349
7301
|
|
|
7350
7302
|
_process_delegate_task_to_member(
|
|
7351
|
-
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
|
|
7352
7307
|
)
|
|
7353
7308
|
|
|
7354
7309
|
# After all the member runs, switch back to the team logger
|
|
@@ -7374,7 +7329,7 @@ class Team:
|
|
|
7374
7329
|
member_agent_task, history = _setup_delegate_task_to_member(
|
|
7375
7330
|
member_agent=agent, task_description=task
|
|
7376
7331
|
) # type: ignore
|
|
7377
|
-
member_session_state_copy = copy(session_state)
|
|
7332
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7378
7333
|
|
|
7379
7334
|
member_stream = agent.arun( # type: ignore
|
|
7380
7335
|
input=member_agent_task if not history else history,
|
|
@@ -7388,13 +7343,13 @@ class Team:
|
|
|
7388
7343
|
stream=True,
|
|
7389
7344
|
stream_events=stream_events,
|
|
7390
7345
|
debug_mode=debug_mode,
|
|
7391
|
-
knowledge_filters=knowledge_filters
|
|
7346
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7392
7347
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7393
7348
|
else None,
|
|
7394
|
-
dependencies=dependencies,
|
|
7349
|
+
dependencies=run_context.dependencies,
|
|
7395
7350
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7396
7351
|
add_session_state_to_context=add_session_state_to_context,
|
|
7397
|
-
metadata=metadata,
|
|
7352
|
+
metadata=run_context.metadata,
|
|
7398
7353
|
yield_run_response=True,
|
|
7399
7354
|
)
|
|
7400
7355
|
member_agent_run_response = None
|
|
@@ -7412,7 +7367,10 @@ class Team:
|
|
|
7412
7367
|
await queue.put(member_agent_run_output_event)
|
|
7413
7368
|
finally:
|
|
7414
7369
|
_process_delegate_task_to_member(
|
|
7415
|
-
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
|
|
7416
7374
|
)
|
|
7417
7375
|
await queue.put(done_marker)
|
|
7418
7376
|
|
|
@@ -7451,7 +7409,7 @@ class Team:
|
|
|
7451
7409
|
)
|
|
7452
7410
|
|
|
7453
7411
|
async def run_member_agent(agent=current_agent) -> str:
|
|
7454
|
-
member_session_state_copy = copy(session_state)
|
|
7412
|
+
member_session_state_copy = copy(run_context.session_state)
|
|
7455
7413
|
|
|
7456
7414
|
member_agent_run_response = await agent.arun(
|
|
7457
7415
|
input=member_agent_task if not history else history,
|
|
@@ -7466,18 +7424,21 @@ class Team:
|
|
|
7466
7424
|
stream=False,
|
|
7467
7425
|
stream_events=stream_events,
|
|
7468
7426
|
debug_mode=debug_mode,
|
|
7469
|
-
knowledge_filters=knowledge_filters
|
|
7427
|
+
knowledge_filters=run_context.knowledge_filters
|
|
7470
7428
|
if not member_agent.knowledge_filters and member_agent.knowledge
|
|
7471
7429
|
else None,
|
|
7472
|
-
dependencies=dependencies,
|
|
7430
|
+
dependencies=run_context.dependencies,
|
|
7473
7431
|
add_dependencies_to_context=add_dependencies_to_context,
|
|
7474
7432
|
add_session_state_to_context=add_session_state_to_context,
|
|
7475
|
-
metadata=metadata,
|
|
7433
|
+
metadata=run_context.metadata,
|
|
7476
7434
|
)
|
|
7477
7435
|
check_if_run_cancelled(member_agent_run_response)
|
|
7478
7436
|
|
|
7479
7437
|
_process_delegate_task_to_member(
|
|
7480
|
-
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
|
|
7481
7442
|
)
|
|
7482
7443
|
|
|
7483
7444
|
member_name = member_agent.name if member_agent.name else f"agent_{member_agent_index}"
|
|
@@ -8280,37 +8241,9 @@ class Team:
|
|
|
8280
8241
|
return await self.memory_manager.aget_user_memories(user_id=user_id)
|
|
8281
8242
|
|
|
8282
8243
|
###########################################################################
|
|
8283
|
-
# Handle
|
|
8244
|
+
# Handle reasoning content
|
|
8284
8245
|
###########################################################################
|
|
8285
8246
|
|
|
8286
|
-
def _add_image(self, image: Image, run_response: TeamRunOutput) -> None:
|
|
8287
|
-
"""Add an image to both the agent's stateful storage and the current run response"""
|
|
8288
|
-
# Add to run response
|
|
8289
|
-
if run_response.images is None:
|
|
8290
|
-
run_response.images = []
|
|
8291
|
-
run_response.images.append(image)
|
|
8292
|
-
|
|
8293
|
-
def _add_video(self, video: Video, run_response: TeamRunOutput) -> None:
|
|
8294
|
-
"""Add a video to both the agent's stateful storage and the current run response"""
|
|
8295
|
-
# Add to run response
|
|
8296
|
-
if run_response.videos is None:
|
|
8297
|
-
run_response.videos = []
|
|
8298
|
-
run_response.videos.append(video)
|
|
8299
|
-
|
|
8300
|
-
def _add_audio(self, audio: Audio, run_response: TeamRunOutput) -> None:
|
|
8301
|
-
"""Add audio to both the agent's stateful storage and the current run response"""
|
|
8302
|
-
# Add to run response
|
|
8303
|
-
if run_response.audio is None:
|
|
8304
|
-
run_response.audio = []
|
|
8305
|
-
run_response.audio.append(audio)
|
|
8306
|
-
|
|
8307
|
-
def _add_file(self, file: File, run_response: TeamRunOutput) -> None:
|
|
8308
|
-
"""Add file to both the agent's stateful storage and the current run response"""
|
|
8309
|
-
# Add to run response
|
|
8310
|
-
if run_response.files is None:
|
|
8311
|
-
run_response.files = []
|
|
8312
|
-
run_response.files.append(file)
|
|
8313
|
-
|
|
8314
8247
|
def _update_reasoning_content_from_tool_call(
|
|
8315
8248
|
self, run_response: TeamRunOutput, tool_name: str, tool_args: Dict[str, Any]
|
|
8316
8249
|
) -> Optional[ReasoningStep]:
|
|
@@ -8506,7 +8439,7 @@ class Team:
|
|
|
8506
8439
|
|
|
8507
8440
|
# Validate the filters against known valid filter keys
|
|
8508
8441
|
if self.knowledge is not None:
|
|
8509
|
-
valid_filters, invalid_keys = self.knowledge.
|
|
8442
|
+
valid_filters, invalid_keys = await self.knowledge.async_validate_filters(filters) # type: ignore
|
|
8510
8443
|
|
|
8511
8444
|
# Warn about invalid filter keys
|
|
8512
8445
|
if invalid_keys:
|