agno 2.0.1__py3-none-any.whl → 2.3.0__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.
Files changed (314) hide show
  1. agno/agent/agent.py +6015 -2823
  2. agno/api/api.py +2 -0
  3. agno/api/os.py +1 -1
  4. agno/culture/__init__.py +3 -0
  5. agno/culture/manager.py +956 -0
  6. agno/db/async_postgres/__init__.py +3 -0
  7. agno/db/base.py +385 -6
  8. agno/db/dynamo/dynamo.py +388 -81
  9. agno/db/dynamo/schemas.py +47 -10
  10. agno/db/dynamo/utils.py +63 -4
  11. agno/db/firestore/firestore.py +435 -64
  12. agno/db/firestore/schemas.py +11 -0
  13. agno/db/firestore/utils.py +102 -4
  14. agno/db/gcs_json/gcs_json_db.py +384 -42
  15. agno/db/gcs_json/utils.py +60 -26
  16. agno/db/in_memory/in_memory_db.py +351 -66
  17. agno/db/in_memory/utils.py +60 -2
  18. agno/db/json/json_db.py +339 -48
  19. agno/db/json/utils.py +60 -26
  20. agno/db/migrations/manager.py +199 -0
  21. agno/db/migrations/v1_to_v2.py +510 -37
  22. agno/db/migrations/versions/__init__.py +0 -0
  23. agno/db/migrations/versions/v2_3_0.py +938 -0
  24. agno/db/mongo/__init__.py +15 -1
  25. agno/db/mongo/async_mongo.py +2036 -0
  26. agno/db/mongo/mongo.py +653 -76
  27. agno/db/mongo/schemas.py +13 -0
  28. agno/db/mongo/utils.py +80 -8
  29. agno/db/mysql/mysql.py +687 -25
  30. agno/db/mysql/schemas.py +61 -37
  31. agno/db/mysql/utils.py +60 -2
  32. agno/db/postgres/__init__.py +2 -1
  33. agno/db/postgres/async_postgres.py +2001 -0
  34. agno/db/postgres/postgres.py +676 -57
  35. agno/db/postgres/schemas.py +43 -18
  36. agno/db/postgres/utils.py +164 -2
  37. agno/db/redis/redis.py +344 -38
  38. agno/db/redis/schemas.py +18 -0
  39. agno/db/redis/utils.py +60 -2
  40. agno/db/schemas/__init__.py +2 -1
  41. agno/db/schemas/culture.py +120 -0
  42. agno/db/schemas/memory.py +13 -0
  43. agno/db/singlestore/schemas.py +26 -1
  44. agno/db/singlestore/singlestore.py +687 -53
  45. agno/db/singlestore/utils.py +60 -2
  46. agno/db/sqlite/__init__.py +2 -1
  47. agno/db/sqlite/async_sqlite.py +2371 -0
  48. agno/db/sqlite/schemas.py +24 -0
  49. agno/db/sqlite/sqlite.py +774 -85
  50. agno/db/sqlite/utils.py +168 -5
  51. agno/db/surrealdb/__init__.py +3 -0
  52. agno/db/surrealdb/metrics.py +292 -0
  53. agno/db/surrealdb/models.py +309 -0
  54. agno/db/surrealdb/queries.py +71 -0
  55. agno/db/surrealdb/surrealdb.py +1361 -0
  56. agno/db/surrealdb/utils.py +147 -0
  57. agno/db/utils.py +50 -22
  58. agno/eval/accuracy.py +50 -43
  59. agno/eval/performance.py +6 -3
  60. agno/eval/reliability.py +6 -3
  61. agno/eval/utils.py +33 -16
  62. agno/exceptions.py +68 -1
  63. agno/filters.py +354 -0
  64. agno/guardrails/__init__.py +6 -0
  65. agno/guardrails/base.py +19 -0
  66. agno/guardrails/openai.py +144 -0
  67. agno/guardrails/pii.py +94 -0
  68. agno/guardrails/prompt_injection.py +52 -0
  69. agno/integrations/discord/client.py +1 -0
  70. agno/knowledge/chunking/agentic.py +13 -10
  71. agno/knowledge/chunking/fixed.py +1 -1
  72. agno/knowledge/chunking/semantic.py +40 -8
  73. agno/knowledge/chunking/strategy.py +59 -15
  74. agno/knowledge/embedder/aws_bedrock.py +9 -4
  75. agno/knowledge/embedder/azure_openai.py +54 -0
  76. agno/knowledge/embedder/base.py +2 -0
  77. agno/knowledge/embedder/cohere.py +184 -5
  78. agno/knowledge/embedder/fastembed.py +1 -1
  79. agno/knowledge/embedder/google.py +79 -1
  80. agno/knowledge/embedder/huggingface.py +9 -4
  81. agno/knowledge/embedder/jina.py +63 -0
  82. agno/knowledge/embedder/mistral.py +78 -11
  83. agno/knowledge/embedder/nebius.py +1 -1
  84. agno/knowledge/embedder/ollama.py +13 -0
  85. agno/knowledge/embedder/openai.py +37 -65
  86. agno/knowledge/embedder/sentence_transformer.py +8 -4
  87. agno/knowledge/embedder/vllm.py +262 -0
  88. agno/knowledge/embedder/voyageai.py +69 -16
  89. agno/knowledge/knowledge.py +594 -186
  90. agno/knowledge/reader/base.py +9 -2
  91. agno/knowledge/reader/csv_reader.py +8 -10
  92. agno/knowledge/reader/docx_reader.py +5 -6
  93. agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
  94. agno/knowledge/reader/json_reader.py +6 -5
  95. agno/knowledge/reader/markdown_reader.py +13 -13
  96. agno/knowledge/reader/pdf_reader.py +43 -68
  97. agno/knowledge/reader/pptx_reader.py +101 -0
  98. agno/knowledge/reader/reader_factory.py +51 -6
  99. agno/knowledge/reader/s3_reader.py +3 -15
  100. agno/knowledge/reader/tavily_reader.py +194 -0
  101. agno/knowledge/reader/text_reader.py +13 -13
  102. agno/knowledge/reader/web_search_reader.py +2 -43
  103. agno/knowledge/reader/website_reader.py +43 -25
  104. agno/knowledge/reranker/__init__.py +2 -8
  105. agno/knowledge/types.py +9 -0
  106. agno/knowledge/utils.py +20 -0
  107. agno/media.py +72 -0
  108. agno/memory/manager.py +336 -82
  109. agno/models/aimlapi/aimlapi.py +2 -2
  110. agno/models/anthropic/claude.py +183 -37
  111. agno/models/aws/bedrock.py +52 -112
  112. agno/models/aws/claude.py +33 -1
  113. agno/models/azure/ai_foundry.py +33 -15
  114. agno/models/azure/openai_chat.py +25 -8
  115. agno/models/base.py +999 -519
  116. agno/models/cerebras/cerebras.py +19 -13
  117. agno/models/cerebras/cerebras_openai.py +8 -5
  118. agno/models/cohere/chat.py +27 -1
  119. agno/models/cometapi/__init__.py +5 -0
  120. agno/models/cometapi/cometapi.py +57 -0
  121. agno/models/dashscope/dashscope.py +1 -0
  122. agno/models/deepinfra/deepinfra.py +2 -2
  123. agno/models/deepseek/deepseek.py +2 -2
  124. agno/models/fireworks/fireworks.py +2 -2
  125. agno/models/google/gemini.py +103 -31
  126. agno/models/groq/groq.py +28 -11
  127. agno/models/huggingface/huggingface.py +2 -1
  128. agno/models/internlm/internlm.py +2 -2
  129. agno/models/langdb/langdb.py +4 -4
  130. agno/models/litellm/chat.py +18 -1
  131. agno/models/litellm/litellm_openai.py +2 -2
  132. agno/models/llama_cpp/__init__.py +5 -0
  133. agno/models/llama_cpp/llama_cpp.py +22 -0
  134. agno/models/message.py +139 -0
  135. agno/models/meta/llama.py +27 -10
  136. agno/models/meta/llama_openai.py +5 -17
  137. agno/models/nebius/nebius.py +6 -6
  138. agno/models/nexus/__init__.py +3 -0
  139. agno/models/nexus/nexus.py +22 -0
  140. agno/models/nvidia/nvidia.py +2 -2
  141. agno/models/ollama/chat.py +59 -5
  142. agno/models/openai/chat.py +69 -29
  143. agno/models/openai/responses.py +103 -106
  144. agno/models/openrouter/openrouter.py +41 -3
  145. agno/models/perplexity/perplexity.py +4 -5
  146. agno/models/portkey/portkey.py +3 -3
  147. agno/models/requesty/__init__.py +5 -0
  148. agno/models/requesty/requesty.py +52 -0
  149. agno/models/response.py +77 -1
  150. agno/models/sambanova/sambanova.py +2 -2
  151. agno/models/siliconflow/__init__.py +5 -0
  152. agno/models/siliconflow/siliconflow.py +25 -0
  153. agno/models/together/together.py +2 -2
  154. agno/models/utils.py +254 -8
  155. agno/models/vercel/v0.py +2 -2
  156. agno/models/vertexai/__init__.py +0 -0
  157. agno/models/vertexai/claude.py +96 -0
  158. agno/models/vllm/vllm.py +1 -0
  159. agno/models/xai/xai.py +3 -2
  160. agno/os/app.py +543 -178
  161. agno/os/auth.py +24 -14
  162. agno/os/config.py +1 -0
  163. agno/os/interfaces/__init__.py +1 -0
  164. agno/os/interfaces/a2a/__init__.py +3 -0
  165. agno/os/interfaces/a2a/a2a.py +42 -0
  166. agno/os/interfaces/a2a/router.py +250 -0
  167. agno/os/interfaces/a2a/utils.py +924 -0
  168. agno/os/interfaces/agui/agui.py +23 -7
  169. agno/os/interfaces/agui/router.py +27 -3
  170. agno/os/interfaces/agui/utils.py +242 -142
  171. agno/os/interfaces/base.py +6 -2
  172. agno/os/interfaces/slack/router.py +81 -23
  173. agno/os/interfaces/slack/slack.py +29 -14
  174. agno/os/interfaces/whatsapp/router.py +11 -4
  175. agno/os/interfaces/whatsapp/whatsapp.py +14 -7
  176. agno/os/mcp.py +111 -54
  177. agno/os/middleware/__init__.py +7 -0
  178. agno/os/middleware/jwt.py +233 -0
  179. agno/os/router.py +556 -139
  180. agno/os/routers/evals/evals.py +71 -34
  181. agno/os/routers/evals/schemas.py +31 -31
  182. agno/os/routers/evals/utils.py +6 -5
  183. agno/os/routers/health.py +31 -0
  184. agno/os/routers/home.py +52 -0
  185. agno/os/routers/knowledge/knowledge.py +185 -38
  186. agno/os/routers/knowledge/schemas.py +82 -22
  187. agno/os/routers/memory/memory.py +158 -53
  188. agno/os/routers/memory/schemas.py +20 -16
  189. agno/os/routers/metrics/metrics.py +20 -8
  190. agno/os/routers/metrics/schemas.py +16 -16
  191. agno/os/routers/session/session.py +499 -38
  192. agno/os/schema.py +308 -198
  193. agno/os/utils.py +401 -41
  194. agno/reasoning/anthropic.py +80 -0
  195. agno/reasoning/azure_ai_foundry.py +2 -2
  196. agno/reasoning/deepseek.py +2 -2
  197. agno/reasoning/default.py +3 -1
  198. agno/reasoning/gemini.py +73 -0
  199. agno/reasoning/groq.py +2 -2
  200. agno/reasoning/ollama.py +2 -2
  201. agno/reasoning/openai.py +7 -2
  202. agno/reasoning/vertexai.py +76 -0
  203. agno/run/__init__.py +6 -0
  204. agno/run/agent.py +248 -94
  205. agno/run/base.py +44 -5
  206. agno/run/team.py +238 -97
  207. agno/run/workflow.py +144 -33
  208. agno/session/agent.py +105 -89
  209. agno/session/summary.py +65 -25
  210. agno/session/team.py +176 -96
  211. agno/session/workflow.py +406 -40
  212. agno/team/team.py +3854 -1610
  213. agno/tools/dalle.py +2 -4
  214. agno/tools/decorator.py +4 -2
  215. agno/tools/duckduckgo.py +15 -11
  216. agno/tools/e2b.py +14 -7
  217. agno/tools/eleven_labs.py +23 -25
  218. agno/tools/exa.py +21 -16
  219. agno/tools/file.py +153 -23
  220. agno/tools/file_generation.py +350 -0
  221. agno/tools/firecrawl.py +4 -4
  222. agno/tools/function.py +250 -30
  223. agno/tools/gmail.py +238 -14
  224. agno/tools/google_drive.py +270 -0
  225. agno/tools/googlecalendar.py +36 -8
  226. agno/tools/googlesheets.py +20 -5
  227. agno/tools/jira.py +20 -0
  228. agno/tools/knowledge.py +3 -3
  229. agno/tools/mcp/__init__.py +10 -0
  230. agno/tools/mcp/mcp.py +331 -0
  231. agno/tools/mcp/multi_mcp.py +347 -0
  232. agno/tools/mcp/params.py +24 -0
  233. agno/tools/mcp_toolbox.py +284 -0
  234. agno/tools/mem0.py +11 -17
  235. agno/tools/memori.py +1 -53
  236. agno/tools/memory.py +419 -0
  237. agno/tools/models/nebius.py +5 -5
  238. agno/tools/models_labs.py +20 -10
  239. agno/tools/notion.py +204 -0
  240. agno/tools/parallel.py +314 -0
  241. agno/tools/scrapegraph.py +58 -31
  242. agno/tools/searxng.py +2 -2
  243. agno/tools/serper.py +2 -2
  244. agno/tools/slack.py +18 -3
  245. agno/tools/spider.py +2 -2
  246. agno/tools/tavily.py +146 -0
  247. agno/tools/whatsapp.py +1 -1
  248. agno/tools/workflow.py +278 -0
  249. agno/tools/yfinance.py +12 -11
  250. agno/utils/agent.py +820 -0
  251. agno/utils/audio.py +27 -0
  252. agno/utils/common.py +90 -1
  253. agno/utils/events.py +217 -2
  254. agno/utils/gemini.py +180 -22
  255. agno/utils/hooks.py +57 -0
  256. agno/utils/http.py +111 -0
  257. agno/utils/knowledge.py +12 -5
  258. agno/utils/log.py +1 -0
  259. agno/utils/mcp.py +92 -2
  260. agno/utils/media.py +188 -10
  261. agno/utils/merge_dict.py +22 -1
  262. agno/utils/message.py +60 -0
  263. agno/utils/models/claude.py +40 -11
  264. agno/utils/print_response/agent.py +105 -21
  265. agno/utils/print_response/team.py +103 -38
  266. agno/utils/print_response/workflow.py +251 -34
  267. agno/utils/reasoning.py +22 -1
  268. agno/utils/serialize.py +32 -0
  269. agno/utils/streamlit.py +16 -10
  270. agno/utils/string.py +41 -0
  271. agno/utils/team.py +98 -9
  272. agno/utils/tools.py +1 -1
  273. agno/vectordb/base.py +23 -4
  274. agno/vectordb/cassandra/cassandra.py +65 -9
  275. agno/vectordb/chroma/chromadb.py +182 -38
  276. agno/vectordb/clickhouse/clickhousedb.py +64 -11
  277. agno/vectordb/couchbase/couchbase.py +105 -10
  278. agno/vectordb/lancedb/lance_db.py +124 -133
  279. agno/vectordb/langchaindb/langchaindb.py +25 -7
  280. agno/vectordb/lightrag/lightrag.py +17 -3
  281. agno/vectordb/llamaindex/__init__.py +3 -0
  282. agno/vectordb/llamaindex/llamaindexdb.py +46 -7
  283. agno/vectordb/milvus/milvus.py +126 -9
  284. agno/vectordb/mongodb/__init__.py +7 -1
  285. agno/vectordb/mongodb/mongodb.py +112 -7
  286. agno/vectordb/pgvector/pgvector.py +142 -21
  287. agno/vectordb/pineconedb/pineconedb.py +80 -8
  288. agno/vectordb/qdrant/qdrant.py +125 -39
  289. agno/vectordb/redis/__init__.py +9 -0
  290. agno/vectordb/redis/redisdb.py +694 -0
  291. agno/vectordb/singlestore/singlestore.py +111 -25
  292. agno/vectordb/surrealdb/surrealdb.py +31 -5
  293. agno/vectordb/upstashdb/upstashdb.py +76 -8
  294. agno/vectordb/weaviate/weaviate.py +86 -15
  295. agno/workflow/__init__.py +2 -0
  296. agno/workflow/agent.py +299 -0
  297. agno/workflow/condition.py +112 -18
  298. agno/workflow/loop.py +69 -10
  299. agno/workflow/parallel.py +266 -118
  300. agno/workflow/router.py +110 -17
  301. agno/workflow/step.py +638 -129
  302. agno/workflow/steps.py +65 -6
  303. agno/workflow/types.py +61 -23
  304. agno/workflow/workflow.py +2085 -272
  305. {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/METADATA +182 -58
  306. agno-2.3.0.dist-info/RECORD +577 -0
  307. agno/knowledge/reader/url_reader.py +0 -128
  308. agno/tools/googlesearch.py +0 -98
  309. agno/tools/mcp.py +0 -610
  310. agno/utils/models/aws_claude.py +0 -170
  311. agno-2.0.1.dist-info/RECORD +0 -515
  312. {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/WHEEL +0 -0
  313. {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/licenses/LICENSE +0 -0
  314. {agno-2.0.1.dist-info → agno-2.3.0.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Set, Unio
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
+ from agno.filters import FilterExpr
5
6
  from agno.media import Audio, File, Image, Video
6
7
  from agno.models.message import Message
7
8
  from agno.models.response import ToolExecution
@@ -24,6 +25,7 @@ def print_response(
24
25
  show_message: bool = True,
25
26
  show_reasoning: bool = True,
26
27
  show_full_reasoning: bool = False,
28
+ show_member_responses: Optional[bool] = None,
27
29
  tags_to_include_in_markdown: Optional[Set[str]] = None,
28
30
  session_id: Optional[str] = None,
29
31
  session_state: Optional[Dict[str, Any]] = None,
@@ -33,9 +35,11 @@ def print_response(
33
35
  videos: Optional[Sequence[Video]] = None,
34
36
  files: Optional[Sequence[File]] = None,
35
37
  markdown: bool = False,
36
- knowledge_filters: Optional[Dict[str, Any]] = None,
38
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
37
39
  add_history_to_context: Optional[bool] = None,
38
40
  dependencies: Optional[Dict[str, Any]] = None,
41
+ add_dependencies_to_context: Optional[bool] = None,
42
+ add_session_state_to_context: Optional[bool] = None,
39
43
  metadata: Optional[Dict[str, Any]] = None,
40
44
  debug_mode: Optional[bool] = None,
41
45
  **kwargs: Any,
@@ -82,18 +86,35 @@ def print_response(
82
86
  videos=videos,
83
87
  files=files,
84
88
  stream=False,
89
+ stream_events=True,
85
90
  session_id=session_id,
86
91
  session_state=session_state,
87
92
  user_id=user_id,
88
93
  knowledge_filters=knowledge_filters,
89
94
  add_history_to_context=add_history_to_context,
90
95
  dependencies=dependencies,
96
+ add_dependencies_to_context=add_dependencies_to_context,
97
+ add_session_state_to_context=add_session_state_to_context,
91
98
  metadata=metadata,
92
99
  debug_mode=debug_mode,
93
100
  **kwargs,
94
101
  )
95
102
  response_timer.stop()
96
103
 
104
+ if run_response.input is not None and run_response.input.input_content != input:
105
+ # Input was modified during the run
106
+ panels = [status]
107
+ if show_message:
108
+ # Convert message to a panel
109
+ message_content = get_text_from_message(run_response.input.input_content)
110
+ message_panel = create_panel(
111
+ content=Text(message_content, style="green"),
112
+ title="Message",
113
+ border_style="cyan",
114
+ )
115
+ panels.append(message_panel) # type: ignore
116
+ live_console.update(Group(*panels))
117
+
97
118
  team_markdown = False
98
119
  member_markdown = {}
99
120
  if markdown:
@@ -121,7 +142,7 @@ def print_response(
121
142
  panels.append(reasoning_panel)
122
143
  live_console.update(Group(*panels))
123
144
 
124
- if isinstance(run_response, TeamRunOutput) and run_response.reasoning_content is not None:
145
+ if isinstance(run_response, TeamRunOutput) and run_response.reasoning_content is not None and show_reasoning:
125
146
  # Create panel for thinking
126
147
  thinking_panel = create_panel(
127
148
  content=Text(run_response.reasoning_content),
@@ -133,7 +154,7 @@ def print_response(
133
154
 
134
155
  if isinstance(run_response, TeamRunOutput):
135
156
  # Handle member responses
136
- if team.show_members_responses:
157
+ if show_member_responses:
137
158
  for member_response in run_response.member_responses:
138
159
  # Handle member reasoning
139
160
  reasoning_steps = []
@@ -304,6 +325,7 @@ def print_response_stream(
304
325
  show_message: bool = True,
305
326
  show_reasoning: bool = True,
306
327
  show_full_reasoning: bool = False,
328
+ show_member_responses: Optional[bool] = None,
307
329
  tags_to_include_in_markdown: Optional[Set[str]] = None,
308
330
  session_id: Optional[str] = None,
309
331
  session_state: Optional[Dict[str, Any]] = None,
@@ -313,10 +335,13 @@ def print_response_stream(
313
335
  videos: Optional[Sequence[Video]] = None,
314
336
  files: Optional[Sequence[File]] = None,
315
337
  markdown: bool = False,
338
+ stream_events: bool = False,
316
339
  stream_intermediate_steps: bool = False, # type: ignore
317
- knowledge_filters: Optional[Dict[str, Any]] = None,
340
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
318
341
  add_history_to_context: Optional[bool] = None,
319
342
  dependencies: Optional[Dict[str, Any]] = None,
343
+ add_dependencies_to_context: Optional[bool] = None,
344
+ add_session_state_to_context: Optional[bool] = None,
320
345
  metadata: Optional[Dict[str, Any]] = None,
321
346
  debug_mode: Optional[bool] = None,
322
347
  **kwargs: Any,
@@ -335,7 +360,7 @@ def print_response_stream(
335
360
  if not tags_to_include_in_markdown:
336
361
  tags_to_include_in_markdown = {"think", "thinking"}
337
362
 
338
- stream_intermediate_steps = True # With streaming print response, we need to stream intermediate steps
363
+ stream_events = True # With streaming print response, we need to stream intermediate steps
339
364
 
340
365
  _response_content: str = ""
341
366
  _response_reasoning_content: str = ""
@@ -379,19 +404,23 @@ def print_response_stream(
379
404
  videos=videos,
380
405
  files=files,
381
406
  stream=True,
382
- stream_intermediate_steps=stream_intermediate_steps,
407
+ stream_events=stream_events,
383
408
  session_id=session_id,
384
409
  session_state=session_state,
385
410
  user_id=user_id,
386
411
  knowledge_filters=knowledge_filters,
387
412
  add_history_to_context=add_history_to_context,
388
413
  dependencies=dependencies,
414
+ add_dependencies_to_context=add_dependencies_to_context,
415
+ add_session_state_to_context=add_session_state_to_context,
389
416
  metadata=metadata,
390
417
  debug_mode=debug_mode,
391
- yield_run_response=True,
418
+ yield_run_output=True,
392
419
  **kwargs,
393
420
  )
394
421
 
422
+ input_content = get_text_from_message(input)
423
+
395
424
  team_markdown = None
396
425
  member_markdown = {}
397
426
 
@@ -427,6 +456,10 @@ def print_response_stream(
427
456
  if hasattr(resp, "reasoning_steps") and resp.reasoning_steps is not None: # type: ignore
428
457
  reasoning_steps = resp.reasoning_steps # type: ignore
429
458
 
459
+ if resp.event == TeamRunEvent.pre_hook_completed: # type: ignore
460
+ if resp.run_input is not None: # type: ignore
461
+ input_content = get_text_from_message(resp.run_input.input_content) # type: ignore
462
+
430
463
  # Collect team tool calls, avoiding duplicates
431
464
  if resp.event == TeamRunEvent.tool_call_completed and resp.tool: # type: ignore
432
465
  tool = resp.tool # type: ignore
@@ -440,7 +473,7 @@ def print_response_stream(
440
473
  team_tool_calls.append(tool)
441
474
 
442
475
  # Collect member tool calls, avoiding duplicates
443
- if hasattr(resp, "member_responses") and resp.member_responses:
476
+ if show_member_responses and hasattr(resp, "member_responses") and resp.member_responses:
444
477
  for member_response in resp.member_responses:
445
478
  member_id = None
446
479
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None:
@@ -471,12 +504,11 @@ def print_response_stream(
471
504
  # Create new panels for each chunk
472
505
  panels = []
473
506
 
474
- if input and show_message:
507
+ if input_content and show_message:
475
508
  render = True
476
509
  # Convert message to a panel
477
- message_content = get_text_from_message(input)
478
510
  message_panel = create_panel(
479
- content=Text(message_content, style="green"),
511
+ content=Text(input_content, style="green"),
480
512
  title="Message",
481
513
  border_style="cyan",
482
514
  )
@@ -489,7 +521,7 @@ def print_response_stream(
489
521
  reasoning_panel = build_reasoning_step_panel(i, step, show_full_reasoning)
490
522
  panels.append(reasoning_panel)
491
523
 
492
- if len(_response_reasoning_content) > 0:
524
+ if len(_response_reasoning_content) > 0 and show_reasoning:
493
525
  render = True
494
526
  # Create panel for thinking
495
527
  thinking_panel = create_panel(
@@ -503,7 +535,9 @@ def print_response_stream(
503
535
  panels.append(status)
504
536
 
505
537
  # Process member responses and their tool calls
506
- for member_response in resp.member_responses if hasattr(resp, "member_responses") else []:
538
+ for member_response in (
539
+ resp.member_responses if show_member_responses and hasattr(resp, "member_responses") else []
540
+ ):
507
541
  member_id = None
508
542
  member_name = "Team Member"
509
543
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None:
@@ -536,7 +570,7 @@ def print_response_stream(
536
570
  panels.append(member_tool_calls_panel)
537
571
 
538
572
  # Process member response content
539
- if team.show_members_responses and member_id is not None:
573
+ if show_member_responses and member_id is not None:
540
574
  show_markdown = False
541
575
  if markdown:
542
576
  show_markdown = True
@@ -655,10 +689,9 @@ def print_response_stream(
655
689
  final_panels = []
656
690
 
657
691
  # Start with the message
658
- if input and show_message:
659
- message_content = get_text_from_message(input)
692
+ if input_content and show_message:
660
693
  message_panel = create_panel(
661
- content=Text(message_content, style="green"),
694
+ content=Text(input_content, style="green"),
662
695
  title="Message",
663
696
  border_style="cyan",
664
697
  )
@@ -671,7 +704,7 @@ def print_response_stream(
671
704
  final_panels.append(reasoning_panel)
672
705
 
673
706
  # Add thinking panel if available
674
- if _response_reasoning_content:
707
+ if _response_reasoning_content and show_reasoning:
675
708
  thinking_panel = create_panel(
676
709
  content=Text(_response_reasoning_content),
677
710
  title=f"Thinking ({response_timer.elapsed:.1f}s)",
@@ -680,7 +713,7 @@ def print_response_stream(
680
713
  final_panels.append(thinking_panel)
681
714
 
682
715
  # Add member tool calls and responses in correct order
683
- if run_response is not None and hasattr(run_response, "member_responses"):
716
+ if show_member_responses and run_response is not None and hasattr(run_response, "member_responses"):
684
717
  for i, member_response in enumerate(run_response.member_responses): # type: ignore
685
718
  member_id = None
686
719
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None:
@@ -829,6 +862,7 @@ async def aprint_response(
829
862
  show_message: bool = True,
830
863
  show_reasoning: bool = True,
831
864
  show_full_reasoning: bool = False,
865
+ show_member_responses: Optional[bool] = None,
832
866
  tags_to_include_in_markdown: Optional[Set[str]] = None,
833
867
  session_id: Optional[str] = None,
834
868
  session_state: Optional[Dict[str, Any]] = None,
@@ -838,9 +872,11 @@ async def aprint_response(
838
872
  videos: Optional[Sequence[Video]] = None,
839
873
  files: Optional[Sequence[File]] = None,
840
874
  markdown: bool = False,
841
- knowledge_filters: Optional[Dict[str, Any]] = None,
875
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
842
876
  add_history_to_context: Optional[bool] = None,
843
877
  dependencies: Optional[Dict[str, Any]] = None,
878
+ add_dependencies_to_context: Optional[bool] = None,
879
+ add_session_state_to_context: Optional[bool] = None,
844
880
  metadata: Optional[Dict[str, Any]] = None,
845
881
  debug_mode: Optional[bool] = None,
846
882
  **kwargs: Any,
@@ -887,18 +923,35 @@ async def aprint_response(
887
923
  videos=videos,
888
924
  files=files,
889
925
  stream=False,
926
+ stream_events=True,
890
927
  session_id=session_id,
891
928
  session_state=session_state,
892
929
  user_id=user_id,
893
930
  knowledge_filters=knowledge_filters,
894
931
  add_history_to_context=add_history_to_context,
895
932
  dependencies=dependencies,
933
+ add_dependencies_to_context=add_dependencies_to_context,
934
+ add_session_state_to_context=add_session_state_to_context,
896
935
  metadata=metadata,
897
936
  debug_mode=debug_mode,
898
937
  **kwargs,
899
938
  )
900
939
  response_timer.stop()
901
940
 
941
+ if run_response.input is not None and run_response.input.input_content != input:
942
+ # Input was modified during the run
943
+ panels = [status]
944
+ if show_message:
945
+ # Convert message to a panel
946
+ message_content = get_text_from_message(run_response.input.input_content)
947
+ message_panel = create_panel(
948
+ content=Text(message_content, style="green"),
949
+ title="Message",
950
+ border_style="cyan",
951
+ )
952
+ panels.append(message_panel) # type: ignore
953
+ live_console.update(Group(*panels))
954
+
902
955
  team_markdown = False
903
956
  member_markdown = {}
904
957
  if markdown:
@@ -926,7 +979,7 @@ async def aprint_response(
926
979
  panels.append(reasoning_panel)
927
980
  live_console.update(Group(*panels))
928
981
 
929
- if isinstance(run_response, TeamRunOutput) and run_response.reasoning_content is not None:
982
+ if isinstance(run_response, TeamRunOutput) and run_response.reasoning_content is not None and show_reasoning:
930
983
  # Create panel for thinking
931
984
  thinking_panel = create_panel(
932
985
  content=Text(run_response.reasoning_content),
@@ -938,7 +991,7 @@ async def aprint_response(
938
991
 
939
992
  if isinstance(run_response, TeamRunOutput):
940
993
  # Handle member responses
941
- if team.show_members_responses:
994
+ if show_member_responses:
942
995
  for member_response in run_response.member_responses:
943
996
  # Handle member reasoning
944
997
  reasoning_steps = []
@@ -1107,6 +1160,7 @@ async def aprint_response_stream(
1107
1160
  show_message: bool = True,
1108
1161
  show_reasoning: bool = True,
1109
1162
  show_full_reasoning: bool = False,
1163
+ show_member_responses: Optional[bool] = None,
1110
1164
  tags_to_include_in_markdown: Optional[Set[str]] = None,
1111
1165
  session_id: Optional[str] = None,
1112
1166
  session_state: Optional[Dict[str, Any]] = None,
@@ -1116,10 +1170,13 @@ async def aprint_response_stream(
1116
1170
  videos: Optional[Sequence[Video]] = None,
1117
1171
  files: Optional[Sequence[File]] = None,
1118
1172
  markdown: bool = False,
1173
+ stream_events: bool = False,
1119
1174
  stream_intermediate_steps: bool = False, # type: ignore
1120
- knowledge_filters: Optional[Dict[str, Any]] = None,
1175
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
1121
1176
  add_history_to_context: Optional[bool] = None,
1122
1177
  dependencies: Optional[Dict[str, Any]] = None,
1178
+ add_dependencies_to_context: Optional[bool] = None,
1179
+ add_session_state_to_context: Optional[bool] = None,
1123
1180
  metadata: Optional[Dict[str, Any]] = None,
1124
1181
  debug_mode: Optional[bool] = None,
1125
1182
  **kwargs: Any,
@@ -1136,7 +1193,7 @@ async def aprint_response_stream(
1136
1193
  if not tags_to_include_in_markdown:
1137
1194
  tags_to_include_in_markdown = {"think", "thinking"}
1138
1195
 
1139
- stream_intermediate_steps = True # With streaming print response, we need to stream intermediate steps
1196
+ stream_events = True # With streaming print response, we need to stream intermediate steps
1140
1197
 
1141
1198
  _response_content: str = ""
1142
1199
  _response_reasoning_content: str = ""
@@ -1182,6 +1239,8 @@ async def aprint_response_stream(
1182
1239
  # Dict to track member response panels by member_id
1183
1240
  member_response_panels = {}
1184
1241
 
1242
+ input_content = get_text_from_message(input)
1243
+
1185
1244
  final_run_response = None
1186
1245
  async for resp in team.arun( # type: ignore
1187
1246
  input=input,
@@ -1190,16 +1249,18 @@ async def aprint_response_stream(
1190
1249
  videos=videos,
1191
1250
  files=files,
1192
1251
  stream=True,
1193
- stream_intermediate_steps=stream_intermediate_steps,
1252
+ stream_events=stream_events,
1194
1253
  session_id=session_id,
1195
1254
  session_state=session_state,
1196
1255
  user_id=user_id,
1197
1256
  knowledge_filters=knowledge_filters,
1198
1257
  add_history_to_context=add_history_to_context,
1258
+ add_dependencies_to_context=add_dependencies_to_context,
1259
+ add_session_state_to_context=add_session_state_to_context,
1199
1260
  dependencies=dependencies,
1200
1261
  metadata=metadata,
1201
1262
  debug_mode=debug_mode,
1202
- yield_run_response=True,
1263
+ yield_run_output=True,
1203
1264
  **kwargs,
1204
1265
  ):
1205
1266
  if team_markdown is None:
@@ -1229,6 +1290,10 @@ async def aprint_response_stream(
1229
1290
  if hasattr(resp, "reasoning_steps") and resp.reasoning_steps is not None: # type: ignore
1230
1291
  reasoning_steps = resp.reasoning_steps # type: ignore
1231
1292
 
1293
+ if resp.event == TeamRunEvent.pre_hook_completed: # type: ignore
1294
+ if resp.run_input is not None: # type: ignore
1295
+ input_content = get_text_from_message(resp.run_input.input_content) # type: ignore
1296
+
1232
1297
  # Collect team tool calls, avoiding duplicates
1233
1298
  if resp.event == TeamRunEvent.tool_call_completed and resp.tool: # type: ignore
1234
1299
  tool = resp.tool # type: ignore
@@ -1242,7 +1307,7 @@ async def aprint_response_stream(
1242
1307
  team_tool_calls.append(tool)
1243
1308
 
1244
1309
  # Collect member tool calls, avoiding duplicates
1245
- if hasattr(resp, "member_responses") and resp.member_responses:
1310
+ if show_member_responses and hasattr(resp, "member_responses") and resp.member_responses:
1246
1311
  for member_response in resp.member_responses:
1247
1312
  member_id = None
1248
1313
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None:
@@ -1272,12 +1337,11 @@ async def aprint_response_stream(
1272
1337
  # Create new panels for each chunk
1273
1338
  panels = []
1274
1339
 
1275
- if input and show_message:
1340
+ if input_content and show_message:
1276
1341
  render = True
1277
1342
  # Convert message to a panel
1278
- message_content = get_text_from_message(input)
1279
1343
  message_panel = create_panel(
1280
- content=Text(message_content, style="green"),
1344
+ content=Text(input_content, style="green"),
1281
1345
  title="Message",
1282
1346
  border_style="cyan",
1283
1347
  )
@@ -1290,7 +1354,7 @@ async def aprint_response_stream(
1290
1354
  reasoning_panel = build_reasoning_step_panel(i, step, show_full_reasoning)
1291
1355
  panels.append(reasoning_panel)
1292
1356
 
1293
- if len(_response_reasoning_content) > 0:
1357
+ if len(_response_reasoning_content) > 0 and show_reasoning:
1294
1358
  render = True
1295
1359
  # Create panel for thinking
1296
1360
  thinking_panel = create_panel(
@@ -1304,7 +1368,9 @@ async def aprint_response_stream(
1304
1368
  panels.append(status)
1305
1369
 
1306
1370
  # Process member responses and their tool calls
1307
- for member_response in resp.member_responses if hasattr(resp, "member_responses") else []:
1371
+ for member_response in (
1372
+ resp.member_responses if show_member_responses and hasattr(resp, "member_responses") else []
1373
+ ):
1308
1374
  member_id = None
1309
1375
  member_name = "Team Member"
1310
1376
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None:
@@ -1337,7 +1403,7 @@ async def aprint_response_stream(
1337
1403
  panels.append(member_tool_calls_panel)
1338
1404
 
1339
1405
  # Process member response content
1340
- if team.show_members_responses and member_id is not None:
1406
+ if show_member_responses and member_id is not None:
1341
1407
  show_markdown = False
1342
1408
  if markdown:
1343
1409
  show_markdown = True
@@ -1457,10 +1523,9 @@ async def aprint_response_stream(
1457
1523
  final_panels = []
1458
1524
 
1459
1525
  # Start with the message
1460
- if input and show_message:
1461
- message_content = get_text_from_message(input)
1526
+ if input_content and show_message:
1462
1527
  message_panel = create_panel(
1463
- content=Text(message_content, style="green"),
1528
+ content=Text(input_content, style="green"),
1464
1529
  title="Message",
1465
1530
  border_style="cyan",
1466
1531
  )
@@ -1473,7 +1538,7 @@ async def aprint_response_stream(
1473
1538
  final_panels.append(reasoning_panel)
1474
1539
 
1475
1540
  # Add thinking panel if available
1476
- if _response_reasoning_content:
1541
+ if _response_reasoning_content and show_reasoning:
1477
1542
  thinking_panel = create_panel(
1478
1543
  content=Text(_response_reasoning_content),
1479
1544
  title=f"Thinking ({response_timer.elapsed:.1f}s)",
@@ -1482,7 +1547,7 @@ async def aprint_response_stream(
1482
1547
  final_panels.append(thinking_panel)
1483
1548
 
1484
1549
  # Add member tool calls and responses in correct order
1485
- if run_response is not None and hasattr(run_response, "member_responses"):
1550
+ if show_member_responses and run_response is not None and hasattr(run_response, "member_responses"):
1486
1551
  for i, member_response in enumerate(run_response.member_responses):
1487
1552
  member_id = None
1488
1553
  if isinstance(member_response, RunOutput) and member_response.agent_id is not None: