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
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import warnings
2
3
  from collections.abc import Set
3
4
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Union, cast, get_args
4
5
 
@@ -10,6 +11,7 @@ from rich.markdown import Markdown
10
11
  from rich.status import Status
11
12
  from rich.text import Text
12
13
 
14
+ from agno.filters import FilterExpr
13
15
  from agno.media import Audio, File, Image, Video
14
16
  from agno.models.message import Message
15
17
  from agno.reasoning.step import ReasoningStep
@@ -33,8 +35,7 @@ def print_response_stream(
33
35
  images: Optional[Sequence[Image]] = None,
34
36
  videos: Optional[Sequence[Video]] = None,
35
37
  files: Optional[Sequence[File]] = None,
36
- stream_intermediate_steps: bool = False,
37
- knowledge_filters: Optional[Dict[str, Any]] = None,
38
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
38
39
  debug_mode: Optional[bool] = None,
39
40
  markdown: bool = False,
40
41
  show_message: bool = True,
@@ -44,6 +45,8 @@ def print_response_stream(
44
45
  console: Optional[Any] = None,
45
46
  add_history_to_context: Optional[bool] = None,
46
47
  dependencies: Optional[Dict[str, Any]] = None,
48
+ add_dependencies_to_context: Optional[bool] = None,
49
+ add_session_state_to_context: Optional[bool] = None,
47
50
  metadata: Optional[Dict[str, Any]] = None,
48
51
  **kwargs: Any,
49
52
  ):
@@ -76,6 +79,8 @@ def print_response_stream(
76
79
  if render:
77
80
  live_log.update(Group(*panels))
78
81
 
82
+ input_content = get_text_from_message(input)
83
+
79
84
  for response_event in agent.run(
80
85
  input=input,
81
86
  session_id=session_id,
@@ -86,10 +91,11 @@ def print_response_stream(
86
91
  videos=videos,
87
92
  files=files,
88
93
  stream=True,
89
- stream_intermediate_steps=stream_intermediate_steps,
90
94
  knowledge_filters=knowledge_filters,
91
95
  debug_mode=debug_mode,
92
96
  add_history_to_context=add_history_to_context,
97
+ add_dependencies_to_context=add_dependencies_to_context,
98
+ add_session_state_to_context=add_session_state_to_context,
93
99
  dependencies=dependencies,
94
100
  metadata=metadata,
95
101
  **kwargs,
@@ -102,6 +108,10 @@ def print_response_stream(
102
108
  live_log.update(Group(*panels))
103
109
  return
104
110
 
111
+ if response_event.event == RunEvent.pre_hook_completed: # type: ignore
112
+ if response_event.run_input is not None: # type: ignore
113
+ input_content = get_text_from_message(response_event.run_input.input_content) # type: ignore
114
+
105
115
  if (
106
116
  response_event.event == RunEvent.tool_call_started # type: ignore
107
117
  and hasattr(response_event, "tool")
@@ -112,7 +122,9 @@ def print_response_stream(
112
122
  if response_event.event == RunEvent.run_content: # type: ignore
113
123
  if hasattr(response_event, "content"):
114
124
  if isinstance(response_event.content, str):
115
- _response_content += response_event.content
125
+ # Don't accumulate text content, parser_model will replace it
126
+ if not (agent.parser_model is not None and agent.output_schema is not None):
127
+ _response_content += response_event.content
116
128
  elif agent.output_schema is not None and isinstance(response_event.content, BaseModel):
117
129
  try:
118
130
  response_content_batch = JSON( # type: ignore
@@ -151,9 +163,8 @@ def print_response_stream(
151
163
  panels = [status]
152
164
  if show_message:
153
165
  # Convert message to a panel
154
- message_content = get_text_from_message(input)
155
166
  message_panel = create_panel(
156
- content=Text(message_content, style="green"),
167
+ content=Text(input_content, style="green"),
157
168
  title="Message",
158
169
  border_style="cyan",
159
170
  )
@@ -210,8 +221,7 @@ async def aprint_response_stream(
210
221
  images: Optional[Sequence[Image]] = None,
211
222
  videos: Optional[Sequence[Video]] = None,
212
223
  files: Optional[Sequence[File]] = None,
213
- stream_intermediate_steps: bool = False,
214
- knowledge_filters: Optional[Dict[str, Any]] = None,
224
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
215
225
  debug_mode: Optional[bool] = None,
216
226
  markdown: bool = False,
217
227
  show_message: bool = True,
@@ -221,6 +231,8 @@ async def aprint_response_stream(
221
231
  console: Optional[Any] = None,
222
232
  add_history_to_context: Optional[bool] = None,
223
233
  dependencies: Optional[Dict[str, Any]] = None,
234
+ add_dependencies_to_context: Optional[bool] = None,
235
+ add_session_state_to_context: Optional[bool] = None,
224
236
  metadata: Optional[Dict[str, Any]] = None,
225
237
  **kwargs: Any,
226
238
  ):
@@ -263,15 +275,18 @@ async def aprint_response_stream(
263
275
  videos=videos,
264
276
  files=files,
265
277
  stream=True,
266
- stream_intermediate_steps=stream_intermediate_steps,
267
278
  knowledge_filters=knowledge_filters,
268
279
  debug_mode=debug_mode,
269
280
  add_history_to_context=add_history_to_context,
281
+ add_dependencies_to_context=add_dependencies_to_context,
282
+ add_session_state_to_context=add_session_state_to_context,
270
283
  dependencies=dependencies,
271
284
  metadata=metadata,
272
285
  **kwargs,
273
286
  )
274
287
 
288
+ input_content = get_text_from_message(input)
289
+
275
290
  async for resp in result: # type: ignore
276
291
  if isinstance(resp, tuple(get_args(RunOutputEvent))):
277
292
  if resp.is_paused:
@@ -287,9 +302,15 @@ async def aprint_response_stream(
287
302
  ):
288
303
  accumulated_tool_calls.append(resp.tool)
289
304
 
305
+ if resp.event == RunEvent.pre_hook_completed: # type: ignore
306
+ if resp.run_input is not None: # type: ignore
307
+ input_content = get_text_from_message(resp.run_input.input_content) # type: ignore
308
+
290
309
  if resp.event == RunEvent.run_content: # type: ignore
291
310
  if isinstance(resp.content, str):
292
- _response_content += resp.content
311
+ # Don't accumulate text content, parser_model will replace it
312
+ if not (agent.parser_model is not None and agent.output_schema is not None):
313
+ _response_content += resp.content
293
314
  elif agent.output_schema is not None and isinstance(resp.content, BaseModel):
294
315
  try:
295
316
  response_content_batch = JSON(resp.content.model_dump_json(exclude_none=True), indent=2) # type: ignore
@@ -326,12 +347,11 @@ async def aprint_response_stream(
326
347
 
327
348
  panels = [status]
328
349
 
329
- if input and show_message:
350
+ if input_content and show_message:
330
351
  render = True
331
352
  # Convert message to a panel
332
- message_content = get_text_from_message(input)
333
353
  message_panel = create_panel(
334
- content=Text(message_content, style="green"),
354
+ content=Text(input_content, style="green"),
335
355
  title="Message",
336
356
  border_style="cyan",
337
357
  )
@@ -411,7 +431,7 @@ def build_panels_stream(
411
431
  reasoning_panel = create_panel(content=step_content, title=f"Reasoning step {i}", border_style="green")
412
432
  panels.append(reasoning_panel)
413
433
 
414
- if len(response_reasoning_content_buffer) > 0:
434
+ if len(response_reasoning_content_buffer) > 0 and show_reasoning:
415
435
  # Create panel for thinking
416
436
  thinking_panel = create_panel(
417
437
  content=Text(response_reasoning_content_buffer),
@@ -475,8 +495,9 @@ def print_response(
475
495
  images: Optional[Sequence[Image]] = None,
476
496
  videos: Optional[Sequence[Video]] = None,
477
497
  files: Optional[Sequence[File]] = None,
478
- stream_intermediate_steps: bool = False,
479
- knowledge_filters: Optional[Dict[str, Any]] = None,
498
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
499
+ stream_events: Optional[bool] = None,
500
+ stream_intermediate_steps: Optional[bool] = None,
480
501
  debug_mode: Optional[bool] = None,
481
502
  markdown: bool = False,
482
503
  show_message: bool = True,
@@ -486,9 +507,24 @@ def print_response(
486
507
  console: Optional[Any] = None,
487
508
  add_history_to_context: Optional[bool] = None,
488
509
  dependencies: Optional[Dict[str, Any]] = None,
510
+ add_dependencies_to_context: Optional[bool] = None,
511
+ add_session_state_to_context: Optional[bool] = None,
489
512
  metadata: Optional[Dict[str, Any]] = None,
490
513
  **kwargs: Any,
491
514
  ):
515
+ if stream_events is not None:
516
+ warnings.warn(
517
+ "The 'stream_events' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the print_response function.",
518
+ DeprecationWarning,
519
+ stacklevel=2,
520
+ )
521
+ if stream_intermediate_steps is not None:
522
+ warnings.warn(
523
+ "The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the print_response function.",
524
+ DeprecationWarning,
525
+ stacklevel=2,
526
+ )
527
+
492
528
  with Live(console=console) as live_log:
493
529
  status = Status("Thinking...", spinner="aesthetic", speed=0.4, refresh_per_second=10)
494
530
  live_log.update(status)
@@ -519,16 +555,32 @@ def print_response(
519
555
  videos=videos,
520
556
  files=files,
521
557
  stream=False,
522
- stream_intermediate_steps=stream_intermediate_steps,
558
+ stream_events=True,
523
559
  knowledge_filters=knowledge_filters,
524
560
  debug_mode=debug_mode,
525
561
  add_history_to_context=add_history_to_context,
562
+ add_dependencies_to_context=add_dependencies_to_context,
563
+ add_session_state_to_context=add_session_state_to_context,
526
564
  dependencies=dependencies,
527
565
  metadata=metadata,
528
566
  **kwargs,
529
567
  )
530
568
  response_timer.stop()
531
569
 
570
+ if run_response.input is not None and run_response.input.input_content != input:
571
+ # Input was modified during the run
572
+ panels = [status]
573
+ if show_message:
574
+ # Convert message to a panel
575
+ message_content = get_text_from_message(run_response.input.input_content)
576
+ message_panel = create_panel(
577
+ content=Text(message_content, style="green"),
578
+ title="Message",
579
+ border_style="cyan",
580
+ )
581
+ panels.append(message_panel) # type: ignore
582
+ live_log.update(Group(*panels))
583
+
532
584
  additional_panels = build_panels(
533
585
  run_response=run_response,
534
586
  output_schema=agent.output_schema, # type: ignore
@@ -575,20 +627,36 @@ async def aprint_response(
575
627
  images: Optional[Sequence[Image]] = None,
576
628
  videos: Optional[Sequence[Video]] = None,
577
629
  files: Optional[Sequence[File]] = None,
578
- stream_intermediate_steps: bool = False,
579
- knowledge_filters: Optional[Dict[str, Any]] = None,
630
+ knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None,
580
631
  debug_mode: Optional[bool] = None,
581
632
  markdown: bool = False,
582
633
  show_message: bool = True,
583
634
  show_reasoning: bool = True,
584
635
  show_full_reasoning: bool = False,
636
+ stream_events: Optional[bool] = None,
637
+ stream_intermediate_steps: Optional[bool] = None,
585
638
  tags_to_include_in_markdown: Set[str] = {"think", "thinking"},
586
639
  console: Optional[Any] = None,
587
640
  add_history_to_context: Optional[bool] = None,
588
641
  dependencies: Optional[Dict[str, Any]] = None,
642
+ add_dependencies_to_context: Optional[bool] = None,
643
+ add_session_state_to_context: Optional[bool] = None,
589
644
  metadata: Optional[Dict[str, Any]] = None,
590
645
  **kwargs: Any,
591
646
  ):
647
+ if stream_events is not None:
648
+ warnings.warn(
649
+ "The 'stream_events' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the aprint_response function.",
650
+ DeprecationWarning,
651
+ stacklevel=2,
652
+ )
653
+ if stream_intermediate_steps is not None:
654
+ warnings.warn(
655
+ "The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Event streaming is always enabled using the aprint_response function.",
656
+ DeprecationWarning,
657
+ stacklevel=2,
658
+ )
659
+
592
660
  with Live(console=console) as live_log:
593
661
  status = Status("Thinking...", spinner="aesthetic", speed=0.4, refresh_per_second=10)
594
662
  live_log.update(status)
@@ -619,16 +687,32 @@ async def aprint_response(
619
687
  videos=videos,
620
688
  files=files,
621
689
  stream=False,
622
- stream_intermediate_steps=stream_intermediate_steps,
690
+ stream_events=True,
623
691
  knowledge_filters=knowledge_filters,
624
692
  debug_mode=debug_mode,
625
693
  add_history_to_context=add_history_to_context,
694
+ add_dependencies_to_context=add_dependencies_to_context,
695
+ add_session_state_to_context=add_session_state_to_context,
626
696
  dependencies=dependencies,
627
697
  metadata=metadata,
628
698
  **kwargs,
629
699
  )
630
700
  response_timer.stop()
631
701
 
702
+ if run_response.input is not None and run_response.input.input_content != input:
703
+ # Input was modified during the run
704
+ panels = [status]
705
+ if show_message:
706
+ # Convert message to a panel
707
+ message_content = get_text_from_message(run_response.input.input_content)
708
+ message_panel = create_panel(
709
+ content=Text(message_content, style="green"),
710
+ title="Message",
711
+ border_style="cyan",
712
+ )
713
+ panels.append(message_panel) # type: ignore
714
+ live_log.update(Group(*panels))
715
+
632
716
  additional_panels = build_panels(
633
717
  run_response=run_response,
634
718
  output_schema=agent.output_schema, # type: ignore
@@ -707,7 +791,7 @@ def build_panels(
707
791
  reasoning_panel = create_panel(content=step_content, title=f"Reasoning step {i}", border_style="green")
708
792
  panels.append(reasoning_panel)
709
793
 
710
- if isinstance(run_response, RunOutput) and run_response.reasoning_content is not None:
794
+ if isinstance(run_response, RunOutput) and run_response.reasoning_content is not None and show_reasoning:
711
795
  # Create panel for thinking
712
796
  thinking_panel = create_panel(
713
797
  content=Text(run_response.reasoning_content),