aip-agents-binary 0.5.24__py3-none-any.whl → 0.5.25b1__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 (299) hide show
  1. aip_agents/__init__.pyi +19 -0
  2. aip_agents/a2a/__init__.pyi +3 -0
  3. aip_agents/a2a/server/__init__.pyi +4 -0
  4. aip_agents/a2a/server/base_executor.pyi +73 -0
  5. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  6. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  7. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  8. aip_agents/a2a/types.pyi +132 -0
  9. aip_agents/agent/__init__.pyi +9 -0
  10. aip_agents/agent/base_agent.pyi +221 -0
  11. aip_agents/agent/base_langgraph_agent.py +6 -0
  12. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  13. aip_agents/agent/google_adk_agent.pyi +141 -0
  14. aip_agents/agent/google_adk_constants.pyi +3 -0
  15. aip_agents/agent/hitl/__init__.pyi +6 -0
  16. aip_agents/agent/hitl/config.pyi +15 -0
  17. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  18. aip_agents/agent/hitl/manager.pyi +200 -0
  19. aip_agents/agent/hitl/models.pyi +3 -0
  20. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  21. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  22. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  23. aip_agents/agent/hitl/registry.pyi +101 -0
  24. aip_agents/agent/interface.pyi +81 -0
  25. aip_agents/agent/interfaces.pyi +44 -0
  26. aip_agents/agent/langflow_agent.pyi +133 -0
  27. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  28. aip_agents/agent/langgraph_react_agent.py +96 -14
  29. aip_agents/agent/langgraph_react_agent.pyi +131 -0
  30. aip_agents/agent/system_instruction_context.pyi +13 -0
  31. aip_agents/clients/__init__.pyi +4 -0
  32. aip_agents/clients/langflow/__init__.pyi +4 -0
  33. aip_agents/clients/langflow/client.pyi +140 -0
  34. aip_agents/clients/langflow/types.pyi +7 -0
  35. aip_agents/constants.pyi +7 -0
  36. aip_agents/examples/__init__.pyi +0 -0
  37. aip_agents/examples/compare_streaming_client.py +2 -2
  38. aip_agents/examples/compare_streaming_client.pyi +48 -0
  39. aip_agents/examples/compare_streaming_server.py +1 -1
  40. aip_agents/examples/compare_streaming_server.pyi +18 -0
  41. aip_agents/examples/demo_memory_recall.pyi +58 -0
  42. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  43. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  44. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  45. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  46. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  47. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  48. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  49. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  50. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  51. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  52. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  53. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  54. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  55. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  56. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  57. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  58. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  59. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  60. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  61. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  62. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  63. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  64. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  65. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  66. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  67. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  68. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  69. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  70. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  71. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  72. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  73. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  74. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  75. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  76. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  77. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  78. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  79. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  80. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  81. aip_agents/examples/hello_world_langchain.pyi +5 -0
  82. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  83. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  84. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  85. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  86. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  87. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  88. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  89. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  90. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  91. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  92. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  93. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  94. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  95. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  96. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  97. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  98. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  99. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  100. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  101. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  102. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  103. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  104. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  105. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  106. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  107. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  108. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  109. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  110. aip_agents/examples/hello_world_sentry.pyi +21 -0
  111. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  112. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  113. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  114. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  115. aip_agents/examples/hitl_demo.pyi +67 -0
  116. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  117. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  118. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  119. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  120. aip_agents/examples/todolist_planning_a2a_langchain_client.py +2 -2
  121. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  122. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
  123. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  124. aip_agents/examples/tools/__init__.pyi +9 -0
  125. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  126. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  127. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  128. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  129. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  130. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  131. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  132. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  133. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  134. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  135. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  136. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  137. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  138. aip_agents/examples/tools/serper_tool.pyi +16 -0
  139. aip_agents/examples/tools/stock_tools.pyi +36 -0
  140. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  141. aip_agents/examples/tools/time_tool.pyi +15 -0
  142. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  143. aip_agents/guardrails/__init__.py +83 -0
  144. aip_agents/guardrails/__init__.pyi +6 -0
  145. aip_agents/guardrails/engines/__init__.py +69 -0
  146. aip_agents/guardrails/engines/__init__.pyi +4 -0
  147. aip_agents/guardrails/engines/base.py +90 -0
  148. aip_agents/guardrails/engines/base.pyi +61 -0
  149. aip_agents/guardrails/engines/nemo.py +101 -0
  150. aip_agents/guardrails/engines/nemo.pyi +46 -0
  151. aip_agents/guardrails/engines/phrase_matcher.py +113 -0
  152. aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
  153. aip_agents/guardrails/exceptions.py +39 -0
  154. aip_agents/guardrails/exceptions.pyi +23 -0
  155. aip_agents/guardrails/manager.py +163 -0
  156. aip_agents/guardrails/manager.pyi +42 -0
  157. aip_agents/guardrails/middleware.py +199 -0
  158. aip_agents/guardrails/middleware.pyi +87 -0
  159. aip_agents/guardrails/schemas.py +63 -0
  160. aip_agents/guardrails/schemas.pyi +43 -0
  161. aip_agents/guardrails/utils.py +45 -0
  162. aip_agents/guardrails/utils.pyi +19 -0
  163. aip_agents/mcp/__init__.pyi +0 -0
  164. aip_agents/mcp/client/__init__.pyi +5 -0
  165. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  166. aip_agents/mcp/client/connection_manager.pyi +48 -0
  167. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  168. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  169. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  170. aip_agents/mcp/client/langchain/client.pyi +48 -0
  171. aip_agents/mcp/client/persistent_session.pyi +113 -0
  172. aip_agents/mcp/client/session_pool.pyi +101 -0
  173. aip_agents/mcp/client/transports.pyi +123 -0
  174. aip_agents/mcp/utils/__init__.pyi +0 -0
  175. aip_agents/mcp/utils/config_validator.pyi +82 -0
  176. aip_agents/memory/__init__.pyi +5 -0
  177. aip_agents/memory/adapters/__init__.pyi +4 -0
  178. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  179. aip_agents/memory/adapters/mem0.pyi +22 -0
  180. aip_agents/memory/base.pyi +60 -0
  181. aip_agents/memory/constants.pyi +25 -0
  182. aip_agents/memory/factory.pyi +24 -0
  183. aip_agents/memory/guidance.pyi +3 -0
  184. aip_agents/memory/simple_memory.pyi +23 -0
  185. aip_agents/middleware/__init__.pyi +5 -0
  186. aip_agents/middleware/base.py +8 -0
  187. aip_agents/middleware/base.pyi +75 -0
  188. aip_agents/middleware/manager.py +22 -0
  189. aip_agents/middleware/manager.pyi +84 -0
  190. aip_agents/middleware/todolist.pyi +125 -0
  191. aip_agents/schema/__init__.pyi +9 -0
  192. aip_agents/schema/a2a.pyi +40 -0
  193. aip_agents/schema/agent.pyi +65 -0
  194. aip_agents/schema/hitl.pyi +89 -0
  195. aip_agents/schema/langgraph.pyi +28 -0
  196. aip_agents/schema/model_id.pyi +54 -0
  197. aip_agents/schema/step_limit.pyi +63 -0
  198. aip_agents/schema/storage.pyi +21 -0
  199. aip_agents/sentry/__init__.pyi +3 -0
  200. aip_agents/sentry/sentry.pyi +48 -0
  201. aip_agents/storage/__init__.pyi +8 -0
  202. aip_agents/storage/base.pyi +58 -0
  203. aip_agents/storage/clients/__init__.pyi +3 -0
  204. aip_agents/storage/clients/minio_client.pyi +137 -0
  205. aip_agents/storage/config.pyi +29 -0
  206. aip_agents/storage/providers/__init__.pyi +5 -0
  207. aip_agents/storage/providers/base.pyi +88 -0
  208. aip_agents/storage/providers/memory.pyi +79 -0
  209. aip_agents/storage/providers/object_storage.pyi +98 -0
  210. aip_agents/tools/__init__.pyi +9 -0
  211. aip_agents/tools/browser_use/__init__.pyi +14 -0
  212. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  213. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  214. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  215. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  216. aip_agents/tools/browser_use/schemas.pyi +32 -0
  217. aip_agents/tools/browser_use/session.pyi +4 -0
  218. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  219. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  220. aip_agents/tools/browser_use/streaming.pyi +81 -0
  221. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  222. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  223. aip_agents/tools/browser_use/types.pyi +45 -0
  224. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  225. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  226. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  227. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  228. aip_agents/tools/constants.pyi +138 -0
  229. aip_agents/tools/document_loader/__init__.pyi +7 -0
  230. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  231. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  232. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  233. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  234. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  235. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  236. aip_agents/tools/gl_connector/tool.pyi +74 -0
  237. aip_agents/tools/gl_connector_tools.pyi +39 -0
  238. aip_agents/tools/memory_search/__init__.pyi +5 -0
  239. aip_agents/tools/memory_search/base.pyi +69 -0
  240. aip_agents/tools/memory_search/mem0.pyi +19 -0
  241. aip_agents/tools/memory_search/schema.pyi +15 -0
  242. aip_agents/tools/memory_search_tool.pyi +3 -0
  243. aip_agents/tools/time_tool.pyi +16 -0
  244. aip_agents/tools/tool_config_injector.pyi +26 -0
  245. aip_agents/tools/web_search/__init__.pyi +3 -0
  246. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  247. aip_agents/types/__init__.pyi +36 -0
  248. aip_agents/types/a2a_events.pyi +3 -0
  249. aip_agents/utils/__init__.pyi +11 -0
  250. aip_agents/utils/a2a_connector.pyi +146 -0
  251. aip_agents/utils/artifact_helpers.pyi +203 -0
  252. aip_agents/utils/constants.pyi +10 -0
  253. aip_agents/utils/datetime/__init__.pyi +4 -0
  254. aip_agents/utils/datetime/normalization.pyi +95 -0
  255. aip_agents/utils/datetime/timezone.pyi +48 -0
  256. aip_agents/utils/env_loader.pyi +10 -0
  257. aip_agents/utils/event_handler_registry.pyi +23 -0
  258. aip_agents/utils/file_prompt_utils.pyi +21 -0
  259. aip_agents/utils/final_response_builder.pyi +34 -0
  260. aip_agents/utils/formatter_llm_client.pyi +71 -0
  261. aip_agents/utils/langgraph/__init__.pyi +3 -0
  262. aip_agents/utils/langgraph/converter.pyi +49 -0
  263. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  264. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  265. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  266. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  267. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  268. aip_agents/utils/logger.pyi +60 -0
  269. aip_agents/utils/metadata/__init__.pyi +5 -0
  270. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  271. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  272. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  273. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  274. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  275. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  276. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  277. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  278. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  279. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  280. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  281. aip_agents/utils/metadata_helper.pyi +117 -0
  282. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  283. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  284. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  285. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  286. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  287. aip_agents/utils/pii/__init__.pyi +5 -0
  288. aip_agents/utils/pii/pii_handler.pyi +96 -0
  289. aip_agents/utils/pii/pii_helper.pyi +78 -0
  290. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  291. aip_agents/utils/reference_helper.pyi +81 -0
  292. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  293. aip_agents/utils/step_limit_manager.pyi +112 -0
  294. aip_agents/utils/token_usage_helper.pyi +60 -0
  295. {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/METADATA +49 -49
  296. aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
  297. {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/WHEEL +1 -1
  298. aip_agents_binary-0.5.24.dist-info/RECORD +0 -280
  299. {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/top_level.txt +0 -0
@@ -6,8 +6,11 @@ Authors:
6
6
  Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
7
7
  Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
8
8
  Raymond Christopher (raymond.christopher@gdplabs.id)
9
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
9
10
  """
10
11
 
12
+ from __future__ import annotations
13
+
11
14
  import asyncio
12
15
  import time
13
16
  import uuid
@@ -15,9 +18,12 @@ from collections.abc import Awaitable, Callable, Sequence
15
18
  from dataclasses import asdict, dataclass
16
19
  from functools import reduce
17
20
  from textwrap import dedent
18
- from typing import Annotated, Any
21
+ from typing import TYPE_CHECKING, Annotated, Any
19
22
 
20
23
  from deprecated import deprecated
24
+
25
+ if TYPE_CHECKING:
26
+ from aip_agents.guardrails.manager import GuardrailManager
21
27
  from gllm_core.event import EventEmitter
22
28
  from gllm_core.schema import Chunk
23
29
  from langchain_core.language_models import BaseChatModel
@@ -157,6 +163,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
157
163
  tool_output_manager: ToolOutputManager | None = None,
158
164
  planning: bool = False,
159
165
  middlewares: Sequence[AgentMiddleware] | None = None,
166
+ guardrail: GuardrailManager | None = None,
160
167
  step_limit_config: StepLimitConfig | None = None,
161
168
  **kwargs: Any,
162
169
  ):
@@ -178,8 +185,12 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
178
185
  planning: Enable planning capabilities with TodoListMiddleware. Defaults to False.
179
186
  middlewares: Optional sequence of custom middleware to COMPOSE (not override) with built-in middleware.
180
187
  Execution order: [TodoListMiddleware (if planning=True),
188
+ GuardrailMiddleware (if guardrail provided),
181
189
  ...custom middlewares in order provided]
182
190
  All middleware hooks execute - this extends capabilities, never replaces them.
191
+ guardrail: Optional GuardrailManager for content filtering and safety checks.
192
+ When provided, automatically wraps in GuardrailMiddleware for transparent
193
+ input/output filtering during agent execution.
183
194
  enable_pii: Optional toggle to enable PII handling for tool inputs and outputs.
184
195
  step_limit_config: Optional configuration for step limits and delegation depth.
185
196
  **kwargs: Additional keyword arguments passed to BaseLangGraphAgent.
@@ -212,6 +223,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
212
223
  # Setup middleware
213
224
  self._middleware_manager = self._setup_middleware(
214
225
  planning=planning,
226
+ guardrail=guardrail,
215
227
  custom_middlewares=middlewares,
216
228
  )
217
229
 
@@ -224,15 +236,17 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
224
236
  def _setup_middleware(
225
237
  self,
226
238
  planning: bool,
239
+ guardrail: GuardrailManager | None,
227
240
  custom_middlewares: Sequence[AgentMiddleware] | None,
228
241
  ) -> MiddlewareManager | None:
229
242
  """Setup middleware based on configuration.
230
243
 
231
- Creates auto-configured middleware (planning) and composes
244
+ Creates auto-configured middleware (planning, guardrails) and composes
232
245
  with custom middleware if provided.
233
246
 
234
247
  Args:
235
248
  planning: Whether to enable TodoListMiddleware.
249
+ guardrail: Optional GuardrailManager to wrap in GuardrailMiddleware.
236
250
  custom_middlewares: Optional custom middlewares to append.
237
251
 
238
252
  Returns:
@@ -244,6 +258,12 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
244
258
  if planning:
245
259
  middleware_list.append(TodoListMiddleware())
246
260
 
261
+ # Auto-configure GuardrailMiddleware if guardrail provided
262
+ if guardrail:
263
+ from aip_agents.guardrails.middleware import GuardrailMiddleware
264
+
265
+ middleware_list.append(GuardrailMiddleware(guardrail))
266
+
247
267
  # Append custom middlewares
248
268
  if custom_middlewares:
249
269
  middleware_list.extend(custom_middlewares)
@@ -579,14 +599,29 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
579
599
  current_messages = state["messages"]
580
600
 
581
601
  # Execute LLM call
582
- if self.lm_invoker:
583
- result = await self._handle_lm_invoker_call(current_messages, state, config)
584
- elif isinstance(self.model, BaseChatModel):
585
- result = await self._handle_langchain_model_call(current_messages, state, config)
586
- else:
587
- raise ValueError(
588
- f"Agent '{self.name}': No valid LMInvoker or LangChain model configured for ReAct agent node."
589
- )
602
+ try:
603
+ if self.lm_invoker:
604
+ result = await self._handle_lm_invoker_call(current_messages, state, config)
605
+ elif isinstance(self.model, BaseChatModel):
606
+ result = await self._handle_langchain_model_call(current_messages, state, config)
607
+ else:
608
+ raise ValueError(
609
+ f"Agent '{self.name}': No valid LMInvoker or LangChain model configured for ReAct agent node."
610
+ )
611
+ except Exception as e:
612
+ # Lazy import to support optional guardrails dependency
613
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
614
+
615
+ if isinstance(e, GuardrailViolationError):
616
+ return {
617
+ "messages": [
618
+ AIMessage(
619
+ content=f"⚠️ Guardrail violation: {e.result.reason}",
620
+ response_metadata={"finish_reason": "stop"},
621
+ )
622
+ ]
623
+ }
624
+ raise
590
625
 
591
626
  # Increment step counter after successful execution
592
627
  manager.increment_step()
@@ -1954,6 +1989,47 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
1954
1989
  )
1955
1990
  writer(a2a_event)
1956
1991
 
1992
+ async def _execute_abefore_model_hook(self, state: dict[str, Any]) -> None:
1993
+ """Asynchronously execute abefore_model middleware hook and update state.
1994
+
1995
+ Args:
1996
+ state: Current agent state to potentially update.
1997
+ """
1998
+ if self._middleware_manager:
1999
+ try:
2000
+ before_updates = await self._middleware_manager.abefore_model(state)
2001
+ if before_updates:
2002
+ state.update(before_updates)
2003
+ except Exception as e:
2004
+ # Lazy import to support optional guardrails dependency
2005
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
2006
+
2007
+ if isinstance(e, GuardrailViolationError):
2008
+ # Re-raise guardrail violations to be caught by the agent node
2009
+ raise
2010
+ logger.error(f"Agent '{self.name}': Middleware abefore_model hook failed: {e}")
2011
+
2012
+ async def _execute_aafter_model_hook(self, state_updates: dict[str, Any], state: dict[str, Any]) -> None:
2013
+ """Asynchronously execute aafter_model middleware hook.
2014
+
2015
+ Args:
2016
+ state_updates: Updates to be merged into state.
2017
+ state: Current agent state for context.
2018
+ """
2019
+ if self._middleware_manager:
2020
+ try:
2021
+ after_updates = await self._middleware_manager.aafter_model(state)
2022
+ if after_updates:
2023
+ state_updates.update(after_updates)
2024
+ except Exception as e:
2025
+ # Lazy import to support optional guardrails dependency
2026
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
2027
+
2028
+ if isinstance(e, GuardrailViolationError):
2029
+ # Re-raise guardrail violations
2030
+ raise
2031
+ logger.error(f"Agent '{self.name}': Middleware aafter_model hook failed: {e}")
2032
+
1957
2033
  def _execute_before_model_hook(self, state: dict[str, Any]) -> None:
1958
2034
  """Execute before_model middleware hook and update state.
1959
2035
 
@@ -1966,6 +2042,12 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
1966
2042
  if before_updates:
1967
2043
  state.update(before_updates)
1968
2044
  except Exception as e:
2045
+ # Lazy import to support optional guardrails dependency
2046
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
2047
+
2048
+ if isinstance(e, GuardrailViolationError):
2049
+ # Re-raise guardrail violations to be caught by the agent node
2050
+ raise
1969
2051
  logger.error(f"Agent '{self.name}': Middleware before_model hook failed: {e}")
1970
2052
 
1971
2053
  def _execute_modify_model_request_hook(
@@ -2029,7 +2111,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
2029
2111
  dict[str, Any]: A dictionary containing the new messages and updated token usage.
2030
2112
  """
2031
2113
  # Execute before_model middleware hook
2032
- self._execute_before_model_hook(state)
2114
+ await self._execute_abefore_model_hook(state)
2033
2115
 
2034
2116
  # Build tool output aware instruction
2035
2117
  enhanced_instruction = self._build_tool_output_aware_instruction(self.instruction, state, config)
@@ -2063,7 +2145,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
2063
2145
  state_updates.update(token_usage_updates)
2064
2146
 
2065
2147
  # Execute after_model middleware hook
2066
- self._execute_after_model_hook(state_updates, state)
2148
+ await self._execute_aafter_model_hook(state_updates, state)
2067
2149
 
2068
2150
  return state_updates
2069
2151
 
@@ -2081,7 +2163,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
2081
2163
  dict[str, Any]: A dictionary containing the new messages and updated token usage.
2082
2164
  """
2083
2165
  # Execute before_model middleware hook
2084
- self._execute_before_model_hook(state)
2166
+ await self._execute_abefore_model_hook(state)
2085
2167
 
2086
2168
  # Build tool output aware instruction
2087
2169
  enhanced_instruction = self._build_tool_output_aware_instruction(self.instruction, state, config)
@@ -2113,7 +2195,7 @@ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
2113
2195
  state_updates.update(token_usage_updates)
2114
2196
 
2115
2197
  # Execute after_model middleware hook
2116
- self._execute_after_model_hook(state_updates, state)
2198
+ await self._execute_aafter_model_hook(state_updates, state)
2117
2199
 
2118
2200
  return state_updates
2119
2201
 
@@ -0,0 +1,131 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent.base_langgraph_agent import BaseLangGraphAgent as BaseLangGraphAgent
3
+ from aip_agents.agent.hitl.langgraph_hitl_mixin import LangGraphHitLMixin as LangGraphHitLMixin
4
+ from aip_agents.agent.hitl.manager import TOOL_EXECUTION_BLOCKING_DECISIONS as TOOL_EXECUTION_BLOCKING_DECISIONS
5
+ from aip_agents.guardrails.manager import GuardrailManager as GuardrailManager
6
+ from aip_agents.middleware.base import AgentMiddleware as AgentMiddleware, ModelRequest as ModelRequest
7
+ from aip_agents.middleware.manager import MiddlewareManager as MiddlewareManager
8
+ from aip_agents.middleware.todolist import TodoList as TodoList, TodoListMiddleware as TodoListMiddleware
9
+ from aip_agents.schema.a2a import A2AStreamEventType as A2AStreamEventType
10
+ from aip_agents.schema.hitl import ApprovalDecision as ApprovalDecision, HitlMetadata as HitlMetadata
11
+ from aip_agents.schema.langgraph import ToolCallResult as ToolCallResult, ToolStorageParams as ToolStorageParams
12
+ from aip_agents.schema.step_limit import MaxStepsExceededError as MaxStepsExceededError, StepLimitConfig as StepLimitConfig
13
+ from aip_agents.tools.memory_search_tool import MEMORY_SEARCH_TOOL_NAME as MEMORY_SEARCH_TOOL_NAME
14
+ from aip_agents.tools.tool_config_injector import TOOL_CONFIGS_KEY as TOOL_CONFIGS_KEY
15
+ from aip_agents.utils import add_references_chunks as add_references_chunks
16
+ from aip_agents.utils.langgraph import convert_langchain_messages_to_gllm_messages as convert_langchain_messages_to_gllm_messages, convert_lm_output_to_langchain_message as convert_lm_output_to_langchain_message
17
+ from aip_agents.utils.langgraph.tool_output_management import StoreOutputParams as StoreOutputParams, ToolOutputManager as ToolOutputManager, ToolReferenceError as ToolReferenceError, ToolReferenceResolver as ToolReferenceResolver
18
+ from aip_agents.utils.logger import get_logger as get_logger
19
+ from aip_agents.utils.metadata.activity_metadata_helper import create_tool_activity_info as create_tool_activity_info
20
+ from aip_agents.utils.metadata_helper import Kind as Kind, MetadataFieldKeys as MetadataFieldKeys, Status as Status
21
+ from aip_agents.utils.pii import ToolPIIHandler as ToolPIIHandler, add_pii_mappings as add_pii_mappings, normalize_enable_pii as normalize_enable_pii
22
+ from aip_agents.utils.reference_helper import extract_references_from_tool as extract_references_from_tool
23
+ from aip_agents.utils.step_limit_manager import StepLimitManager as StepLimitManager
24
+ from aip_agents.utils.token_usage_helper import TOTAL_USAGE_KEY as TOTAL_USAGE_KEY, USAGE_METADATA_KEY as USAGE_METADATA_KEY, add_usage_metadata as add_usage_metadata, extract_and_update_token_usage_from_ai_message as extract_and_update_token_usage_from_ai_message, extract_token_usage_from_tool_output as extract_token_usage_from_tool_output
25
+ from collections.abc import Awaitable as Awaitable, Sequence
26
+ from dataclasses import dataclass
27
+ from gllm_core.event import EventEmitter
28
+ from gllm_core.schema import Chunk as Chunk
29
+ from langchain_core.language_models import BaseChatModel
30
+ from langchain_core.messages import BaseMessage as BaseMessage
31
+ from langchain_core.messages.ai import UsageMetadata
32
+ from langchain_core.tools import BaseTool
33
+ from langgraph.graph import StateGraph
34
+ from langgraph.graph.message import add_messages as add_messages
35
+ from langgraph.graph.state import CompiledStateGraph
36
+ from langgraph.managed import IsLastStep, RemainingSteps
37
+ from typing import Annotated, Any
38
+ from typing_extensions import TypedDict
39
+
40
+ logger: Incomplete
41
+ DEFAULT_INSTRUCTION: str
42
+ TOOL_RUN_STREAMING_METHOD: str
43
+ TOOL_OUTPUT_MANAGER_KEY: str
44
+ CALL_ID_KEY: str
45
+
46
+ @dataclass
47
+ class ToolCallContext:
48
+ """Context information for executing a single tool call."""
49
+ config: dict[str, Any] | None
50
+ state: dict[str, Any]
51
+ pending_artifacts: list[dict[str, Any]]
52
+ hitl_decision: ApprovalDecision | None = ...
53
+
54
+ class ReactAgentState(TypedDict):
55
+ """State schema for the ReAct agent.
56
+
57
+ Includes messages, step tracking, optional event emission support, artifacts, references,
58
+ metadata, tool output management, and deep agents middleware state (todos, filesystem).
59
+ """
60
+ messages: Annotated[Sequence[BaseMessage], add_messages]
61
+ is_last_step: IsLastStep
62
+ remaining_steps: RemainingSteps
63
+ event_emitter: EventEmitter | None
64
+ artifacts: list[dict[str, Any]] | None
65
+ references: Annotated[list[Chunk], add_references_chunks]
66
+ metadata: dict[str, Any] | None
67
+ tool_output_manager: ToolOutputManager | None
68
+ total_usage: Annotated[UsageMetadata | None, add_usage_metadata]
69
+ pii_mapping: Annotated[dict[str, str] | None, add_pii_mappings]
70
+ thread_id: str
71
+ todos: TodoList | None
72
+ current_step: int
73
+ delegation_depth: int
74
+ delegation_chain: list[str]
75
+ step_limit_config: StepLimitConfig | None
76
+
77
+ class LangGraphReactAgent(LangGraphHitLMixin, BaseLangGraphAgent):
78
+ """A ReAct agent template built on LangGraph.
79
+
80
+ This agent can use either:
81
+ - An LMInvoker (if self.lm_invoker is set by BaseAgent)
82
+ - A LangChain BaseChatModel (if self.model is set by BaseAgent)
83
+
84
+ The graph structure follows the standard ReAct pattern:
85
+ agent -> tools -> agent (loop) -> END
86
+ """
87
+ tool_output_manager: Incomplete
88
+ step_limit_config: Incomplete
89
+ def __init__(self, name: str, instruction: str = ..., model: BaseChatModel | str | Any | None = None, tools: Sequence[BaseTool] | None = None, agents: Sequence[Any] | None = None, description: str | None = None, thread_id_key: str = 'thread_id', event_emitter: EventEmitter | None = None, tool_output_manager: ToolOutputManager | None = None, planning: bool = False, middlewares: Sequence[AgentMiddleware] | None = None, guardrail: GuardrailManager | None = None, step_limit_config: StepLimitConfig | None = None, **kwargs: Any) -> None:
90
+ """Initialize the LangGraph ReAct Agent.
91
+
92
+ Args:
93
+ name: The name of the agent.
94
+ instruction: The system instruction for the agent.
95
+ model: The model to use (lm_invoker, LangChain model, string, etc.).
96
+ tools: Sequence of LangChain tools available to the agent.
97
+ agents: Optional sequence of sub-agents for delegation (coordinator mode).
98
+ description: Human-readable description of the agent.
99
+ thread_id_key: Key for thread ID in configuration.
100
+ event_emitter: Optional event emitter for streaming updates.
101
+ tool_output_manager: Optional ToolOutputManager instance for tool output management.
102
+ When provided, enables tool output storage, reference resolution, and sharing capabilities.
103
+ This enables multi-agent workflows where agents can access each other's tool outputs.
104
+ If None, tool output management is disabled for this agent.
105
+ planning: Enable planning capabilities with TodoListMiddleware. Defaults to False.
106
+ middlewares: Optional sequence of custom middleware to COMPOSE (not override) with built-in middleware.
107
+ Execution order: [TodoListMiddleware (if planning=True),
108
+ GuardrailMiddleware (if guardrail provided),
109
+ ...custom middlewares in order provided]
110
+ All middleware hooks execute - this extends capabilities, never replaces them.
111
+ guardrail: Optional GuardrailManager for content filtering and safety checks.
112
+ When provided, automatically wraps in GuardrailMiddleware for transparent
113
+ input/output filtering during agent execution.
114
+ enable_pii: Optional toggle to enable PII handling for tool inputs and outputs.
115
+ step_limit_config: Optional configuration for step limits and delegation depth.
116
+ **kwargs: Additional keyword arguments passed to BaseLangGraphAgent.
117
+ """
118
+ def define_graph(self, graph_builder: StateGraph) -> CompiledStateGraph:
119
+ """Define the ReAct agent graph structure.
120
+
121
+ Args:
122
+ graph_builder: The StateGraph builder to define the graph structure.
123
+
124
+ Returns:
125
+ Compiled LangGraph ready for execution.
126
+ """
127
+
128
+ class LangGraphAgent(LangGraphReactAgent):
129
+ """Alias for LangGraphReactAgent."""
130
+ class LangChainAgent(LangGraphReactAgent):
131
+ """Alias for LangGraphReactAgent."""
@@ -0,0 +1,13 @@
1
+ from aip_agents.utils.constants import DefaultTimezone as DefaultTimezone
2
+
3
+ __all__ = ['get_current_date_context', 'DefaultTimezone']
4
+
5
+ def get_current_date_context(timezone: str = ...) -> str:
6
+ """Generate current date context for system prompts.
7
+
8
+ Args:
9
+ timezone: IANA timezone name for date formatting.
10
+
11
+ Returns:
12
+ Formatted date context string for inclusion in system prompts.
13
+ """
@@ -0,0 +1,4 @@
1
+ __all__ = ['langflow']
2
+
3
+ # Names in __all__ with no definition:
4
+ # langflow
@@ -0,0 +1,4 @@
1
+ from aip_agents.clients.langflow.client import LangflowApiClient as LangflowApiClient
2
+ from aip_agents.clients.langflow.types import LangflowEventType as LangflowEventType
3
+
4
+ __all__ = ['LangflowApiClient', 'LangflowEventType']
@@ -0,0 +1,140 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.clients.langflow.types import LangflowEventType as LangflowEventType
3
+ from aip_agents.schema.agent import HttpxClientOptions as HttpxClientOptions
4
+ from aip_agents.utils.logger import get_logger as get_logger
5
+ from collections.abc import AsyncGenerator
6
+ from typing import Any
7
+
8
+ logger: Incomplete
9
+ DEFAULT_LANGFLOW_BASE_URL: Incomplete
10
+ MAX_PAGE_SIZE: int
11
+
12
+ class LangflowApiClient:
13
+ """HTTP client for Langflow API with streaming and non-streaming support.
14
+
15
+ This client handles all communication with Langflow APIs, including:
16
+ - Non-streaming execution
17
+ - Server-Sent Events (SSE) streaming
18
+ - Session management for conversation continuity
19
+ - Error handling and retries
20
+ - Credential management
21
+ """
22
+ flow_id: Incomplete
23
+ base_url: Incomplete
24
+ api_key: Incomplete
25
+ sessions: dict[str, str]
26
+ client_kwargs: Incomplete
27
+ def __init__(self, flow_id: str | None = None, base_url: str | None = None, api_key: str | None = None, httpx_client_options: HttpxClientOptions = None) -> None:
28
+ """Initialize the Langflow API client.
29
+
30
+ Args:
31
+ flow_id: The unique identifier of the Langflow flow to execute.
32
+ base_url: The base URL of the Langflow API server.
33
+ api_key: The API key for Langflow authentication.
34
+ httpx_client_options: HTTP client configuration options for httpx, including timeout.
35
+ """
36
+ def get_or_create_session(self, thread_id: str | None = None) -> str:
37
+ """Get existing session ID or create a new one.
38
+
39
+ Args:
40
+ thread_id: Optional thread ID for session mapping.
41
+
42
+ Returns:
43
+ Session ID for the conversation.
44
+ """
45
+ async def call_flow(self, input_value: str, session_id: str | None = None, flow_id: str | None = None, **_: Any) -> dict[str, Any]:
46
+ """Execute Langflow flow without streaming.
47
+
48
+ Args:
49
+ input_value: The user input to send to the flow.
50
+ session_id: Optional session ID for conversation continuity.
51
+ flow_id: Optional flow ID to execute. If None, uses the instance flow_id.
52
+ **_: Additional keyword arguments.
53
+
54
+ Returns:
55
+ The response from the flow execution.
56
+
57
+ Raises:
58
+ httpx.HTTPError: If the HTTP request fails.
59
+ ValueError: If the response cannot be parsed.
60
+ """
61
+ async def stream_flow(self, input_value: str, session_id: str | None = None, flow_id: str | None = None, **_: Any) -> AsyncGenerator[dict[str, Any], None]:
62
+ """Execute Langflow flow with streaming.
63
+
64
+ Args:
65
+ input_value: The user input to send to the flow.
66
+ session_id: Optional session ID for conversation continuity.
67
+ flow_id: Optional flow ID to execute. If None, uses the instance flow_id.
68
+ **_: Additional keyword arguments.
69
+
70
+ Yields:
71
+ Parsed streaming events from the Langflow API.
72
+
73
+ Raises:
74
+ httpx.HTTPError: If the HTTP request fails.
75
+ ValueError: If streaming events cannot be parsed.
76
+ """
77
+ def parse_stream_event(self, event_data: dict[str, Any]) -> dict[str, Any] | None:
78
+ """Parse a single streaming event from Langflow.
79
+
80
+ Args:
81
+ event_data: Raw event data from Langflow streaming response.
82
+
83
+ Returns:
84
+ Parsed event dictionary or None if event should be skipped.
85
+ """
86
+ def clear_session(self, thread_id: str) -> None:
87
+ """Clear session for a specific thread.
88
+
89
+ Args:
90
+ thread_id: Thread ID to clear session for.
91
+ """
92
+ def clear_all_sessions(self) -> None:
93
+ """Clear all stored sessions."""
94
+ async def get_flows(self, project_id: str | None = None, remove_example_flows: bool = False, components_only: bool = False, header_flows: bool = False, get_all: bool = True, page: int = 1, size: int = 50) -> list[dict[str, Any]]:
95
+ """Retrieve flows from Langflow API with full control over parameters.
96
+
97
+ Based on the official API docs: https://docs.langflow.org/api-flows
98
+ Uses the exact parameter format from the documentation.
99
+
100
+ Args:
101
+ project_id: Optional project ID to filter flows.
102
+ remove_example_flows: Whether to exclude example flows. Defaults to False.
103
+ components_only: Whether to return only components. Defaults to False.
104
+ header_flows: Whether to return only flow headers. Defaults to False.
105
+ get_all: Whether to return all flows (ignores pagination). Defaults to True.
106
+ page: Page number for pagination (ignored if get_all=True). Defaults to 1.
107
+ size: Number of flows per page (ignored if get_all=True). Defaults to 50.
108
+
109
+ Returns:
110
+ List of flows or flow headers from the Langflow API.
111
+
112
+ Raises:
113
+ httpx.HTTPError: If the HTTP request fails.
114
+ ValueError: If the response cannot be parsed or invalid parameters provided.
115
+ """
116
+ async def get_all_flows(self, project_id: str | None = None, remove_example_flows: bool = False, components_only: bool = False, header_flows: bool = False) -> list[dict[str, Any]]:
117
+ """Convenience method to get ALL flows using the backend's get_all=true feature.
118
+
119
+ This method is a simple wrapper around get_flows() with get_all=True,
120
+ which uses the Langflow backend's ability to return all flows in one request.
121
+
122
+ Args:
123
+ project_id: Optional project ID to filter flows.
124
+ remove_example_flows: Whether to exclude example flows. Defaults to False.
125
+ components_only: Whether to return only components. Defaults to False.
126
+ header_flows: Whether to return only flow headers. Defaults to False.
127
+
128
+ Returns:
129
+ List of all flows from the Langflow API.
130
+
131
+ Raises:
132
+ httpx.HTTPError: If the HTTP request fails.
133
+ ValueError: If the response cannot be parsed.
134
+ """
135
+ async def health_check(self) -> bool:
136
+ """Check if the Langflow API is accessible.
137
+
138
+ Returns:
139
+ True if the API is accessible, False otherwise.
140
+ """
@@ -0,0 +1,7 @@
1
+ from enum import StrEnum
2
+
3
+ class LangflowEventType(StrEnum):
4
+ """Enum for Langflow event types as received from the API."""
5
+ ADD_MESSAGE: str
6
+ END: str
7
+ UNKNOWN: str
@@ -0,0 +1,7 @@
1
+ from _typeshed import Incomplete
2
+
3
+ BASE_DIR: Incomplete
4
+ DEFAULT_AGENT_TIMEOUT: int
5
+ LAST_N_CHATS: int
6
+ MAX_MEMORY_TOKENS: int
7
+ TEXT_PREVIEW_LENGTH: int
File without changes
@@ -8,10 +8,10 @@ This script demonstrates:
8
8
 
9
9
  Prerequisites:
10
10
  Start the server first:
11
- poetry run python -m aip_agents.examples.compare_streaming_server
11
+ uv run python -m aip_agents.examples.compare_streaming_server
12
12
 
13
13
  Then run this client:
14
- poetry run python -m aip_agents.examples.compare_streaming_client
14
+ uv run python -m aip_agents.examples.compare_streaming_client
15
15
 
16
16
  Authors:
17
17
  AI Agent Platform Team
@@ -0,0 +1,48 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ from aip_agents.examples.tools.mock_retrieval_tool import MockRetrievalTool as MockRetrievalTool
4
+ from aip_agents.examples.tools.pii_demo_tools import get_customer_info as get_customer_info, get_employee_data as get_employee_data, get_user_profile as get_user_profile
5
+ from aip_agents.examples.tools.random_chart_tool import RandomChartTool as RandomChartTool
6
+ from aip_agents.examples.tools.table_generator_tool import TableGeneratorTool as TableGeneratorTool
7
+ from aip_agents.schema.a2a import A2AStreamEventType as A2AStreamEventType
8
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
9
+ from aip_agents.utils.logger import get_logger as get_logger
10
+ from typing import Any
11
+
12
+ logger: Incomplete
13
+ SERVER_URL: str
14
+
15
+ def create_local_agent(enable_token_streaming: bool = False) -> LangGraphAgent:
16
+ """Create a local agent with the same tools as the server.
17
+
18
+ Args:
19
+ enable_token_streaming: Whether to enable token streaming for content_chunk events.
20
+ """
21
+ def format_chunk_summary(chunk: dict[str, Any], index: int) -> str:
22
+ """Format a chunk for display."""
23
+ async def run_direct_streaming(agent: LangGraphAgent, query: str, pii_mapping: dict[str, str] | None = None) -> list[dict[str, Any]]:
24
+ """Run arun_sse_stream and collect all chunks."""
25
+ async def run_connector_streaming(agent: LangGraphAgent, query: str, pii_mapping: dict[str, str] | None = None) -> list[dict[str, Any]]:
26
+ """Run astream_to_agent via A2A connector and collect all chunks."""
27
+ def get_chunk_keys(chunks: list[dict[str, Any]]) -> set[str]:
28
+ """Get all unique keys across all chunks."""
29
+ def get_field_types(chunks: list[dict[str, Any]], field: str) -> set[str]:
30
+ """Get all types seen for a field across chunks.
31
+
32
+ Note: StrEnum values are reported as 'str' since they ARE strings
33
+ and serialize identically over HTTP/SSE.
34
+ """
35
+ def group_chunks_by_event_type(chunks: list[dict[str, Any]]) -> dict[str, list[dict[str, Any]]]:
36
+ """Group chunks by their event_type."""
37
+ def compare_chunk_structure(chunk1: dict[str, Any], chunk2: dict[str, Any]) -> dict[str, Any]:
38
+ """Compare structure of two chunks and return differences."""
39
+ def compare_event_type_groups(direct_groups: dict[str, list[dict[str, Any]]], connector_groups: dict[str, list[dict[str, Any]]]) -> dict[str, Any]:
40
+ """Compare chunks grouped by event type - RAW comparison without filtering."""
41
+ def compare_chunks(direct_chunks: list[dict[str, Any]], connector_chunks: list[dict[str, Any]]) -> dict[str, Any]:
42
+ """Compare the two chunk lists and produce a comprehensive structural summary."""
43
+ def print_event_type_comparison(event_comparison: dict[str, Any]) -> None:
44
+ """Print per-event-type comparison details with exact key/value examples."""
45
+ def print_structure_comparison(comparison: dict[str, Any]) -> None:
46
+ """Print detailed structure comparison."""
47
+ async def main() -> None:
48
+ """Main comparison workflow."""
@@ -6,7 +6,7 @@ This server provides an agent with:
6
6
 
7
7
  To run this server:
8
8
  cd libs/aip_agents
9
- poetry run python -m aip_agents.examples.compare_streaming_server
9
+ uv run python -m aip_agents.examples.compare_streaming_server
10
10
 
11
11
  It will listen on http://localhost:18999 by default.
12
12
 
@@ -0,0 +1,18 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ from aip_agents.examples.tools.mock_retrieval_tool import MockRetrievalTool as MockRetrievalTool
4
+ from aip_agents.examples.tools.pii_demo_tools import get_customer_info as get_customer_info, get_employee_data as get_employee_data, get_user_profile as get_user_profile
5
+ from aip_agents.examples.tools.random_chart_tool import RandomChartTool as RandomChartTool
6
+ from aip_agents.examples.tools.table_generator_tool import TableGeneratorTool as TableGeneratorTool
7
+ from aip_agents.utils.logger import get_logger as get_logger
8
+
9
+ logger: Incomplete
10
+ SERVER_AGENT_NAME: str
11
+
12
+ def main(host: str, port: int):
13
+ """Runs the streaming comparison A2A server.
14
+
15
+ Args:
16
+ host: Host to bind the server to.
17
+ port: Port to bind the server to.
18
+ """