aip-agents-binary 0.6.4__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.

Potentially problematic release.


This version of aip-agents-binary might be problematic. Click here for more details.

Files changed (612) hide show
  1. aip_agents/__init__.py +65 -0
  2. aip_agents/__init__.pyi +19 -0
  3. aip_agents/a2a/__init__.py +19 -0
  4. aip_agents/a2a/__init__.pyi +3 -0
  5. aip_agents/a2a/server/__init__.py +10 -0
  6. aip_agents/a2a/server/__init__.pyi +4 -0
  7. aip_agents/a2a/server/base_executor.py +1086 -0
  8. aip_agents/a2a/server/base_executor.pyi +73 -0
  9. aip_agents/a2a/server/google_adk_executor.py +198 -0
  10. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  11. aip_agents/a2a/server/langflow_executor.py +180 -0
  12. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  13. aip_agents/a2a/server/langgraph_executor.py +270 -0
  14. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  15. aip_agents/a2a/types.py +232 -0
  16. aip_agents/a2a/types.pyi +132 -0
  17. aip_agents/agent/__init__.py +27 -0
  18. aip_agents/agent/__init__.pyi +9 -0
  19. aip_agents/agent/base_agent.py +970 -0
  20. aip_agents/agent/base_agent.pyi +221 -0
  21. aip_agents/agent/base_langgraph_agent.py +3037 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +233 -0
  23. aip_agents/agent/google_adk_agent.py +926 -0
  24. aip_agents/agent/google_adk_agent.pyi +141 -0
  25. aip_agents/agent/google_adk_constants.py +6 -0
  26. aip_agents/agent/google_adk_constants.pyi +3 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/__init__.pyi +6 -0
  29. aip_agents/agent/hitl/config.py +28 -0
  30. aip_agents/agent/hitl/config.pyi +15 -0
  31. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  32. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  33. aip_agents/agent/hitl/manager.py +532 -0
  34. aip_agents/agent/hitl/manager.pyi +200 -0
  35. aip_agents/agent/hitl/models.py +18 -0
  36. aip_agents/agent/hitl/models.pyi +3 -0
  37. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  38. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  39. aip_agents/agent/hitl/prompt/base.py +42 -0
  40. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  41. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  42. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  43. aip_agents/agent/hitl/registry.py +149 -0
  44. aip_agents/agent/hitl/registry.pyi +101 -0
  45. aip_agents/agent/interface.py +138 -0
  46. aip_agents/agent/interface.pyi +81 -0
  47. aip_agents/agent/interfaces.py +65 -0
  48. aip_agents/agent/interfaces.pyi +44 -0
  49. aip_agents/agent/langflow_agent.py +464 -0
  50. aip_agents/agent/langflow_agent.pyi +133 -0
  51. aip_agents/agent/langgraph_memory_enhancer_agent.py +767 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +50 -0
  53. aip_agents/agent/langgraph_react_agent.py +2856 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +170 -0
  55. aip_agents/agent/system_instruction_context.py +34 -0
  56. aip_agents/agent/system_instruction_context.pyi +13 -0
  57. aip_agents/clients/__init__.py +10 -0
  58. aip_agents/clients/__init__.pyi +4 -0
  59. aip_agents/clients/langflow/__init__.py +10 -0
  60. aip_agents/clients/langflow/__init__.pyi +4 -0
  61. aip_agents/clients/langflow/client.py +477 -0
  62. aip_agents/clients/langflow/client.pyi +140 -0
  63. aip_agents/clients/langflow/types.py +18 -0
  64. aip_agents/clients/langflow/types.pyi +7 -0
  65. aip_agents/constants.py +23 -0
  66. aip_agents/constants.pyi +7 -0
  67. aip_agents/credentials/manager.py +132 -0
  68. aip_agents/examples/__init__.py +5 -0
  69. aip_agents/examples/__init__.pyi +0 -0
  70. aip_agents/examples/compare_streaming_client.py +783 -0
  71. aip_agents/examples/compare_streaming_client.pyi +48 -0
  72. aip_agents/examples/compare_streaming_server.py +142 -0
  73. aip_agents/examples/compare_streaming_server.pyi +18 -0
  74. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  75. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  82. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  83. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  91. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  94. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  95. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  99. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  100. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  101. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  102. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  103. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  127. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  128. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  129. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  132. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  133. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  136. aip_agents/examples/hello_world_google_adk.py +41 -0
  137. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  138. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  139. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  151. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_langchain.py +28 -0
  153. aip_agents/examples/hello_world_langchain.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  155. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  156. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  157. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  162. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  163. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  164. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  165. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  169. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  173. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  175. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  176. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  177. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  178. aip_agents/examples/hello_world_langgraph.py +39 -0
  179. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  180. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  181. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  183. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  195. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  197. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  198. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  199. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  200. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  201. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  202. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  203. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  204. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  205. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  208. aip_agents/examples/hello_world_pii_logger.py +21 -0
  209. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  210. aip_agents/examples/hello_world_ptc.py +49 -0
  211. aip_agents/examples/hello_world_ptc.pyi +5 -0
  212. aip_agents/examples/hello_world_sentry.py +133 -0
  213. aip_agents/examples/hello_world_sentry.pyi +21 -0
  214. aip_agents/examples/hello_world_step_limits.py +273 -0
  215. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  216. aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
  217. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  218. aip_agents/examples/hello_world_tool_output_client.py +55 -0
  219. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  220. aip_agents/examples/hello_world_tool_output_server.py +114 -0
  221. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  222. aip_agents/examples/hitl_demo.py +724 -0
  223. aip_agents/examples/hitl_demo.pyi +67 -0
  224. aip_agents/examples/mcp_configs/configs.py +63 -0
  225. aip_agents/examples/mcp_servers/common.py +76 -0
  226. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  227. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  228. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  229. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  230. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  231. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  232. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  233. aip_agents/examples/pii_demo_langgraph_server.py +126 -0
  234. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  235. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  236. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  237. aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
  238. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  239. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  240. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  241. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
  242. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  243. aip_agents/examples/tools/__init__.py +27 -0
  244. aip_agents/examples/tools/__init__.pyi +9 -0
  245. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  246. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  247. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  248. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  249. aip_agents/examples/tools/data_generator_tool.py +103 -0
  250. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  251. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  252. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  253. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  254. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  255. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  256. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  257. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  258. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  259. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  260. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  261. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  262. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  263. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  264. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  265. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  266. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  267. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  268. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  269. aip_agents/examples/tools/random_chart_tool.py +142 -0
  270. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  271. aip_agents/examples/tools/serper_tool.py +202 -0
  272. aip_agents/examples/tools/serper_tool.pyi +16 -0
  273. aip_agents/examples/tools/stock_tools.py +82 -0
  274. aip_agents/examples/tools/stock_tools.pyi +36 -0
  275. aip_agents/examples/tools/table_generator_tool.py +167 -0
  276. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  277. aip_agents/examples/tools/time_tool.py +82 -0
  278. aip_agents/examples/tools/time_tool.pyi +15 -0
  279. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  280. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  281. aip_agents/executor/agent_executor.py +473 -0
  282. aip_agents/executor/base.py +48 -0
  283. aip_agents/guardrails/__init__.py +83 -0
  284. aip_agents/guardrails/__init__.pyi +6 -0
  285. aip_agents/guardrails/engines/__init__.py +69 -0
  286. aip_agents/guardrails/engines/__init__.pyi +4 -0
  287. aip_agents/guardrails/engines/base.py +90 -0
  288. aip_agents/guardrails/engines/base.pyi +61 -0
  289. aip_agents/guardrails/engines/nemo.py +101 -0
  290. aip_agents/guardrails/engines/nemo.pyi +46 -0
  291. aip_agents/guardrails/engines/phrase_matcher.py +113 -0
  292. aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
  293. aip_agents/guardrails/exceptions.py +39 -0
  294. aip_agents/guardrails/exceptions.pyi +23 -0
  295. aip_agents/guardrails/manager.py +163 -0
  296. aip_agents/guardrails/manager.pyi +42 -0
  297. aip_agents/guardrails/middleware.py +199 -0
  298. aip_agents/guardrails/middleware.pyi +87 -0
  299. aip_agents/guardrails/schemas.py +63 -0
  300. aip_agents/guardrails/schemas.pyi +43 -0
  301. aip_agents/guardrails/utils.py +45 -0
  302. aip_agents/guardrails/utils.pyi +19 -0
  303. aip_agents/mcp/__init__.py +1 -0
  304. aip_agents/mcp/__init__.pyi +0 -0
  305. aip_agents/mcp/client/__init__.py +14 -0
  306. aip_agents/mcp/client/__init__.pyi +5 -0
  307. aip_agents/mcp/client/base_mcp_client.py +369 -0
  308. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  309. aip_agents/mcp/client/connection_manager.py +228 -0
  310. aip_agents/mcp/client/connection_manager.pyi +51 -0
  311. aip_agents/mcp/client/google_adk/__init__.py +11 -0
  312. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  313. aip_agents/mcp/client/google_adk/client.py +381 -0
  314. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  315. aip_agents/mcp/client/langchain/__init__.py +11 -0
  316. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  317. aip_agents/mcp/client/langchain/client.py +265 -0
  318. aip_agents/mcp/client/langchain/client.pyi +48 -0
  319. aip_agents/mcp/client/persistent_session.py +612 -0
  320. aip_agents/mcp/client/persistent_session.pyi +122 -0
  321. aip_agents/mcp/client/session_pool.py +351 -0
  322. aip_agents/mcp/client/session_pool.pyi +101 -0
  323. aip_agents/mcp/client/transports.py +263 -0
  324. aip_agents/mcp/client/transports.pyi +132 -0
  325. aip_agents/mcp/utils/__init__.py +7 -0
  326. aip_agents/mcp/utils/__init__.pyi +0 -0
  327. aip_agents/mcp/utils/config_validator.py +139 -0
  328. aip_agents/mcp/utils/config_validator.pyi +82 -0
  329. aip_agents/memory/__init__.py +14 -0
  330. aip_agents/memory/__init__.pyi +5 -0
  331. aip_agents/memory/adapters/__init__.py +10 -0
  332. aip_agents/memory/adapters/__init__.pyi +4 -0
  333. aip_agents/memory/adapters/base_adapter.py +811 -0
  334. aip_agents/memory/adapters/base_adapter.pyi +176 -0
  335. aip_agents/memory/adapters/mem0.py +84 -0
  336. aip_agents/memory/adapters/mem0.pyi +22 -0
  337. aip_agents/memory/base.py +84 -0
  338. aip_agents/memory/base.pyi +60 -0
  339. aip_agents/memory/constants.py +49 -0
  340. aip_agents/memory/constants.pyi +25 -0
  341. aip_agents/memory/factory.py +86 -0
  342. aip_agents/memory/factory.pyi +24 -0
  343. aip_agents/memory/guidance.py +20 -0
  344. aip_agents/memory/guidance.pyi +3 -0
  345. aip_agents/memory/simple_memory.py +47 -0
  346. aip_agents/memory/simple_memory.pyi +23 -0
  347. aip_agents/middleware/__init__.py +17 -0
  348. aip_agents/middleware/__init__.pyi +5 -0
  349. aip_agents/middleware/base.py +96 -0
  350. aip_agents/middleware/base.pyi +75 -0
  351. aip_agents/middleware/manager.py +150 -0
  352. aip_agents/middleware/manager.pyi +84 -0
  353. aip_agents/middleware/todolist.py +274 -0
  354. aip_agents/middleware/todolist.pyi +125 -0
  355. aip_agents/ptc/__init__.py +48 -0
  356. aip_agents/ptc/__init__.pyi +10 -0
  357. aip_agents/ptc/doc_gen.py +122 -0
  358. aip_agents/ptc/doc_gen.pyi +40 -0
  359. aip_agents/ptc/exceptions.py +39 -0
  360. aip_agents/ptc/exceptions.pyi +22 -0
  361. aip_agents/ptc/executor.py +143 -0
  362. aip_agents/ptc/executor.pyi +73 -0
  363. aip_agents/ptc/mcp/__init__.py +45 -0
  364. aip_agents/ptc/mcp/__init__.pyi +7 -0
  365. aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
  366. aip_agents/ptc/mcp/sandbox_bridge.pyi +47 -0
  367. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  368. aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
  369. aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
  370. aip_agents/ptc/naming.py +184 -0
  371. aip_agents/ptc/naming.pyi +76 -0
  372. aip_agents/ptc/payload.py +26 -0
  373. aip_agents/ptc/payload.pyi +15 -0
  374. aip_agents/ptc/prompt_builder.py +571 -0
  375. aip_agents/ptc/prompt_builder.pyi +55 -0
  376. aip_agents/ptc/ptc_helper.py +16 -0
  377. aip_agents/ptc/ptc_helper.pyi +1 -0
  378. aip_agents/ptc/sandbox_bridge.py +58 -0
  379. aip_agents/ptc/sandbox_bridge.pyi +25 -0
  380. aip_agents/ptc/template_utils.py +33 -0
  381. aip_agents/ptc/template_utils.pyi +13 -0
  382. aip_agents/ptc/templates/__init__.py +1 -0
  383. aip_agents/ptc/templates/__init__.pyi +0 -0
  384. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  385. aip_agents/sandbox/__init__.py +43 -0
  386. aip_agents/sandbox/__init__.pyi +5 -0
  387. aip_agents/sandbox/defaults.py +9 -0
  388. aip_agents/sandbox/defaults.pyi +2 -0
  389. aip_agents/sandbox/e2b_runtime.py +267 -0
  390. aip_agents/sandbox/e2b_runtime.pyi +51 -0
  391. aip_agents/sandbox/template_builder.py +131 -0
  392. aip_agents/sandbox/template_builder.pyi +36 -0
  393. aip_agents/sandbox/types.py +24 -0
  394. aip_agents/sandbox/types.pyi +14 -0
  395. aip_agents/sandbox/validation.py +50 -0
  396. aip_agents/sandbox/validation.pyi +20 -0
  397. aip_agents/schema/__init__.py +69 -0
  398. aip_agents/schema/__init__.pyi +9 -0
  399. aip_agents/schema/a2a.py +56 -0
  400. aip_agents/schema/a2a.pyi +40 -0
  401. aip_agents/schema/agent.py +111 -0
  402. aip_agents/schema/agent.pyi +65 -0
  403. aip_agents/schema/hitl.py +157 -0
  404. aip_agents/schema/hitl.pyi +89 -0
  405. aip_agents/schema/langgraph.py +37 -0
  406. aip_agents/schema/langgraph.pyi +28 -0
  407. aip_agents/schema/model_id.py +97 -0
  408. aip_agents/schema/model_id.pyi +54 -0
  409. aip_agents/schema/step_limit.py +108 -0
  410. aip_agents/schema/step_limit.pyi +63 -0
  411. aip_agents/schema/storage.py +40 -0
  412. aip_agents/schema/storage.pyi +21 -0
  413. aip_agents/sentry/__init__.py +11 -0
  414. aip_agents/sentry/__init__.pyi +3 -0
  415. aip_agents/sentry/sentry.py +151 -0
  416. aip_agents/sentry/sentry.pyi +48 -0
  417. aip_agents/storage/__init__.py +41 -0
  418. aip_agents/storage/__init__.pyi +8 -0
  419. aip_agents/storage/base.py +85 -0
  420. aip_agents/storage/base.pyi +58 -0
  421. aip_agents/storage/clients/__init__.py +12 -0
  422. aip_agents/storage/clients/__init__.pyi +3 -0
  423. aip_agents/storage/clients/minio_client.py +318 -0
  424. aip_agents/storage/clients/minio_client.pyi +137 -0
  425. aip_agents/storage/config.py +62 -0
  426. aip_agents/storage/config.pyi +29 -0
  427. aip_agents/storage/providers/__init__.py +15 -0
  428. aip_agents/storage/providers/__init__.pyi +5 -0
  429. aip_agents/storage/providers/base.py +106 -0
  430. aip_agents/storage/providers/base.pyi +88 -0
  431. aip_agents/storage/providers/memory.py +114 -0
  432. aip_agents/storage/providers/memory.pyi +79 -0
  433. aip_agents/storage/providers/object_storage.py +214 -0
  434. aip_agents/storage/providers/object_storage.pyi +98 -0
  435. aip_agents/tools/__init__.py +64 -0
  436. aip_agents/tools/__init__.pyi +11 -0
  437. aip_agents/tools/browser_use/__init__.py +82 -0
  438. aip_agents/tools/browser_use/__init__.pyi +14 -0
  439. aip_agents/tools/browser_use/action_parser.py +103 -0
  440. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  441. aip_agents/tools/browser_use/browser_use_tool.py +1120 -0
  442. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  443. aip_agents/tools/browser_use/llm_config.py +120 -0
  444. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  445. aip_agents/tools/browser_use/minio_storage.py +198 -0
  446. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  447. aip_agents/tools/browser_use/schemas.py +119 -0
  448. aip_agents/tools/browser_use/schemas.pyi +32 -0
  449. aip_agents/tools/browser_use/session.py +76 -0
  450. aip_agents/tools/browser_use/session.pyi +4 -0
  451. aip_agents/tools/browser_use/session_errors.py +132 -0
  452. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  453. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  454. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  455. aip_agents/tools/browser_use/streaming.py +815 -0
  456. aip_agents/tools/browser_use/streaming.pyi +81 -0
  457. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  458. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  459. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  460. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  461. aip_agents/tools/browser_use/types.py +78 -0
  462. aip_agents/tools/browser_use/types.pyi +45 -0
  463. aip_agents/tools/code_sandbox/__init__.py +26 -0
  464. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  465. aip_agents/tools/code_sandbox/constant.py +13 -0
  466. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  467. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
  468. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  469. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  470. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  471. aip_agents/tools/constants.py +177 -0
  472. aip_agents/tools/constants.pyi +138 -0
  473. aip_agents/tools/date_range_tool.py +554 -0
  474. aip_agents/tools/date_range_tool.pyi +21 -0
  475. aip_agents/tools/document_loader/__init__.py +44 -0
  476. aip_agents/tools/document_loader/__init__.pyi +7 -0
  477. aip_agents/tools/document_loader/base_reader.py +302 -0
  478. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  479. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  480. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  481. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  482. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  483. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  484. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  485. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  486. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  487. aip_agents/tools/execute_ptc_code.py +308 -0
  488. aip_agents/tools/execute_ptc_code.pyi +90 -0
  489. aip_agents/tools/gl_connector/__init__.py +5 -0
  490. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  491. aip_agents/tools/gl_connector/tool.py +383 -0
  492. aip_agents/tools/gl_connector/tool.pyi +74 -0
  493. aip_agents/tools/gl_connector_tools.py +119 -0
  494. aip_agents/tools/gl_connector_tools.pyi +39 -0
  495. aip_agents/tools/memory_search/__init__.py +29 -0
  496. aip_agents/tools/memory_search/__init__.pyi +5 -0
  497. aip_agents/tools/memory_search/base.py +200 -0
  498. aip_agents/tools/memory_search/base.pyi +69 -0
  499. aip_agents/tools/memory_search/mem0.py +365 -0
  500. aip_agents/tools/memory_search/mem0.pyi +29 -0
  501. aip_agents/tools/memory_search/schema.py +81 -0
  502. aip_agents/tools/memory_search/schema.pyi +25 -0
  503. aip_agents/tools/memory_search_tool.py +34 -0
  504. aip_agents/tools/memory_search_tool.pyi +3 -0
  505. aip_agents/tools/time_tool.py +117 -0
  506. aip_agents/tools/time_tool.pyi +16 -0
  507. aip_agents/tools/tool_config_injector.py +300 -0
  508. aip_agents/tools/tool_config_injector.pyi +26 -0
  509. aip_agents/tools/web_search/__init__.py +15 -0
  510. aip_agents/tools/web_search/__init__.pyi +3 -0
  511. aip_agents/tools/web_search/serper_tool.py +187 -0
  512. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  513. aip_agents/types/__init__.py +70 -0
  514. aip_agents/types/__init__.pyi +36 -0
  515. aip_agents/types/a2a_events.py +13 -0
  516. aip_agents/types/a2a_events.pyi +3 -0
  517. aip_agents/utils/__init__.py +79 -0
  518. aip_agents/utils/__init__.pyi +11 -0
  519. aip_agents/utils/a2a_connector.py +1757 -0
  520. aip_agents/utils/a2a_connector.pyi +146 -0
  521. aip_agents/utils/artifact_helpers.py +502 -0
  522. aip_agents/utils/artifact_helpers.pyi +203 -0
  523. aip_agents/utils/constants.py +22 -0
  524. aip_agents/utils/constants.pyi +10 -0
  525. aip_agents/utils/datetime/__init__.py +34 -0
  526. aip_agents/utils/datetime/__init__.pyi +4 -0
  527. aip_agents/utils/datetime/normalization.py +231 -0
  528. aip_agents/utils/datetime/normalization.pyi +95 -0
  529. aip_agents/utils/datetime/timezone.py +206 -0
  530. aip_agents/utils/datetime/timezone.pyi +48 -0
  531. aip_agents/utils/env_loader.py +27 -0
  532. aip_agents/utils/env_loader.pyi +10 -0
  533. aip_agents/utils/event_handler_registry.py +58 -0
  534. aip_agents/utils/event_handler_registry.pyi +23 -0
  535. aip_agents/utils/file_prompt_utils.py +176 -0
  536. aip_agents/utils/file_prompt_utils.pyi +21 -0
  537. aip_agents/utils/final_response_builder.py +211 -0
  538. aip_agents/utils/final_response_builder.pyi +34 -0
  539. aip_agents/utils/formatter_llm_client.py +231 -0
  540. aip_agents/utils/formatter_llm_client.pyi +71 -0
  541. aip_agents/utils/langgraph/__init__.py +19 -0
  542. aip_agents/utils/langgraph/__init__.pyi +3 -0
  543. aip_agents/utils/langgraph/converter.py +128 -0
  544. aip_agents/utils/langgraph/converter.pyi +49 -0
  545. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  546. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  547. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  548. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  549. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  550. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  551. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1096 -0
  552. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  553. aip_agents/utils/langgraph/tool_output_management.py +1047 -0
  554. aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
  555. aip_agents/utils/logger.py +195 -0
  556. aip_agents/utils/logger.pyi +60 -0
  557. aip_agents/utils/metadata/__init__.py +27 -0
  558. aip_agents/utils/metadata/__init__.pyi +5 -0
  559. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  560. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  561. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  562. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  563. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  564. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  565. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  566. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  567. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  568. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  569. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  570. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  571. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  572. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  573. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  574. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  575. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  576. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  577. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  578. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  579. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  580. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  581. aip_agents/utils/metadata_helper.py +358 -0
  582. aip_agents/utils/metadata_helper.pyi +117 -0
  583. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  584. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  585. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  586. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  587. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  588. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  589. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  590. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  591. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  592. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  593. aip_agents/utils/pii/__init__.py +25 -0
  594. aip_agents/utils/pii/__init__.pyi +5 -0
  595. aip_agents/utils/pii/pii_handler.py +397 -0
  596. aip_agents/utils/pii/pii_handler.pyi +96 -0
  597. aip_agents/utils/pii/pii_helper.py +207 -0
  598. aip_agents/utils/pii/pii_helper.pyi +78 -0
  599. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  600. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  601. aip_agents/utils/reference_helper.py +273 -0
  602. aip_agents/utils/reference_helper.pyi +81 -0
  603. aip_agents/utils/sse_chunk_transformer.py +831 -0
  604. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  605. aip_agents/utils/step_limit_manager.py +265 -0
  606. aip_agents/utils/step_limit_manager.pyi +112 -0
  607. aip_agents/utils/token_usage_helper.py +156 -0
  608. aip_agents/utils/token_usage_helper.pyi +60 -0
  609. aip_agents_binary-0.6.4.dist-info/METADATA +673 -0
  610. aip_agents_binary-0.6.4.dist-info/RECORD +612 -0
  611. aip_agents_binary-0.6.4.dist-info/WHEEL +5 -0
  612. aip_agents_binary-0.6.4.dist-info/top_level.txt +1 -0
@@ -0,0 +1,247 @@
1
+ """Multi-Agent PII Demo Server - Demonstrates PII handling across agent hierarchy.
2
+
3
+ This server hosts a hierarchical agent system demonstrating PII propagation:
4
+ 1. Level 1 (Coordinator): Main orchestrator that routes requests
5
+ 2. Level 2 (Specialists): Domain-specific agents with PII-returning tools
6
+ - CustomerServiceAgent: Handles customer inquiries
7
+ - HRAgent: Handles employee data requests
8
+ - UserSupportAgent: Handles user profile requests
9
+
10
+ Architecture:
11
+ PIICoordinator (A2A Server)
12
+ ├── CustomerServiceAgent (with get_customer_info tool)
13
+ ├── HRAgent (with get_employee_data tool)
14
+ └── UserSupportAgent (with get_user_profile tool)
15
+
16
+ Features demonstrated:
17
+ - PII anonymization in tool outputs
18
+ - PII propagation from child agents to parent
19
+ - Multi-agent delegation with PII mapping merge
20
+ - Collision handling when multiple agents discover PII
21
+
22
+ To run this server:
23
+ export NER_API_URL=http://localhost:8080
24
+ export NER_API_KEY=your-api-key
25
+ python aip_agents/examples/pii_demo_multi_agent_server.py
26
+
27
+ It will listen on http://localhost:8003 by default.
28
+
29
+ Authors:
30
+ Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
31
+ """
32
+
33
+ import click
34
+ import uvicorn
35
+ from a2a.types import AgentCapabilities, AgentCard, AgentSkill
36
+ from dotenv import load_dotenv
37
+ from langchain_openai import ChatOpenAI
38
+
39
+ from aip_agents.agent import LangGraphAgent
40
+ from aip_agents.examples.tools.pii_demo_tools import (
41
+ get_customer_info,
42
+ get_employee_data,
43
+ get_user_profile,
44
+ )
45
+ from aip_agents.utils.logger import LoggerManager
46
+
47
+ load_dotenv()
48
+
49
+ logger = LoggerManager().get_logger(__name__)
50
+
51
+ SERVER_AGENT_NAME = "PIICoordinator"
52
+
53
+
54
+ def create_specialist_agents(llm: ChatOpenAI) -> tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent]:
55
+ """Create Level 2 specialist agents with PII-returning tools.
56
+
57
+ Args:
58
+ llm: The language model to use for the specialist agents.
59
+
60
+ Returns:
61
+ Tuple of (customer_service_agent, hr_agent, user_support_agent).
62
+ """
63
+ # Customer Service Agent - handles customer inquiries
64
+ customer_service_agent = LangGraphAgent(
65
+ name="CustomerServiceAgent",
66
+ instruction="""You are a customer service specialist. You help retrieve customer information.
67
+
68
+ You have access to the get_customer_info tool to retrieve customer details.
69
+ When asked about customers, use this tool to get their information.
70
+
71
+ You will receive output from tools in masked version with PII tags like <PERSON_xxx>, <EMAIL_ADDRESS_xxx>.
72
+ Present the information as-is without trying to reveal or change the masked values.
73
+
74
+ Always be helpful and professional in your responses.""",
75
+ model=llm,
76
+ tools=[get_customer_info],
77
+ )
78
+
79
+ # HR Agent - handles employee data requests
80
+ hr_agent = LangGraphAgent(
81
+ name="HRAgent",
82
+ instruction="""You are an HR specialist. You help retrieve employee information.
83
+
84
+ You have access to the get_employee_data tool to retrieve employee details.
85
+ When asked about employees, use this tool to get their information.
86
+
87
+ You will receive output from tools in masked version with PII tags like <PERSON_xxx>, <EMAIL_ADDRESS_xxx>.
88
+ Present the information as-is without trying to reveal or change the masked values.
89
+
90
+ Always maintain confidentiality and professionalism.""",
91
+ model=llm,
92
+ tools=[get_employee_data],
93
+ )
94
+
95
+ # User Support Agent - handles user profile requests
96
+ user_support_agent = LangGraphAgent(
97
+ name="UserSupportAgent",
98
+ instruction="""You are a user support specialist. You help retrieve user profile information.
99
+
100
+ You have access to the get_user_profile tool to retrieve user details.
101
+ When asked about users, use this tool to get their profile information.
102
+
103
+ You will receive output from tools in masked version with PII tags like <PERSON_xxx>, <EMAIL_ADDRESS_xxx>.
104
+ Present the information as-is without trying to reveal or change the masked values.
105
+
106
+ Always be helpful and respect user privacy.""",
107
+ model=llm,
108
+ tools=[get_user_profile],
109
+ )
110
+
111
+ return customer_service_agent, hr_agent, user_support_agent
112
+
113
+
114
+ def create_coordinator_agent(
115
+ llm: ChatOpenAI,
116
+ specialist_agents: tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent],
117
+ ) -> LangGraphAgent:
118
+ """Create Level 1 coordinator agent that orchestrates specialist agents.
119
+
120
+ Args:
121
+ llm: The language model to use for the coordinator agent.
122
+ specialist_agents: Tuple of specialist agents.
123
+
124
+ Returns:
125
+ The configured coordinator agent.
126
+ """
127
+ customer_service_agent, hr_agent, user_support_agent = specialist_agents
128
+
129
+ coordinator = LangGraphAgent(
130
+ name=SERVER_AGENT_NAME,
131
+ instruction="""You are a coordinator that manages requests across different departments.
132
+
133
+ You oversee three specialist teams:
134
+ - CustomerServiceAgent: Handles customer information requests (customer IDs like C001, C002, C003)
135
+ - HRAgent: Handles employee data requests (employee IDs like E001, E002, E003)
136
+ - UserSupportAgent: Handles user profile requests (user IDs like U001, U002, U003)
137
+
138
+ For each request, analyze what type of information is needed and delegate appropriately:
139
+ - Customer-related requests -> CustomerServiceAgent
140
+ - Employee/HR-related requests -> HRAgent
141
+ - User profile requests -> UserSupportAgent
142
+ - Complex requests may require multiple specialists
143
+
144
+ You will receive responses with PII tags like <PERSON_xxx>, <EMAIL_ADDRESS_xxx>.
145
+ Present the information as-is without trying to reveal or change the masked values.
146
+
147
+ Always provide a clear summary of the information gathered from your specialists.""",
148
+ model=llm,
149
+ agents=[customer_service_agent, hr_agent, user_support_agent],
150
+ )
151
+
152
+ return coordinator
153
+
154
+
155
+ @click.command()
156
+ @click.option("--host", "host", default="localhost", help="Host to bind the server to.")
157
+ @click.option("--port", "port", default=8003, help="Port to bind the server to.")
158
+ def main(host: str, port: int):
159
+ """Runs the Multi-Agent PII Demo A2A server.
160
+
161
+ This server demonstrates PII handling across a multi-agent hierarchy:
162
+ - PII anonymization in tool outputs
163
+ - PII propagation from child agents to parent
164
+ - Multi-agent delegation with PII mapping merge
165
+
166
+ Args:
167
+ host: Host to bind the server to.
168
+ port: Port to bind the server to.
169
+ """
170
+ logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
171
+ logger.info("Multi-agent PII handling demo with 3 specialist agents")
172
+
173
+ agent_card = AgentCard(
174
+ name=SERVER_AGENT_NAME,
175
+ description=(
176
+ "A coordinator agent managing 3 specialist agents for customer, employee, "
177
+ "and user information with automatic PII handling across the hierarchy."
178
+ ),
179
+ url=f"http://{host}:{port}",
180
+ version="1.0.0",
181
+ defaultInputModes=["text"],
182
+ defaultOutputModes=["text"],
183
+ capabilities=AgentCapabilities(streaming=True),
184
+ skills=[
185
+ AgentSkill(
186
+ id="multi_agent_coordination",
187
+ name="Multi-Agent PII Coordination",
188
+ description="Coordinates requests across multiple specialist agents with PII handling.",
189
+ examples=[
190
+ "Get information for customer C001 and employee E001",
191
+ "Compare customer C002 with user U002",
192
+ "Get all available information about John",
193
+ ],
194
+ tags=["coordination", "multi-agent", "pii"],
195
+ ),
196
+ AgentSkill(
197
+ id="customer_service",
198
+ name="Customer Service",
199
+ description="Retrieves customer information via CustomerServiceAgent.",
200
+ examples=[
201
+ "Get customer info for C001",
202
+ "What is the email for customer C002?",
203
+ ],
204
+ tags=["customer", "pii"],
205
+ ),
206
+ AgentSkill(
207
+ id="hr_services",
208
+ name="HR Services",
209
+ description="Retrieves employee data via HRAgent.",
210
+ examples=[
211
+ "Get employee data for E001",
212
+ "What department is employee E002 in?",
213
+ ],
214
+ tags=["employee", "hr", "pii"],
215
+ ),
216
+ AgentSkill(
217
+ id="user_support",
218
+ name="User Support",
219
+ description="Retrieves user profile information via UserSupportAgent.",
220
+ examples=[
221
+ "Get user profile for U001",
222
+ "What city does user U002 live in?",
223
+ ],
224
+ tags=["user", "profile", "pii"],
225
+ ),
226
+ ],
227
+ tags=["pii", "demo", "multi-agent", "hierarchy"],
228
+ )
229
+
230
+ llm = ChatOpenAI(model="gpt-4.1", temperature=0, streaming=True)
231
+
232
+ # Build the 2-level hierarchy
233
+ logger.info("Creating Level 2 specialist agents...")
234
+ specialist_agents = create_specialist_agents(llm)
235
+
236
+ logger.info("Creating Level 1 coordinator agent...")
237
+ coordinator_agent = create_coordinator_agent(llm, specialist_agents)
238
+
239
+ app = coordinator_agent.to_a2a(agent_card=agent_card)
240
+
241
+ logger.info("A2A application configured. Starting Uvicorn server...")
242
+ logger.info("Hierarchy: 1 Coordinator -> 3 Specialists (each with PII tools)")
243
+ uvicorn.run(app, host=host, port=port)
244
+
245
+
246
+ if __name__ == "__main__":
247
+ main()
@@ -0,0 +1,40 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ 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
4
+ from aip_agents.utils.logger import LoggerManager as LoggerManager
5
+ from langchain_openai import ChatOpenAI
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+
10
+ def create_specialist_agents(llm: ChatOpenAI) -> tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent]:
11
+ """Create Level 2 specialist agents with PII-returning tools.
12
+
13
+ Args:
14
+ llm: The language model to use for the specialist agents.
15
+
16
+ Returns:
17
+ Tuple of (customer_service_agent, hr_agent, user_support_agent).
18
+ """
19
+ def create_coordinator_agent(llm: ChatOpenAI, specialist_agents: tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent]) -> LangGraphAgent:
20
+ """Create Level 1 coordinator agent that orchestrates specialist agents.
21
+
22
+ Args:
23
+ llm: The language model to use for the coordinator agent.
24
+ specialist_agents: Tuple of specialist agents.
25
+
26
+ Returns:
27
+ The configured coordinator agent.
28
+ """
29
+ def main(host: str, port: int):
30
+ """Runs the Multi-Agent PII Demo A2A server.
31
+
32
+ This server demonstrates PII handling across a multi-agent hierarchy:
33
+ - PII anonymization in tool outputs
34
+ - PII propagation from child agents to parent
35
+ - Multi-agent delegation with PII mapping merge
36
+
37
+ Args:
38
+ host: Host to bind the server to.
39
+ port: Port to bind the server to.
40
+ """
@@ -0,0 +1,70 @@
1
+ """A2A client for the planning LangGraphReactAgent.
2
+
3
+ Run the planning server first:
4
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server
5
+
6
+ Then run this client:
7
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langchain_client
8
+
9
+ You should see streaming output, including when write_todos_tool is called.
10
+ """
11
+
12
+ import asyncio
13
+ import json
14
+
15
+ from dotenv import load_dotenv
16
+ from langchain_openai import ChatOpenAI
17
+
18
+ from aip_agents.agent import LangChainAgent
19
+ from aip_agents.schema.agent import A2AClientConfig
20
+
21
+ load_dotenv()
22
+
23
+
24
+ async def main() -> None:
25
+ """Connect to the planning A2A server and stream a planning query."""
26
+ assistant_agent = LangChainAgent(
27
+ name="PlanningClientAgent",
28
+ instruction=(
29
+ "You are a user-facing assistant that asks a planning agent "
30
+ "to break work into a todo list before executing it."
31
+ ),
32
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
33
+ )
34
+
35
+ client_a2a_config = A2AClientConfig(
36
+ discovery_urls=["http://localhost:8002"],
37
+ )
38
+
39
+ agent_cards = assistant_agent.discover_agents(client_a2a_config)
40
+ if not agent_cards:
41
+ print("No agents discovered at http://localhost:8002")
42
+ return
43
+
44
+ agent_card = agent_cards[0]
45
+ print(f"Discovered agent: {agent_card.name} @ {agent_card.url}")
46
+
47
+ query = "Research the latest advances in AI-driven drug discovery for oncology and synthesize findings into a comprehensive report—drawing on recent web-sourced literature and relevant company/market context—highlighting key breakthroughs, potential future directions, and a dedicated section on ethical considerations."
48
+
49
+ print("\nSending query to planning agent (streaming)...\n")
50
+
51
+ async for chunk in assistant_agent.astream_to_agent(agent_card, message=query):
52
+ content = chunk.get("content")
53
+ metadata = chunk.get("metadata", {})
54
+ status = metadata.get("status") or metadata.get("state")
55
+
56
+ if status and status.lower() in ("running", "processing"):
57
+ print("Query:", query)
58
+ if "tool_info" in metadata:
59
+ print("Tool Info:", json.dumps(metadata["tool_info"], indent=2))
60
+
61
+ if status and status.lower() in ("finished", "completed"):
62
+ print("\n=== Completed — final output ===\n")
63
+ if content:
64
+ print(content)
65
+ elif metadata.get("output"):
66
+ print(metadata.get("output"))
67
+
68
+
69
+ if __name__ == "__main__": # pragma: no cover - manual smoke script
70
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Connect to the planning A2A server and stream a planning query."""
@@ -0,0 +1,88 @@
1
+ """A2A server exposing a LangGraphReactAgent with planning (TodoListMiddleware).
2
+
3
+ Run:
4
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server \
5
+ --host localhost --port 8002
6
+
7
+ Then connect with the matching A2A client to observe write_todos_tool calls.
8
+ """
9
+
10
+ import click
11
+ import langchain
12
+ import uvicorn
13
+ from a2a.types import AgentCapabilities, AgentCard, AgentSkill
14
+ from dotenv import load_dotenv
15
+ from langchain_openai import ChatOpenAI
16
+
17
+ from aip_agents.agent import LangGraphReactAgent
18
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool
19
+ from aip_agents.examples.tools.stock_tools import get_stock_price
20
+ from aip_agents.utils.logger import get_logger
21
+
22
+ langchain.debug = True
23
+
24
+ load_dotenv()
25
+
26
+ logger = get_logger(__name__)
27
+
28
+ SERVER_AGENT_NAME = "PlanningTodoAgent"
29
+
30
+
31
+ @click.command()
32
+ @click.option("--host", "host", default="localhost", help="Host to bind the server to.")
33
+ @click.option("--port", "port", default=8002, help="Port to bind the server to.")
34
+ def main(host: str, port: int) -> None:
35
+ """Run an A2A server with a planning-enabled LangGraphReactAgent.
36
+
37
+ The agent has TodoListMiddleware attached via planning=True and will
38
+ expose the write_todos_tool over A2A with token streaming enabled.
39
+
40
+ Args:
41
+ host: The host to bind the server to.
42
+ port: The port to bind the server to.
43
+ """
44
+ logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
45
+
46
+ agent_card = AgentCard(
47
+ name=SERVER_AGENT_NAME,
48
+ description="Planning agent that breaks tasks into todos using write_todos.",
49
+ url=f"http://{host}:{port}",
50
+ version="1.0.0",
51
+ defaultInputModes=["text"],
52
+ defaultOutputModes=["text"],
53
+ capabilities=AgentCapabilities(streaming=True),
54
+ skills=[
55
+ AgentSkill(
56
+ id="planning",
57
+ name="Planning and Todo Management",
58
+ description="Breaks high-level tasks into a todo list and tracks progress.",
59
+ examples=[
60
+ "Plan a 3-step migration task and show the todo list.",
61
+ "Create a todo list for building a small feature.",
62
+ ],
63
+ tags=["planning", "todos"],
64
+ )
65
+ ],
66
+ tags=["planning", "todos"],
67
+ )
68
+
69
+ llm = ChatOpenAI(model="gpt-4.1", temperature=0, streaming=True)
70
+
71
+ # No custom tools; planning=True will attach TodoListMiddleware and
72
+ # provide write_todos_tool automatically.
73
+ agent = LangGraphReactAgent(
74
+ name=SERVER_AGENT_NAME,
75
+ instruction=("You are an Assistant Agent, your job is to answer based on a query."),
76
+ model=llm,
77
+ tools=[MockGoogleSerperTool(), get_stock_price],
78
+ planning=True,
79
+ )
80
+
81
+ app = agent.to_a2a(agent_card=agent_card)
82
+
83
+ logger.info("Planning A2A application configured. Starting Uvicorn server...")
84
+ uvicorn.run(app, host=host, port=port)
85
+
86
+
87
+ if __name__ == "__main__": # pragma: no cover - manual smoke script
88
+ main()
@@ -0,0 +1,19 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
3
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool as MockGoogleSerperTool
4
+ from aip_agents.examples.tools.stock_tools import get_stock_price as get_stock_price
5
+ from aip_agents.utils.logger import get_logger as get_logger
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+
10
+ def main(host: str, port: int) -> None:
11
+ """Run an A2A server with a planning-enabled LangGraphReactAgent.
12
+
13
+ The agent has TodoListMiddleware attached via planning=True and will
14
+ expose the write_todos_tool over A2A with token streaming enabled.
15
+
16
+ Args:
17
+ host: The host to bind the server to.
18
+ port: The port to bind the server to.
19
+ """
@@ -0,0 +1,27 @@
1
+ """Tools for the examples.
2
+
3
+ Authors:
4
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
5
+ """
6
+
7
+ from aip_agents.examples.tools.adk_weather_tool import (
8
+ get_weather as weather_tool_adk,
9
+ )
10
+ from aip_agents.examples.tools.langchain_weather_tool import (
11
+ weather_tool as weather_tool_langchain,
12
+ )
13
+ from aip_agents.examples.tools.langgraph_streaming_tool import LangGraphStreamingTool as langgraph_streaming_tool
14
+ from aip_agents.examples.tools.mock_retrieval_tool import MockRetrievalTool as mock_retrieval_tool
15
+ from aip_agents.examples.tools.random_chart_tool import RandomChartTool as random_chart_tool
16
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool as google_serper_tool
17
+ from aip_agents.examples.tools.time_tool import TimeTool as time_tool
18
+
19
+ __all__ = [
20
+ "weather_tool_langchain",
21
+ "weather_tool_adk",
22
+ "time_tool",
23
+ "google_serper_tool",
24
+ "langgraph_streaming_tool",
25
+ "mock_retrieval_tool",
26
+ "random_chart_tool",
27
+ ]
@@ -0,0 +1,9 @@
1
+ from aip_agents.examples.tools.adk_weather_tool import get_weather as weather_tool_adk
2
+ from aip_agents.examples.tools.langchain_weather_tool import weather_tool as weather_tool_langchain
3
+ from aip_agents.examples.tools.langgraph_streaming_tool import LangGraphStreamingTool as langgraph_streaming_tool
4
+ from aip_agents.examples.tools.mock_retrieval_tool import MockRetrievalTool as mock_retrieval_tool
5
+ from aip_agents.examples.tools.random_chart_tool import RandomChartTool as random_chart_tool
6
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool as google_serper_tool
7
+ from aip_agents.examples.tools.time_tool import TimeTool as time_tool
8
+
9
+ __all__ = ['weather_tool_langchain', 'weather_tool_adk', 'time_tool', 'google_serper_tool', 'langgraph_streaming_tool', 'mock_retrieval_tool', 'random_chart_tool']
@@ -0,0 +1,36 @@
1
+ """Common arithmetic tools for GLLM agent examples."""
2
+
3
+
4
+ def add_numbers(a: int, b: int) -> str:
5
+ """Adds two integer numbers together and returns the result as a string.
6
+
7
+ For example, to add 5 and 3, you would call this with a=5 and b=3.
8
+
9
+ Args:
10
+ a: The first number.
11
+ b: The second number.
12
+
13
+ Returns:
14
+ The sum of the two numbers as a string, or an error message if addition fails.
15
+ """
16
+ try:
17
+ result = a + b
18
+ return str(result)
19
+ except Exception as e:
20
+ return f"Error: Could not add numbers. Reason: {str(e)}"
21
+
22
+
23
+ def sum_numbers(a: int, b: int) -> int:
24
+ """Adds two integer numbers together and returns the integer result.
25
+
26
+ Used specifically in Google ADK examples where an integer return is expected.
27
+
28
+ Args:
29
+ a: The first number.
30
+ b: The second number.
31
+
32
+ Returns:
33
+ The sum of the two numbers as an integer.
34
+ """
35
+ print(f"Tool executed: sum_numbers({a}, {b})")
36
+ return a + b
@@ -0,0 +1,24 @@
1
+ def add_numbers(a: int, b: int) -> str:
2
+ """Adds two integer numbers together and returns the result as a string.
3
+
4
+ For example, to add 5 and 3, you would call this with a=5 and b=3.
5
+
6
+ Args:
7
+ a: The first number.
8
+ b: The second number.
9
+
10
+ Returns:
11
+ The sum of the two numbers as a string, or an error message if addition fails.
12
+ """
13
+ def sum_numbers(a: int, b: int) -> int:
14
+ """Adds two integer numbers together and returns the integer result.
15
+
16
+ Used specifically in Google ADK examples where an integer return is expected.
17
+
18
+ Args:
19
+ a: The first number.
20
+ b: The second number.
21
+
22
+ Returns:
23
+ The sum of the two numbers as an integer.
24
+ """
@@ -0,0 +1,60 @@
1
+ """Defines a weather tool that can be used to get the weather for a specified city.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
6
+ """
7
+
8
+ from aip_agents.utils.logger import get_logger
9
+
10
+ logger = get_logger(__name__)
11
+
12
+ # Combined weather data storage with detailed information
13
+ WEATHER_DATA = {
14
+ "Jakarta": {"temperature": "32°C", "conditions": "Partly cloudy with high humidity", "humidity": "78%"},
15
+ "Singapore": {"temperature": "30°C", "conditions": "Scattered thunderstorms", "humidity": "85%"},
16
+ "Tokyo": {"temperature": "25°C", "conditions": "Clear skies", "humidity": "65%"},
17
+ "London": {"temperature": "18°C", "conditions": "Light rain", "humidity": "82%"},
18
+ "New York": {"temperature": "22°C", "conditions": "Sunny", "humidity": "60%"},
19
+ "Sydney": {"temperature": "24°C", "conditions": "Clear", "humidity": "70%"},
20
+ }
21
+
22
+
23
+ def get_weather(location: str) -> dict:
24
+ """Gets detailed weather information for a specified location.
25
+
26
+ Args:
27
+ location: The name of the city to get weather for.
28
+
29
+ Returns:
30
+ A dictionary containing:
31
+ - location: The requested location name
32
+ - weather: A dictionary with temperature, conditions, and humidity
33
+ """
34
+ try:
35
+ city_name = location.split(",")[0].strip().title()
36
+ weather = WEATHER_DATA.get(city_name)
37
+
38
+ if weather:
39
+ logger.info(f"Found weather for {city_name}: {weather}")
40
+ return {"location": city_name, "weather": weather}
41
+ else:
42
+ message = f"Weather data not available for {location}"
43
+ logger.warning(message)
44
+ return {
45
+ "location": city_name,
46
+ "weather": {"temperature": "Unknown", "conditions": "No data available", "humidity": "Unknown"},
47
+ "message": message,
48
+ }
49
+ except Exception as e:
50
+ error_msg = f"Error getting weather for {location}: {str(e)}"
51
+ logger.error(error_msg)
52
+ return {
53
+ "location": location,
54
+ "error": error_msg,
55
+ "weather": {"temperature": "Error", "conditions": "Error retrieving data", "humidity": "Error"},
56
+ }
57
+
58
+
59
+ # Alias for backward compatibility
60
+ weather_tool = get_weather
@@ -0,0 +1,18 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.utils.logger import get_logger as get_logger
3
+
4
+ logger: Incomplete
5
+ WEATHER_DATA: Incomplete
6
+
7
+ def get_weather(location: str) -> dict:
8
+ """Gets detailed weather information for a specified location.
9
+
10
+ Args:
11
+ location: The name of the city to get weather for.
12
+
13
+ Returns:
14
+ A dictionary containing:
15
+ - location: The requested location name
16
+ - weather: A dictionary with temperature, conditions, and humidity
17
+ """
18
+ weather_tool = get_weather