agno 2.2.6__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/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[List[Callable[..., Any]], List[BaseGuardrail]]] = None
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[List[Callable[..., Any]], List[BaseGuardrail]]] = None
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[List[Callable[..., Any]], List[BaseGuardrail]]] = None,
499
- post_hooks: Optional[Union[List[Callable[..., Any]], List[BaseGuardrail]]] = None,
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
- session_state: Optional[Dict[str, Any]] = None,
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
- session_state: Optional[Dict[str, Any]] = None,
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
- session_state: Optional[Dict[str, Any]] = None,
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
- session_state: Dict[str, Any],
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
- session_state=session_state,
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
- self._store_media(run_response, model_response)
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
- session_state=session_state,
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 = self._validate_media_object_id(
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
- run_dependencies = dependencies if dependencies is not None else self.dependencies
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 run_dependencies is not None:
1895
- self._resolve_run_dependencies(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
- effective_filters = self._get_effective_filters(knowledge_filters)
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(dependencies=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 {}, user_id=user_id, session_id=session_id, run_id=run_response.run_id
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 = self._load_session_state(session=team_session, session_state=session_state) # type: ignore
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
- self._store_media(run_response, model_response)
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(dependencies=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 {}, user_id=user_id, session_id=session_id, run_id=run_response.run_id
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 = self._load_session_state(session=team_session, session_state=session_state) # type: ignore
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
- session_state=session_state,
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 = self._validate_media_object_id(
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
- run_dependencies = dependencies if dependencies is not None else self.dependencies
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
- self._add_image(image, run_response)
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
- self._add_image(image, run_response)
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
- self._add_video(video, run_response)
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
- self._add_audio(audio, run_response)
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, dependencies: Optional[Dict[str, Any]] = None) -> None:
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, dependencies: Optional[Dict[str, Any]] = None) -> None:
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, knowledge_filters=knowledge_filters, async_mode=async_mode
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, knowledge_filters=knowledge_filters, async_mode=async_mode
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
- session_state=session_state,
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._session_state = session_state
5247
- func._dependencies = dependencies
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
- session_state: Optional[Dict[str, Any]] = None,
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
- session_state: Optional[Dict[str, Any]] = None,
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 = getattr(self.knowledge, "valid_metadata_filters", None)
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 self.add_session_state_to_context:
5867
- system_message_content += f"<session_state>\n{session_state}\n</session_state>\n\n"
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
- session_state=session_state,
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
- session_state=session_state,
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
- session_state=session_state,
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
- session_state=session_state,
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
- session_state: Optional[Dict[str, Any]] = None,
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, member_agent, member_agent_task, member_session_state_copy
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, member_agent, member_agent_task, member_session_state_copy
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, member_agent, member_agent_task, member_session_state_copy
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, member_agent, member_agent_task, member_session_state_copy
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, member_agent, member_agent_task, member_session_state_copy
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 images, videos and audio
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.validate_filters(filters) # type: ignore
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: