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,73 @@
1
+ from _typeshed import Incomplete
2
+ from a2a.server.agent_execution import AgentExecutor as A2ASDKExecutor, RequestContext
3
+ from a2a.server.events.event_queue import EventQueue
4
+ from abc import ABC, abstractmethod
5
+ from aip_agents.types import A2AEvent as A2AEvent, A2AStreamEventType as A2AStreamEventType
6
+ from aip_agents.utils import serialize_references_for_metadata as serialize_references_for_metadata
7
+ from aip_agents.utils.artifact_helpers import ArtifactHandler as ArtifactHandler
8
+ from aip_agents.utils.logger import get_logger as get_logger
9
+ from aip_agents.utils.metadata_helper import MetadataFieldKeys as MetadataFieldKeys
10
+ from collections.abc import Callable as Callable
11
+ from dataclasses import dataclass
12
+ from typing import Any
13
+
14
+ logger: Incomplete
15
+
16
+ @dataclass
17
+ class StatusUpdateParams:
18
+ """Parameters for status updates."""
19
+ metadata: dict[str, Any] | None = ...
20
+ final: bool = ...
21
+ task_id: str | None = ...
22
+ context_id: str | None = ...
23
+
24
+ class BaseA2AExecutor(A2ASDKExecutor, ABC):
25
+ """Abstract base class for GLLM Agent framework's A2A server-side executors.
26
+
27
+ This class extends the A2A SDK's `AgentExecutor`. It serves as a common
28
+ foundation for specific executors tailored to different agent types within the
29
+ `aip-agents` framework, such as `LangGraphA2AExecutor` or
30
+ `GoogleADKA2AExecutor`.
31
+
32
+ Subclasses are required to implement the `execute` method to handle A2A
33
+ requests. The `cancel` method has a common implementation.
34
+
35
+ Attributes:
36
+ _active_tasks (dict[str, asyncio.Task]): A dictionary mapping task IDs to
37
+ their corresponding asyncio.Task instances for active agent executions.
38
+ """
39
+ def __init__(self) -> None:
40
+ """Initializes the BaseA2AExecutor."""
41
+ @abstractmethod
42
+ async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
43
+ """Processes an incoming agent request and manages its execution.
44
+
45
+ Implementations should interact with the underlying agent (e.g., a LangGraph
46
+ or Google ADK agent) based on the provided `context`. All communications
47
+ regarding task status, artifacts, and completion must be sent through
48
+ the `event_queue`.
49
+
50
+ This method typically involves:
51
+ 1. Calling `_handle_initial_execute_checks` for validation and setup.
52
+ 2. Defining an agent-specific coroutine for processing (e.g., `_process_stream`).
53
+ 3. Calling `_execute_agent_processing` to manage the lifecycle of this coroutine.
54
+
55
+ Args:
56
+ context (RequestContext): The request context containing information about the incoming
57
+ message, task, and other relevant data.
58
+ event_queue (EventQueue): The queue used to send events (e.g., task status updates,
59
+ artifacts) back to the A2A server infrastructure.
60
+ """
61
+ async def cancel(self, context: RequestContext, event_queue: EventQueue) -> None:
62
+ """Handles a request to cancel an ongoing agent task.
63
+
64
+ This method attempts to cancel an active asyncio.Task associated with the
65
+ given `context.task_id`. It waits for a short period for the task to handle
66
+ the cancellation gracefully. The `event_queue` is used to report the
67
+ outcome of the cancellation attempt (e.g., success, error during cleanup).
68
+
69
+ Args:
70
+ context (RequestContext): The request context for the task to be cancelled,
71
+ primarily used to get the `task_id` and `context_id`.
72
+ event_queue (EventQueue): The queue for sending cancellation status events.
73
+ """
@@ -0,0 +1,198 @@
1
+ """A2A server-side executor for Google ADK agent instances.
2
+
3
+ Authors:
4
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+ from typing import Any
9
+
10
+ from a2a.server.agent_execution import RequestContext
11
+ from a2a.server.events.event_queue import EventQueue
12
+ from a2a.server.tasks import TaskUpdater
13
+ from a2a.types import TaskState
14
+ from a2a.utils import new_agent_text_message
15
+
16
+ from aip_agents.a2a.server.base_executor import BaseA2AExecutor, StatusUpdateParams
17
+ from aip_agents.agent.google_adk_constants import DEFAULT_AUTH_URL
18
+ from aip_agents.agent.interfaces import GoogleADKAgentProtocol
19
+ from aip_agents.utils.logger import get_logger
20
+
21
+ logger = get_logger(__name__)
22
+
23
+
24
+ class GoogleADKExecutor(BaseA2AExecutor):
25
+ """A2A Executor for serving a `GoogleADKAgent`.
26
+
27
+ This executor bridges the A2A server protocol with a `aip_agents.agent.GoogleADKAgent`.
28
+ It handles incoming requests by invoking the agent's `arun_a2a_stream` method,
29
+ which is specifically designed to yield ADK events in an A2A-compatible dictionary
30
+ format. This executor's `_process_stream` method is tailored to handle this stream,
31
+ including ADK-specific statuses like "auth_required", before delegating common
32
+ status handling to `BaseA2AExecutor._handle_stream_event`.
33
+
34
+ It leverages common functionality from `BaseA2AExecutor` for task management,
35
+ initial request checks, and cancellation.
36
+
37
+ Attributes:
38
+ agent (GoogleADKAgentProtocol): The instance of `GoogleADKAgent`-compatible class to execute.
39
+ """
40
+
41
+ agent: GoogleADKAgentProtocol
42
+
43
+ def __init__(self, agent: GoogleADKAgentProtocol) -> None:
44
+ """Initializes the GoogleADKExecutor.
45
+
46
+ Args:
47
+ agent: Component implementing `GoogleADKAgentProtocol`.
48
+
49
+ Raises:
50
+ TypeError: If the provided agent does not satisfy `GoogleADKAgentProtocol`.
51
+ """
52
+ super().__init__()
53
+
54
+ if not isinstance(agent, GoogleADKAgentProtocol):
55
+ raise TypeError(
56
+ f"GoogleADKExecutor expected an agent implementing GoogleADKAgentProtocol, got {type(agent).__name__}"
57
+ )
58
+ self.agent = agent
59
+ self._default_auth_url = DEFAULT_AUTH_URL
60
+
61
+ async def execute(
62
+ self,
63
+ context: RequestContext,
64
+ event_queue: EventQueue,
65
+ ) -> None:
66
+ """Processes an incoming agent request using the `GoogleADKAgent`.
67
+
68
+ This method first performs initial checks using `_handle_initial_execute_checks`
69
+ from the base class. If successful, it prepares the `_process_stream` coroutine
70
+ and passes it to `_execute_agent_processing` (also from the base class) to
71
+ manage its execution lifecycle. The `_process_stream` method is responsible for
72
+ calling the agent's `arun_a2a_stream` and handling its ADK-specific output.
73
+
74
+ Args:
75
+ context (RequestContext): The A2A request context containing message details,
76
+ task ID, and context ID.
77
+ event_queue (EventQueue): The queue for sending A2A events (task status,
78
+ artifacts) back to the server.
79
+ """
80
+ updater, query, metadata = await self._handle_initial_execute_checks(context, event_queue)
81
+ if not updater or query is None: # Checks failed, status already sent by base method
82
+ return
83
+
84
+ agent_processing_coro = self._process_stream(
85
+ query=query,
86
+ updater=updater,
87
+ task_id=context.task_id,
88
+ context_id=context.context_id,
89
+ event_queue=event_queue,
90
+ metadata=metadata,
91
+ )
92
+
93
+ await self._execute_agent_processing(
94
+ agent_processing_coro=agent_processing_coro,
95
+ updater=updater,
96
+ task_id=context.task_id,
97
+ context_id=context.context_id,
98
+ )
99
+
100
+ async def _process_stream( # noqa: PLR0913
101
+ self,
102
+ query: str,
103
+ updater: TaskUpdater,
104
+ task_id: str,
105
+ context_id: str,
106
+ event_queue: EventQueue,
107
+ metadata: dict[str, Any] | None = None,
108
+ ) -> None:
109
+ """Processes the streaming response from the `GoogleADKAgent`.
110
+
111
+ This coroutine invokes `self.agent.arun_a2a_stream`, which is designed to yield
112
+ dictionary chunks adapting native Google ADK `Event` objects into an A2A-compatible
113
+ format. This method specifically handles the "auth_required" status that can be
114
+ yielded by the agent's stream. For all other statuses, it delegates to the
115
+ `self._handle_stream_event` method from `BaseA2AExecutor` for common processing.
116
+
117
+ The `GoogleADKAgent.arun_a2a_stream` and its helper methods are responsible for
118
+ the ADK-specific event transformation. This executor's role here is to consume
119
+ that adapted stream.
120
+
121
+ If `asyncio.CancelledError` is raised (e.g., by the task managed by
122
+ `_execute_agent_processing`), it is re-raised to be handled by the base class.
123
+ Other exceptions during streaming are caught, logged, an A2A 'failed' status
124
+ is sent, and the exception is re-raised.
125
+
126
+ Args:
127
+ query (str): The query string to be processed by the agent.
128
+ updater (TaskUpdater): The `TaskUpdater` instance for sending status updates.
129
+ task_id (str): The A2A task ID.
130
+ context_id (str): The A2A context ID.
131
+ event_queue (EventQueue): The A2A event queue, used by the base handler
132
+ for sending artifact events.
133
+ metadata (dict[str, Any] | None): Optional metadata from the A2A request.
134
+
135
+ Raises:
136
+ asyncio.CancelledError: If the task is cancelled externally.
137
+ Exception: If any other error occurs during the agent's stream processing.
138
+ """
139
+ try:
140
+ async for chunk in self.agent.arun_a2a_stream(
141
+ query=query,
142
+ configurable={"thread_id": task_id, "context_id": context_id},
143
+ ):
144
+ # Handle ADK-specific statuses first
145
+ if chunk.get("status") == "auth_required":
146
+ auth_content = chunk.get("content", {})
147
+ auth_url = (
148
+ auth_content.get("auth_url", self._default_auth_url)
149
+ if isinstance(auth_content, dict)
150
+ else self._default_auth_url
151
+ )
152
+ auth_message = (
153
+ auth_content.get("message", "Authorization is required.")
154
+ if isinstance(auth_content, dict)
155
+ else "Authorization is required."
156
+ )
157
+ full_message = f"{auth_message} Visit {auth_url}"
158
+
159
+ await self._update_status(
160
+ updater,
161
+ TaskState.auth_required,
162
+ message=new_agent_text_message(full_message, context_id=context_id, task_id=task_id),
163
+ params=StatusUpdateParams(final=True, task_id=task_id, context_id=context_id),
164
+ )
165
+ return # Terminate stream processing as auth is required
166
+
167
+ # For other statuses, use the common handler from BaseA2AExecutor
168
+ should_terminate = await self._handle_stream_event(
169
+ chunk=chunk,
170
+ updater=updater,
171
+ task_id=task_id,
172
+ context_id=context_id,
173
+ event_queue=event_queue,
174
+ metadata=metadata,
175
+ )
176
+ if should_terminate:
177
+ return
178
+
179
+ except asyncio.CancelledError:
180
+ logger.info(f"ADK Stream processing for task {task_id} was cancelled.")
181
+ # Re-raise for _execute_agent_processing to handle and set A2A status
182
+ raise
183
+ except Exception as e:
184
+ logger.error(
185
+ f"Error during ADK agent streaming for task {task_id}: {e}",
186
+ exc_info=True,
187
+ )
188
+ await self._update_status(
189
+ updater,
190
+ TaskState.failed,
191
+ message=new_agent_text_message(
192
+ f"Error during streaming: {str(e)}",
193
+ context_id=context_id,
194
+ task_id=task_id,
195
+ ),
196
+ params=StatusUpdateParams(final=True, task_id=task_id, context_id=context_id),
197
+ )
198
+ raise
@@ -0,0 +1,51 @@
1
+ from _typeshed import Incomplete
2
+ from a2a.server.agent_execution import RequestContext
3
+ from a2a.server.events.event_queue import EventQueue
4
+ from aip_agents.a2a.server.base_executor import BaseA2AExecutor as BaseA2AExecutor, StatusUpdateParams as StatusUpdateParams
5
+ from aip_agents.agent.google_adk_constants import DEFAULT_AUTH_URL as DEFAULT_AUTH_URL
6
+ from aip_agents.agent.interfaces import GoogleADKAgentProtocol as GoogleADKAgentProtocol
7
+ from aip_agents.utils.logger import get_logger as get_logger
8
+
9
+ logger: Incomplete
10
+
11
+ class GoogleADKExecutor(BaseA2AExecutor):
12
+ '''A2A Executor for serving a `GoogleADKAgent`.
13
+
14
+ This executor bridges the A2A server protocol with a `aip_agents.agent.GoogleADKAgent`.
15
+ It handles incoming requests by invoking the agent\'s `arun_a2a_stream` method,
16
+ which is specifically designed to yield ADK events in an A2A-compatible dictionary
17
+ format. This executor\'s `_process_stream` method is tailored to handle this stream,
18
+ including ADK-specific statuses like "auth_required", before delegating common
19
+ status handling to `BaseA2AExecutor._handle_stream_event`.
20
+
21
+ It leverages common functionality from `BaseA2AExecutor` for task management,
22
+ initial request checks, and cancellation.
23
+
24
+ Attributes:
25
+ agent (GoogleADKAgentProtocol): The instance of `GoogleADKAgent`-compatible class to execute.
26
+ '''
27
+ agent: GoogleADKAgentProtocol
28
+ def __init__(self, agent: GoogleADKAgentProtocol) -> None:
29
+ """Initializes the GoogleADKExecutor.
30
+
31
+ Args:
32
+ agent: Component implementing `GoogleADKAgentProtocol`.
33
+
34
+ Raises:
35
+ TypeError: If the provided agent does not satisfy `GoogleADKAgentProtocol`.
36
+ """
37
+ async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
38
+ """Processes an incoming agent request using the `GoogleADKAgent`.
39
+
40
+ This method first performs initial checks using `_handle_initial_execute_checks`
41
+ from the base class. If successful, it prepares the `_process_stream` coroutine
42
+ and passes it to `_execute_agent_processing` (also from the base class) to
43
+ manage its execution lifecycle. The `_process_stream` method is responsible for
44
+ calling the agent's `arun_a2a_stream` and handling its ADK-specific output.
45
+
46
+ Args:
47
+ context (RequestContext): The A2A request context containing message details,
48
+ task ID, and context ID.
49
+ event_queue (EventQueue): The queue for sending A2A events (task status,
50
+ artifacts) back to the server.
51
+ """
@@ -0,0 +1,180 @@
1
+ """A2A executor for Langflow agents.
2
+
3
+ This module provides the LangflowA2AExecutor class that extends BaseA2AExecutor
4
+ to handle A2A requests for Langflow agents, similar to how LangGraphA2AExecutor
5
+ works for LangGraph agents.
6
+
7
+ Authors:
8
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
9
+ """
10
+
11
+ import typing
12
+ from abc import ABC
13
+
14
+ from a2a.server.agent_execution import RequestContext
15
+ from a2a.server.events.event_queue import EventQueue
16
+ from a2a.server.tasks import TaskUpdater
17
+ from a2a.types import TaskState
18
+ from a2a.utils import new_agent_text_message
19
+
20
+ from aip_agents.a2a.server.base_executor import BaseA2AExecutor, StatusUpdateParams
21
+ from aip_agents.agent.interfaces import LangflowAgentProtocol
22
+ from aip_agents.utils.logger import get_logger
23
+
24
+ logger = get_logger(__name__)
25
+
26
+
27
+ class LangflowA2AExecutor(BaseA2AExecutor, ABC):
28
+ """A2A executor for Langflow agents.
29
+
30
+ This class extends BaseA2AExecutor to provide A2A execution capabilities
31
+ for Langflow agents. It follows the same patterns as LangGraphA2AExecutor
32
+ but handles Langflow-specific streaming and execution logic.
33
+
34
+ Attributes:
35
+ agent: The LangflowAgent-compatible instance to be executed.
36
+ """
37
+
38
+ agent: LangflowAgentProtocol
39
+
40
+ def __init__(self, langflow_agent_instance: LangflowAgentProtocol) -> None:
41
+ """Initialize the LangflowA2AExecutor.
42
+
43
+ Args:
44
+ langflow_agent_instance: Component implementing `LangflowAgentProtocol`.
45
+
46
+ Raises:
47
+ TypeError: If the agent does not satisfy `LangflowAgentProtocol`.
48
+ """
49
+ super().__init__()
50
+
51
+ if not isinstance(langflow_agent_instance, LangflowAgentProtocol):
52
+ type_name = type(langflow_agent_instance).__name__
53
+ raise TypeError(
54
+ f"LangflowA2AExecutor expected an agent implementing LangflowAgentProtocol, got {type_name}"
55
+ )
56
+
57
+ self.agent = langflow_agent_instance
58
+ logger.info(f"Initialized LangflowA2AExecutor for agent '{self.agent.name}'")
59
+
60
+ async def execute(
61
+ self,
62
+ context: RequestContext,
63
+ event_queue: EventQueue,
64
+ ) -> None:
65
+ """Process an incoming agent request using a Langflow agent.
66
+
67
+ This method handles the execution lifecycle for Langflow agents:
68
+ 1. Performs initial validation and setup
69
+ 2. Creates agent processing coroutine
70
+ 3. Manages the execution lifecycle through BaseA2AExecutor
71
+
72
+ Args:
73
+ context: The A2A request context containing message details,
74
+ task ID, and context ID.
75
+ event_queue: The queue for sending A2A events back to the server.
76
+ """
77
+ updater, query, metadata = await self._handle_initial_execute_checks(context, event_queue)
78
+ if not updater or query is None:
79
+ return
80
+
81
+ agent_processing_coro = self._process_stream(
82
+ query=query,
83
+ updater=updater,
84
+ task_id=context.task_id,
85
+ context_id=context.context_id,
86
+ event_queue=event_queue,
87
+ metadata=metadata,
88
+ )
89
+
90
+ await self._execute_agent_processing(
91
+ agent_processing_coro=agent_processing_coro,
92
+ updater=updater,
93
+ task_id=context.task_id,
94
+ context_id=context.context_id,
95
+ )
96
+
97
+ def _get_configurable_kwargs(self, task_id: str) -> dict[str, typing.Any]:
98
+ """Get configurable kwargs for agent execution.
99
+
100
+ For Langflow agents, we use thread_id for session management.
101
+
102
+ Args:
103
+ task_id: The A2A task ID to use as thread_id.
104
+
105
+ Returns:
106
+ Dictionary with configurable parameters for the agent.
107
+ """
108
+ return {"configurable": {"thread_id": task_id}}
109
+
110
+ async def _process_stream( # noqa: PLR0913
111
+ self,
112
+ query: str,
113
+ updater: TaskUpdater,
114
+ task_id: str,
115
+ context_id: str,
116
+ event_queue: EventQueue,
117
+ metadata: dict[str, typing.Any] | None = None,
118
+ ) -> None:
119
+ """Process the streaming response from a Langflow agent.
120
+
121
+ This method invokes the agent's arun_a2a_stream method and processes
122
+ the A2A events it yields. It handles event routing through the base
123
+ class's _handle_stream_event method.
124
+
125
+ Args:
126
+ query: The query string to be processed by the agent.
127
+ updater: The TaskUpdater instance for sending status updates.
128
+ task_id: The A2A task ID.
129
+ context_id: The A2A context ID.
130
+ event_queue: The A2A event queue for sending artifact events.
131
+ metadata: Optional metadata from the A2A request.
132
+
133
+ Raises:
134
+ asyncio.CancelledError: If the task is cancelled externally.
135
+ Exception: If any other error occurs during streaming.
136
+ """
137
+ try:
138
+ kwargs = self._get_configurable_kwargs(task_id)
139
+ if metadata:
140
+ kwargs["metadata"] = metadata
141
+
142
+ logger.debug(f"Starting Langflow agent stream for task {task_id}")
143
+
144
+ current_metadata: dict[str, typing.Any] = metadata.copy() if metadata else {}
145
+
146
+ async for chunk in self.agent.arun_a2a_stream(query=query, **kwargs):
147
+ chunk_metadata = chunk.get("metadata")
148
+ if chunk_metadata and isinstance(chunk_metadata, dict):
149
+ try:
150
+ current_metadata.update(chunk_metadata)
151
+ except Exception as e:
152
+ logger.warning(f"Invalid metadata in chunk: {chunk_metadata}, error: {e}")
153
+
154
+ should_terminate = await self._handle_stream_event(
155
+ chunk=chunk,
156
+ updater=updater,
157
+ task_id=task_id,
158
+ context_id=context_id,
159
+ event_queue=event_queue,
160
+ metadata=current_metadata if current_metadata else None,
161
+ )
162
+
163
+ if should_terminate:
164
+ logger.debug(f"Stream terminated for task {task_id}")
165
+ return
166
+
167
+ except Exception as e:
168
+ logger.error(f"Error during Langflow agent streaming for task {task_id}: {e}", exc_info=True)
169
+
170
+ await self._update_status(
171
+ updater,
172
+ TaskState.failed,
173
+ message=new_agent_text_message(
174
+ f"Error during Langflow execution: {str(e)}",
175
+ context_id=context_id,
176
+ task_id=task_id,
177
+ ),
178
+ params=StatusUpdateParams(final=True, task_id=task_id, context_id=context_id),
179
+ )
180
+ raise
@@ -0,0 +1,43 @@
1
+ from _typeshed import Incomplete
2
+ from a2a.server.agent_execution import RequestContext
3
+ from a2a.server.events.event_queue import EventQueue
4
+ from abc import ABC
5
+ from aip_agents.a2a.server.base_executor import BaseA2AExecutor as BaseA2AExecutor, StatusUpdateParams as StatusUpdateParams
6
+ from aip_agents.agent.interfaces import LangflowAgentProtocol as LangflowAgentProtocol
7
+ from aip_agents.utils.logger import get_logger as get_logger
8
+
9
+ logger: Incomplete
10
+
11
+ class LangflowA2AExecutor(BaseA2AExecutor, ABC):
12
+ """A2A executor for Langflow agents.
13
+
14
+ This class extends BaseA2AExecutor to provide A2A execution capabilities
15
+ for Langflow agents. It follows the same patterns as LangGraphA2AExecutor
16
+ but handles Langflow-specific streaming and execution logic.
17
+
18
+ Attributes:
19
+ agent: The LangflowAgent-compatible instance to be executed.
20
+ """
21
+ agent: LangflowAgentProtocol
22
+ def __init__(self, langflow_agent_instance: LangflowAgentProtocol) -> None:
23
+ """Initialize the LangflowA2AExecutor.
24
+
25
+ Args:
26
+ langflow_agent_instance: Component implementing `LangflowAgentProtocol`.
27
+
28
+ Raises:
29
+ TypeError: If the agent does not satisfy `LangflowAgentProtocol`.
30
+ """
31
+ async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
32
+ """Process an incoming agent request using a Langflow agent.
33
+
34
+ This method handles the execution lifecycle for Langflow agents:
35
+ 1. Performs initial validation and setup
36
+ 2. Creates agent processing coroutine
37
+ 3. Manages the execution lifecycle through BaseA2AExecutor
38
+
39
+ Args:
40
+ context: The A2A request context containing message details,
41
+ task ID, and context ID.
42
+ event_queue: The queue for sending A2A events back to the server.
43
+ """