agno 2.1.2__py3-none-any.whl → 2.3.13__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 +5540 -2273
  2. agno/api/api.py +2 -0
  3. agno/api/os.py +1 -1
  4. agno/compression/__init__.py +3 -0
  5. agno/compression/manager.py +247 -0
  6. agno/culture/__init__.py +3 -0
  7. agno/culture/manager.py +956 -0
  8. agno/db/async_postgres/__init__.py +3 -0
  9. agno/db/base.py +689 -6
  10. agno/db/dynamo/dynamo.py +933 -37
  11. agno/db/dynamo/schemas.py +174 -10
  12. agno/db/dynamo/utils.py +63 -4
  13. agno/db/firestore/firestore.py +831 -9
  14. agno/db/firestore/schemas.py +51 -0
  15. agno/db/firestore/utils.py +102 -4
  16. agno/db/gcs_json/gcs_json_db.py +660 -12
  17. agno/db/gcs_json/utils.py +60 -26
  18. agno/db/in_memory/in_memory_db.py +287 -14
  19. agno/db/in_memory/utils.py +60 -2
  20. agno/db/json/json_db.py +590 -14
  21. agno/db/json/utils.py +60 -26
  22. agno/db/migrations/manager.py +199 -0
  23. agno/db/migrations/v1_to_v2.py +43 -13
  24. agno/db/migrations/versions/__init__.py +0 -0
  25. agno/db/migrations/versions/v2_3_0.py +938 -0
  26. agno/db/mongo/__init__.py +15 -1
  27. agno/db/mongo/async_mongo.py +2760 -0
  28. agno/db/mongo/mongo.py +879 -11
  29. agno/db/mongo/schemas.py +42 -0
  30. agno/db/mongo/utils.py +80 -8
  31. agno/db/mysql/__init__.py +2 -1
  32. agno/db/mysql/async_mysql.py +2912 -0
  33. agno/db/mysql/mysql.py +946 -68
  34. agno/db/mysql/schemas.py +72 -10
  35. agno/db/mysql/utils.py +198 -7
  36. agno/db/postgres/__init__.py +2 -1
  37. agno/db/postgres/async_postgres.py +2579 -0
  38. agno/db/postgres/postgres.py +942 -57
  39. agno/db/postgres/schemas.py +81 -18
  40. agno/db/postgres/utils.py +164 -2
  41. agno/db/redis/redis.py +671 -7
  42. agno/db/redis/schemas.py +50 -0
  43. agno/db/redis/utils.py +65 -7
  44. agno/db/schemas/__init__.py +2 -1
  45. agno/db/schemas/culture.py +120 -0
  46. agno/db/schemas/evals.py +1 -0
  47. agno/db/schemas/memory.py +17 -2
  48. agno/db/singlestore/schemas.py +63 -0
  49. agno/db/singlestore/singlestore.py +949 -83
  50. agno/db/singlestore/utils.py +60 -2
  51. agno/db/sqlite/__init__.py +2 -1
  52. agno/db/sqlite/async_sqlite.py +2911 -0
  53. agno/db/sqlite/schemas.py +62 -0
  54. agno/db/sqlite/sqlite.py +965 -46
  55. agno/db/sqlite/utils.py +169 -8
  56. agno/db/surrealdb/__init__.py +3 -0
  57. agno/db/surrealdb/metrics.py +292 -0
  58. agno/db/surrealdb/models.py +334 -0
  59. agno/db/surrealdb/queries.py +71 -0
  60. agno/db/surrealdb/surrealdb.py +1908 -0
  61. agno/db/surrealdb/utils.py +147 -0
  62. agno/db/utils.py +2 -0
  63. agno/eval/__init__.py +10 -0
  64. agno/eval/accuracy.py +75 -55
  65. agno/eval/agent_as_judge.py +861 -0
  66. agno/eval/base.py +29 -0
  67. agno/eval/performance.py +16 -7
  68. agno/eval/reliability.py +28 -16
  69. agno/eval/utils.py +35 -17
  70. agno/exceptions.py +27 -2
  71. agno/filters.py +354 -0
  72. agno/guardrails/prompt_injection.py +1 -0
  73. agno/hooks/__init__.py +3 -0
  74. agno/hooks/decorator.py +164 -0
  75. agno/integrations/discord/client.py +1 -1
  76. agno/knowledge/chunking/agentic.py +13 -10
  77. agno/knowledge/chunking/fixed.py +4 -1
  78. agno/knowledge/chunking/semantic.py +9 -4
  79. agno/knowledge/chunking/strategy.py +59 -15
  80. agno/knowledge/embedder/fastembed.py +1 -1
  81. agno/knowledge/embedder/nebius.py +1 -1
  82. agno/knowledge/embedder/ollama.py +8 -0
  83. agno/knowledge/embedder/openai.py +8 -8
  84. agno/knowledge/embedder/sentence_transformer.py +6 -2
  85. agno/knowledge/embedder/vllm.py +262 -0
  86. agno/knowledge/knowledge.py +1618 -318
  87. agno/knowledge/reader/base.py +6 -2
  88. agno/knowledge/reader/csv_reader.py +8 -10
  89. agno/knowledge/reader/docx_reader.py +5 -6
  90. agno/knowledge/reader/field_labeled_csv_reader.py +16 -20
  91. agno/knowledge/reader/json_reader.py +5 -4
  92. agno/knowledge/reader/markdown_reader.py +8 -8
  93. agno/knowledge/reader/pdf_reader.py +17 -19
  94. agno/knowledge/reader/pptx_reader.py +101 -0
  95. agno/knowledge/reader/reader_factory.py +32 -3
  96. agno/knowledge/reader/s3_reader.py +3 -3
  97. agno/knowledge/reader/tavily_reader.py +193 -0
  98. agno/knowledge/reader/text_reader.py +22 -10
  99. agno/knowledge/reader/web_search_reader.py +1 -48
  100. agno/knowledge/reader/website_reader.py +10 -10
  101. agno/knowledge/reader/wikipedia_reader.py +33 -1
  102. agno/knowledge/types.py +1 -0
  103. agno/knowledge/utils.py +72 -7
  104. agno/media.py +22 -6
  105. agno/memory/__init__.py +14 -1
  106. agno/memory/manager.py +544 -83
  107. agno/memory/strategies/__init__.py +15 -0
  108. agno/memory/strategies/base.py +66 -0
  109. agno/memory/strategies/summarize.py +196 -0
  110. agno/memory/strategies/types.py +37 -0
  111. agno/models/aimlapi/aimlapi.py +17 -0
  112. agno/models/anthropic/claude.py +515 -40
  113. agno/models/aws/bedrock.py +102 -21
  114. agno/models/aws/claude.py +131 -274
  115. agno/models/azure/ai_foundry.py +41 -19
  116. agno/models/azure/openai_chat.py +39 -8
  117. agno/models/base.py +1249 -525
  118. agno/models/cerebras/cerebras.py +91 -21
  119. agno/models/cerebras/cerebras_openai.py +21 -2
  120. agno/models/cohere/chat.py +40 -6
  121. agno/models/cometapi/cometapi.py +18 -1
  122. agno/models/dashscope/dashscope.py +2 -3
  123. agno/models/deepinfra/deepinfra.py +18 -1
  124. agno/models/deepseek/deepseek.py +69 -3
  125. agno/models/fireworks/fireworks.py +18 -1
  126. agno/models/google/gemini.py +877 -80
  127. agno/models/google/utils.py +22 -0
  128. agno/models/groq/groq.py +51 -18
  129. agno/models/huggingface/huggingface.py +17 -6
  130. agno/models/ibm/watsonx.py +16 -6
  131. agno/models/internlm/internlm.py +18 -1
  132. agno/models/langdb/langdb.py +13 -1
  133. agno/models/litellm/chat.py +44 -9
  134. agno/models/litellm/litellm_openai.py +18 -1
  135. agno/models/message.py +28 -5
  136. agno/models/meta/llama.py +47 -14
  137. agno/models/meta/llama_openai.py +22 -17
  138. agno/models/mistral/mistral.py +8 -4
  139. agno/models/nebius/nebius.py +6 -7
  140. agno/models/nvidia/nvidia.py +20 -3
  141. agno/models/ollama/chat.py +24 -8
  142. agno/models/openai/chat.py +104 -29
  143. agno/models/openai/responses.py +101 -81
  144. agno/models/openrouter/openrouter.py +60 -3
  145. agno/models/perplexity/perplexity.py +17 -1
  146. agno/models/portkey/portkey.py +7 -6
  147. agno/models/requesty/requesty.py +24 -4
  148. agno/models/response.py +73 -2
  149. agno/models/sambanova/sambanova.py +20 -3
  150. agno/models/siliconflow/siliconflow.py +19 -2
  151. agno/models/together/together.py +20 -3
  152. agno/models/utils.py +254 -8
  153. agno/models/vercel/v0.py +20 -3
  154. agno/models/vertexai/__init__.py +0 -0
  155. agno/models/vertexai/claude.py +190 -0
  156. agno/models/vllm/vllm.py +19 -14
  157. agno/models/xai/xai.py +19 -2
  158. agno/os/app.py +549 -152
  159. agno/os/auth.py +190 -3
  160. agno/os/config.py +23 -0
  161. agno/os/interfaces/a2a/router.py +8 -11
  162. agno/os/interfaces/a2a/utils.py +1 -1
  163. agno/os/interfaces/agui/router.py +18 -3
  164. agno/os/interfaces/agui/utils.py +152 -39
  165. agno/os/interfaces/slack/router.py +55 -37
  166. agno/os/interfaces/slack/slack.py +9 -1
  167. agno/os/interfaces/whatsapp/router.py +0 -1
  168. agno/os/interfaces/whatsapp/security.py +3 -1
  169. agno/os/mcp.py +110 -52
  170. agno/os/middleware/__init__.py +2 -0
  171. agno/os/middleware/jwt.py +676 -112
  172. agno/os/router.py +40 -1478
  173. agno/os/routers/agents/__init__.py +3 -0
  174. agno/os/routers/agents/router.py +599 -0
  175. agno/os/routers/agents/schema.py +261 -0
  176. agno/os/routers/evals/evals.py +96 -39
  177. agno/os/routers/evals/schemas.py +65 -33
  178. agno/os/routers/evals/utils.py +80 -10
  179. agno/os/routers/health.py +10 -4
  180. agno/os/routers/knowledge/knowledge.py +196 -38
  181. agno/os/routers/knowledge/schemas.py +82 -22
  182. agno/os/routers/memory/memory.py +279 -52
  183. agno/os/routers/memory/schemas.py +46 -17
  184. agno/os/routers/metrics/metrics.py +20 -8
  185. agno/os/routers/metrics/schemas.py +16 -16
  186. agno/os/routers/session/session.py +462 -34
  187. agno/os/routers/teams/__init__.py +3 -0
  188. agno/os/routers/teams/router.py +512 -0
  189. agno/os/routers/teams/schema.py +257 -0
  190. agno/os/routers/traces/__init__.py +3 -0
  191. agno/os/routers/traces/schemas.py +414 -0
  192. agno/os/routers/traces/traces.py +499 -0
  193. agno/os/routers/workflows/__init__.py +3 -0
  194. agno/os/routers/workflows/router.py +624 -0
  195. agno/os/routers/workflows/schema.py +75 -0
  196. agno/os/schema.py +256 -693
  197. agno/os/scopes.py +469 -0
  198. agno/os/utils.py +514 -36
  199. agno/reasoning/anthropic.py +80 -0
  200. agno/reasoning/gemini.py +73 -0
  201. agno/reasoning/openai.py +5 -0
  202. agno/reasoning/vertexai.py +76 -0
  203. agno/run/__init__.py +6 -0
  204. agno/run/agent.py +155 -32
  205. agno/run/base.py +55 -3
  206. agno/run/requirement.py +181 -0
  207. agno/run/team.py +125 -38
  208. agno/run/workflow.py +72 -18
  209. agno/session/agent.py +102 -89
  210. agno/session/summary.py +56 -15
  211. agno/session/team.py +164 -90
  212. agno/session/workflow.py +405 -40
  213. agno/table.py +10 -0
  214. agno/team/team.py +3974 -1903
  215. agno/tools/dalle.py +2 -4
  216. agno/tools/eleven_labs.py +23 -25
  217. agno/tools/exa.py +21 -16
  218. agno/tools/file.py +153 -23
  219. agno/tools/file_generation.py +16 -10
  220. agno/tools/firecrawl.py +15 -7
  221. agno/tools/function.py +193 -38
  222. agno/tools/gmail.py +238 -14
  223. agno/tools/google_drive.py +271 -0
  224. agno/tools/googlecalendar.py +36 -8
  225. agno/tools/googlesheets.py +20 -5
  226. agno/tools/jira.py +20 -0
  227. agno/tools/mcp/__init__.py +10 -0
  228. agno/tools/mcp/mcp.py +331 -0
  229. agno/tools/mcp/multi_mcp.py +347 -0
  230. agno/tools/mcp/params.py +24 -0
  231. agno/tools/mcp_toolbox.py +3 -3
  232. agno/tools/models/nebius.py +5 -5
  233. agno/tools/models_labs.py +20 -10
  234. agno/tools/nano_banana.py +151 -0
  235. agno/tools/notion.py +204 -0
  236. agno/tools/parallel.py +314 -0
  237. agno/tools/postgres.py +76 -36
  238. agno/tools/redshift.py +406 -0
  239. agno/tools/scrapegraph.py +1 -1
  240. agno/tools/shopify.py +1519 -0
  241. agno/tools/slack.py +18 -3
  242. agno/tools/spotify.py +919 -0
  243. agno/tools/tavily.py +146 -0
  244. agno/tools/toolkit.py +25 -0
  245. agno/tools/workflow.py +8 -1
  246. agno/tools/yfinance.py +12 -11
  247. agno/tracing/__init__.py +12 -0
  248. agno/tracing/exporter.py +157 -0
  249. agno/tracing/schemas.py +276 -0
  250. agno/tracing/setup.py +111 -0
  251. agno/utils/agent.py +938 -0
  252. agno/utils/cryptography.py +22 -0
  253. agno/utils/dttm.py +33 -0
  254. agno/utils/events.py +151 -3
  255. agno/utils/gemini.py +15 -5
  256. agno/utils/hooks.py +118 -4
  257. agno/utils/http.py +113 -2
  258. agno/utils/knowledge.py +12 -5
  259. agno/utils/log.py +1 -0
  260. agno/utils/mcp.py +92 -2
  261. agno/utils/media.py +187 -1
  262. agno/utils/merge_dict.py +3 -3
  263. agno/utils/message.py +60 -0
  264. agno/utils/models/ai_foundry.py +9 -2
  265. agno/utils/models/claude.py +49 -14
  266. agno/utils/models/cohere.py +9 -2
  267. agno/utils/models/llama.py +9 -2
  268. agno/utils/models/mistral.py +4 -2
  269. agno/utils/print_response/agent.py +109 -16
  270. agno/utils/print_response/team.py +223 -30
  271. agno/utils/print_response/workflow.py +251 -34
  272. agno/utils/streamlit.py +1 -1
  273. agno/utils/team.py +98 -9
  274. agno/utils/tokens.py +657 -0
  275. agno/vectordb/base.py +39 -7
  276. agno/vectordb/cassandra/cassandra.py +21 -5
  277. agno/vectordb/chroma/chromadb.py +43 -12
  278. agno/vectordb/clickhouse/clickhousedb.py +21 -5
  279. agno/vectordb/couchbase/couchbase.py +29 -5
  280. agno/vectordb/lancedb/lance_db.py +92 -181
  281. agno/vectordb/langchaindb/langchaindb.py +24 -4
  282. agno/vectordb/lightrag/lightrag.py +17 -3
  283. agno/vectordb/llamaindex/llamaindexdb.py +25 -5
  284. agno/vectordb/milvus/milvus.py +50 -37
  285. agno/vectordb/mongodb/__init__.py +7 -1
  286. agno/vectordb/mongodb/mongodb.py +36 -30
  287. agno/vectordb/pgvector/pgvector.py +201 -77
  288. agno/vectordb/pineconedb/pineconedb.py +41 -23
  289. agno/vectordb/qdrant/qdrant.py +67 -54
  290. agno/vectordb/redis/__init__.py +9 -0
  291. agno/vectordb/redis/redisdb.py +682 -0
  292. agno/vectordb/singlestore/singlestore.py +50 -29
  293. agno/vectordb/surrealdb/surrealdb.py +31 -41
  294. agno/vectordb/upstashdb/upstashdb.py +34 -6
  295. agno/vectordb/weaviate/weaviate.py +53 -14
  296. agno/workflow/__init__.py +2 -0
  297. agno/workflow/agent.py +299 -0
  298. agno/workflow/condition.py +120 -18
  299. agno/workflow/loop.py +77 -10
  300. agno/workflow/parallel.py +231 -143
  301. agno/workflow/router.py +118 -17
  302. agno/workflow/step.py +609 -170
  303. agno/workflow/steps.py +73 -6
  304. agno/workflow/types.py +96 -21
  305. agno/workflow/workflow.py +2039 -262
  306. {agno-2.1.2.dist-info → agno-2.3.13.dist-info}/METADATA +201 -66
  307. agno-2.3.13.dist-info/RECORD +613 -0
  308. agno/tools/googlesearch.py +0 -98
  309. agno/tools/mcp.py +0 -679
  310. agno/tools/memori.py +0 -339
  311. agno-2.1.2.dist-info/RECORD +0 -543
  312. {agno-2.1.2.dist-info → agno-2.3.13.dist-info}/WHEEL +0 -0
  313. {agno-2.1.2.dist-info → agno-2.3.13.dist-info}/licenses/LICENSE +0 -0
  314. {agno-2.1.2.dist-info → agno-2.3.13.dist-info}/top_level.txt +0 -0
agno/workflow/loop.py CHANGED
@@ -1,9 +1,11 @@
1
1
  import inspect
2
+ import warnings
2
3
  from dataclasses import dataclass
3
4
  from typing import Any, AsyncIterator, Awaitable, Callable, Dict, Iterator, List, Optional, Union
4
5
  from uuid import uuid4
5
6
 
6
7
  from agno.run.agent import RunOutputEvent
8
+ from agno.run.base import RunContext
7
9
  from agno.run.team import TeamRunOutputEvent
8
10
  from agno.run.workflow import (
9
11
  LoopExecutionCompletedEvent,
@@ -13,6 +15,7 @@ from agno.run.workflow import (
13
15
  WorkflowRunOutput,
14
16
  WorkflowRunOutputEvent,
15
17
  )
18
+ from agno.session.workflow import WorkflowSession
16
19
  from agno.utils.log import log_debug, logger
17
20
  from agno.workflow.step import Step
18
21
  from agno.workflow.types import StepInput, StepOutput, StepType
@@ -131,7 +134,12 @@ class Loop:
131
134
  user_id: Optional[str] = None,
132
135
  workflow_run_response: Optional[WorkflowRunOutput] = None,
133
136
  store_executor_outputs: bool = True,
137
+ run_context: Optional[RunContext] = None,
134
138
  session_state: Optional[Dict[str, Any]] = None,
139
+ workflow_session: Optional[WorkflowSession] = None,
140
+ add_workflow_history_to_steps: Optional[bool] = False,
141
+ num_history_runs: int = 3,
142
+ background_tasks: Optional[Any] = None,
135
143
  ) -> StepOutput:
136
144
  """Execute loop steps with iteration control - mirrors workflow execution logic"""
137
145
  # Use workflow logger for loop orchestration
@@ -156,7 +164,12 @@ class Loop:
156
164
  user_id=user_id,
157
165
  workflow_run_response=workflow_run_response,
158
166
  store_executor_outputs=store_executor_outputs,
167
+ run_context=run_context,
159
168
  session_state=session_state,
169
+ workflow_session=workflow_session,
170
+ add_workflow_history_to_steps=add_workflow_history_to_steps,
171
+ num_history_runs=num_history_runs,
172
+ background_tasks=background_tasks,
160
173
  )
161
174
 
162
175
  # Handle both single StepOutput and List[StepOutput] (from Loop/Condition steps)
@@ -219,12 +232,19 @@ class Loop:
219
232
  step_input: StepInput,
220
233
  session_id: Optional[str] = None,
221
234
  user_id: Optional[str] = None,
235
+ stream_events: bool = False,
222
236
  stream_intermediate_steps: bool = False,
237
+ stream_executor_events: bool = True,
223
238
  workflow_run_response: Optional[WorkflowRunOutput] = None,
224
239
  step_index: Optional[Union[int, tuple]] = None,
225
240
  store_executor_outputs: bool = True,
241
+ run_context: Optional[RunContext] = None,
226
242
  session_state: Optional[Dict[str, Any]] = None,
227
243
  parent_step_id: Optional[str] = None,
244
+ workflow_session: Optional[WorkflowSession] = None,
245
+ add_workflow_history_to_steps: Optional[bool] = False,
246
+ num_history_runs: int = 3,
247
+ background_tasks: Optional[Any] = None,
228
248
  ) -> Iterator[Union[WorkflowRunOutputEvent, StepOutput]]:
229
249
  """Execute loop steps with streaming support - mirrors workflow execution logic"""
230
250
  log_debug(f"Loop Start: {self.name}", center=True, symbol="=")
@@ -234,7 +254,16 @@ class Loop:
234
254
 
235
255
  loop_step_id = str(uuid4())
236
256
 
237
- if stream_intermediate_steps and workflow_run_response:
257
+ # Considering both stream_events and stream_intermediate_steps (deprecated)
258
+ if stream_intermediate_steps is not None:
259
+ warnings.warn(
260
+ "The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Use 'stream_events' instead.",
261
+ DeprecationWarning,
262
+ stacklevel=2,
263
+ )
264
+ stream_events = stream_events or stream_intermediate_steps
265
+
266
+ if stream_events and workflow_run_response:
238
267
  # Yield loop started event
239
268
  yield LoopExecutionStartedEvent(
240
269
  run_id=workflow_run_response.run_id or "",
@@ -255,7 +284,7 @@ class Loop:
255
284
  while iteration < self.max_iterations:
256
285
  log_debug(f"Loop iteration {iteration + 1}/{self.max_iterations}")
257
286
 
258
- if stream_intermediate_steps and workflow_run_response:
287
+ if stream_events and workflow_run_response:
259
288
  # Yield iteration started event
260
289
  yield LoopIterationStartedEvent(
261
290
  run_id=workflow_run_response.run_id or "",
@@ -291,12 +320,18 @@ class Loop:
291
320
  current_step_input,
292
321
  session_id=session_id,
293
322
  user_id=user_id,
294
- stream_intermediate_steps=stream_intermediate_steps,
323
+ stream_events=stream_events,
324
+ stream_executor_events=stream_executor_events,
295
325
  workflow_run_response=workflow_run_response,
296
326
  step_index=composite_step_index,
297
327
  store_executor_outputs=store_executor_outputs,
328
+ run_context=run_context,
298
329
  session_state=session_state,
299
330
  parent_step_id=loop_step_id,
331
+ add_workflow_history_to_steps=add_workflow_history_to_steps,
332
+ workflow_session=workflow_session,
333
+ num_history_runs=num_history_runs,
334
+ background_tasks=background_tasks,
300
335
  ):
301
336
  if isinstance(event, StepOutput):
302
337
  step_outputs_for_iteration.append(event)
@@ -348,7 +383,7 @@ class Loop:
348
383
  should_continue = False
349
384
  log_debug(f"Loop ending early due to step termination request at iteration {iteration}")
350
385
 
351
- if stream_intermediate_steps and workflow_run_response:
386
+ if stream_events and workflow_run_response:
352
387
  # Yield iteration completed event
353
388
  yield LoopIterationCompletedEvent(
354
389
  run_id=workflow_run_response.run_id or "",
@@ -373,7 +408,7 @@ class Loop:
373
408
 
374
409
  log_debug(f"Loop End: {self.name} ({iteration} iterations)", center=True, symbol="=")
375
410
 
376
- if stream_intermediate_steps and workflow_run_response:
411
+ if stream_events and workflow_run_response:
377
412
  # Yield loop completed event
378
413
  yield LoopExecutionCompletedEvent(
379
414
  run_id=workflow_run_response.run_id or "",
@@ -409,7 +444,12 @@ class Loop:
409
444
  user_id: Optional[str] = None,
410
445
  workflow_run_response: Optional[WorkflowRunOutput] = None,
411
446
  store_executor_outputs: bool = True,
447
+ run_context: Optional[RunContext] = None,
412
448
  session_state: Optional[Dict[str, Any]] = None,
449
+ workflow_session: Optional[WorkflowSession] = None,
450
+ add_workflow_history_to_steps: Optional[bool] = False,
451
+ num_history_runs: int = 3,
452
+ background_tasks: Optional[Any] = None,
413
453
  ) -> StepOutput:
414
454
  """Execute loop steps asynchronously with iteration control - mirrors workflow execution logic"""
415
455
  # Use workflow logger for async loop orchestration
@@ -436,7 +476,12 @@ class Loop:
436
476
  user_id=user_id,
437
477
  workflow_run_response=workflow_run_response,
438
478
  store_executor_outputs=store_executor_outputs,
479
+ run_context=run_context,
439
480
  session_state=session_state,
481
+ workflow_session=workflow_session,
482
+ add_workflow_history_to_steps=add_workflow_history_to_steps,
483
+ num_history_runs=num_history_runs,
484
+ background_tasks=background_tasks,
440
485
  )
441
486
 
442
487
  # Handle both single StepOutput and List[StepOutput] (from Loop/Condition steps)
@@ -502,12 +547,19 @@ class Loop:
502
547
  step_input: StepInput,
503
548
  session_id: Optional[str] = None,
504
549
  user_id: Optional[str] = None,
550
+ stream_events: bool = False,
505
551
  stream_intermediate_steps: bool = False,
552
+ stream_executor_events: bool = True,
506
553
  workflow_run_response: Optional[WorkflowRunOutput] = None,
507
554
  step_index: Optional[Union[int, tuple]] = None,
508
555
  store_executor_outputs: bool = True,
556
+ run_context: Optional[RunContext] = None,
509
557
  session_state: Optional[Dict[str, Any]] = None,
510
558
  parent_step_id: Optional[str] = None,
559
+ workflow_session: Optional[WorkflowSession] = None,
560
+ add_workflow_history_to_steps: Optional[bool] = False,
561
+ num_history_runs: int = 3,
562
+ background_tasks: Optional[Any] = None,
511
563
  ) -> AsyncIterator[Union[WorkflowRunOutputEvent, TeamRunOutputEvent, RunOutputEvent, StepOutput]]:
512
564
  """Execute loop steps with async streaming support - mirrors workflow execution logic"""
513
565
  log_debug(f"Loop Start: {self.name}", center=True, symbol="=")
@@ -517,7 +569,16 @@ class Loop:
517
569
  # Prepare steps first
518
570
  self._prepare_steps()
519
571
 
520
- if stream_intermediate_steps and workflow_run_response:
572
+ # Considering both stream_events and stream_intermediate_steps (deprecated)
573
+ if stream_intermediate_steps is not None:
574
+ warnings.warn(
575
+ "The 'stream_intermediate_steps' parameter is deprecated and will be removed in future versions. Use 'stream_events' instead.",
576
+ DeprecationWarning,
577
+ stacklevel=2,
578
+ )
579
+ stream_events = stream_events or stream_intermediate_steps
580
+
581
+ if stream_events and workflow_run_response:
521
582
  # Yield loop started event
522
583
  yield LoopExecutionStartedEvent(
523
584
  run_id=workflow_run_response.run_id or "",
@@ -538,7 +599,7 @@ class Loop:
538
599
  while iteration < self.max_iterations:
539
600
  log_debug(f"Async loop iteration {iteration + 1}/{self.max_iterations}")
540
601
 
541
- if stream_intermediate_steps and workflow_run_response:
602
+ if stream_events and workflow_run_response:
542
603
  # Yield iteration started event
543
604
  yield LoopIterationStartedEvent(
544
605
  run_id=workflow_run_response.run_id or "",
@@ -574,12 +635,18 @@ class Loop:
574
635
  current_step_input,
575
636
  session_id=session_id,
576
637
  user_id=user_id,
577
- stream_intermediate_steps=stream_intermediate_steps,
638
+ stream_events=stream_events,
639
+ stream_executor_events=stream_executor_events,
578
640
  workflow_run_response=workflow_run_response,
579
641
  step_index=composite_step_index,
580
642
  store_executor_outputs=store_executor_outputs,
643
+ run_context=run_context,
581
644
  session_state=session_state,
582
645
  parent_step_id=loop_step_id,
646
+ workflow_session=workflow_session,
647
+ add_workflow_history_to_steps=add_workflow_history_to_steps,
648
+ num_history_runs=num_history_runs,
649
+ background_tasks=background_tasks,
583
650
  ):
584
651
  if isinstance(event, StepOutput):
585
652
  step_outputs_for_iteration.append(event)
@@ -634,7 +701,7 @@ class Loop:
634
701
  should_continue = False
635
702
  log_debug(f"Loop ending early due to step termination request at iteration {iteration}")
636
703
 
637
- if stream_intermediate_steps and workflow_run_response:
704
+ if stream_events and workflow_run_response:
638
705
  # Yield iteration completed event
639
706
  yield LoopIterationCompletedEvent(
640
707
  run_id=workflow_run_response.run_id or "",
@@ -659,7 +726,7 @@ class Loop:
659
726
 
660
727
  log_debug(f"Loop End: {self.name} ({iteration} iterations)", center=True, symbol="=")
661
728
 
662
- if stream_intermediate_steps and workflow_run_response:
729
+ if stream_events and workflow_run_response:
663
730
  # Yield loop completed event
664
731
  yield LoopExecutionCompletedEvent(
665
732
  run_id=workflow_run_response.run_id or "",