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,473 @@
1
+ """AgentExecutor and GLLMMultiActionAgent for AIP Agents.
2
+
3
+ This module provides a custom implementation of LangChain's AgentExecutor
4
+ and a GLLMMultiActionAgent that bridges between the GLLM Agent implementation
5
+ and LangChain's BaseMultiActionAgent interface.
6
+
7
+ Authors:
8
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
9
+ Raymond Christopher (raymond.christopher@gdplabs.id)
10
+ """
11
+
12
+ from collections.abc import Sequence
13
+ from dataclasses import dataclass
14
+ from typing import Any
15
+
16
+ from gllm_core.constants import EventLevel, EventType
17
+ from gllm_core.event import EventEmitter
18
+ from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker
19
+ from gllm_inference.schema import (
20
+ LMOutput,
21
+ MessageRole,
22
+ ToolCall,
23
+ ToolResult,
24
+ )
25
+ from langchain.agents import (
26
+ AgentExecutor as LangchainAgentExecutor,
27
+ ) # Alias for clarity
28
+ from langchain.agents import BaseMultiActionAgent
29
+ from langchain.agents.tools import InvalidTool
30
+ from langchain_core.agents import AgentAction, AgentFinish, AgentStep
31
+ from langchain_core.callbacks import (
32
+ AsyncCallbackManagerForChainRun,
33
+ CallbackManagerForChainRun,
34
+ Callbacks,
35
+ )
36
+ from langchain_core.tools import BaseTool
37
+ from pydantic import ConfigDict
38
+
39
+ from aip_agents.utils.logger import get_logger
40
+
41
+ logger = get_logger(__name__)
42
+
43
+
44
+ @dataclass
45
+ class ExecutorConfig:
46
+ """Configuration for AgentExecutor."""
47
+
48
+ instruction: str
49
+ invoker: BaseLMInvoker
50
+ tools: Sequence[BaseTool]
51
+ max_iterations: int | None = 15
52
+ max_execution_time: float | None = None
53
+ verbose: bool = False
54
+ event_emitter: EventEmitter | None = None
55
+ handle_parsing_errors: bool = True
56
+ prompt_memory: list | None = None
57
+
58
+
59
+ class GLLMMultiActionAgent(BaseMultiActionAgent):
60
+ """Bridges a GLLM Agent with LangChain's BaseMultiActionAgent interface.
61
+
62
+ This class allows a GLLM Agent (which uses an LMInvoker internally) to be
63
+ used within LangChain's execution framework (e.g., with an AgentExecutor).
64
+ It handles the conversion of prompts and responses between the GLLM Agent's
65
+ LMInvoker system and the format expected by LangChain.
66
+
67
+ Primarily designed for asynchronous operation via the `aplan` method.
68
+
69
+ Attributes:
70
+ instruction (str): The system instruction for the language model.
71
+ invoker (BaseLMInvoker): The LMInvoker instance associated with the GLLM Agent,
72
+ used for making calls to the language model.
73
+ tools (list[BaseTool]): A list of tools available to the GLLM Agent.
74
+ event_emitter (Optional[EventEmitter]): An optional event emitter for streaming
75
+ intermediate steps and other events. Defaults to None.
76
+ input_keys_arg (list[str]): The list of input keys that the agent expects.
77
+ Defaults to ["input"].
78
+ return_keys_arg (list[str]): The list of keys for the agent's return values.
79
+ Defaults to ["output"].
80
+ prompt_memory (list[tuple[MessageRole, list[Any]]]): Pre-formatted prompt memory.
81
+ """
82
+
83
+ instruction: str
84
+ invoker: BaseLMInvoker
85
+ tools: list[BaseTool]
86
+ event_emitter: EventEmitter | None = None
87
+ input_keys_arg: list[str] = ["input"]
88
+ return_keys_arg: list[str] = ["output"]
89
+ prompt_memory: list | None = None
90
+
91
+ model_config = ConfigDict(arbitrary_types_allowed=True)
92
+
93
+ def __init__(
94
+ self,
95
+ instruction: str,
96
+ invoker: BaseLMInvoker,
97
+ tools: list[BaseTool],
98
+ event_emitter: EventEmitter | None = None,
99
+ prompt_memory: list | None = None,
100
+ ):
101
+ """Initializes the GLLMMultiActionAgent.
102
+
103
+ Args:
104
+ instruction (str): The system instruction for the language model.
105
+ invoker (BaseLMInvoker): The LMInvoker from the GLLM Agent.
106
+ tools (list[BaseTool]): Tools available to the GLLM Agent.
107
+ event_emitter (Optional[EventEmitter], optional): Event emitter for streaming.
108
+ Defaults to None.
109
+ prompt_memory (Optional[list], optional):
110
+ Pre-formatted prompt memory. Defaults to None.
111
+ """
112
+ super().__init__(
113
+ instruction=instruction,
114
+ invoker=invoker,
115
+ tools=tools,
116
+ event_emitter=event_emitter,
117
+ prompt_memory=prompt_memory,
118
+ )
119
+
120
+ @property
121
+ def input_keys(self) -> list[str]:
122
+ """Input keys for the agent."""
123
+ return self.input_keys_arg
124
+
125
+ @property
126
+ def return_values(self) -> list[str]:
127
+ """Return values of the agent."""
128
+ return self.return_keys_arg
129
+
130
+ def plan(
131
+ self,
132
+ intermediate_steps: list[tuple[AgentAction, str]],
133
+ _callbacks: Callbacks = None,
134
+ **kwargs: Any,
135
+ ) -> list[AgentAction] | AgentFinish:
136
+ """Synchronous planning. (Not Implemented).
137
+
138
+ This method is intentionally not implemented to encourage asynchronous
139
+ operations. Please use the `aplan` method.
140
+
141
+ Args:
142
+ intermediate_steps: Steps the LLM has taken to date, along with observations.
143
+ _callbacks: Callbacks to run.
144
+ **kwargs: User inputs.
145
+
146
+ Raises:
147
+ NotImplementedError: This method is not implemented.
148
+ """
149
+ logger.warning(
150
+ "GLLMMultiActionAgent synchronous 'plan' method was called but is not implemented. Use 'aplan' instead."
151
+ )
152
+ raise NotImplementedError("Synchronous planning is not implemented. Please use the 'aplan' method.")
153
+
154
+ async def aplan(
155
+ self,
156
+ intermediate_steps: list[tuple[AgentAction, str]],
157
+ _callbacks: Callbacks = None,
158
+ **kwargs: Any,
159
+ ) -> list[AgentAction] | AgentFinish:
160
+ """Asynchronously decides the next action(s) or finishes execution.
161
+
162
+ Args:
163
+ intermediate_steps (list[tuple[AgentAction, str]]): A list of previous
164
+ agent actions and their corresponding string observations.
165
+ _callbacks (Callbacks, optional): LangChain callbacks. Not directly used by
166
+ this method but maintained for interface compatibility. Defaults to None.
167
+ **kwargs (Any): Additional keyword arguments representing the initial inputs
168
+ to the agent (e.g., `input="user's query"`).
169
+
170
+ Returns:
171
+ list[AgentAction] | AgentFinish: A list of `AgentAction` objects if the
172
+ agent decides to take one or more actions, or an `AgentFinish` object
173
+ if the agent has completed its work.
174
+ """
175
+ prompt_messages: list = self._create_prompt(intermediate_steps, **kwargs)
176
+
177
+ logger.debug(f"Prompt messages for GLLMMultiActionAgent aplan: {prompt_messages}")
178
+ response = await self.invoker.invoke(prompt=prompt_messages, event_emitter=self.event_emitter)
179
+
180
+ parsed_response = await self._parse_response(response)
181
+ return parsed_response
182
+
183
+ def get_allowed_tools(self) -> list[str] | None:
184
+ """Returns a list of tool names that this agent is allowed to use."""
185
+ return [tool.name for tool in self.tools]
186
+
187
+ def return_stopped_response(
188
+ self,
189
+ early_stopping_method: str,
190
+ _intermediate_steps: list[tuple[AgentAction, str]],
191
+ **kwargs: Any,
192
+ ) -> AgentFinish:
193
+ """Returns an AgentFinish object when the agent is stopped early.
194
+
195
+ Args:
196
+ early_stopping_method (str): The method used for early stopping.
197
+ Currently, only "force" is supported.
198
+ _intermediate_steps (list[tuple[AgentAction, str]]): The history of
199
+ actions and observations.
200
+ **kwargs (Any): Additional inputs.
201
+
202
+ Returns:
203
+ AgentFinish: An AgentFinish object indicating the agent stopped.
204
+
205
+ Raises:
206
+ ValueError: If `early_stopping_method` is not "force".
207
+ """
208
+ if early_stopping_method == "force":
209
+ return AgentFinish(
210
+ return_values={"output": "Agent stopped due to iteration limit or time limit."},
211
+ log="Agent stopped due to iteration limit or time limit.\n",
212
+ )
213
+ raise ValueError(f"Got unsupported early_stopping_method `{early_stopping_method}`")
214
+
215
+ def tool_run_logging_kwargs(self) -> dict[str, Any]:
216
+ """Returns keyword arguments for logging tool runs. Currently empty."""
217
+ return {}
218
+
219
+ def _create_prompt(self, intermediate_steps: list[tuple[AgentAction, str]], **kwargs: Any) -> list:
220
+ """Create a multimodal prompt from intermediate steps and inputs.
221
+
222
+ Args:
223
+ intermediate_steps: Steps the LLM has taken to date, along with observations.
224
+ **kwargs: User inputs.
225
+
226
+ Returns:
227
+ A list (list of prompt message tuples).
228
+ """
229
+ prompt_msgs: list = []
230
+
231
+ # 1. System instruction
232
+ prompt_msgs.append((MessageRole.SYSTEM, [self.instruction]))
233
+
234
+ # 2. Prepend chat history
235
+ if self.prompt_memory:
236
+ prompt_msgs.extend(self.prompt_memory)
237
+
238
+ # 3. Current user input
239
+ if "input" in kwargs:
240
+ prompt_msgs.append((MessageRole.USER, [kwargs["input"]]))
241
+
242
+ # 4. Intermediate steps (tool calls and observations for the current turn)
243
+ for i, (action, observation) in enumerate(intermediate_steps):
244
+ tool_call_id = f"call_{action.tool}_{i}"
245
+ if isinstance(action.tool_input, dict):
246
+ args = action.tool_input
247
+ else:
248
+ args = {"query": action.tool_input}
249
+ tool_call = ToolCall(id=tool_call_id, name=action.tool, args=args)
250
+ prompt_msgs.append((MessageRole.ASSISTANT, [tool_call]))
251
+ tool_result = ToolResult(id=tool_call_id, output=observation)
252
+ prompt_msgs.append((MessageRole.USER, [tool_result]))
253
+
254
+ return prompt_msgs
255
+
256
+ async def _handle_tool_calls(self, tool_calls: list[ToolCall]) -> list[AgentAction] | None:
257
+ """Handles tool calls by converting them to AgentActions.
258
+
259
+ Args:
260
+ tool_calls: list of tool calls to process.
261
+
262
+ Returns:
263
+ Optional[list[AgentAction]]: List of agent actions if any tool calls exist.
264
+ """
265
+ if not tool_calls:
266
+ return None
267
+
268
+ actions = []
269
+ for tool_call in tool_calls:
270
+ tool_input = tool_call.args if tool_call.args else {}
271
+ action_log = f"Invoking: `{tool_call.name}` with `{tool_input}`\n"
272
+ actions.append(
273
+ AgentAction(
274
+ tool=tool_call.name,
275
+ tool_input=tool_input,
276
+ log=f"\n{action_log}\n",
277
+ )
278
+ )
279
+ if self.event_emitter:
280
+ await self.event_emitter.emit(
281
+ event_type=EventType.DATA,
282
+ event_level=EventLevel.INFO,
283
+ value=action_log,
284
+ )
285
+ return actions
286
+
287
+ async def _parse_response(self, response: LMOutput) -> list[AgentAction] | AgentFinish:
288
+ """Parses the LMInvoker's response into LangChain actions or finish signal.
289
+
290
+ If the response contains tool calls, they are converted to `AgentAction` objects.
291
+ Otherwise, the response is treated as a final answer and converted to an
292
+ `AgentFinish` object.
293
+
294
+ Args:
295
+ response (LMOutput): The output from the LMInvoker.
296
+
297
+ Returns:
298
+ list[AgentAction] | AgentFinish: LangChain actions or finish signal.
299
+ """
300
+ logger.debug(f"Response from LM Invoker in GLLMMultiActionAgent: {response}")
301
+
302
+ if not isinstance(response, LMOutput):
303
+ return AgentFinish(return_values={"output": response}, log=response)
304
+
305
+ actions = await self._handle_tool_calls(response.tool_calls)
306
+ if actions:
307
+ return actions
308
+
309
+ return AgentFinish(
310
+ return_values={"output": str(response.response)},
311
+ log=str(response.response),
312
+ )
313
+
314
+
315
+ class AgentExecutor(LangchainAgentExecutor):
316
+ """Custom GLLM AgentExecutor extending LangChain's AgentExecutor.
317
+
318
+ This executor orchestrates the execution loop for a GLLM Agent. It receives
319
+ the GLLM Agent instance and necessary components (invoker, tools) and internally
320
+ creates the `GLLMMultiActionAgent` adapter needed for the LangChain execution flow.
321
+
322
+ It prioritizes asynchronous operations (`_aperform_agent_action`) and integrates
323
+ with the GLLM event emitter system.
324
+ """
325
+
326
+ def __init__(
327
+ self,
328
+ config: ExecutorConfig,
329
+ **kwargs: Any,
330
+ ):
331
+ """Initializes the custom AgentExecutor.
332
+
333
+ Args:
334
+ config: Configuration object containing all executor parameters.
335
+ **kwargs: Additional keyword arguments passed to the parent
336
+ `LangchainAgentExecutor` constructor.
337
+ """
338
+ action_agent = GLLMMultiActionAgent(
339
+ instruction=config.instruction,
340
+ invoker=config.invoker,
341
+ tools=list(config.tools),
342
+ event_emitter=config.event_emitter,
343
+ prompt_memory=config.prompt_memory,
344
+ )
345
+
346
+ super().__init__(
347
+ agent=action_agent,
348
+ tools=config.tools,
349
+ max_iterations=config.max_iterations,
350
+ max_execution_time=config.max_execution_time,
351
+ verbose=config.verbose,
352
+ handle_parsing_errors=config.handle_parsing_errors,
353
+ **kwargs,
354
+ )
355
+ self._event_emitter = config.event_emitter
356
+
357
+ @property
358
+ def event_emitter(self) -> EventEmitter | None:
359
+ """Get the event emitter."""
360
+ return self._event_emitter
361
+
362
+ async def _aperform_agent_action(
363
+ self,
364
+ name_to_tool_map: dict[str, BaseTool],
365
+ color_mapping: dict[str, str],
366
+ agent_action: AgentAction,
367
+ run_manager: AsyncCallbackManagerForChainRun | None = None,
368
+ ) -> AgentStep:
369
+ """Asynchronously performs a single agent action (tool execution).
370
+
371
+ This method executes the specified tool with the given input and logs
372
+ the action and observation. If an `event_emitter` is configured, it emits
373
+ events for tool responses and invalid tool requests.
374
+
375
+ Args:
376
+ name_to_tool_map (dict[str, BaseTool]): Mapping of tool names to tool instances.
377
+ color_mapping (dict[str, str]): Mapping of tool names to colors for logging.
378
+ agent_action (AgentAction): The agent action to perform, specifying the tool
379
+ and tool input.
380
+ run_manager (Optional[AsyncCallbackManagerForChainRun], optional): LangChain
381
+ callback manager for the current run. Defaults to None.
382
+
383
+ Returns:
384
+ AgentStep: An `AgentStep` object containing the performed action and the
385
+ resulting observation from the tool.
386
+ """
387
+ if run_manager:
388
+ await run_manager.on_agent_action(agent_action, verbose=self.verbose, color="green")
389
+
390
+ observation = ""
391
+ tool_to_run: BaseTool | None = name_to_tool_map.get(agent_action.tool)
392
+
393
+ if tool_to_run:
394
+ tool_run_kwargs = self._action_agent.tool_run_logging_kwargs()
395
+ if tool_to_run.return_direct:
396
+ tool_run_kwargs["llm_prefix"] = ""
397
+
398
+ tool_input = await self._preprocess_tool_input(agent_action.tool_input)
399
+ observation = await tool_to_run.arun(
400
+ tool_input,
401
+ verbose=self.verbose,
402
+ color=color_mapping.get(agent_action.tool),
403
+ callbacks=run_manager.get_child() if run_manager else None,
404
+ **tool_run_kwargs,
405
+ )
406
+ observation = await self._postprocess_tool_output(observation)
407
+ logger.info(f"Tool {agent_action.tool} responded: {observation}")
408
+ else:
409
+ tool_run_kwargs = self._action_agent.tool_run_logging_kwargs()
410
+ observation = await InvalidTool().arun(
411
+ tool_input={
412
+ "requested_tool_name": agent_action.tool,
413
+ "available_tool_names": list(name_to_tool_map.keys()),
414
+ },
415
+ verbose=self.verbose,
416
+ color=None,
417
+ callbacks=run_manager.get_child() if run_manager else None,
418
+ **tool_run_kwargs,
419
+ )
420
+ logger.warning(f"Invalid tool requested: {agent_action.tool}. Observation: {observation}")
421
+ return AgentStep(action=agent_action, observation=observation)
422
+
423
+ async def _preprocess_tool_input(self, tool_input: Any) -> Any:
424
+ """Preprocess the tool input.
425
+
426
+ Args:
427
+ tool_input (Any): The tool input to preprocess.
428
+
429
+ Returns:
430
+ Any: The preprocessed tool input.
431
+ """
432
+ return tool_input
433
+
434
+ async def _postprocess_tool_output(self, tool_output: Any) -> Any:
435
+ """Postprocess the tool output.
436
+
437
+ Args:
438
+ tool_output (Any): The tool output to postprocess.
439
+
440
+ Returns:
441
+ Any: The postprocessed tool output.
442
+ """
443
+ return tool_output
444
+
445
+ def _perform_agent_action(
446
+ self,
447
+ name_to_tool_map: dict[str, BaseTool],
448
+ color_mapping: dict[str, str],
449
+ agent_action: AgentAction,
450
+ run_manager: CallbackManagerForChainRun | None = None,
451
+ ) -> AgentStep:
452
+ """Synchronous agent action. (Not Implemented).
453
+
454
+ This method is intentionally not implemented to encourage asynchronous
455
+ operations. Please use the `_aperform_agent_action` method.
456
+
457
+ Args:
458
+ name_to_tool_map (dict[str, BaseTool]): Mapping of tool names to tools.
459
+ color_mapping (dict[str, str]): Mapping of tool names to colors.
460
+ agent_action (AgentAction): The action to execute.
461
+ run_manager (Optional[CallbackManagerForChainRun], optional): Callback manager.
462
+ Defaults to None.
463
+
464
+ Raises:
465
+ NotImplementedError: This method is not implemented.
466
+ """
467
+ logger.warning(
468
+ "AgentExecutor synchronous '_perform_agent_action' was called but is not implemented. "
469
+ "Use '_aperform_agent_action' instead."
470
+ )
471
+ raise NotImplementedError(
472
+ "Synchronous agent action execution is not implemented. Please use the '_aperform_agent_action' method."
473
+ )
@@ -0,0 +1,48 @@
1
+ """Defines the base class for agent executors.
2
+
3
+ Author:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from abc import ABC, abstractmethod
8
+ from typing import Any
9
+
10
+
11
+ class BaseExecutor(ABC):
12
+ """Base class for agent executors.
13
+
14
+ This concrete base class provides a default structure for executing agents.
15
+
16
+ Attributes:
17
+ None. This is an abstract base class that defines an interface.
18
+ """
19
+
20
+ @abstractmethod
21
+ def invoke(self, _inputs: dict[str, Any], **kwargs: Any) -> dict[str, Any]:
22
+ """Invoke the agent executor.
23
+
24
+ Subclasses must implement this method with their specific implementation.
25
+
26
+ Args:
27
+ _inputs: A dictionary of inputs for the executor.
28
+ **kwargs: Additional keyword arguments for customizing execution behavior.
29
+
30
+ Returns:
31
+ A dictionary containing the execution result.
32
+ """
33
+ raise NotImplementedError("Subclasses must implement invoke()")
34
+
35
+ @abstractmethod
36
+ async def ainvoke(self, _inputs: dict[str, Any], **kwargs: Any) -> dict[str, Any]:
37
+ """Asynchronously invoke the agent executor.
38
+
39
+ Subclasses must implement this method with their specific implementation.
40
+
41
+ Args:
42
+ _inputs: A dictionary of inputs for the executor.
43
+ **kwargs: Additional keyword arguments for customizing execution behavior.
44
+
45
+ Returns:
46
+ A dictionary containing the execution result.
47
+ """
48
+ raise NotImplementedError("Subclasses must implement ainvoke()")
@@ -0,0 +1,83 @@
1
+ # flake8: noqa: F401
2
+ """Guardrails package for content filtering and safety checks.
3
+
4
+ This package provides modular guardrail engines and managers for filtering
5
+ harmful content in AI agent interactions. All components support lazy loading
6
+ to work with optional dependencies.
7
+
8
+ Example:
9
+ Basic usage with a phrase matcher engine:
10
+
11
+ .. code-block:: python
12
+
13
+ from aip_agents.guardrails import GuardrailManager, GuardrailMiddleware
14
+ from aip_agents.guardrails.engines import PhraseMatcherEngine
15
+ from aip_agents.guardrails.schemas import GuardrailMode
16
+
17
+ # Create a guardrail engine
18
+ engine = PhraseMatcherEngine(
19
+ banned_phrases=["spam", "inappropriate"]
20
+ )
21
+
22
+ # Create a manager
23
+ manager = GuardrailManager(engines=[engine])
24
+
25
+ # Create middleware for agent integration
26
+ middleware = GuardrailMiddleware(guardrail_manager=manager)
27
+
28
+ # Use with agent (components are lazy-loaded)
29
+ from aip_agents.agent import LangGraphReactAgent
30
+ agent = LangGraphReactAgent(
31
+ name="my_agent",
32
+ guardrail=manager,
33
+ # ... other agent config
34
+ )
35
+
36
+ Authors:
37
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
38
+ """
39
+
40
+ from typing import TYPE_CHECKING, Any
41
+
42
+ if TYPE_CHECKING:
43
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
44
+ from aip_agents.guardrails.manager import GuardrailManager
45
+ from aip_agents.guardrails.middleware import GuardrailMiddleware
46
+ from aip_agents.guardrails.schemas import (
47
+ BaseGuardrailEngineConfig,
48
+ GuardrailInput,
49
+ GuardrailMode,
50
+ GuardrailResult,
51
+ )
52
+
53
+
54
+ _IMPORT_MAP = {
55
+ "GuardrailViolationError": "aip_agents.guardrails.exceptions",
56
+ "GuardrailManager": "aip_agents.guardrails.manager",
57
+ "GuardrailMiddleware": "aip_agents.guardrails.middleware",
58
+ "BaseGuardrailEngineConfig": "aip_agents.guardrails.schemas",
59
+ "GuardrailMode": "aip_agents.guardrails.schemas",
60
+ "GuardrailInput": "aip_agents.guardrails.schemas",
61
+ "GuardrailResult": "aip_agents.guardrails.schemas",
62
+ }
63
+
64
+ _cache: dict[str, Any] = {}
65
+
66
+
67
+ def __getattr__(name: str) -> Any:
68
+ """Lazy import components on first access."""
69
+ if name in _cache:
70
+ return _cache[name]
71
+
72
+ if name in _IMPORT_MAP:
73
+ try:
74
+ module = __import__(_IMPORT_MAP[name], fromlist=[name])
75
+ _cache[name] = getattr(module, name)
76
+ return _cache[name]
77
+ except ImportError as e:
78
+ raise ImportError(f"Failed to import {name}. Optional dependencies may be missing: {e}") from e
79
+
80
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
81
+
82
+
83
+ __all__ = list(_IMPORT_MAP.keys())
@@ -0,0 +1,6 @@
1
+ from aip_agents.guardrails.exceptions import GuardrailViolationError as GuardrailViolationError
2
+ from aip_agents.guardrails.manager import GuardrailManager as GuardrailManager
3
+ from aip_agents.guardrails.middleware import GuardrailMiddleware as GuardrailMiddleware
4
+ from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailInput as GuardrailInput, GuardrailMode as GuardrailMode, GuardrailResult as GuardrailResult
5
+
6
+ __all__ = ['GuardrailViolationError', 'GuardrailManager', 'GuardrailMiddleware', 'BaseGuardrailEngineConfig', 'GuardrailMode', 'GuardrailInput', 'GuardrailResult']
@@ -0,0 +1,69 @@
1
+ # flake8: noqa: F401
2
+ """Guardrail engines package with lazy loading support.
3
+
4
+ This package provides guardrail engines that wrap GL SDK implementations.
5
+ Engines are loaded lazily to support optional dependencies.
6
+
7
+ Example:
8
+ Import and use guardrail engines:
9
+
10
+ .. code-block:: python
11
+
12
+ # Lazy import - works even if gllm-guardrail is not installed
13
+ from aip_agents.guardrails.engines import PhraseMatcherEngine, NemoGuardrailEngine
14
+
15
+ # Create a phrase matcher engine
16
+ phrase_engine = PhraseMatcherEngine(
17
+ banned_phrases=["spam", "inappropriate"]
18
+ )
19
+
20
+ # Create a NeMo guardrail engine (requires gllm-guardrail)
21
+ nemo_engine = NemoGuardrailEngine(
22
+ # NeMo-specific configuration
23
+ )
24
+
25
+ # Use with GuardrailManager
26
+ from aip_agents.guardrails import GuardrailManager
27
+ manager = GuardrailManager(engines=[phrase_engine, nemo_engine])
28
+
29
+ Note:
30
+ All engines support lazy loading. If `gllm-guardrail` is not installed,
31
+ importing these engines will raise an ImportError only when actually
32
+ instantiated, not at import time.
33
+
34
+ Authors:
35
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
36
+ """
37
+
38
+ from typing import TYPE_CHECKING, Any
39
+
40
+ if TYPE_CHECKING:
41
+ from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine
42
+ from aip_agents.guardrails.engines.phrase_matcher import PhraseMatcherEngine
43
+
44
+
45
+ _IMPORT_MAP = {
46
+ "NemoGuardrailEngine": "aip_agents.guardrails.engines.nemo",
47
+ "PhraseMatcherEngine": "aip_agents.guardrails.engines.phrase_matcher",
48
+ }
49
+
50
+ _cache: dict[str, Any] = {}
51
+
52
+
53
+ def __getattr__(name: str) -> Any:
54
+ """Lazy import engines on first access."""
55
+ if name in _cache:
56
+ return _cache[name]
57
+
58
+ if name in _IMPORT_MAP:
59
+ try:
60
+ module = __import__(_IMPORT_MAP[name], fromlist=[name])
61
+ _cache[name] = getattr(module, name)
62
+ return _cache[name]
63
+ except ImportError as e:
64
+ raise ImportError(f"Failed to import {name}. Optional dependencies may be missing: {e}") from e
65
+
66
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
67
+
68
+
69
+ __all__ = list(_IMPORT_MAP.keys())
@@ -0,0 +1,4 @@
1
+ from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine as NemoGuardrailEngine
2
+ from aip_agents.guardrails.engines.phrase_matcher import PhraseMatcherEngine as PhraseMatcherEngine
3
+
4
+ __all__ = ['NemoGuardrailEngine', 'PhraseMatcherEngine']