aip-agents-binary 0.5.25b8__py3-none-any.whl → 0.6.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 (296) 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 +137 -68
  12. aip_agents/agent/base_langgraph_agent.pyi +233 -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 +58 -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.py +9 -0
  114. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  115. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  116. aip_agents/examples/hitl_demo.pyi +67 -0
  117. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  118. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  119. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  120. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  121. aip_agents/examples/todolist_planning_a2a_langchain_client.py +2 -2
  122. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  123. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
  124. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  125. aip_agents/examples/tools/__init__.pyi +9 -0
  126. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  127. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  128. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  129. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  130. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  131. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  132. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  133. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  134. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  135. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  136. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  137. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  138. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  139. aip_agents/examples/tools/serper_tool.pyi +16 -0
  140. aip_agents/examples/tools/stock_tools.pyi +36 -0
  141. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  142. aip_agents/examples/tools/time_tool.pyi +15 -0
  143. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  144. aip_agents/guardrails/__init__.pyi +6 -0
  145. aip_agents/guardrails/engines/__init__.pyi +4 -0
  146. aip_agents/guardrails/engines/base.py +6 -6
  147. aip_agents/guardrails/engines/base.pyi +61 -0
  148. aip_agents/guardrails/engines/nemo.pyi +46 -0
  149. aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
  150. aip_agents/guardrails/exceptions.pyi +23 -0
  151. aip_agents/guardrails/manager.pyi +42 -0
  152. aip_agents/guardrails/middleware.pyi +87 -0
  153. aip_agents/guardrails/schemas.pyi +43 -0
  154. aip_agents/guardrails/utils.pyi +19 -0
  155. aip_agents/mcp/__init__.pyi +0 -0
  156. aip_agents/mcp/client/__init__.pyi +5 -0
  157. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  158. aip_agents/mcp/client/connection_manager.py +36 -1
  159. aip_agents/mcp/client/connection_manager.pyi +51 -0
  160. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  161. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  162. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  163. aip_agents/mcp/client/langchain/client.pyi +48 -0
  164. aip_agents/mcp/client/persistent_session.py +318 -68
  165. aip_agents/mcp/client/persistent_session.pyi +122 -0
  166. aip_agents/mcp/client/session_pool.pyi +101 -0
  167. aip_agents/mcp/client/transports.py +33 -2
  168. aip_agents/mcp/client/transports.pyi +132 -0
  169. aip_agents/mcp/utils/__init__.pyi +0 -0
  170. aip_agents/mcp/utils/config_validator.pyi +82 -0
  171. aip_agents/memory/__init__.pyi +5 -0
  172. aip_agents/memory/adapters/__init__.pyi +4 -0
  173. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  174. aip_agents/memory/adapters/mem0.pyi +22 -0
  175. aip_agents/memory/base.pyi +60 -0
  176. aip_agents/memory/constants.pyi +25 -0
  177. aip_agents/memory/factory.pyi +24 -0
  178. aip_agents/memory/guidance.pyi +3 -0
  179. aip_agents/memory/simple_memory.pyi +23 -0
  180. aip_agents/middleware/__init__.pyi +5 -0
  181. aip_agents/middleware/base.pyi +75 -0
  182. aip_agents/middleware/manager.pyi +84 -0
  183. aip_agents/middleware/todolist.pyi +125 -0
  184. aip_agents/schema/__init__.pyi +9 -0
  185. aip_agents/schema/a2a.pyi +40 -0
  186. aip_agents/schema/agent.pyi +65 -0
  187. aip_agents/schema/hitl.pyi +89 -0
  188. aip_agents/schema/langgraph.pyi +28 -0
  189. aip_agents/schema/model_id.pyi +54 -0
  190. aip_agents/schema/step_limit.pyi +63 -0
  191. aip_agents/schema/storage.pyi +21 -0
  192. aip_agents/sentry/__init__.pyi +3 -0
  193. aip_agents/sentry/sentry.pyi +48 -0
  194. aip_agents/storage/__init__.pyi +8 -0
  195. aip_agents/storage/base.pyi +58 -0
  196. aip_agents/storage/clients/__init__.pyi +3 -0
  197. aip_agents/storage/clients/minio_client.pyi +137 -0
  198. aip_agents/storage/config.pyi +29 -0
  199. aip_agents/storage/providers/__init__.pyi +5 -0
  200. aip_agents/storage/providers/base.pyi +88 -0
  201. aip_agents/storage/providers/memory.pyi +79 -0
  202. aip_agents/storage/providers/object_storage.pyi +98 -0
  203. aip_agents/tools/__init__.pyi +9 -0
  204. aip_agents/tools/browser_use/__init__.pyi +14 -0
  205. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  206. aip_agents/tools/browser_use/browser_use_tool.py +8 -0
  207. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  208. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  209. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  210. aip_agents/tools/browser_use/schemas.pyi +32 -0
  211. aip_agents/tools/browser_use/session.pyi +4 -0
  212. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  213. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  214. aip_agents/tools/browser_use/streaming.py +2 -0
  215. aip_agents/tools/browser_use/streaming.pyi +81 -0
  216. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  217. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  218. aip_agents/tools/browser_use/types.pyi +45 -0
  219. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  220. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  221. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  222. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  223. aip_agents/tools/constants.pyi +138 -0
  224. aip_agents/tools/document_loader/__init__.pyi +7 -0
  225. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  226. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  227. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  228. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  229. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  230. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  231. aip_agents/tools/gl_connector/tool.pyi +74 -0
  232. aip_agents/tools/gl_connector_tools.pyi +39 -0
  233. aip_agents/tools/memory_search/__init__.pyi +5 -0
  234. aip_agents/tools/memory_search/base.pyi +69 -0
  235. aip_agents/tools/memory_search/mem0.pyi +19 -0
  236. aip_agents/tools/memory_search/schema.pyi +15 -0
  237. aip_agents/tools/memory_search_tool.pyi +3 -0
  238. aip_agents/tools/time_tool.pyi +16 -0
  239. aip_agents/tools/tool_config_injector.pyi +26 -0
  240. aip_agents/tools/web_search/__init__.pyi +3 -0
  241. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  242. aip_agents/types/__init__.pyi +36 -0
  243. aip_agents/types/a2a_events.pyi +3 -0
  244. aip_agents/utils/__init__.pyi +11 -0
  245. aip_agents/utils/a2a_connector.pyi +146 -0
  246. aip_agents/utils/artifact_helpers.pyi +203 -0
  247. aip_agents/utils/constants.pyi +10 -0
  248. aip_agents/utils/datetime/__init__.pyi +4 -0
  249. aip_agents/utils/datetime/normalization.pyi +95 -0
  250. aip_agents/utils/datetime/timezone.pyi +48 -0
  251. aip_agents/utils/env_loader.pyi +10 -0
  252. aip_agents/utils/event_handler_registry.pyi +23 -0
  253. aip_agents/utils/file_prompt_utils.pyi +21 -0
  254. aip_agents/utils/final_response_builder.pyi +34 -0
  255. aip_agents/utils/formatter_llm_client.pyi +71 -0
  256. aip_agents/utils/langgraph/__init__.pyi +3 -0
  257. aip_agents/utils/langgraph/converter.pyi +49 -0
  258. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  259. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  260. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  261. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +26 -1
  262. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  263. aip_agents/utils/langgraph/tool_output_management.py +80 -0
  264. aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
  265. aip_agents/utils/logger.pyi +60 -0
  266. aip_agents/utils/metadata/__init__.pyi +5 -0
  267. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  268. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  269. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  270. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  271. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  272. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  273. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  274. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  275. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  276. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  277. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  278. aip_agents/utils/metadata_helper.pyi +117 -0
  279. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  280. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  281. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  282. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  283. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  284. aip_agents/utils/pii/__init__.pyi +5 -0
  285. aip_agents/utils/pii/pii_handler.pyi +96 -0
  286. aip_agents/utils/pii/pii_helper.pyi +78 -0
  287. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  288. aip_agents/utils/reference_helper.pyi +81 -0
  289. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  290. aip_agents/utils/step_limit_manager.pyi +112 -0
  291. aip_agents/utils/token_usage_helper.pyi +60 -0
  292. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/METADATA +51 -48
  293. aip_agents_binary-0.6.0.dist-info/RECORD +566 -0
  294. aip_agents_binary-0.5.25b8.dist-info/RECORD +0 -290
  295. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/WHEEL +0 -0
  296. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,166 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.schema.a2a import A2AEvent
3
+ from collections.abc import AsyncGenerator
4
+ from enum import StrEnum
5
+ from typing import Any
6
+
7
+ __all__ = ['SSEChunkTransformer', 'TaskState', 'ChunkStatus', 'ChunkReason', 'ChunkFieldKeys']
8
+
9
+ class TaskState(StrEnum):
10
+ """Task state values for SSE chunks."""
11
+ WORKING: str
12
+ COMPLETED: str
13
+ FAILED: str
14
+
15
+ class ChunkStatus(StrEnum):
16
+ """Status values for SSE chunks."""
17
+ SUCCESS: str
18
+ ERROR: str
19
+
20
+ class ChunkReason(StrEnum):
21
+ """Reason codes for special chunk states."""
22
+ EMPTY_PAYLOAD: str
23
+
24
+ class ChunkFieldKeys(StrEnum):
25
+ """Field name constants for SSE chunk structure."""
26
+ STATUS: str
27
+ TASK_STATE: str
28
+ CONTENT: str
29
+ EVENT_TYPE: str
30
+ FINAL: str
31
+ METADATA: str
32
+ TIMESTAMP: str
33
+ TASK_ID: str
34
+ CONTEXT_ID: str
35
+ ARTIFACTS: str
36
+ REASON: str
37
+
38
+ class SSEChunkTransformer:
39
+ '''Transforms A2AEvent stream to SSE-compatible output.
40
+
41
+ This class converts events from arun_a2a_stream into the normalized dict format
42
+ matching A2AConnector.astream_to_agent output.
43
+
44
+ Lifecycle:
45
+ Single-stream instance. Must NOT be reused across concurrent streams.
46
+ Each arun_sse_stream call creates a fresh instance.
47
+
48
+ Attributes:
49
+ task_id: Optional task identifier for the stream.
50
+ context_id: Optional context identifier for the stream.
51
+
52
+ Example:
53
+ >>> transformer = SSEChunkTransformer(task_id="task-123")
54
+ >>> async for chunk in transformer.transform_stream(agent.arun_a2a_stream("query")):
55
+ ... print(chunk)
56
+ '''
57
+ task_id: Incomplete
58
+ context_id: Incomplete
59
+ def __init__(self, task_id: str | None = None, context_id: str | None = None, pii_mapping: dict[str, str] | None = None) -> None:
60
+ """Initialize the transformer with optional task and context IDs.
61
+
62
+ Args:
63
+ task_id: Optional task identifier for the stream.
64
+ context_id: Optional context identifier for the stream.
65
+ pii_mapping: Optional PII mapping to inject into each chunk's metadata.
66
+ """
67
+ @staticmethod
68
+ def normalize_metadata_enums(data: Any) -> Any:
69
+ """Recursively convert enum keys/values to their string values.
70
+
71
+ This is a pure normalization utility that converts any enum instances
72
+ (MetadataFieldKeys, Kind, Status, etc.) to their .value strings.
73
+
74
+ Args:
75
+ data: Dict, list, or value that may contain enum keys/values.
76
+
77
+ Returns:
78
+ Normalized data with all enums converted to their .value strings.
79
+ """
80
+ @staticmethod
81
+ def normalize_event_type_value(event_type: Any) -> str | None:
82
+ """Convert A2AStreamEventType enum to string.
83
+
84
+ Args:
85
+ event_type: Event type (enum, string, or None).
86
+
87
+ Returns:
88
+ String value of the event type, or None if invalid.
89
+ """
90
+ @staticmethod
91
+ def create_artifact_hash(artifact: dict[str, Any]) -> str:
92
+ """Create a stable hash for artifact deduplication.
93
+
94
+ Uses name, content_type, mime_type, and file_data for hashing,
95
+ excluding artifact_id which may be randomly generated.
96
+
97
+ Args:
98
+ artifact: Artifact dict with name, content_type, mime_type, and optionally file_data.
99
+
100
+ Returns:
101
+ SHA256 hexdigest hash string for deduplication.
102
+ """
103
+ @staticmethod
104
+ def extract_tool_outputs(tool_calls: list[dict[str, Any]]) -> list[str]:
105
+ """Extract human-readable output strings from tool calls.
106
+
107
+ Args:
108
+ tool_calls: List of tool call dictionaries.
109
+
110
+ Returns:
111
+ List of human-readable output strings.
112
+ """
113
+ @staticmethod
114
+ def format_tool_output(output: Any, tool_name: str) -> str:
115
+ """Format a single tool output for display.
116
+
117
+ Args:
118
+ output: The tool output to format.
119
+ tool_name: The name of the tool.
120
+
121
+ Returns:
122
+ The formatted output string.
123
+ """
124
+ @staticmethod
125
+ def apply_hitl_content_override(content: str | None, event_type_str: str, metadata: dict[str, Any]) -> str | None:
126
+ """Apply HITL content override when HITL is active and tool results are available.
127
+
128
+ This method overrides the content with human-readable tool output when HITL
129
+ is active, matching A2AConnector behavior.
130
+
131
+ Args:
132
+ content: The original content/status message.
133
+ event_type_str: The type of event being processed (normalized string).
134
+ metadata: The metadata dictionary containing tool_info and hitl flag.
135
+
136
+ Returns:
137
+ The original content or human-readable tool output if HITL is active.
138
+ """
139
+ def transform_event(self, event: A2AEvent) -> dict[str, Any]:
140
+ """Transform a single A2AEvent to SSE chunk format.
141
+
142
+ Converts the A2AEvent structure to the normalized SSE chunk format,
143
+ relocating fields like tool_info and thinking_and_activity_info into
144
+ metadata, and normalizing enum values to strings.
145
+
146
+ Args:
147
+ event: Single A2AEvent dict from arun_a2a_stream.
148
+
149
+ Returns:
150
+ SSEChunk dict with normalized structure.
151
+ """
152
+ async def transform_stream(self, stream: AsyncGenerator[A2AEvent, None]) -> AsyncGenerator[dict[str, Any], None]:
153
+ """Transform A2AEvent stream to SSE-compatible chunks.
154
+
155
+ Wraps the input stream and transforms each event, handling artifact
156
+ deduplication and time tracking across the stream.
157
+
158
+ Args:
159
+ stream: Async generator yielding A2AEvent dicts.
160
+
161
+ Yields:
162
+ SSEChunk dicts with normalized structure.
163
+
164
+ Raises:
165
+ Exceptions from underlying stream propagate to caller.
166
+ """
@@ -0,0 +1,112 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.schema.step_limit import MaxDelegationDepthExceededError as MaxDelegationDepthExceededError, MaxStepsExceededError as MaxStepsExceededError, StepLimitConfig as StepLimitConfig, StepLimitErrorResponse as StepLimitErrorResponse, StepLimitErrorType as StepLimitErrorType
3
+ from dataclasses import dataclass, field
4
+ from typing import Any
5
+
6
+ @dataclass
7
+ class StepExecutionContext:
8
+ """Runtime context for tracking step execution and delegation depth.
9
+
10
+ Attributes:
11
+ current_step: Current step number (0-indexed).
12
+ delegation_depth: Current depth in delegation chain (0 for root agent).
13
+ remaining_step_budget: Steps remaining before limit is hit.
14
+ delegation_chain: List of agent names in the delegation chain.
15
+ """
16
+ current_step: int = ...
17
+ delegation_depth: int = ...
18
+ remaining_step_budget: int | None = ...
19
+ delegation_chain: list[str] = field(default_factory=list)
20
+
21
+ class StepLimitManager:
22
+ """Manages step and delegation limit enforcement during agent execution.
23
+
24
+ This manager integrates with LangGraph's existing step mechanisms and adds
25
+ delegation depth tracking and budget propagation.
26
+
27
+ Attributes:
28
+ config: Step limit configuration.
29
+ context: Current execution context.
30
+ """
31
+ config: Incomplete
32
+ context: Incomplete
33
+ def __init__(self, config: StepLimitConfig | None = None, initial_delegation_depth: int = 0, parent_step_budget: int | None = None) -> None:
34
+ """Initialize step limit manager.
35
+
36
+ Args:
37
+ config: Optional step limit configuration. Uses defaults if None.
38
+ initial_delegation_depth: Starting delegation depth (from parent).
39
+ parent_step_budget: Remaining step budget inherited from parent agent.
40
+ """
41
+ def check_step_limit(self, agent_name: str = 'agent', count: int = 1) -> None:
42
+ """Check if taking 'count' steps would exceed limit.
43
+
44
+ Args:
45
+ agent_name: Name of the agent to identify in error message.
46
+ count: Number of steps to check (useful for parallel tool batches).
47
+
48
+ Raises:
49
+ MaxStepsExceededError: If max_steps limit is exceeded.
50
+ """
51
+ def check_delegation_depth(self, target_agent_name: str) -> None:
52
+ """Check if delegation to target agent would exceed depth limit.
53
+
54
+ Args:
55
+ target_agent_name: Name of the agent to delegate to.
56
+
57
+ Raises:
58
+ MaxDelegationDepthExceededError: If delegation depth limit exceeded.
59
+ """
60
+ def increment_step(self, count: int = 1) -> None:
61
+ """Increment step counter and update remaining budget.
62
+
63
+ Args:
64
+ count: Number of steps to consume (defaults to 1).
65
+ """
66
+ def get_child_budget(self, child_max_steps: int | None = None) -> int:
67
+ """Calculate step budget to allocate to child agent.
68
+
69
+ Algorithm:
70
+ 1. If remaining_step_budget is None (root with no limit), use config.max_steps - 1
71
+ 2. If remaining_step_budget <= 1, return 0 (no budget left for child)
72
+ 3. Calculate child_budget = remaining_step_budget - 1 (reserve 1 for parent)
73
+ 4. If child has own max_steps config, return min(child_budget, child.max_steps)
74
+ 5. Otherwise return child_budget
75
+
76
+ Args:
77
+ child_max_steps: Optional child agent's own max_steps limit.
78
+
79
+ Returns:
80
+ Step budget for child agent, accounting for parent's continuation.
81
+ Returns 0 if no budget available for child.
82
+
83
+ Edge Cases:
84
+ - remaining=1: Returns 0 (parent needs the last step)
85
+ - remaining=None: Uses config.max_steps - 1
86
+ - child has own limit: Returns min(calculated_budget, child_limit)
87
+ """
88
+ def add_to_delegation_chain(self, agent_name: str) -> None:
89
+ """Add agent to delegation chain for tracking.
90
+
91
+ Args:
92
+ agent_name: Name of the agent being delegated to.
93
+ """
94
+ @classmethod
95
+ def from_state(cls, state: dict[str, Any], config: StepLimitConfig | None = None) -> StepLimitManager:
96
+ """Create manager from LangGraph state.
97
+
98
+ Args:
99
+ state: LangGraph agent state containing remaining_steps, etc.
100
+ config: Optional step limit configuration.
101
+
102
+ Returns:
103
+ Initialized step limit manager.
104
+ """
105
+ def set_context(self) -> None:
106
+ """Set context variables for downstream consumption (e.g. by delegation tools)."""
107
+ def to_state_update(self) -> dict[str, Any]:
108
+ """Convert current context to LangGraph state update.
109
+
110
+ Returns:
111
+ Dictionary of state fields to update.
112
+ """
@@ -0,0 +1,60 @@
1
+ from langchain_core.messages.ai import AIMessage, UsageMetadata
2
+ from langchain_core.messages.tool import ToolMessage as ToolMessage
3
+ from langgraph.types import Command
4
+ from typing import Any
5
+
6
+ USAGE_METADATA_KEY: str
7
+ TOTAL_USAGE_KEY: str
8
+ STEP_USAGE_KEY: str
9
+
10
+ def add_usage_metadata(cur_accumulated_token_usage: UsageMetadata | None, new_token_usage: UsageMetadata | None) -> UsageMetadata | None:
11
+ """Reducer function to accumulate UsageMetadata across agent runs.
12
+
13
+ Args:
14
+ cur_accumulated_token_usage: The current accumulated token usage metadata.
15
+ new_token_usage: New token usage metadata to add.
16
+
17
+ Returns:
18
+ Accumulated usage metadata or None if both inputs are None.
19
+ """
20
+ def extract_and_update_token_usage_from_ai_message(ai_message: AIMessage) -> dict[str, Any]:
21
+ """Extract token usage from AI message and prepare state update.
22
+
23
+ Args:
24
+ ai_message: The AI message containing usage metadata.
25
+
26
+ Returns:
27
+ Dictionary with accumulated_usage_metadata update if usage metadata is available.
28
+ """
29
+ def extract_token_usage_from_tool_output(tool_output: Any) -> UsageMetadata | None:
30
+ """Extract token usage from various tool output formats.
31
+
32
+ Supports multiple tool output formats:
33
+ 1. Dictionary with 'usage_metadata' field
34
+ 2. Command with 'usage_metadata' attribute
35
+ 3. Any object with 'usage_metadata' attribute
36
+
37
+ Args:
38
+ tool_output: The output from a tool execution.
39
+
40
+ Returns:
41
+ UsageMetadata if found, None otherwise.
42
+ """
43
+ def extract_token_usage_from_command(command: Command) -> UsageMetadata | None:
44
+ """Extract token usage from Command object.
45
+
46
+ Args:
47
+ command: The Command object to extract token usage from.
48
+
49
+ Returns:
50
+ UsageMetadata if found, None otherwise.
51
+ """
52
+ def extract_token_usage_from_agent_response(agent_response: dict[str, Any]) -> UsageMetadata | None:
53
+ """Extract accumulated token usage from agent response.
54
+
55
+ Args:
56
+ agent_response: The agent response to extract token usage from.
57
+
58
+ Returns:
59
+ UsageMetadata if found, None otherwise.
60
+ """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aip-agents-binary
3
- Version: 0.5.25b8
3
+ Version: 0.6.0
4
4
  Summary: A library for managing agents in Gen AI applications.
5
5
  Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
6
6
  Requires-Python: <3.13,>=3.11
@@ -21,22 +21,12 @@ Requires-Dist: langchain<0.4.0,>=0.3.0
21
21
  Requires-Dist: langchain-openai<0.4.0,>=0.3.17
22
22
  Requires-Dist: langchain-mcp-adapters<0.1.0,>=0.0.10
23
23
  Requires-Dist: langchain-experimental<0.4.0,>=0.3.4
24
- Requires-Dist: langgraph<0.3.0,>=0.2.16
24
+ Requires-Dist: langgraph<0.7.0,>=0.6.0
25
25
  Requires-Dist: minio<8.0.0,>=7.2.20
26
26
  Requires-Dist: pydantic<3.0.0,>=2.11.7
27
27
  Requires-Dist: python-dotenv<2.0.0,>=1.1.0
28
28
  Requires-Dist: requests<3.0.0,>=2.32.4
29
29
  Requires-Dist: uvicorn<0.35.0,>=0.34.3
30
- Provides-Extra: dev
31
- Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
32
- Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
33
- Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
34
- Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
35
- Requires-Dist: pytest-asyncio<0.24.0,>=0.23.6; extra == "dev"
36
- Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
37
- Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
38
- Requires-Dist: ruff<0.7.0,>=0.6.7; extra == "dev"
39
- Requires-Dist: pillow<12.0.0,>=11.3.0; extra == "dev"
40
30
  Provides-Extra: memory
41
31
  Requires-Dist: gllm-memory-binary[mem0ai]<0.2.0,>=0.1.1; extra == "memory"
42
32
  Provides-Extra: privacy
@@ -55,6 +45,17 @@ Requires-Dist: unidecode<2.0.0,>=1.3.0; extra == "local"
55
45
  Requires-Dist: gllm-docproc-binary[docx,pdf,xlsx]<0.8.0,>=0.7.21; extra == "local"
56
46
  Requires-Dist: gllm-multimodal-binary==0.2.0.post1; extra == "local"
57
47
  Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1; extra == "local"
48
+ Provides-Extra: dev
49
+ Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
50
+ Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
51
+ Requires-Dist: nest-asyncio<2.0.0,>=1.6.0; extra == "dev"
52
+ Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
53
+ Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
54
+ Requires-Dist: pytest-asyncio<0.24.0,>=0.23.6; extra == "dev"
55
+ Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
56
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
57
+ Requires-Dist: ruff<0.7.0,>=0.6.7; extra == "dev"
58
+ Requires-Dist: pillow<12.0.0,>=11.3.0; extra == "dev"
58
59
 
59
60
  # AIP Agents
60
61
 
@@ -73,13 +74,13 @@ You can use `aip-agents` directly for local execution, or let `glaip-sdk` manage
73
74
  ### Prerequisites
74
75
  - Python 3.11 - 3.12 - [Install here](https://www.python.org/downloads/)
75
76
  - Pip (if using Pip) - [Install here](https://pip.pypa.io/en/stable/installation/)
76
- - uv (if using uv) - [Install here](https://docs.astral.sh/uv/)
77
+ - Poetry 1.8.1+ (if using Poetry) - [Install here](https://python-poetry.org/docs/#installation)
77
78
  - Git (if using Git) - [Install here](https://git-scm.com/downloads)
78
79
  - For git installation:
79
80
  - Access to the [GDP Labs SDK repository](https://github.com/GDP-ADMIN/glaip-sdk)
80
81
 
81
82
  ### 1. Installation from the GDP Labs registry
82
- This package is published to the internal GDP Labs registry. Ensure your uv/pip config includes the registry:
83
+ This package is published to the internal GDP Labs registry. Ensure your pip/Poetry config includes the registry:
83
84
  `https://glsdk.gdplabs.id/gen-ai-internal/simple/`.
84
85
 
85
86
  #### Using pip
@@ -87,15 +88,15 @@ This package is published to the internal GDP Labs registry. Ensure your uv/pip
87
88
  pip install aip-agents
88
89
  ```
89
90
 
90
- #### Using uv
91
+ #### Using Poetry
91
92
  ```bash
92
- uv pip install aip-agents
93
+ poetry add aip-agents
93
94
  ```
94
95
 
95
96
  ### 2. Development Installation (Git)
96
97
  For development purposes, you can install directly from the Git repository:
97
98
  ```bash
98
- uv pip install "git+ssh://git@github.com/GDP-ADMIN/glaip-sdk.git#subdirectory=python/aip-agents"
99
+ poetry add "git+ssh://git@github.com/GDP-ADMIN/glaip-sdk.git#subdirectory=python/aip-agents"
99
100
  ```
100
101
 
101
102
  ### 3. Recommended: install via glaip-sdk for local mode
@@ -112,19 +113,21 @@ pip install "aip-agents[privacy]"
112
113
 
113
114
  ## Managing Dependencies
114
115
  1. Go to the `aip-agents` module root, e.g. `cd python/aip-agents`.
115
- 2. Run `uv sync --extra dev` to install the `aip-agents` requirements.
116
- 3. Run `uv lock` if you change any dependency versions in `pyproject.toml`.
116
+ 2. Run `poetry shell` to create a virtual environment.
117
+ 3. Run `poetry install` to install the `aip-agents` requirements (Poetry will generate a local lock file for you if needed; the repository ignores it).
118
+ 4. Run `poetry update` if you change any dependency versions in `pyproject.toml`.
117
119
 
118
120
  ## Contributing
119
121
  Please refer to this [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
120
122
  to get information about code style, documentation standard, and SCA that you need to use when contributing to this project
121
123
 
122
124
  1. Activate `pre-commit` hooks using `pre-commit install`
123
- 2. Run `uv sync --extra dev` to install the `aip-agents` requirements.
124
- 3. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
125
- 4. Try running the unit test to see if it's working:
125
+ 2. Run `poetry shell` to create a virtual environment.
126
+ 3. Run `poetry install` to install the `aip-agents` requirements (this will also create a local lock file that stays local).
127
+ 4. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
128
+ 5. Try running the unit test to see if it's working:
126
129
  ```bash
127
- uv run pytest -s tests/unit_tests/
130
+ poetry run pytest -s tests/unit_tests/
128
131
  ```
129
132
 
130
133
  ## Hello World Examples
@@ -225,57 +228,57 @@ For STDIO, SSE, and HTTP transports using local servers, open a terminal in the
225
228
  - For STDIO:
226
229
 
227
230
  ```bash
228
- uv run python aip_agents/examples/mcp_servers/mcp_server_stdio.py
231
+ poetry run python aip_agents/examples/mcp_servers/mcp_server_stdio.py
229
232
  ```
230
233
 
231
234
  - For SSE:
232
235
 
233
236
  ```bash
234
- uv run python aip_agents/examples/mcp_servers/mcp_server_sse.py
237
+ poetry run python aip_agents/examples/mcp_servers/mcp_server_sse.py
235
238
  ```
236
239
 
237
240
  - For HTTP:
238
241
 
239
242
  ```bash
240
- uv run python aip_agents/examples/mcp_servers/mcp_server_http.py
243
+ poetry run python aip_agents/examples/mcp_servers/mcp_server_http.py
241
244
  ```
242
245
 
243
246
  Note: Start the appropriate server before running the client examples for that transport.
244
247
 
245
248
  ### Running Examples
246
249
 
247
- All examples are run from the library root using `uv run python aip_agents/examples/<file>.py`. Examples support OpenAI for LangGraph/LangChain and Google ADK where specified.
250
+ All examples are run from the library root using `poetry run python aip_agents/examples/<file>.py`. Examples support OpenAI for LangGraph/LangChain and Google ADK where specified.
248
251
 
249
252
  #### LangChain Examples
250
253
 
251
254
  ##### STDIO Transport
252
255
  - Non-Streaming:
253
256
  ```bash
254
- uv run python aip_agents/examples/hello_world_langchain_mcp_stdio.py
257
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_stdio.py
255
258
  ```
256
259
  - Streaming:
257
260
  ```bash
258
- uv run python aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py
261
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py
259
262
  ```
260
263
 
261
264
  ##### SSE Transport
262
265
  - Non-Streaming:
263
266
  ```bash
264
- uv run python aip_agents/examples/hello_world_langchain_mcp_sse.py
267
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_sse.py
265
268
  ```
266
269
  - Streaming:
267
270
  ```bash
268
- uv run python aip_agents/examples/hello_world_langchain_mcp_sse_stream.py
271
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_sse_stream.py
269
272
  ```
270
273
 
271
274
  ##### HTTP Transport
272
275
  - Non-Streaming:
273
276
  ```bash
274
- uv run python aip_agents/examples/hello_world_langchain_mcp_http.py
277
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_http.py
275
278
  ```
276
279
  - Streaming:
277
280
  ```bash
278
- uv run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
281
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
279
282
  ```
280
283
 
281
284
  #### Google ADK Examples
@@ -283,31 +286,31 @@ uv run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
283
286
  ##### STDIO Transport
284
287
  - Non-Streaming:
285
288
  ```bash
286
- uv run python aip_agents/examples/hello_world_google_adk_mcp_stdio.py
289
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_stdio.py
287
290
  ```
288
291
  - Streaming:
289
292
  ```bash
290
- uv run python aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py
293
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py
291
294
  ```
292
295
 
293
296
  ##### SSE Transport
294
297
  - Non-Streaming:
295
298
  ```bash
296
- uv run python aip_agents/examples/hello_world_google_adk_mcp_sse.py
299
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_sse.py
297
300
  ```
298
301
  - Streaming:
299
302
  ```bash
300
- uv run python aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py
303
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py
301
304
  ```
302
305
 
303
306
  ##### HTTP Transport
304
307
  - Non-Streaming:
305
308
  ```bash
306
- uv run python aip_agents/examples/hello_world_google_adk_mcp_http.py
309
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_http.py
307
310
  ```
308
311
  - Streaming:
309
312
  ```bash
310
- uv run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
313
+ poetry run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
311
314
  ```
312
315
 
313
316
  #### LangGraph Examples (OpenAI)
@@ -315,31 +318,31 @@ uv run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
315
318
  ##### STDIO Transport
316
319
  - Non-Streaming:
317
320
  ```bash
318
- uv run python aip_agents/examples/hello_world_langgraph_mcp_stdio.py
321
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_stdio.py
319
322
  ```
320
323
  - Streaming:
321
324
  ```bash
322
- uv run python aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py
325
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py
323
326
  ```
324
327
 
325
328
  ##### SSE Transport
326
329
  - Non-Streaming:
327
330
  ```bash
328
- uv run python aip_agents/examples/hello_world_langgraph_mcp_sse.py
331
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_sse.py
329
332
  ```
330
333
  - Streaming:
331
334
  ```bash
332
- uv run python aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py
335
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py
333
336
  ```
334
337
 
335
338
  ##### HTTP Transport
336
339
  - Non-Streaming:
337
340
  ```bash
338
- uv run python aip_agents/examples/hello_world_langgraph_mcp_http.py
341
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_http.py
339
342
  ```
340
343
  - Streaming:
341
344
  ```bash
342
- uv run python aip_agents/examples/hello_world_langgraph_mcp_http_stream.py
345
+ poetry run python aip_agents/examples/hello_world_langgraph_mcp_http_stream.py
343
346
  ```
344
347
 
345
348
  ### Multi-Server Example
@@ -355,13 +358,13 @@ npx @playwright/mcp@latest --headless --port 8931
355
358
  2. In another terminal, start the Name Generator SSE server:
356
359
 
357
360
  ```bash
358
- uv run python aip_agents/examples/mcp_servers/mcp_name.py
361
+ poetry run python aip_agents/examples/mcp_servers/mcp_name.py
359
362
  ```
360
363
 
361
364
  3. Run the multi-server client example:
362
365
 
363
366
  ```bash
364
- uv run python aip_agents/examples/hello_world_langchain_mcp_multi_server.py
367
+ poetry run python aip_agents/examples/hello_world_langchain_mcp_multi_server.py
365
368
  ```
366
369
  **3. Running Individual A2A Examples:**
367
370
 
@@ -477,7 +480,7 @@ The library supports Mem0 as a memory backend for long-term conversation recall.
477
480
  Use the coordinator example with memory enabled:
478
481
 
479
482
  ```bash
480
- uv run python aip_agents/examples/hello_world_a2a_mem0_coordinator_server.py
483
+ poetry run python aip_agents/examples/hello_world_a2a_mem0_coordinator_server.py
481
484
  ```
482
485
 
483
486
  In client: