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,130 @@
1
+ """Interactive example showing LangChain agent with MCP tools integration using Streamable HTTP transport.
2
+
3
+ This script provides an interactive CLI interface with chat history functionality,
4
+ similar to hello_world_model_switch_cli.py, but with MCP tools via HTTP transport.
5
+
6
+ Authors:
7
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
8
+ """
9
+
10
+ import asyncio
11
+ import os
12
+
13
+ from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
14
+
15
+ from aip_agents.agent import LangChainAgent
16
+ from aip_agents.utils.env_loader import load_local_env
17
+
18
+ load_local_env()
19
+
20
+
21
+ def print_help():
22
+ """Prints available commands and their descriptions."""
23
+ help_text = (
24
+ "\nAvailable commands:\n"
25
+ " /help Show this help message\n"
26
+ " /exit Quit the chat\n"
27
+ "Type anything else to chat with the assistant.\n"
28
+ )
29
+ print(help_text)
30
+
31
+
32
+ def build_mcp_config_from_env() -> dict:
33
+ """Construct MCP configuration from environment variables.
34
+
35
+ Returns:
36
+ dict: MCP configuration dictionary.
37
+
38
+ Raises:
39
+ RuntimeError: If required environment variables are missing.
40
+ """
41
+ url = "https://huggingface.co/mcp"
42
+ token = os.getenv("TEST_HF_TOKEN")
43
+
44
+ missing = [
45
+ name
46
+ for name, value in {
47
+ "TEST_HF_TOKEN": token,
48
+ }.items()
49
+ if not value
50
+ ]
51
+
52
+ if missing:
53
+ missing_vars = ", ".join(missing)
54
+ raise RuntimeError(
55
+ "Missing required environment variables for MCP configuration: "
56
+ f"{missing_vars}. Please set them before running the example."
57
+ )
58
+
59
+ return {
60
+ "mcp_server": {
61
+ "url": url,
62
+ "transport": "http",
63
+ "headers": {
64
+ "Authorization": f"Bearer {token}",
65
+ },
66
+ }
67
+ }
68
+
69
+
70
+ async def main():
71
+ """Runs the interactive LangChainAgent with MCP tools via Streamable HTTP transport."""
72
+ print("Welcome to the Interactive LangChain MCP HTTP Example!")
73
+ print("🎯 Demonstrating MCP tools integration with HTTP transport:")
74
+ print(" • Web browsing capabilities via Playwright tools")
75
+ print()
76
+ print("Type your message, or type /help to show available commands, or /exit to quit.")
77
+
78
+ # Initialize the agent with MCP tools
79
+ langchain_agent = LangChainAgent(
80
+ name="interactive_langchain_mcp_example",
81
+ instruction=("You are a helpful assistant."),
82
+ # Using a basic model for the example - you can adjust this as needed
83
+ model="openai/gpt-4.1", # Changed to a string identifier for consistency
84
+ )
85
+ mcp_config = build_mcp_config_from_env()
86
+ langchain_agent.add_mcp_server(mcp_config)
87
+
88
+ # Conversation history as LangChain message objects
89
+ messages = [SystemMessage(content="You are a helpful assistant.")]
90
+
91
+ while True:
92
+ user_input = input("You: ").strip()
93
+ if user_input.lower() == "/help":
94
+ print_help()
95
+ continue
96
+ if user_input.lower() == "/exit":
97
+ print("Goodbye!")
98
+ break
99
+ elif user_input == "":
100
+ continue
101
+
102
+ # Add user message to history
103
+ messages.append(HumanMessage(content=user_input))
104
+
105
+ # Run the agent with history
106
+ try:
107
+ # Pass the conversation history to the agent
108
+ response = await langchain_agent.arun(query=user_input, messages=messages[:-1])
109
+
110
+ # Extract AI message (should be last in response state)
111
+ output = response.get("output")
112
+ ai_message = None
113
+
114
+ # Try to find the returned messages in the response (standard pattern)
115
+ if "messages" in response and response["messages"]:
116
+ # Use the last message as the AI reply
117
+ ai_message = response["messages"][-1]
118
+ elif output:
119
+ ai_message = AIMessage(content=output)
120
+ else:
121
+ ai_message = AIMessage(content=str(response))
122
+
123
+ messages.append(ai_message)
124
+ print(f"Agent: {ai_message.content}")
125
+ except Exception as e:
126
+ print(f"Error: {e}")
127
+
128
+
129
+ if __name__ == "__main__":
130
+ asyncio.run(main())
@@ -0,0 +1,16 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.utils.env_loader import load_local_env as load_local_env
3
+
4
+ def print_help() -> None:
5
+ """Prints available commands and their descriptions."""
6
+ def build_mcp_config_from_env() -> dict:
7
+ """Construct MCP configuration from environment variables.
8
+
9
+ Returns:
10
+ dict: MCP configuration dictionary.
11
+
12
+ Raises:
13
+ RuntimeError: If required environment variables are missing.
14
+ """
15
+ async def main() -> None:
16
+ """Runs the interactive LangChainAgent with MCP tools via Streamable HTTP transport."""
@@ -0,0 +1,42 @@
1
+ """Example showing LangChain agent with MCP tools integration.
2
+
3
+ Transport: Streamable HTTP
4
+ Streaming: Yes
5
+
6
+ This example demonstrates how to create a LangChain 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
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
12
+ """
13
+
14
+ import asyncio
15
+
16
+ from langchain_openai import ChatOpenAI
17
+
18
+ from aip_agents.agent import LangChainAgent
19
+ from aip_agents.examples.mcp_configs.configs import mcp_config_http
20
+
21
+
22
+ async def main():
23
+ """Demonstrates the LangChainAgent with MCP tools via Streamable HTTP transport and streaming capabilities."""
24
+ langchain_agent = LangChainAgent(
25
+ name="langchain_mcp_stream_example",
26
+ instruction="""You are a helpful assistant that can browse the web.""",
27
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
28
+ )
29
+ langchain_agent.add_mcp_server(mcp_config_http)
30
+
31
+ async for chunk in langchain_agent.arun_stream(query="What's the latest news about FC Barcelona?"):
32
+ if isinstance(chunk, str):
33
+ print(chunk, end="", flush=True)
34
+
35
+ # run again to make sure it use persistent session
36
+ async for chunk in langchain_agent.arun_stream(query="What's the latest news about UEFA Champions League?"):
37
+ if isinstance(chunk, str):
38
+ print(chunk, end="", flush=True)
39
+
40
+
41
+ if __name__ == "__main__":
42
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
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 LangChainAgent with MCP tools via Streamable HTTP transport and streaming capabilities."""
@@ -0,0 +1,155 @@
1
+ """Demo: LangChain agent with allowed_tools whitelist filtering.
2
+
3
+ Shows how allowed_tools restricts tool access across 3 MCP servers:
4
+ - STDIO: only get_current_time allowed (not generate_uuid or get_weather_forecast)
5
+ - SSE: only get_random_quote allowed (not word_count or get_weather_forecast)
6
+ - HTTP: only get_random_fact allowed (not convert_to_base64 or get_weather_forecast)
7
+
8
+ Authors:
9
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
10
+ """
11
+
12
+ import asyncio
13
+ import logging
14
+ from typing import Any
15
+
16
+ from langchain_openai import ChatOpenAI
17
+
18
+ from aip_agents.agent import LangChainAgent
19
+ from aip_agents.examples.mcp_configs.configs import mcp_tool_whitelisting_demo
20
+ from aip_agents.schema.a2a import A2AStreamEventType
21
+ from aip_agents.utils.logger import logger_manager
22
+
23
+
24
+ def _normalize_event_type(raw_value: Any) -> A2AStreamEventType | None:
25
+ """Convert raw event_type payloads (enum or string) into A2AStreamEventType.
26
+
27
+ Args:
28
+ raw_value: Event type payload emitted by the agent stream (enum or string).
29
+
30
+ Returns:
31
+ Parsed A2AStreamEventType value, or None when the payload is unrecognized.
32
+ """
33
+ if isinstance(raw_value, A2AStreamEventType):
34
+ return raw_value
35
+ if isinstance(raw_value, str):
36
+ try:
37
+ return A2AStreamEventType(raw_value.lower())
38
+ except ValueError:
39
+ return None
40
+ return None
41
+
42
+
43
+ def _log_tool_call(event: dict[str, Any], is_allowed: bool) -> bool:
44
+ """Log tool call events and return True if at least one call existed.
45
+
46
+ Args:
47
+ event: A2A event payload containing tool_call metadata.
48
+ is_allowed: Whether the current query is expected to hit an allowed tool.
49
+
50
+ Returns:
51
+ True when at least one tool call entry is present; False otherwise.
52
+ """
53
+ tool_info = event.get("tool_info") or {}
54
+ tool_calls = tool_info.get("tool_calls") or []
55
+ if not tool_calls:
56
+ print("⚠️ Tool call event received without tool_calls payload")
57
+ return False
58
+
59
+ first_call = tool_calls[0]
60
+ tool_name = first_call.get("name", "unknown")
61
+ icon = "⚠️" if not is_allowed else "✅"
62
+ print(f"{icon} Tool called: {tool_name}")
63
+ return True
64
+
65
+
66
+ async def process_query(agent, query: str, is_allowed: bool = True) -> bool:
67
+ """Process a single query and report if tools were called.
68
+
69
+ Args:
70
+ agent: The LangChain agent to run.
71
+ query: The query to process.
72
+ is_allowed: Whether this query should use allowed tools.
73
+
74
+ Returns:
75
+ True if at least one tool was called while processing the query, False otherwise.
76
+ """
77
+ print(f"\nQuery: {query}")
78
+ tool_called = False
79
+ final_response = None
80
+ try:
81
+ async for event in agent.arun_a2a_stream(query=query):
82
+ event_type = _normalize_event_type(event.get("event_type"))
83
+ if event_type is None:
84
+ print(f"⚠️ Unknown event type payload: {event.get('event_type')!r}")
85
+ continue
86
+
87
+ if event_type is A2AStreamEventType.TOOL_CALL:
88
+ tool_called = _log_tool_call(event, is_allowed) or tool_called
89
+ continue
90
+
91
+ if event_type is A2AStreamEventType.FINAL_RESPONSE:
92
+ final_response = event.get("content")
93
+ break
94
+ except Exception as e:
95
+ print(f"❌ Error processing query: {e}")
96
+ return False
97
+ if final_response:
98
+ print(f"🧠 LLM response: {final_response}")
99
+ if not tool_called:
100
+ print("✅ No tool called (blocked or LLM answered directly)")
101
+ return tool_called
102
+
103
+
104
+ async def main():
105
+ """Demo allowed_tools filtering with 3 MCP servers (STDIO, SSE, HTTP)."""
106
+ logger_manager.set_level(logging.WARNING)
107
+
108
+ agent = LangChainAgent(
109
+ name="allowed_tools_demo",
110
+ instruction=(
111
+ "You are a helpful assistant with access to tools from 3 MCP servers.\n"
112
+ "Use the available tools to answer questions.\n"
113
+ "Note: Each server has specific tools whitelisted via allowed_tools."
114
+ ),
115
+ model=ChatOpenAI(model="gpt-4.1-mini"),
116
+ )
117
+ agent.add_mcp_server(mcp_tool_whitelisting_demo)
118
+
119
+ all_allowed_queries_called_tools = True
120
+ any_disallowed_query_called_tools = False
121
+
122
+ print("\n=== ALLOWED TOOLS (should work) ===")
123
+ allowed_queries = [
124
+ "Get the current time for me",
125
+ "Tell me an inspirational quote",
126
+ "Share a fun fact with me",
127
+ ]
128
+ for query in allowed_queries:
129
+ called = await process_query(agent, query, is_allowed=True)
130
+ all_allowed_queries_called_tools = all_allowed_queries_called_tools and called
131
+
132
+ print("\n\n=== DISALLOWED TOOLS (should fail or skip) ===")
133
+ disallowed_queries = [
134
+ "Generate a UUID for me", # Not allowed from STDIO
135
+ "Get the weather forecast for Jakarta", # Not allowed from any server
136
+ "Count words in 'hello world'", # Not allowed from SSE
137
+ ]
138
+ for query in disallowed_queries:
139
+ called = await process_query(agent, query, is_allowed=False)
140
+ any_disallowed_query_called_tools = any_disallowed_query_called_tools or called
141
+
142
+ print("\n=== SUMMARY: allowed_tools vs disabled_tools behavior ===")
143
+ if all_allowed_queries_called_tools:
144
+ print("✅ allowed_tools: All allowed queries called tools as expected.")
145
+ else:
146
+ print("❌ allowed_tools: Some allowed queries did not call any tools.")
147
+
148
+ if any_disallowed_query_called_tools:
149
+ print("❌ disabled_tools: Some disallowed queries still called tools.")
150
+ else:
151
+ print("✅ disabled_tools: No tools were called for any disallowed queries.")
152
+
153
+
154
+ if __name__ == "__main__":
155
+ asyncio.run(main())
@@ -0,0 +1,18 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_tool_whitelisting_demo as mcp_tool_whitelisting_demo
3
+ from aip_agents.schema.a2a import A2AStreamEventType as A2AStreamEventType
4
+ from aip_agents.utils.logger import logger_manager as logger_manager
5
+
6
+ async def process_query(agent, query: str, is_allowed: bool = True) -> bool:
7
+ """Process a single query and report if tools were called.
8
+
9
+ Args:
10
+ agent: The LangChain agent to run.
11
+ query: The query to process.
12
+ is_allowed: Whether this query should use allowed tools.
13
+
14
+ Returns:
15
+ True if at least one tool was called while processing the query, False otherwise.
16
+ """
17
+ async def main() -> None:
18
+ """Demo allowed_tools filtering with 3 MCP servers (STDIO, SSE, HTTP)."""
@@ -0,0 +1,34 @@
1
+ """Example showing LangChain agent with MCP tools integration using SSE transport.
2
+
3
+ Authors:
4
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+
9
+ from langchain_openai import ChatOpenAI
10
+
11
+ from aip_agents.agent import LangChainAgent
12
+ from aip_agents.examples.mcp_configs.configs import mcp_config_sse
13
+
14
+
15
+ async def main():
16
+ """Demonstrates the LangChainAgent with MCP tools via SSE transport."""
17
+ langchain_agent = LangChainAgent(
18
+ name="langchain_mcp_example",
19
+ instruction=(
20
+ "You are a helpful assistant that can browse the web. If you are blocked by captcha, try another website."
21
+ ),
22
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
23
+ )
24
+ langchain_agent.add_mcp_server(mcp_config_sse)
25
+
26
+ response = await langchain_agent.arun(query="What's the rating of the movie 'The Matrix'? browse it")
27
+ print(response["output"])
28
+ print("-" * 50)
29
+ response = await langchain_agent.arun(query="When is the next solar eclipse?, browse it")
30
+ print(response["output"])
31
+
32
+
33
+ if __name__ == "__main__":
34
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
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 LangChainAgent with MCP tools via SSE transport."""
@@ -0,0 +1,40 @@
1
+ """Example showing LangChain agent with MCP tools integration and streaming capabilities using SSE transport.
2
+
3
+ Authors:
4
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+
9
+ from langchain_openai import ChatOpenAI
10
+
11
+ from aip_agents.agent import LangChainAgent
12
+ from aip_agents.examples.mcp_configs.configs import mcp_config_sse
13
+
14
+
15
+ async def main():
16
+ """Demonstrates the LangChainAgent with MCP tools via SSE transport and streaming capabilities."""
17
+ langchain_agent = LangChainAgent(
18
+ name="langchain_mcp_stream_example",
19
+ instruction="""You are a helpful assistant that can browse the web using playwright tools.""",
20
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
21
+ )
22
+ langchain_agent.add_mcp_server(mcp_config_sse)
23
+
24
+ full_response = ""
25
+ async for chunk in langchain_agent.arun_stream(
26
+ query="What are the result of Copa Del Rey Final in 2024/2025 season, browse it.",
27
+ ):
28
+ if isinstance(chunk, str):
29
+ print(chunk, end="", flush=True)
30
+ full_response += chunk
31
+ elif isinstance(chunk, dict) and "messages" in chunk:
32
+ print("\n(Stream finished with final state object)")
33
+ elif isinstance(chunk, dict):
34
+ pass
35
+
36
+ print(full_response)
37
+
38
+
39
+ if __name__ == "__main__":
40
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
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 LangChainAgent with MCP tools via SSE transport and streaming capabilities."""
@@ -0,0 +1,30 @@
1
+ """Example showing LangChain agent with MCP tools integration using stdio transport.
2
+
3
+ Authors:
4
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+
9
+ from langchain_openai import ChatOpenAI
10
+
11
+ from aip_agents.agent import LangChainAgent
12
+ from aip_agents.examples.mcp_configs.configs import mcp_config_stdio
13
+
14
+
15
+ async def main():
16
+ """Demonstrates the LangChainAgent with MCP tools via stdio transport."""
17
+ langchain_agent = LangChainAgent(
18
+ name="langchain_mcp_example",
19
+ instruction="""You are a helpful assistant that can provide weather forecasts.
20
+ For weather, specify the day in lowercase (e.g., 'monday').""",
21
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
22
+ )
23
+ langchain_agent.add_mcp_server(mcp_config_stdio)
24
+
25
+ response = await langchain_agent.arun(query="What's the weather forecast for monday?")
26
+ print(response["output"])
27
+
28
+
29
+ if __name__ == "__main__":
30
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_config_stdio as mcp_config_stdio
3
+
4
+ async def main() -> None:
5
+ """Demonstrates the LangChainAgent with MCP tools via stdio transport."""
@@ -0,0 +1,41 @@
1
+ """Example showing LangChain agent with MCP tools integration and streaming capabilities using stdio transport.
2
+
3
+ Authors:
4
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+
9
+ from langchain_openai import ChatOpenAI
10
+
11
+ from aip_agents.agent import LangChainAgent
12
+ from aip_agents.examples.mcp_configs.configs import mcp_config_stdio
13
+
14
+
15
+ async def main():
16
+ """Demonstrates the LangChainAgent with MCP tools via stdio transport and streaming capabilities."""
17
+ langchain_agent = LangChainAgent(
18
+ name="langchain_mcp_stream_example",
19
+ instruction="""You are a helpful assistant that can provide weather forecasts.
20
+ For weather, specify the day in lowercase (e.g., 'monday').""",
21
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
22
+ )
23
+ langchain_agent.add_mcp_server(mcp_config_stdio)
24
+
25
+ full_response = ""
26
+ async for chunk in langchain_agent.arun_stream(
27
+ query="What's the weather forecast for monday?",
28
+ ):
29
+ if isinstance(chunk, str):
30
+ print(chunk, end="", flush=True)
31
+ full_response += chunk
32
+ elif isinstance(chunk, dict) and "messages" in chunk:
33
+ print("\n(Stream finished with final state object)")
34
+ elif isinstance(chunk, dict):
35
+ pass
36
+
37
+ print(full_response)
38
+
39
+
40
+ if __name__ == "__main__":
41
+ asyncio.run(main())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.examples.mcp_configs.configs import mcp_config_stdio as mcp_config_stdio
3
+
4
+ async def main() -> None:
5
+ """Demonstrates the LangChainAgent with MCP tools via stdio transport and streaming capabilities."""
@@ -0,0 +1,36 @@
1
+ """Minimal LangChain agent example demonstrating streaming capabilities.
2
+
3
+ Authors:
4
+ Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
5
+
6
+ """
7
+
8
+ import asyncio
9
+
10
+ from langchain_openai import ChatOpenAI
11
+
12
+ from aip_agents.agent import LangChainAgent
13
+ from aip_agents.examples.tools.langchain_arithmetic_tools import add_numbers
14
+
15
+
16
+ async def langchain_stream_example():
17
+ """Demonstrates the LangChainAgent's arun_stream method with async execution."""
18
+ agent = LangChainAgent(
19
+ name="LangChainStreamingCalculator",
20
+ instruction="You are a helpful calculator assistant that can add numbers. "
21
+ "When asked to add numbers, use the add_numbers tool. "
22
+ "Explain your steps clearly for streaming demonstration.",
23
+ model=ChatOpenAI(model="gpt-4.1", temperature=0),
24
+ tools=[add_numbers],
25
+ )
26
+
27
+ # Stream the response chunks
28
+ async for chunk in agent.arun_stream(
29
+ query="What is the sum of 23 and 47? And then add 10 to that, then add 5 more."
30
+ ):
31
+ if isinstance(chunk, str):
32
+ print(chunk, end="", flush=True)
33
+
34
+
35
+ if __name__ == "__main__":
36
+ asyncio.run(langchain_stream_example())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.examples.tools.langchain_arithmetic_tools import add_numbers as add_numbers
3
+
4
+ async def langchain_stream_example() -> None:
5
+ """Demonstrates the LangChainAgent's arun_stream method with async execution."""
@@ -0,0 +1,39 @@
1
+ """Minimal LangChain agent example demonstrating streaming capabilities.
2
+
3
+ Authors:
4
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
5
+ """
6
+
7
+ import asyncio
8
+
9
+ import dotenv
10
+
11
+ from aip_agents.agent import LangChainAgent
12
+ from aip_agents.examples.tools.langchain_arithmetic_tools import add_numbers
13
+
14
+ dotenv.load_dotenv(override=True)
15
+
16
+
17
+ async def langchain_stream_example():
18
+ """Demonstrates the LangChainAgent's arun_stream method with async execution."""
19
+ agent = LangChainAgent(
20
+ name="LangChainStreamingCalculator",
21
+ instruction="You are a helpful calculator assistant that can add numbers. "
22
+ "When asked to add numbers, use the add_numbers tool. "
23
+ "Explain your steps clearly for streaming demonstration.",
24
+ model="openai/gpt-4o",
25
+ tools=[add_numbers],
26
+ )
27
+
28
+ # Stream the response chunks
29
+ async for chunk in agent.arun_stream(
30
+ query="What is the sum of 23 and 47? And then add 10 to that, then add 5 more."
31
+ ):
32
+ if isinstance(chunk, str):
33
+ print(chunk, end="", flush=True) # Print text chunks as they come in
34
+ elif isinstance(chunk, dict):
35
+ print(f"Dict chunk: {chunk}")
36
+
37
+
38
+ if __name__ == "__main__":
39
+ asyncio.run(langchain_stream_example())
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.examples.tools.langchain_arithmetic_tools import add_numbers as add_numbers
3
+
4
+ async def langchain_stream_example() -> None:
5
+ """Demonstrates the LangChainAgent's arun_stream method with async execution."""