aip-agents-binary 0.5.25b1__py3-none-macosx_13_0_arm64.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 (566) 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 +2948 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +232 -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 +433 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  53. aip_agents/agent/langgraph_react_agent.py +2596 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +131 -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/demo_memory_recall.py +401 -0
  75. aip_agents/examples/demo_memory_recall.pyi +58 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  82. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  83. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  91. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  94. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  95. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  100. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  101. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  102. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  103. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  127. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  128. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  129. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  132. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  133. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  136. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  137. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  138. aip_agents/examples/hello_world_google_adk.py +41 -0
  139. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  151. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  153. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain.py +28 -0
  155. aip_agents/examples/hello_world_langchain.pyi +5 -0
  156. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  157. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  162. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  163. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  164. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  165. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  169. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  173. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  175. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  176. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  177. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  178. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  179. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  180. aip_agents/examples/hello_world_langgraph.py +39 -0
  181. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  183. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  195. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  197. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  198. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  199. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  200. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  201. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  202. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  203. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  204. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  205. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  208. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  209. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  210. aip_agents/examples/hello_world_pii_logger.py +21 -0
  211. aip_agents/examples/hello_world_pii_logger.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 +46 -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 +193 -0
  310. aip_agents/mcp/client/connection_manager.pyi +48 -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 +362 -0
  320. aip_agents/mcp/client/persistent_session.pyi +113 -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 +228 -0
  324. aip_agents/mcp/client/transports.pyi +123 -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 +717 -0
  334. aip_agents/memory/adapters/base_adapter.pyi +150 -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/schema/__init__.py +69 -0
  356. aip_agents/schema/__init__.pyi +9 -0
  357. aip_agents/schema/a2a.py +56 -0
  358. aip_agents/schema/a2a.pyi +40 -0
  359. aip_agents/schema/agent.py +111 -0
  360. aip_agents/schema/agent.pyi +65 -0
  361. aip_agents/schema/hitl.py +157 -0
  362. aip_agents/schema/hitl.pyi +89 -0
  363. aip_agents/schema/langgraph.py +37 -0
  364. aip_agents/schema/langgraph.pyi +28 -0
  365. aip_agents/schema/model_id.py +97 -0
  366. aip_agents/schema/model_id.pyi +54 -0
  367. aip_agents/schema/step_limit.py +108 -0
  368. aip_agents/schema/step_limit.pyi +63 -0
  369. aip_agents/schema/storage.py +40 -0
  370. aip_agents/schema/storage.pyi +21 -0
  371. aip_agents/sentry/__init__.py +11 -0
  372. aip_agents/sentry/__init__.pyi +3 -0
  373. aip_agents/sentry/sentry.py +151 -0
  374. aip_agents/sentry/sentry.pyi +48 -0
  375. aip_agents/storage/__init__.py +41 -0
  376. aip_agents/storage/__init__.pyi +8 -0
  377. aip_agents/storage/base.py +85 -0
  378. aip_agents/storage/base.pyi +58 -0
  379. aip_agents/storage/clients/__init__.py +12 -0
  380. aip_agents/storage/clients/__init__.pyi +3 -0
  381. aip_agents/storage/clients/minio_client.py +318 -0
  382. aip_agents/storage/clients/minio_client.pyi +137 -0
  383. aip_agents/storage/config.py +62 -0
  384. aip_agents/storage/config.pyi +29 -0
  385. aip_agents/storage/providers/__init__.py +15 -0
  386. aip_agents/storage/providers/__init__.pyi +5 -0
  387. aip_agents/storage/providers/base.py +106 -0
  388. aip_agents/storage/providers/base.pyi +88 -0
  389. aip_agents/storage/providers/memory.py +114 -0
  390. aip_agents/storage/providers/memory.pyi +79 -0
  391. aip_agents/storage/providers/object_storage.py +214 -0
  392. aip_agents/storage/providers/object_storage.pyi +98 -0
  393. aip_agents/tools/__init__.py +53 -0
  394. aip_agents/tools/__init__.pyi +9 -0
  395. aip_agents/tools/browser_use/__init__.py +82 -0
  396. aip_agents/tools/browser_use/__init__.pyi +14 -0
  397. aip_agents/tools/browser_use/action_parser.py +103 -0
  398. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  399. aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
  400. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  401. aip_agents/tools/browser_use/llm_config.py +120 -0
  402. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  403. aip_agents/tools/browser_use/minio_storage.py +198 -0
  404. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  405. aip_agents/tools/browser_use/schemas.py +119 -0
  406. aip_agents/tools/browser_use/schemas.pyi +32 -0
  407. aip_agents/tools/browser_use/session.py +76 -0
  408. aip_agents/tools/browser_use/session.pyi +4 -0
  409. aip_agents/tools/browser_use/session_errors.py +132 -0
  410. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  411. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  412. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  413. aip_agents/tools/browser_use/streaming.py +813 -0
  414. aip_agents/tools/browser_use/streaming.pyi +81 -0
  415. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  416. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  417. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  418. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  419. aip_agents/tools/browser_use/types.py +78 -0
  420. aip_agents/tools/browser_use/types.pyi +45 -0
  421. aip_agents/tools/code_sandbox/__init__.py +26 -0
  422. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  423. aip_agents/tools/code_sandbox/constant.py +13 -0
  424. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  425. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
  426. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  427. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  428. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  429. aip_agents/tools/constants.py +177 -0
  430. aip_agents/tools/constants.pyi +138 -0
  431. aip_agents/tools/document_loader/__init__.py +44 -0
  432. aip_agents/tools/document_loader/__init__.pyi +7 -0
  433. aip_agents/tools/document_loader/base_reader.py +302 -0
  434. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  435. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  436. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  437. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  438. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  439. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  440. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  441. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  442. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  443. aip_agents/tools/gl_connector/__init__.py +5 -0
  444. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  445. aip_agents/tools/gl_connector/tool.py +383 -0
  446. aip_agents/tools/gl_connector/tool.pyi +74 -0
  447. aip_agents/tools/gl_connector_tools.py +119 -0
  448. aip_agents/tools/gl_connector_tools.pyi +39 -0
  449. aip_agents/tools/memory_search/__init__.py +22 -0
  450. aip_agents/tools/memory_search/__init__.pyi +5 -0
  451. aip_agents/tools/memory_search/base.py +200 -0
  452. aip_agents/tools/memory_search/base.pyi +69 -0
  453. aip_agents/tools/memory_search/mem0.py +258 -0
  454. aip_agents/tools/memory_search/mem0.pyi +19 -0
  455. aip_agents/tools/memory_search/schema.py +48 -0
  456. aip_agents/tools/memory_search/schema.pyi +15 -0
  457. aip_agents/tools/memory_search_tool.py +26 -0
  458. aip_agents/tools/memory_search_tool.pyi +3 -0
  459. aip_agents/tools/time_tool.py +117 -0
  460. aip_agents/tools/time_tool.pyi +16 -0
  461. aip_agents/tools/tool_config_injector.py +300 -0
  462. aip_agents/tools/tool_config_injector.pyi +26 -0
  463. aip_agents/tools/web_search/__init__.py +15 -0
  464. aip_agents/tools/web_search/__init__.pyi +3 -0
  465. aip_agents/tools/web_search/serper_tool.py +187 -0
  466. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  467. aip_agents/types/__init__.py +70 -0
  468. aip_agents/types/__init__.pyi +36 -0
  469. aip_agents/types/a2a_events.py +13 -0
  470. aip_agents/types/a2a_events.pyi +3 -0
  471. aip_agents/utils/__init__.py +79 -0
  472. aip_agents/utils/__init__.pyi +11 -0
  473. aip_agents/utils/a2a_connector.py +1757 -0
  474. aip_agents/utils/a2a_connector.pyi +146 -0
  475. aip_agents/utils/artifact_helpers.py +502 -0
  476. aip_agents/utils/artifact_helpers.pyi +203 -0
  477. aip_agents/utils/constants.py +22 -0
  478. aip_agents/utils/constants.pyi +10 -0
  479. aip_agents/utils/datetime/__init__.py +34 -0
  480. aip_agents/utils/datetime/__init__.pyi +4 -0
  481. aip_agents/utils/datetime/normalization.py +231 -0
  482. aip_agents/utils/datetime/normalization.pyi +95 -0
  483. aip_agents/utils/datetime/timezone.py +206 -0
  484. aip_agents/utils/datetime/timezone.pyi +48 -0
  485. aip_agents/utils/env_loader.py +27 -0
  486. aip_agents/utils/env_loader.pyi +10 -0
  487. aip_agents/utils/event_handler_registry.py +58 -0
  488. aip_agents/utils/event_handler_registry.pyi +23 -0
  489. aip_agents/utils/file_prompt_utils.py +176 -0
  490. aip_agents/utils/file_prompt_utils.pyi +21 -0
  491. aip_agents/utils/final_response_builder.py +211 -0
  492. aip_agents/utils/final_response_builder.pyi +34 -0
  493. aip_agents/utils/formatter_llm_client.py +231 -0
  494. aip_agents/utils/formatter_llm_client.pyi +71 -0
  495. aip_agents/utils/langgraph/__init__.py +19 -0
  496. aip_agents/utils/langgraph/__init__.pyi +3 -0
  497. aip_agents/utils/langgraph/converter.py +128 -0
  498. aip_agents/utils/langgraph/converter.pyi +49 -0
  499. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  500. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  501. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  502. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  503. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  504. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  505. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
  506. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  507. aip_agents/utils/langgraph/tool_output_management.py +967 -0
  508. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  509. aip_agents/utils/logger.py +195 -0
  510. aip_agents/utils/logger.pyi +60 -0
  511. aip_agents/utils/metadata/__init__.py +27 -0
  512. aip_agents/utils/metadata/__init__.pyi +5 -0
  513. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  514. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  515. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  516. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  517. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  518. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  519. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  520. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  521. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  522. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  523. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  524. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  525. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  526. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  527. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  528. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  529. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  530. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  531. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  532. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  533. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  534. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  535. aip_agents/utils/metadata_helper.py +358 -0
  536. aip_agents/utils/metadata_helper.pyi +117 -0
  537. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  538. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  539. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  540. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  541. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  542. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  543. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  544. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  545. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  546. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  547. aip_agents/utils/pii/__init__.py +25 -0
  548. aip_agents/utils/pii/__init__.pyi +5 -0
  549. aip_agents/utils/pii/pii_handler.py +397 -0
  550. aip_agents/utils/pii/pii_handler.pyi +96 -0
  551. aip_agents/utils/pii/pii_helper.py +207 -0
  552. aip_agents/utils/pii/pii_helper.pyi +78 -0
  553. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  554. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  555. aip_agents/utils/reference_helper.py +273 -0
  556. aip_agents/utils/reference_helper.pyi +81 -0
  557. aip_agents/utils/sse_chunk_transformer.py +831 -0
  558. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  559. aip_agents/utils/step_limit_manager.py +265 -0
  560. aip_agents/utils/step_limit_manager.pyi +112 -0
  561. aip_agents/utils/token_usage_helper.py +156 -0
  562. aip_agents/utils/token_usage_helper.pyi +60 -0
  563. aip_agents_binary-0.5.25b1.dist-info/METADATA +681 -0
  564. aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
  565. aip_agents_binary-0.5.25b1.dist-info/WHEEL +5 -0
  566. aip_agents_binary-0.5.25b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,251 @@
1
+ #!/usr/bin/env python3
2
+ """Three-Level Agent Hierarchy Server.
3
+
4
+ This server hosts a hierarchical agent system with three levels:
5
+ 1. Level 1 (Coordinator): Main orchestrator agent that handles complex requests
6
+ 2. Level 2 (Specialists): Domain-specific agents that handle specialized tasks
7
+ 3. Level 3 (Workers): Task-specific agents that perform atomic operations
8
+
9
+ Architecture:
10
+ Coordinator Agent (A2A Server)
11
+ ├── Research Specialist Agent
12
+ │ ├── Web Search Worker Agent
13
+ │ └── Data Analysis Worker Agent
14
+ └── Content Specialist Agent
15
+ ├── Writing Worker Agent
16
+ └── Formatting Worker Agent
17
+
18
+ Authors:
19
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
20
+ """
21
+
22
+ import click
23
+ import uvicorn
24
+ from a2a.types import AgentCapabilities, AgentCard, AgentSkill
25
+ from dotenv import load_dotenv
26
+ from langchain_openai import ChatOpenAI
27
+
28
+ from aip_agents.agent import LangGraphAgent
29
+ from aip_agents.examples.tools.image_artifact_tool import ImageArtifactTool
30
+ from aip_agents.examples.tools.table_generator_tool import TableGeneratorTool
31
+ from aip_agents.utils.logger import get_logger
32
+
33
+ logger = get_logger(__name__)
34
+ load_dotenv()
35
+
36
+ SERVER_AGENT_NAME = "HierarchicalCoordinator"
37
+
38
+
39
+ def create_worker_agents(llm) -> tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent, LangGraphAgent]:
40
+ """Create Level 3 worker agents that perform atomic operations.
41
+
42
+ Args:
43
+ llm: The language model to use for the worker agents.
44
+
45
+ Returns:
46
+ tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent, LangGraphAgent]: Tuple of (web_search_worker, data_analysis_worker, writing_worker, formatting_worker).
47
+ """
48
+ # Research Workers
49
+ web_search_worker = LangGraphAgent(
50
+ name="WebSearchWorker",
51
+ instruction=(
52
+ "You are a web search specialist. You excel at finding information online. "
53
+ "When given a topic, provide comprehensive research findings with sources and key insights. "
54
+ "Format your responses clearly with bullet points and structured information."
55
+ ),
56
+ model=llm,
57
+ tools=[],
58
+ )
59
+
60
+ data_analysis_worker = LangGraphAgent(
61
+ name="DataAnalysisWorker",
62
+ instruction=(
63
+ "You are a data analysis expert. You specialize in creating tables, charts, and analyzing patterns. "
64
+ "Use the table_generator tool to create structured data representations. "
65
+ "Always provide insights and interpretations of the data you generate."
66
+ ),
67
+ model=llm,
68
+ tools=[TableGeneratorTool()],
69
+ )
70
+
71
+ # Content Workers
72
+ writing_worker = LangGraphAgent(
73
+ name="WritingWorker",
74
+ instruction=(
75
+ "You are a content writing specialist. You excel at creating engaging, well-structured content. "
76
+ "Focus on clarity, readability, and meeting the specific requirements provided. "
77
+ "Always maintain a professional yet engaging tone."
78
+ ),
79
+ model=llm,
80
+ tools=[],
81
+ )
82
+
83
+ formatting_worker = LangGraphAgent(
84
+ name="FormattingWorker",
85
+ instruction=(
86
+ "You are a formatting and presentation specialist. You excel at creating visual content. "
87
+ "Use the image_generator tool to create visual elements and graphics. "
88
+ "Focus on clean, professional layouts and visual appeal."
89
+ ),
90
+ model=llm,
91
+ tools=[ImageArtifactTool()],
92
+ )
93
+
94
+ return web_search_worker, data_analysis_worker, writing_worker, formatting_worker
95
+
96
+
97
+ def create_specialist_agents(llm, worker_agents) -> tuple[LangGraphAgent, LangGraphAgent]:
98
+ """Create Level 2 specialist agents that coordinate worker agents.
99
+
100
+ Args:
101
+ llm: The language model to use for the specialist agents.
102
+ worker_agents: Tuple of worker agents from create_worker_agents function.
103
+
104
+ Returns:
105
+ tuple[LangGraphAgent, LangGraphAgent]: Tuple of (research_specialist, content_specialist).
106
+ """
107
+ web_search_worker, data_analysis_worker, writing_worker, formatting_worker = worker_agents
108
+
109
+ research_specialist = LangGraphAgent(
110
+ name="ResearchSpecialist",
111
+ instruction=(
112
+ "You are a research coordinator who manages research and data analysis tasks. "
113
+ "You delegate web research to WebSearchWorker and data analysis to DataAnalysisWorker. "
114
+ "For research requests, use WebSearchWorker to gather information. "
115
+ "For data analysis or table creation requests, use DataAnalysisWorker. "
116
+ "Synthesize results from your workers into comprehensive research reports."
117
+ ),
118
+ model=llm,
119
+ agents=[web_search_worker, data_analysis_worker],
120
+ )
121
+
122
+ content_specialist = LangGraphAgent(
123
+ name="ContentSpecialist",
124
+ instruction=(
125
+ "You are a content creation coordinator who manages writing and formatting tasks. "
126
+ "You delegate writing tasks to WritingWorker and visual/formatting tasks to FormattingWorker. "
127
+ "For text content requests, use WritingWorker to create written material. "
128
+ "For visual content or formatting requests, use FormattingWorker. "
129
+ "Ensure all content is cohesive and meets quality standards."
130
+ ),
131
+ model=llm,
132
+ agents=[writing_worker, formatting_worker],
133
+ )
134
+
135
+ return research_specialist, content_specialist
136
+
137
+
138
+ def create_coordinator_agent(llm, specialist_agents) -> LangGraphAgent:
139
+ """Create Level 1 coordinator agent that orchestrates everything.
140
+
141
+ Args:
142
+ llm: The language model to use for the coordinator agent.
143
+ specialist_agents: Tuple of specialist agents from create_specialist_agents function.
144
+
145
+ Returns:
146
+ LangGraphAgent: The configured coordinator agent.
147
+ """
148
+ research_specialist, content_specialist = specialist_agents
149
+
150
+ coordinator = LangGraphAgent(
151
+ name=SERVER_AGENT_NAME,
152
+ instruction=(
153
+ "You are a hierarchical coordinator that manages complex multi-step projects. "
154
+ "You oversee two specialist teams:\n"
155
+ "- ResearchSpecialist: Handles research, data analysis, and information gathering\n"
156
+ "- ContentSpecialist: Handles content creation, writing, and visual formatting\n\n"
157
+ "For each request, analyze what needs to be done and delegate appropriately:\n"
158
+ "- Research tasks -> ResearchSpecialist\n"
159
+ "- Content creation tasks -> ContentSpecialist\n"
160
+ "- Complex requests may require both specialists\n\n"
161
+ "Always provide a comprehensive summary of the coordinated work and ensure "
162
+ "all deliverables meet the user's requirements."
163
+ ),
164
+ model=llm,
165
+ agents=[research_specialist, content_specialist],
166
+ )
167
+
168
+ return coordinator
169
+
170
+
171
+ @click.command()
172
+ @click.option("--host", "host", default="localhost", help="Host to bind the server to.")
173
+ @click.option("--port", "port", default=8888, help="Port to bind the server to.")
174
+ def main(host: str, port: int):
175
+ """Runs the Three-Level Agent Hierarchy A2A server.
176
+
177
+ Args:
178
+ host (str): Host to bind the server to.
179
+ port (int): Port to bind the server to.
180
+ """
181
+ logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
182
+
183
+ agent_card = AgentCard(
184
+ name=SERVER_AGENT_NAME,
185
+ description=(
186
+ "A hierarchical coordinator managing 3 levels of specialized agents for complex research and content tasks."
187
+ ),
188
+ url=f"http://{host}:{port}",
189
+ version="1.0.0",
190
+ defaultInputModes=["text"],
191
+ defaultOutputModes=["text"],
192
+ capabilities=AgentCapabilities(streaming=True),
193
+ skills=[
194
+ AgentSkill(
195
+ id="hierarchical_coordination",
196
+ name="Hierarchical Task Coordination",
197
+ description="Coordinates complex multi-step projects across 3 levels of specialized agents.",
198
+ examples=[
199
+ "Research market trends and create a presentation",
200
+ "Analyze data and write a comprehensive report",
201
+ "Create educational content with visuals and data tables",
202
+ ],
203
+ tags=["coordination", "hierarchy", "multi-level", "delegation"],
204
+ ),
205
+ AgentSkill(
206
+ id="research_management",
207
+ name="Research & Analysis Management",
208
+ description="Manages research specialists and data analysis workers for information gathering.",
209
+ examples=[
210
+ "Research renewable energy trends and create data tables",
211
+ "Analyze market competition and generate insights",
212
+ "Gather information on AI developments",
213
+ ],
214
+ tags=["research", "analysis", "data", "information"],
215
+ ),
216
+ AgentSkill(
217
+ id="content_management",
218
+ name="Content Creation Management",
219
+ description="Manages content specialists and formatting workers for content creation.",
220
+ examples=[
221
+ "Create engaging blog posts with visual elements",
222
+ "Develop training materials with graphics",
223
+ "Write reports with professional formatting",
224
+ ],
225
+ tags=["content", "writing", "formatting", "visual"],
226
+ ),
227
+ ],
228
+ tags=["hierarchical", "coordination", "multi-agent", "complex-tasks"],
229
+ )
230
+
231
+ llm = ChatOpenAI(model="gpt-4.1", temperature=0, streaming=True)
232
+
233
+ # Build the 3-level hierarchy
234
+ logger.info("Creating Level 3 worker agents...")
235
+ worker_agents = create_worker_agents(llm)
236
+
237
+ logger.info("Creating Level 2 specialist agents...")
238
+ specialist_agents = create_specialist_agents(llm, worker_agents)
239
+
240
+ logger.info("Creating Level 1 coordinator agent...")
241
+ coordinator_agent = create_coordinator_agent(llm, specialist_agents)
242
+
243
+ app = coordinator_agent.to_a2a(agent_card=agent_card)
244
+
245
+ logger.info("A2A application configured. Starting Uvicorn server...")
246
+ logger.info("Hierarchy: 1 Coordinator -> 2 Specialists -> 4 Workers")
247
+ uvicorn.run(app, host=host, port=port)
248
+
249
+
250
+ if __name__ == "__main__":
251
+ main()
@@ -0,0 +1,45 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ from aip_agents.examples.tools.image_artifact_tool import ImageArtifactTool as ImageArtifactTool
4
+ from aip_agents.examples.tools.table_generator_tool import TableGeneratorTool as TableGeneratorTool
5
+ from aip_agents.utils.logger import get_logger as get_logger
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+
10
+ def create_worker_agents(llm) -> tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent, LangGraphAgent]:
11
+ """Create Level 3 worker agents that perform atomic operations.
12
+
13
+ Args:
14
+ llm: The language model to use for the worker agents.
15
+
16
+ Returns:
17
+ tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent, LangGraphAgent]: Tuple of (web_search_worker, data_analysis_worker, writing_worker, formatting_worker).
18
+ """
19
+ def create_specialist_agents(llm, worker_agents) -> tuple[LangGraphAgent, LangGraphAgent]:
20
+ """Create Level 2 specialist agents that coordinate worker agents.
21
+
22
+ Args:
23
+ llm: The language model to use for the specialist agents.
24
+ worker_agents: Tuple of worker agents from create_worker_agents function.
25
+
26
+ Returns:
27
+ tuple[LangGraphAgent, LangGraphAgent]: Tuple of (research_specialist, content_specialist).
28
+ """
29
+ def create_coordinator_agent(llm, specialist_agents) -> LangGraphAgent:
30
+ """Create Level 1 coordinator agent that orchestrates everything.
31
+
32
+ Args:
33
+ llm: The language model to use for the coordinator agent.
34
+ specialist_agents: Tuple of specialist agents from create_specialist_agents function.
35
+
36
+ Returns:
37
+ LangGraphAgent: The configured coordinator agent.
38
+ """
39
+ def main(host: str, port: int):
40
+ """Runs the Three-Level Agent Hierarchy A2A server.
41
+
42
+ Args:
43
+ host (str): Host to bind the server to.
44
+ port (int): Port to bind the server to.
45
+ """
@@ -0,0 +1,57 @@
1
+ """Simple A2A client demonstrating RunnableConfig tool configuration."""
2
+
3
+ import asyncio
4
+
5
+ from dotenv import load_dotenv
6
+
7
+ from aip_agents.agent import LangGraphReactAgent
8
+ from aip_agents.schema.agent import A2AClientConfig
9
+
10
+ load_dotenv()
11
+
12
+
13
+ async def main():
14
+ """Demonstrate RunnableConfig with agent defaults and runtime overrides."""
15
+ # Create client agent
16
+ client = LangGraphReactAgent(
17
+ name="Client", instruction="You request currency services.", model="openai/gpt-4o-mini"
18
+ )
19
+
20
+ # Discover server agent
21
+ agents = client.discover_agents(A2AClientConfig(discovery_urls=["http://localhost:8885"]))
22
+ server_agent = agents[0]
23
+
24
+ print("🚀 RunnableConfig Demo: Agent Defaults vs Runtime Overrides")
25
+ print("=" * 60)
26
+
27
+ # Test 1: Agent defaults (premium_corp from server)
28
+ print("📊 Test 1: Agent Defaults")
29
+ print("Query: Convert 100 USD to EUR")
30
+ async for chunk in client.astream_to_agent(server_agent, "Convert 100 USD to EUR"):
31
+ if chunk.get("content"):
32
+ print(chunk["content"], end="\n", flush=True)
33
+ if chunk.get("metadata"):
34
+ print(f"Metadata: {chunk['metadata']}", end="\n\n", flush=True)
35
+ print("\n")
36
+
37
+ # Test 2: Runtime override (standard_business)
38
+ print("📊 Test 2: Runtime Override")
39
+ print("Query: Convert 100 USD to EUR")
40
+ print("Metadata: Overriding to standard_business tenant")
41
+
42
+ metadata = {
43
+ "tool_configs": {"currency_exchange": {"tenant_id": "standard_business", "auth_key": "standard_key_456"}}
44
+ }
45
+
46
+ async for chunk in client.astream_to_agent(server_agent, "Convert 100 USD to EUR", metadata=metadata):
47
+ if chunk.get("content"):
48
+ print(chunk["content"], end="\n", flush=True)
49
+ if chunk.get("metadata"):
50
+ print(f"Metadata: {chunk['metadata']}", end="\n\n", flush=True)
51
+ print("\n")
52
+
53
+ print("✅ Demo completed! Notice different rates between premium_corp and standard_business.")
54
+
55
+
56
+ if __name__ == "__main__":
57
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Demonstrate RunnableConfig with agent defaults and runtime overrides."""
@@ -0,0 +1,80 @@
1
+ """Example A2A server for a LangChainAgent Weather Service.
2
+
3
+ This server instantiates a LangChainAgent with weather lookup capabilities and serves it
4
+ via the A2A protocol using the to_a2a convenience method.
5
+
6
+ To run this server:
7
+ python examples/a2a/langchain_server_example.py
8
+
9
+ It will listen on http://localhost:8001 by default.
10
+
11
+ Authors:
12
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
13
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
14
+ """
15
+
16
+ import click
17
+ import uvicorn
18
+ from a2a.types import AgentCapabilities, AgentCard, AgentSkill
19
+ from dotenv import load_dotenv
20
+
21
+ from aip_agents.agent import LangGraphReactAgent
22
+ from aip_agents.examples.hello_world_a2a_langchain_server import SERVER_AGENT_NAME
23
+ from aip_agents.examples.tools.langchain_currency_exchange_tool import CurrencyExchangeTool
24
+ from aip_agents.utils.logger import get_logger
25
+
26
+ load_dotenv()
27
+
28
+ logger = get_logger(__name__)
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=8885, help="Port to bind the server to.")
34
+ def main(host: str, port: int):
35
+ """Runs the LangChain Currency Exchange A2A server.
36
+
37
+ Args:
38
+ host (str): Host to bind the server to.
39
+ port (int): Port to bind the server to.
40
+ """
41
+ logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
42
+
43
+ agent_card = AgentCard(
44
+ name=SERVER_AGENT_NAME,
45
+ description="A weather agent that provides weather information for cities",
46
+ url=f"http://{host}:{port}",
47
+ version="1.0.0",
48
+ defaultInputModes=["text"],
49
+ defaultOutputModes=["text"],
50
+ capabilities=AgentCapabilities(streaming=True),
51
+ skills=[
52
+ AgentSkill(
53
+ id="currency_exchange",
54
+ name="Currency Exchange",
55
+ description="Provides current currency exchange information for cities.",
56
+ examples=["What's the currency exchange in Tokyo?", "Get currency exchange for London"],
57
+ tags=["currency_exchange"],
58
+ )
59
+ ],
60
+ tags=["currency_exchange"],
61
+ )
62
+
63
+ agent = LangGraphReactAgent(
64
+ name="CurrencyAgent",
65
+ instruction="You are a currency exchange agent. Use the currency_exchange tool for conversions.",
66
+ model="openai/gpt-4o-mini",
67
+ tools=[CurrencyExchangeTool()],
68
+ tool_configs={"currency_exchange": {"tenant_id": "premium_corp", "auth_key": "premium_key_123"}},
69
+ )
70
+
71
+ app = agent.to_a2a(
72
+ agent_card=agent_card,
73
+ )
74
+
75
+ uvicorn.run(app, host=host, port=port)
76
+ logger.info("A2A application configured. Starting Uvicorn server...")
77
+
78
+
79
+ if __name__ == "__main__":
80
+ main()
@@ -0,0 +1,15 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
3
+ from aip_agents.examples.hello_world_a2a_langchain_server import SERVER_AGENT_NAME as SERVER_AGENT_NAME
4
+ from aip_agents.examples.tools.langchain_currency_exchange_tool import CurrencyExchangeTool as CurrencyExchangeTool
5
+ from aip_agents.utils.logger import get_logger as get_logger
6
+
7
+ logger: Incomplete
8
+
9
+ def main(host: str, port: int):
10
+ """Runs the LangChain Currency Exchange A2A server.
11
+
12
+ Args:
13
+ host (str): Host to bind the server to.
14
+ port (int): Port to bind the server to.
15
+ """
@@ -0,0 +1,41 @@
1
+ """Minimal example demonstrating the GoogleADKAgent with tool usage and async operation.
2
+
3
+ This example shows how to create a simple calculator agent using Google's ADK
4
+ which automatically handles tool calling and conversation flow.
5
+ """
6
+
7
+ import asyncio
8
+
9
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent
10
+ from aip_agents.examples.tools.adk_arithmetic_tools import sum_numbers
11
+
12
+
13
+ async def google_adk_example():
14
+ """Demonstrates the GoogleADKAgent's arun method."""
15
+ agent_name = "GoogleADKCalculator"
16
+
17
+ # Create the agent with simplified instructions and our tool
18
+ agent = GoogleADKAgent(
19
+ name=agent_name,
20
+ instruction="""You are a calculator assistant. When asked math problems,
21
+ extract numbers and call sum_numbers tool to add them.
22
+ For multi-step problems, use multiple tool calls.""",
23
+ model="gemini-2.0-flash",
24
+ tools=[sum_numbers],
25
+ max_iterations=5, # Allow multiple tool calls if needed
26
+ )
27
+
28
+ # Use the same query as in LangGraph example for consistency
29
+ query = "What is the sum of 23 and 47? And then add 10 to that, then add 5 more."
30
+ print(f"--- Agent: {agent_name} ---")
31
+ print(f"Query: {query}")
32
+
33
+ print("\nRunning arun...")
34
+ response = await agent.arun(query=query)
35
+ print(f"[arun] Final Response: {response.get('output')}")
36
+ print("--- End of Google ADK Example ---")
37
+
38
+
39
+ if __name__ == "__main__":
40
+ # GOOGLE_API_KEY should be set in the environment.
41
+ asyncio.run(google_adk_example())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent as GoogleADKAgent
2
+ from aip_agents.examples.tools.adk_arithmetic_tools import sum_numbers as sum_numbers
3
+
4
+ async def google_adk_example() -> None:
5
+ """Demonstrates the GoogleADKAgent's arun method."""
@@ -0,0 +1,34 @@
1
+ """Example showing Google ADK agent with MCP tools integration using Streamable HTTP transport.
2
+
3
+ This example demonstrates how to create a Google ADK agent that can use tools
4
+ from MCP servers via Streamable HTTP transport.
5
+
6
+ Authors:
7
+ Fachriza Dian Adhiatma (fachriza.d.adhiatma@gdplabs.id)
8
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
9
+ """
10
+
11
+ import asyncio
12
+
13
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent
14
+ from aip_agents.examples.mcp_configs.configs import mcp_config_http
15
+
16
+
17
+ async def main():
18
+ """Demonstrates the GoogleADKAgent with MCP tools via Streamable HTTP transport."""
19
+ agent = GoogleADKAgent(
20
+ name="GoogleADKMCPHTTP",
21
+ instruction="""You are a helpful assistant that can use playwright tools to browse the web.
22
+ If a user ask something, you try to answer it by browsing the web via playwright tools
23
+ Do not ask for clarification, just answer to the best of your ability using playwright tools.""",
24
+ model="gemini-2.0-flash",
25
+ max_iterations=5,
26
+ )
27
+ agent.add_mcp_server(mcp_config_http)
28
+
29
+ response = await agent.arun(query="Who is the Winner of La Liga in 2024/2025 Season? Browse it.")
30
+ print(f"Response: {response.get('output')}")
31
+
32
+
33
+ if __name__ == "__main__":
34
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent as GoogleADKAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_config_http as mcp_config_http
3
+
4
+ async def main() -> None:
5
+ """Demonstrates the GoogleADKAgent with MCP tools via Streamable HTTP transport."""
@@ -0,0 +1,40 @@
1
+ """Example showing Google ADK agent with MCP tools integration.
2
+
3
+ Transport: Streamable HTTP
4
+ Streaming: Yes
5
+
6
+ This example demonstrates how to create a Google ADK agent that can use tools
7
+ from MCP servers via Streamable HTTP transport while streaming the response
8
+ in real-time.
9
+
10
+ Authors:
11
+ Fachriza Dian Adhiatma (fachriza.d.adhiatma@gdplabs.id)
12
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
13
+ """
14
+
15
+ import asyncio
16
+
17
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent
18
+ from aip_agents.examples.mcp_configs.configs import mcp_config_http
19
+
20
+
21
+ async def main():
22
+ """Demonstrates the GoogleADKAgent with MCP tools via Streamable HTTP transport and streaming."""
23
+ agent = GoogleADKAgent(
24
+ name="GoogleADKMCPHTTPStream",
25
+ instruction="""You are a helpful assistant that can use playwright tools to browse the web.
26
+ If a user ask something, you try to answer it by browsing the web via playwright tools
27
+ Do not ask for clarification, just answer to the best of your ability using playwright tools.""",
28
+ model="gemini-2.0-flash",
29
+ max_iterations=5,
30
+ )
31
+ agent.add_mcp_server(mcp_config_http)
32
+ query = (
33
+ "Go to huggingface.co, and then browse to the number 1 trending model page to find the abstract of the model"
34
+ )
35
+ async for chunk in agent.arun_stream(query=query):
36
+ print(chunk, end="", flush=True)
37
+
38
+
39
+ if __name__ == "__main__":
40
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent as GoogleADKAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_config_http as mcp_config_http
3
+
4
+ async def main() -> None:
5
+ """Demonstrates the GoogleADKAgent with MCP tools via Streamable HTTP transport and streaming."""
@@ -0,0 +1,44 @@
1
+ """Example showing Google ADK agent with MCP tools integration using SSE transport.
2
+
3
+ This example demonstrates how to create a Google ADK agent that can use tools
4
+ from MCP servers via Server-Sent Events (SSE) transport.
5
+
6
+ Authors:
7
+ Fachriza Dian Adhiatma (fachriza.d.adhiatma@gdplabs.id)
8
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
9
+ """
10
+
11
+ import asyncio
12
+
13
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent
14
+ from aip_agents.examples.mcp_configs.configs import mcp_config_sse
15
+
16
+
17
+ async def main():
18
+ """Demonstrates the GoogleADKAgent with MCP tools via SSE transport."""
19
+ agent_name = "GoogleADKMCPSSE"
20
+
21
+ agent = GoogleADKAgent(
22
+ name=agent_name,
23
+ instruction="""You are a helpful assistant that can use playwright tools to browse the web.
24
+ If a user ask something, you try to answer it by browsing the web via playwright tools
25
+ Do not ask for clarification, just answer to the best of your ability using playwright tools.""",
26
+ model="gemini-2.0-flash",
27
+ tools=[],
28
+ max_iterations=5,
29
+ )
30
+ agent.add_mcp_server(mcp_config_sse)
31
+
32
+ query = "How many trophies did FC Barcelona win in 2024/2025 season?"
33
+
34
+ print(f"--- Agent: {agent_name} ---")
35
+ print(f"Query: {query}")
36
+
37
+ print("\nRunning arun with MCP SSE tools...")
38
+ response = await agent.arun(query=query)
39
+ print(f"[arun] Final Response: {response.get('output')}")
40
+ print("--- End of Google ADK MCP SSE Example ---")
41
+
42
+
43
+ if __name__ == "__main__":
44
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent.google_adk_agent import GoogleADKAgent as GoogleADKAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_config_sse as mcp_config_sse
3
+
4
+ async def main() -> None:
5
+ """Demonstrates the GoogleADKAgent with MCP tools via SSE transport."""