aip-agents-binary 0.0.0__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.
Files changed (447) hide show
  1. aip_agents/__init__.py +66 -0
  2. aip_agents/a2a/__init__.py +19 -0
  3. aip_agents/a2a/server/__init__.py +10 -0
  4. aip_agents/a2a/server/base_executor.py +1125 -0
  5. aip_agents/a2a/server/google_adk_executor.py +198 -0
  6. aip_agents/a2a/server/langflow_executor.py +180 -0
  7. aip_agents/a2a/server/langgraph_executor.py +270 -0
  8. aip_agents/a2a/types.py +232 -0
  9. aip_agents/a2ui/__init__.py +26 -0
  10. aip_agents/a2ui/catalog_provider.py +109 -0
  11. aip_agents/a2ui/examples/0.8/booking_form.json +1 -0
  12. aip_agents/a2ui/examples/0.8/confirmation.json +1 -0
  13. aip_agents/a2ui/examples/0.8/single_column_list.json +1 -0
  14. aip_agents/a2ui/examples/0.9/booking_form.json +1 -0
  15. aip_agents/a2ui/examples/0.9/confirmation.json +1 -0
  16. aip_agents/a2ui/examples/0.9/single_column_list.json +1 -0
  17. aip_agents/a2ui/middleware.py +754 -0
  18. aip_agents/a2ui/models.py +153 -0
  19. aip_agents/a2ui/public_url.py +138 -0
  20. aip_agents/a2ui/stream_filter.py +67 -0
  21. aip_agents/agent/__init__.py +72 -0
  22. aip_agents/agent/base_agent.py +1437 -0
  23. aip_agents/agent/base_langgraph_agent.py +4048 -0
  24. aip_agents/agent/google_adk_agent.py +932 -0
  25. aip_agents/agent/google_adk_constants.py +11 -0
  26. aip_agents/agent/graph_runtime.py +185 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/config.py +28 -0
  29. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  30. aip_agents/agent/hitl/manager.py +532 -0
  31. aip_agents/agent/hitl/models.py +18 -0
  32. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  33. aip_agents/agent/hitl/prompt/base.py +42 -0
  34. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  35. aip_agents/agent/hitl/registry.py +149 -0
  36. aip_agents/agent/interface.py +138 -0
  37. aip_agents/agent/interfaces.py +65 -0
  38. aip_agents/agent/langflow_agent.py +464 -0
  39. aip_agents/agent/langgraph_react_agent.py +3741 -0
  40. aip_agents/agent/model_invocation_adapter.py +346 -0
  41. aip_agents/agent/system_instruction_context.py +34 -0
  42. aip_agents/agent/tool_execution_engine.py +587 -0
  43. aip_agents/audio_interface/__init__.py +30 -0
  44. aip_agents/audio_interface/audio_agent_adapter.py +254 -0
  45. aip_agents/audio_interface/config.py +146 -0
  46. aip_agents/audio_interface/errors.py +15 -0
  47. aip_agents/audio_interface/livekit_audio_session.py +504 -0
  48. aip_agents/audio_interface/livekit_realtime_audio_session.py +142 -0
  49. aip_agents/audio_interface/session_factory.py +40 -0
  50. aip_agents/clients/__init__.py +10 -0
  51. aip_agents/clients/langflow/__init__.py +10 -0
  52. aip_agents/clients/langflow/client.py +477 -0
  53. aip_agents/clients/langflow/types.py +18 -0
  54. aip_agents/common/__init__.py +5 -0
  55. aip_agents/common/callable_introspection.py +17 -0
  56. aip_agents/constants.py +23 -0
  57. aip_agents/context/__init__.py +5 -0
  58. aip_agents/context/budget.py +237 -0
  59. aip_agents/context/compaction.py +339 -0
  60. aip_agents/context/metadata.py +169 -0
  61. aip_agents/context/offload.py +449 -0
  62. aip_agents/context/preparation.py +196 -0
  63. aip_agents/context/prompt.py +61 -0
  64. aip_agents/context/runtime.py +149 -0
  65. aip_agents/context/session_recall.py +69 -0
  66. aip_agents/context/state.py +48 -0
  67. aip_agents/context/utils.py +44 -0
  68. aip_agents/credentials/manager.py +132 -0
  69. aip_agents/examples/__init__.py +5 -0
  70. aip_agents/examples/audio_livekit_session.py +116 -0
  71. aip_agents/examples/compare_streaming_client.py +783 -0
  72. aip_agents/examples/compare_streaming_server.py +141 -0
  73. aip_agents/examples/gl_connectors_smoke.py +148 -0
  74. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  75. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_server.py +78 -0
  78. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  79. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  80. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  81. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  82. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  83. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +104 -0
  84. aip_agents/examples/hello_world_a2a_langchain_server.py +78 -0
  85. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +77 -0
  86. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  87. aip_agents/examples/hello_world_a2a_langflow_server.py +80 -0
  88. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  89. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  90. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +91 -0
  91. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  92. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  93. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  94. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  95. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  96. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  97. aip_agents/examples/hello_world_a2a_langgraph_server.py +83 -0
  98. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +131 -0
  100. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  101. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  102. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +250 -0
  103. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  104. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +79 -0
  105. aip_agents/examples/hello_world_filesystem.py +162 -0
  106. aip_agents/examples/hello_world_google_adk.py +41 -0
  107. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  108. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  109. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  110. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  111. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  112. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  113. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  114. aip_agents/examples/hello_world_langchain.py +28 -0
  115. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  116. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  117. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  118. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  119. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  120. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  121. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  122. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  123. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  124. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  125. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  126. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  127. aip_agents/examples/hello_world_langgraph.py +39 -0
  128. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  129. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  130. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  131. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  132. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  133. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  134. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  135. aip_agents/examples/hello_world_langgraph_skills.py +62 -0
  136. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  137. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  138. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  139. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  140. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  141. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  142. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  143. aip_agents/examples/hello_world_multi_agent_tool_output_client.py +57 -0
  144. aip_agents/examples/hello_world_multi_agent_tool_output_server.py +131 -0
  145. aip_agents/examples/hello_world_pii_logger.py +21 -0
  146. aip_agents/examples/hello_world_ptc.py +49 -0
  147. aip_agents/examples/hello_world_ptc_custom_tools.py +83 -0
  148. aip_agents/examples/hello_world_sentry.py +133 -0
  149. aip_agents/examples/hello_world_step_limits.py +273 -0
  150. aip_agents/examples/hello_world_stock_a2a_server.py +100 -0
  151. aip_agents/examples/hello_world_tool_output_client.py +55 -0
  152. aip_agents/examples/hello_world_tool_output_server.py +113 -0
  153. aip_agents/examples/hitl_demo.py +724 -0
  154. aip_agents/examples/mcp_configs/configs.py +63 -0
  155. aip_agents/examples/mcp_servers/common.py +76 -0
  156. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  157. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  158. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  159. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  160. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  161. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  162. aip_agents/examples/pii_demo_langgraph_server.py +125 -0
  163. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  164. aip_agents/examples/pii_demo_multi_agent_server.py +246 -0
  165. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  166. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +87 -0
  167. aip_agents/examples/tools/__init__.py +27 -0
  168. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  169. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  170. aip_agents/examples/tools/data_generator_tool.py +103 -0
  171. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  172. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  173. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  174. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  175. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  176. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  177. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  178. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  179. aip_agents/examples/tools/multiply_tool.py +43 -0
  180. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  181. aip_agents/examples/tools/random_chart_tool.py +142 -0
  182. aip_agents/examples/tools/serper_tool.py +202 -0
  183. aip_agents/examples/tools/stock_tools.py +82 -0
  184. aip_agents/examples/tools/table_generator_tool.py +167 -0
  185. aip_agents/examples/tools/time_tool.py +82 -0
  186. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  187. aip_agents/guardrails/__init__.py +83 -0
  188. aip_agents/guardrails/engines/__init__.py +69 -0
  189. aip_agents/guardrails/engines/base.py +90 -0
  190. aip_agents/guardrails/engines/nemo.py +101 -0
  191. aip_agents/guardrails/engines/phrase_matcher.py +113 -0
  192. aip_agents/guardrails/exceptions.py +39 -0
  193. aip_agents/guardrails/manager.py +163 -0
  194. aip_agents/guardrails/middleware.py +199 -0
  195. aip_agents/guardrails/schemas.py +63 -0
  196. aip_agents/guardrails/utils.py +45 -0
  197. aip_agents/integration/__init__.py +43 -0
  198. aip_agents/integration/agent.py +58 -0
  199. aip_agents/integration/guardrails.py +52 -0
  200. aip_agents/integration/hitl.py +71 -0
  201. aip_agents/integration/ptc.py +95 -0
  202. aip_agents/integration/skills.py +37 -0
  203. aip_agents/integration/storage.py +81 -0
  204. aip_agents/integration/version.py +103 -0
  205. aip_agents/mcp/__init__.py +1 -0
  206. aip_agents/mcp/client/__init__.py +60 -0
  207. aip_agents/mcp/client/base_mcp_client.py +377 -0
  208. aip_agents/mcp/client/connection_manager.py +231 -0
  209. aip_agents/mcp/client/errors.py +119 -0
  210. aip_agents/mcp/client/google_adk/__init__.py +45 -0
  211. aip_agents/mcp/client/google_adk/client.py +383 -0
  212. aip_agents/mcp/client/langchain/__init__.py +11 -0
  213. aip_agents/mcp/client/langchain/client.py +265 -0
  214. aip_agents/mcp/client/persistent_session.py +704 -0
  215. aip_agents/mcp/client/session_pool.py +358 -0
  216. aip_agents/mcp/client/transports.py +288 -0
  217. aip_agents/mcp/utils/__init__.py +7 -0
  218. aip_agents/mcp/utils/config_validator.py +139 -0
  219. aip_agents/memory/__init__.py +14 -0
  220. aip_agents/memory/adapters/__init__.py +10 -0
  221. aip_agents/memory/adapters/base_adapter.py +815 -0
  222. aip_agents/memory/adapters/mem0.py +286 -0
  223. aip_agents/memory/base.py +84 -0
  224. aip_agents/memory/constants.py +49 -0
  225. aip_agents/memory/factory.py +86 -0
  226. aip_agents/memory/guidance.py +20 -0
  227. aip_agents/memory/simple_memory.py +47 -0
  228. aip_agents/middleware/__init__.py +65 -0
  229. aip_agents/middleware/backends/__init__.py +72 -0
  230. aip_agents/middleware/backends/in_memory.py +578 -0
  231. aip_agents/middleware/backends/local_disk.py +1203 -0
  232. aip_agents/middleware/backends/protocol.py +353 -0
  233. aip_agents/middleware/backends/sandbox.py +1431 -0
  234. aip_agents/middleware/backends/sandbox_files.py +113 -0
  235. aip_agents/middleware/backends/utils.py +293 -0
  236. aip_agents/middleware/base.py +239 -0
  237. aip_agents/middleware/filesystem.py +690 -0
  238. aip_agents/middleware/manager.py +291 -0
  239. aip_agents/middleware/memory.py +532 -0
  240. aip_agents/middleware/pii_middleware.py +192 -0
  241. aip_agents/middleware/schema.py +19 -0
  242. aip_agents/middleware/skills.py +872 -0
  243. aip_agents/middleware/task_delegation.py +1656 -0
  244. aip_agents/middleware/todolist.py +276 -0
  245. aip_agents/middleware/tools/__init__.py +23 -0
  246. aip_agents/middleware/tools/edit_file.py +70 -0
  247. aip_agents/middleware/tools/execute.py +428 -0
  248. aip_agents/middleware/tools/grep_file.py +79 -0
  249. aip_agents/middleware/tools/ls.py +71 -0
  250. aip_agents/middleware/tools/read_file.py +239 -0
  251. aip_agents/middleware/tools/skill_load.py +193 -0
  252. aip_agents/middleware/tools/skill_resource.py +338 -0
  253. aip_agents/middleware/tools/write_file.py +114 -0
  254. aip_agents/middleware/vision.py +322 -0
  255. aip_agents/ptc/__init__.py +87 -0
  256. aip_agents/ptc/custom_tools.py +511 -0
  257. aip_agents/ptc/custom_tools_payload.py +499 -0
  258. aip_agents/ptc/custom_tools_templates/__init__.py +1 -0
  259. aip_agents/ptc/custom_tools_templates/custom_build_function.py.template +24 -0
  260. aip_agents/ptc/custom_tools_templates/custom_init.py.template +26 -0
  261. aip_agents/ptc/custom_tools_templates/custom_invoke.py.template +149 -0
  262. aip_agents/ptc/custom_tools_templates/custom_registry.py.template +112 -0
  263. aip_agents/ptc/custom_tools_templates/custom_sources_init.py.template +7 -0
  264. aip_agents/ptc/custom_tools_templates/custom_wrapper.py.template +87 -0
  265. aip_agents/ptc/doc_gen.py +122 -0
  266. aip_agents/ptc/exceptions.py +57 -0
  267. aip_agents/ptc/executor.py +627 -0
  268. aip_agents/ptc/mcp/__init__.py +45 -0
  269. aip_agents/ptc/mcp/sandbox_bridge.py +679 -0
  270. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  271. aip_agents/ptc/mcp/templates/mcp_client.py.template +240 -0
  272. aip_agents/ptc/naming.py +430 -0
  273. aip_agents/ptc/payload.py +26 -0
  274. aip_agents/ptc/prompt_builder.py +674 -0
  275. aip_agents/ptc/ptc_helper.py +16 -0
  276. aip_agents/ptc/sandbox_bridge.py +297 -0
  277. aip_agents/ptc/template_utils.py +33 -0
  278. aip_agents/ptc/templates/__init__.py +1 -0
  279. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  280. aip_agents/ptc/tool_def_helpers.py +101 -0
  281. aip_agents/ptc/tool_enrichment.py +163 -0
  282. aip_agents/resilience/__init__.py +10 -0
  283. aip_agents/resilience/base.py +46 -0
  284. aip_agents/resilience/tool.py +1661 -0
  285. aip_agents/sandbox/__init__.py +62 -0
  286. aip_agents/sandbox/defaults.py +220 -0
  287. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1-datasaur.Dockerfile +120 -0
  288. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1.Dockerfile +100 -0
  289. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2-datasaur.Dockerfile +143 -0
  290. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2.Dockerfile +119 -0
  291. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3-datasaur.Dockerfile +173 -0
  292. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3.Dockerfile +130 -0
  293. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.Dockerfile +164 -0
  294. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.patch_js_context.py +41 -0
  295. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.requirements.txt +29 -0
  296. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2.Dockerfile +87 -0
  297. aip_agents/sandbox/e2b_runtime.py +27 -0
  298. aip_agents/sandbox/image_registry.py +98 -0
  299. aip_agents/sandbox/providers/__init__.py +76 -0
  300. aip_agents/sandbox/providers/base.py +392 -0
  301. aip_agents/sandbox/providers/bedrock.py +28 -0
  302. aip_agents/sandbox/providers/e2b.py +230 -0
  303. aip_agents/sandbox/providers/opensandbox.py +163 -0
  304. aip_agents/sandbox/sandbox_runtime.py +967 -0
  305. aip_agents/sandbox/template_builder.py +240 -0
  306. aip_agents/sandbox/types.py +141 -0
  307. aip_agents/sandbox/validation.py +50 -0
  308. aip_agents/schema/__init__.py +106 -0
  309. aip_agents/schema/a2a.py +58 -0
  310. aip_agents/schema/agent.py +117 -0
  311. aip_agents/schema/artifacts.py +75 -0
  312. aip_agents/schema/attachments.py +425 -0
  313. aip_agents/schema/hitl.py +157 -0
  314. aip_agents/schema/langgraph.py +47 -0
  315. aip_agents/schema/model_id.py +103 -0
  316. aip_agents/schema/model_usage.py +50 -0
  317. aip_agents/schema/runtime_metadata.py +78 -0
  318. aip_agents/schema/step_limit.py +108 -0
  319. aip_agents/schema/storage.py +40 -0
  320. aip_agents/schema/tool_payloads.py +68 -0
  321. aip_agents/sentry/__init__.py +11 -0
  322. aip_agents/sentry/sentry.py +267 -0
  323. aip_agents/skills/__init__.py +30 -0
  324. aip_agents/skills/errors.py +110 -0
  325. aip_agents/skills/installer.py +479 -0
  326. aip_agents/skills/models.py +769 -0
  327. aip_agents/skills/stager.py +224 -0
  328. aip_agents/skills/validation.py +53 -0
  329. aip_agents/storage/__init__.py +41 -0
  330. aip_agents/storage/base.py +85 -0
  331. aip_agents/storage/clients/__init__.py +12 -0
  332. aip_agents/storage/clients/minio_client.py +318 -0
  333. aip_agents/storage/config.py +62 -0
  334. aip_agents/storage/providers/__init__.py +15 -0
  335. aip_agents/storage/providers/base.py +106 -0
  336. aip_agents/storage/providers/memory.py +114 -0
  337. aip_agents/storage/providers/object_storage.py +214 -0
  338. aip_agents/tools/__init__.py +65 -0
  339. aip_agents/tools/agent_schedule_tool.py +392 -0
  340. aip_agents/tools/browser_use/__init__.py +83 -0
  341. aip_agents/tools/browser_use/action_parser.py +104 -0
  342. aip_agents/tools/browser_use/browser_use_tool.py +1118 -0
  343. aip_agents/tools/browser_use/llm_config.py +120 -0
  344. aip_agents/tools/browser_use/minio_storage.py +203 -0
  345. aip_agents/tools/browser_use/schemas.py +121 -0
  346. aip_agents/tools/browser_use/session.py +13 -0
  347. aip_agents/tools/browser_use/session_errors.py +132 -0
  348. aip_agents/tools/browser_use/steel_session_recording.py +321 -0
  349. aip_agents/tools/browser_use/streaming.py +263 -0
  350. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  351. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  352. aip_agents/tools/browser_use/types.py +37 -0
  353. aip_agents/tools/code_sandbox/__init__.py +48 -0
  354. aip_agents/tools/code_sandbox/code_sandbox_tool.py +350 -0
  355. aip_agents/tools/code_sandbox/constant.py +13 -0
  356. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +346 -0
  357. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +65 -0
  358. aip_agents/tools/computer_use/__init__.py +75 -0
  359. aip_agents/tools/computer_use/computer_use_tool.py +910 -0
  360. aip_agents/tools/computer_use/schemas.py +78 -0
  361. aip_agents/tools/computer_use/streaming.py +198 -0
  362. aip_agents/tools/computer_use/types.py +32 -0
  363. aip_agents/tools/constants.py +177 -0
  364. aip_agents/tools/date_range_tool.py +554 -0
  365. aip_agents/tools/document_loader/__init__.py +44 -0
  366. aip_agents/tools/document_loader/base_reader.py +302 -0
  367. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  368. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  369. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  370. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  371. aip_agents/tools/execute_ptc_code.py +582 -0
  372. aip_agents/tools/gl_connector/__init__.py +5 -0
  373. aip_agents/tools/gl_connector/tool.py +518 -0
  374. aip_agents/tools/gl_connector_tools.py +170 -0
  375. aip_agents/tools/memory_search/__init__.py +29 -0
  376. aip_agents/tools/memory_search/base.py +213 -0
  377. aip_agents/tools/memory_search/mem0.py +424 -0
  378. aip_agents/tools/memory_search/schema.py +81 -0
  379. aip_agents/tools/memory_search_tool.py +34 -0
  380. aip_agents/tools/streaming_common.py +577 -0
  381. aip_agents/tools/time_tool.py +117 -0
  382. aip_agents/tools/tool_config_injector.py +300 -0
  383. aip_agents/tools/web_search/__init__.py +15 -0
  384. aip_agents/tools/web_search/serper_tool.py +187 -0
  385. aip_agents/types/__init__.py +73 -0
  386. aip_agents/types/a2a_events.py +13 -0
  387. aip_agents/utils/__init__.py +91 -0
  388. aip_agents/utils/a2a_connector.py +1758 -0
  389. aip_agents/utils/artifact_helpers.py +542 -0
  390. aip_agents/utils/artifacts/__init__.py +20 -0
  391. aip_agents/utils/artifacts/tracker.py +367 -0
  392. aip_agents/utils/attachment_helpers.py +178 -0
  393. aip_agents/utils/constants.py +22 -0
  394. aip_agents/utils/datetime/__init__.py +34 -0
  395. aip_agents/utils/datetime/normalization.py +231 -0
  396. aip_agents/utils/datetime/timezone.py +206 -0
  397. aip_agents/utils/env_loader.py +27 -0
  398. aip_agents/utils/event_handler_registry.py +58 -0
  399. aip_agents/utils/file_prompt_utils.py +276 -0
  400. aip_agents/utils/file_watchers/__init__.py +33 -0
  401. aip_agents/utils/file_watchers/base.py +46 -0
  402. aip_agents/utils/file_watchers/e2b.py +128 -0
  403. aip_agents/utils/file_watchers/factory.py +39 -0
  404. aip_agents/utils/file_watchers/ls_diff.py +88 -0
  405. aip_agents/utils/file_watchers/sandbox.py +66 -0
  406. aip_agents/utils/file_watchers/watchdog.py +97 -0
  407. aip_agents/utils/final_response_builder.py +211 -0
  408. aip_agents/utils/formatter_llm_client.py +258 -0
  409. aip_agents/utils/langgraph/__init__.py +19 -0
  410. aip_agents/utils/langgraph/converter.py +399 -0
  411. aip_agents/utils/langgraph/delegation_context.py +22 -0
  412. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  413. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  414. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  415. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1329 -0
  416. aip_agents/utils/langgraph/tool_output_management.py +1047 -0
  417. aip_agents/utils/logger.py +195 -0
  418. aip_agents/utils/metadata/__init__.py +27 -0
  419. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  420. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  421. aip_agents/utils/metadata/activity_narrative/builder.py +822 -0
  422. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  423. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  424. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  425. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  426. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  427. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  428. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  429. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  430. aip_agents/utils/metadata_helper.py +363 -0
  431. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  432. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  433. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  434. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  435. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  436. aip_agents/utils/pii/__init__.py +29 -0
  437. aip_agents/utils/pii/pii_handler.py +555 -0
  438. aip_agents/utils/pii/pii_helper.py +225 -0
  439. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  440. aip_agents/utils/reference_helper.py +273 -0
  441. aip_agents/utils/sse_chunk_transformer.py +836 -0
  442. aip_agents/utils/step_limit_manager.py +265 -0
  443. aip_agents/utils/token_usage_helper.py +531 -0
  444. aip_agents_binary-0.0.0.dist-info/METADATA +825 -0
  445. aip_agents_binary-0.0.0.dist-info/RECORD +447 -0
  446. aip_agents_binary-0.0.0.dist-info/WHEEL +5 -0
  447. aip_agents_binary-0.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,163 @@
1
+ """GuardrailManager for orchestrating multiple guardrail engines.
2
+
3
+ This module provides the GuardrailManager class that coordinates multiple
4
+ guardrail engines with fail-fast behavior.
5
+
6
+ Authors:
7
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ from aip_agents.guardrails.schemas import GuardrailInput, GuardrailMode, GuardrailResult
15
+
16
+ if TYPE_CHECKING:
17
+ from aip_agents.guardrails.engines.base import GuardrailEngine
18
+
19
+
20
+ class GuardrailManager:
21
+ """Orchestrates multiple guardrail engines with fail-fast behavior.
22
+
23
+ The manager accepts one or more guardrail engines and runs them in sequence.
24
+ If any engine reports unsafe content, execution stops immediately (fail-fast)
25
+ and returns the violation result.
26
+
27
+ Attributes:
28
+ engines: List of guardrail engines to orchestrate
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ engine: GuardrailEngine | list[GuardrailEngine] | None = None,
34
+ engines: list[GuardrailEngine] | None = None,
35
+ ) -> None:
36
+ """Initialize the GuardrailManager.
37
+
38
+ Args:
39
+ engine: Single guardrail engine to use
40
+ engines: List of guardrail engines to use
41
+
42
+ Raises:
43
+ ValueError: If both engine and engines are provided
44
+ """
45
+ self.enabled = True
46
+ if engine is not None and engines is not None:
47
+ raise ValueError("Cannot specify both 'engine' and 'engines'")
48
+
49
+ if engine is not None:
50
+ if isinstance(engine, list):
51
+ self.engines = engine
52
+ else:
53
+ self.engines = [engine]
54
+ elif engines is not None:
55
+ self.engines = engines
56
+ else:
57
+ self.engines = []
58
+
59
+ def model_dump(self) -> dict[str, Any]:
60
+ """Serialize manager configuration into a JSON-compatible dictionary."""
61
+ return {
62
+ "enabled": self.enabled,
63
+ "engines": [engine.model_dump() for engine in self.engines],
64
+ }
65
+
66
+ async def check_content(self, content: str | GuardrailInput) -> GuardrailResult:
67
+ """Check content against all registered engines.
68
+
69
+ Executes engines in order with fail-fast behavior. If any engine
70
+ reports unsafe content, returns immediately with that result.
71
+
72
+ Args:
73
+ content: Content to check. Can be a string (treated as input-only)
74
+ or GuardrailInput with input/output fields.
75
+
76
+ Returns:
77
+ GuardrailResult indicating if content passed all checks
78
+ """
79
+ # Normalize input to GuardrailInput
80
+ guardrail_input = self._normalize_content(content)
81
+
82
+ # Execute engines in order (fail-fast on first unsafe result)
83
+ for engine in self.engines:
84
+ result = await self._check_engine(engine, guardrail_input)
85
+ if result is not None:
86
+ return result
87
+
88
+ # All engines passed
89
+ return GuardrailResult(is_safe=True, reason=None, filtered_content=None)
90
+
91
+ @staticmethod
92
+ def _normalize_content(content: str | GuardrailInput) -> GuardrailInput:
93
+ """Normalize content input to GuardrailInput.
94
+
95
+ Args:
96
+ content: Content to normalize
97
+
98
+ Returns:
99
+ GuardrailInput object
100
+ """
101
+ if isinstance(content, str):
102
+ return GuardrailInput(input=content, output=None)
103
+ return content
104
+
105
+ async def _check_engine(self, engine: GuardrailEngine, guardrail_input: GuardrailInput) -> GuardrailResult | None:
106
+ """Check content against a single engine.
107
+
108
+ Args:
109
+ engine: The guardrail engine to check against
110
+ guardrail_input: The content to check
111
+
112
+ Returns:
113
+ GuardrailResult if unsafe content detected, None if safe
114
+ """
115
+ engine_mode = engine.config.guardrail_mode
116
+
117
+ # Skip disabled engines
118
+ if engine_mode == GuardrailMode.DISABLED:
119
+ return None
120
+
121
+ if self._should_check_input(engine_mode, guardrail_input) and guardrail_input.input is not None:
122
+ result = await engine.check_input(guardrail_input.input)
123
+ if not result.is_safe:
124
+ return result
125
+
126
+ if self._should_check_output(engine_mode, guardrail_input) and guardrail_input.output is not None:
127
+ result = await engine.check_output(guardrail_input.output)
128
+ if not result.is_safe:
129
+ return result
130
+
131
+ return None
132
+
133
+ @staticmethod
134
+ def _should_check_input(engine_mode: GuardrailMode, guardrail_input: GuardrailInput) -> bool:
135
+ """Determine if input should be checked based on engine mode.
136
+
137
+ Args:
138
+ engine_mode: The guardrail mode of the engine
139
+ guardrail_input: The content to check
140
+
141
+ Returns:
142
+ True if input should be checked, False otherwise
143
+ """
144
+ return guardrail_input.input is not None and engine_mode in (
145
+ GuardrailMode.INPUT_ONLY,
146
+ GuardrailMode.INPUT_OUTPUT,
147
+ )
148
+
149
+ @staticmethod
150
+ def _should_check_output(engine_mode: GuardrailMode, guardrail_input: GuardrailInput) -> bool:
151
+ """Determine if output should be checked based on engine mode.
152
+
153
+ Args:
154
+ engine_mode: The guardrail mode of the engine
155
+ guardrail_input: The content to check
156
+
157
+ Returns:
158
+ True if output should be checked, False otherwise
159
+ """
160
+ return guardrail_input.output is not None and engine_mode in (
161
+ GuardrailMode.OUTPUT_ONLY,
162
+ GuardrailMode.INPUT_OUTPUT,
163
+ )
@@ -0,0 +1,199 @@
1
+ """GuardrailMiddleware for integrating guardrails into agent execution.
2
+
3
+ This module provides GuardrailMiddleware that hooks into the agent execution
4
+ flow to automatically check content before and after model invocations.
5
+
6
+ Authors:
7
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ from langchain_core.messages import AIMessage, HumanMessage
15
+
16
+ from aip_agents.guardrails.exceptions import GuardrailViolationError
17
+ from aip_agents.guardrails.schemas import GuardrailInput
18
+ from aip_agents.middleware.base import AgentMiddleware, ModelRequest
19
+
20
+ if TYPE_CHECKING:
21
+ from aip_agents.guardrails.manager import GuardrailManager
22
+
23
+
24
+ class GuardrailMiddleware(AgentMiddleware):
25
+ """Middleware that integrates guardrails into agent execution.
26
+
27
+ This middleware wraps a GuardrailManager and automatically checks content
28
+ at appropriate points during agent execution:
29
+
30
+ - Before model invocation: checks user input from messages
31
+ - After model invocation: checks AI output from messages
32
+
33
+ If unsafe content is detected, raises GuardrailViolationError to stop execution.
34
+
35
+ Attributes:
36
+ guardrail_manager: The GuardrailManager to use for content checking
37
+ """
38
+
39
+ def __init__(self, guardrail_manager: GuardrailManager) -> None:
40
+ """Initialize the GuardrailMiddleware.
41
+
42
+ Args:
43
+ guardrail_manager: GuardrailManager instance to use for checking
44
+ """
45
+ self.guardrail_manager = guardrail_manager
46
+
47
+ @property
48
+ def tools(self) -> list:
49
+ """Guardrails are passive filters and don't contribute tools."""
50
+ return []
51
+
52
+ @property
53
+ def system_prompt_additions(self) -> str | None:
54
+ """Guardrails are passive filters and don't modify system prompts."""
55
+ return None
56
+
57
+ async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
58
+ """Asynchronously check user input before model invocation.
59
+
60
+ Extracts the last user message from state and checks it with guardrails.
61
+ If unsafe, raises GuardrailViolationError to stop execution.
62
+
63
+ Args:
64
+ state: Current agent state containing messages and context
65
+
66
+ Returns:
67
+ Empty dict (no state modifications needed)
68
+
69
+ Raises:
70
+ GuardrailViolationError: If user input violates safety policies
71
+ """
72
+ # Extract last user message from state
73
+ messages = state.get("messages", [])
74
+ user_input = self._extract_last_user_message(messages)
75
+
76
+ if user_input is not None:
77
+ # Check input content
78
+ result = await self.guardrail_manager.check_content(user_input)
79
+
80
+ if not result.is_safe:
81
+ raise GuardrailViolationError(result)
82
+
83
+ return {}
84
+
85
+ def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
86
+ """Check user input before model invocation (synchronous wrapper).
87
+
88
+ Note:
89
+ This is a synchronous wrapper for the async `abefore_model()` method.
90
+ LangGraph agents primarily use `abefore_model()` in async contexts.
91
+ This method should rarely be called directly. If called from an async
92
+ context with a running event loop, it will attempt to handle it,
93
+ but `abefore_model()` should be preferred.
94
+
95
+ Args:
96
+ state: Current agent state containing messages and context
97
+
98
+ Returns:
99
+ Empty dict (no state modifications needed)
100
+
101
+ Raises:
102
+ GuardrailViolationError: If user input violates safety policies
103
+ """
104
+ import asyncio
105
+
106
+ user_input = self._extract_last_user_message(state.get("messages", []))
107
+ if user_input is None:
108
+ return {}
109
+
110
+ # Check if we're in an async context with a running loop
111
+ try:
112
+ loop = asyncio.get_running_loop()
113
+ if loop.is_running():
114
+ # We're in an async context with a running loop
115
+ # Use nest_asyncio to allow nested event loops
116
+ # This enables calling asyncio.run() from within a running loop
117
+ import nest_asyncio
118
+
119
+ nest_asyncio.apply()
120
+ result = asyncio.run(self.guardrail_manager.check_content(user_input))
121
+ else:
122
+ # Loop exists but not running - safe to use asyncio.run()
123
+ result = asyncio.run(self.guardrail_manager.check_content(user_input))
124
+ except RuntimeError:
125
+ # No running loop - safe to use asyncio.run()
126
+ result = asyncio.run(self.guardrail_manager.check_content(user_input))
127
+
128
+ if not result.is_safe:
129
+ raise GuardrailViolationError(result)
130
+
131
+ return {}
132
+
133
+ def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
134
+ """Guardrails don't modify model requests."""
135
+ return request
136
+
137
+ async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
138
+ """Asynchronously check AI output after model invocation.
139
+
140
+ Extracts the last AI message from state and checks it with guardrails.
141
+ If unsafe, raises GuardrailViolationError to stop execution.
142
+
143
+ Args:
144
+ state: Current agent state after model invocation
145
+
146
+ Returns:
147
+ Empty dict (no state modifications needed)
148
+
149
+ Raises:
150
+ GuardrailViolationError: If AI output violates safety policies
151
+ """
152
+ # Extract last AI message from state
153
+ messages = state.get("messages", [])
154
+ ai_output = self._extract_last_ai_message(messages)
155
+
156
+ if ai_output is not None:
157
+ # Check output content
158
+ result = await self.guardrail_manager.check_content(GuardrailInput(input=None, output=ai_output))
159
+
160
+ if not result.is_safe:
161
+ raise GuardrailViolationError(result)
162
+
163
+ return {}
164
+
165
+ def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
166
+ """Check AI output after model invocation (synchronous wrapper)."""
167
+ return {}
168
+
169
+ def _extract_last_user_message(self, messages: list) -> str | None:
170
+ """Extract the last user message from a list of messages.
171
+
172
+ Searches backwards through messages to find the most recent HumanMessage.
173
+
174
+ Args:
175
+ messages: List of message objects
176
+
177
+ Returns:
178
+ Content of the last user message, or None if not found
179
+ """
180
+ for message in reversed(messages):
181
+ if isinstance(message, HumanMessage) and message.content:
182
+ return str(message.content)
183
+ return None
184
+
185
+ def _extract_last_ai_message(self, messages: list) -> str | None:
186
+ """Extract the last AI message from a list of messages.
187
+
188
+ Searches backwards through messages to find the most recent AIMessage.
189
+
190
+ Args:
191
+ messages: List of message objects
192
+
193
+ Returns:
194
+ Content of the last AI message, or None if not found
195
+ """
196
+ for message in reversed(messages):
197
+ if isinstance(message, AIMessage) and message.content:
198
+ return str(message.content)
199
+ return None
@@ -0,0 +1,63 @@
1
+ """Schemas for guardrail input, output, and configuration.
2
+
3
+ This module defines the data structures used throughout the guardrails system,
4
+ including input/output schemas and configuration objects.
5
+
6
+ Authors:
7
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
8
+ """
9
+
10
+ from enum import StrEnum
11
+
12
+ from pydantic import BaseModel, ConfigDict
13
+
14
+
15
+ class GuardrailMode(StrEnum):
16
+ """Modes determining what content an engine checks."""
17
+
18
+ INPUT_ONLY = "input_only"
19
+ OUTPUT_ONLY = "output_only"
20
+ INPUT_OUTPUT = "input_output"
21
+ DISABLED = "disabled"
22
+
23
+
24
+ class GuardrailInput(BaseModel):
25
+ """Input schema for guardrail checks.
26
+
27
+ Attributes:
28
+ input: User input content to check (queries, prompts, context)
29
+ output: AI output content to check (responses, generated text)
30
+ """
31
+
32
+ model_config = ConfigDict(extra="forbid")
33
+
34
+ input: str | None = None
35
+ output: str | None = None
36
+
37
+
38
+ class GuardrailResult(BaseModel):
39
+ """Result schema returned by guardrail engines and managers.
40
+
41
+ Attributes:
42
+ is_safe: Whether the content passed all checks
43
+ reason: Explanation when content is blocked (None if safe)
44
+ filtered_content: Cleaned/sanitized content if engine provides it
45
+ """
46
+
47
+ model_config = ConfigDict(extra="forbid")
48
+
49
+ is_safe: bool
50
+ reason: str | None = None
51
+ filtered_content: str | None = None
52
+
53
+
54
+ class BaseGuardrailEngineConfig(BaseModel):
55
+ """Base configuration for guardrail engines.
56
+
57
+ Attributes:
58
+ guardrail_mode: What content this engine should check
59
+ """
60
+
61
+ model_config = ConfigDict(extra="forbid")
62
+
63
+ guardrail_mode: GuardrailMode = GuardrailMode.INPUT_OUTPUT
@@ -0,0 +1,45 @@
1
+ """Utility functions for guardrail mode conversion.
2
+
3
+ This module provides utilities for converting between aip-agents GuardrailMode
4
+ and gllm-guardrail GuardrailMode enums.
5
+
6
+ Authors:
7
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
8
+ """
9
+
10
+ from typing import Any
11
+
12
+ from aip_agents.guardrails.schemas import GuardrailMode
13
+
14
+
15
+ def convert_guardrail_mode_to_gl_sdk(mode: GuardrailMode) -> Any:
16
+ """Convert aip-agents GuardrailMode to gllm-guardrail GuardrailMode.
17
+
18
+ This function performs lazy import of gllm-guardrail to support optional
19
+ dependencies. The conversion is necessary because we maintain our own
20
+ GuardrailMode enum for API consistency while wrapping the external library.
21
+
22
+ Args:
23
+ mode: The aip-agents GuardrailMode to convert
24
+
25
+ Returns:
26
+ The corresponding gllm-guardrail GuardrailMode enum value
27
+
28
+ Raises:
29
+ ImportError: If gllm-guardrail is not installed
30
+ """
31
+ try:
32
+ from gllm_guardrail.constants import GuardrailMode as GLGuardrailMode # pragma: no cover
33
+ except ImportError as e: # pragma: no cover
34
+ raise ImportError(
35
+ "gllm-guardrail is required for guardrails. Install with: pip install 'aip-agents[guardrails]'"
36
+ ) from e # pragma: no cover
37
+
38
+ mode_mapping = {
39
+ GuardrailMode.INPUT_ONLY: GLGuardrailMode.INPUT_ONLY,
40
+ GuardrailMode.OUTPUT_ONLY: GLGuardrailMode.OUTPUT_ONLY,
41
+ GuardrailMode.INPUT_OUTPUT: GLGuardrailMode.BOTH,
42
+ GuardrailMode.DISABLED: GLGuardrailMode.DISABLED,
43
+ }
44
+
45
+ return mode_mapping[mode]
@@ -0,0 +1,43 @@
1
+ """Public cross-package integration facade for `glaip-sdk` consumers.
2
+
3
+ Only the `aip_agents.integration` namespace is part of the boundary contract for
4
+ cross-package local-runtime integrations. Deep module paths remain implementation
5
+ details and non-contract surfaces, even when the facade re-exports types sourced
6
+ from those modules.
7
+
8
+ Authors:
9
+ Raymond Christopher (raymond.christopher@gdplabs.id)
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from aip_agents.integration import agent, guardrails, hitl, ptc, skills, storage
15
+ from aip_agents.integration.version import (
16
+ AUTO_MODE_FALLBACK_ENABLED,
17
+ CONTRACT_EXPORTS,
18
+ CONTRACT_MODULES,
19
+ CONTRACT_NAMESPACE,
20
+ IMPORT_MODE_ENV_VAR,
21
+ INTEGRATION_FACADE_MODULES,
22
+ INTEGRATION_MODE_STRICT,
23
+ NON_CONTRACT_SURFACE_PATTERNS,
24
+ integration_contract_version,
25
+ )
26
+
27
+ __all__ = [
28
+ "AUTO_MODE_FALLBACK_ENABLED",
29
+ "agent",
30
+ "guardrails",
31
+ "hitl",
32
+ "ptc",
33
+ "skills",
34
+ "storage",
35
+ "CONTRACT_EXPORTS",
36
+ "CONTRACT_MODULES",
37
+ "CONTRACT_NAMESPACE",
38
+ "INTEGRATION_FACADE_MODULES",
39
+ "INTEGRATION_MODE_STRICT",
40
+ "IMPORT_MODE_ENV_VAR",
41
+ "NON_CONTRACT_SURFACE_PATTERNS",
42
+ "integration_contract_version",
43
+ ]
@@ -0,0 +1,58 @@
1
+ """Public agent runtime contracts for cross-package integrations.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import importlib
10
+ from typing import TYPE_CHECKING, Any, Protocol
11
+
12
+ if TYPE_CHECKING:
13
+ from aip_agents.agent import AgentInterface, LangGraphReactAgent
14
+
15
+
16
+ class AgentRunProtocol(Protocol):
17
+ """Minimal async agent execution contract used by integration callers."""
18
+
19
+ async def arun(self, *args: Any, **kwargs: Any) -> Any:
20
+ """Run the agent and return the final result."""
21
+ raise NotImplementedError # pragma: no cover
22
+
23
+ async def arun_stream(self, *args: Any, **kwargs: Any) -> Any:
24
+ """Run the agent and stream incremental results."""
25
+ raise NotImplementedError # pragma: no cover
26
+
27
+ async def arun_sse_stream(self, *args: Any, **kwargs: Any) -> Any:
28
+ """Run the agent and stream SSE-compatible incremental results."""
29
+ raise NotImplementedError # pragma: no cover
30
+
31
+
32
+ _IMPORT_MAP = {
33
+ "AgentInterface": "aip_agents.agent",
34
+ "LangGraphReactAgent": "aip_agents.agent",
35
+ }
36
+
37
+ __all__ = [
38
+ "AgentInterface",
39
+ "AgentRunProtocol",
40
+ "LangGraphReactAgent",
41
+ ]
42
+
43
+
44
+ def __getattr__(name: str) -> Any:
45
+ """Lazy-load public agent contracts."""
46
+ module_name = _IMPORT_MAP.get(name)
47
+ if module_name is None:
48
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
49
+
50
+ module = importlib.import_module(module_name)
51
+ value = getattr(module, name)
52
+ globals()[name] = value
53
+ return value
54
+
55
+
56
+ def __dir__() -> list[str]:
57
+ """Return module attributes for dir()."""
58
+ return sorted(__all__)
@@ -0,0 +1,52 @@
1
+ """Public guardrail contracts for cross-package integrations.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import importlib
10
+ from typing import TYPE_CHECKING, Any
11
+
12
+ if TYPE_CHECKING:
13
+ from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine
14
+ from aip_agents.guardrails.engines.phrase_matcher import PhraseMatcherEngine
15
+ from aip_agents.guardrails.manager import GuardrailManager
16
+ from aip_agents.guardrails.schemas import GuardrailMode
17
+
18
+
19
+ _GUARDRAILS_MODULE = "aip_agents.guardrails"
20
+ _GUARDRAILS_NEMO_MODULE = "aip_agents.guardrails.engines.nemo"
21
+ _GUARDRAILS_PHRASE_MATCHER_MODULE = "aip_agents.guardrails.engines.phrase_matcher"
22
+
23
+ _IMPORT_MAP = {
24
+ "GuardrailManager": _GUARDRAILS_MODULE,
25
+ "GuardrailMode": _GUARDRAILS_MODULE,
26
+ "NemoGuardrailEngine": _GUARDRAILS_NEMO_MODULE,
27
+ "PhraseMatcherEngine": _GUARDRAILS_PHRASE_MATCHER_MODULE,
28
+ }
29
+
30
+ __all__ = [
31
+ "GuardrailManager",
32
+ "GuardrailMode",
33
+ "NemoGuardrailEngine",
34
+ "PhraseMatcherEngine",
35
+ ]
36
+
37
+
38
+ def __getattr__(name: str) -> Any:
39
+ """Lazy-load public guardrail contracts."""
40
+ module_name = _IMPORT_MAP.get(name)
41
+ if module_name is None:
42
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
43
+
44
+ module = importlib.import_module(module_name)
45
+ value = getattr(module, name)
46
+ globals()[name] = value
47
+ return value
48
+
49
+
50
+ def __dir__() -> list[str]:
51
+ """Return module attributes for dir()."""
52
+ return sorted(__all__)
@@ -0,0 +1,71 @@
1
+ """Public HITL contracts for cross-package integrations.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import importlib
10
+ from typing import TYPE_CHECKING, Any, Protocol
11
+
12
+ if TYPE_CHECKING:
13
+ from aip_agents.agent.hitl.manager import ApprovalManager
14
+ from aip_agents.agent.hitl.prompt import BasePromptHandler
15
+ from aip_agents.schema.hitl import ApprovalDecision, ApprovalDecisionType, ApprovalRequest
16
+
17
+
18
+ class PromptHandlerProtocol(Protocol):
19
+ """Minimal HITL prompt contract used by SDK-side prompt handlers."""
20
+
21
+ def attach_manager(self, manager: ApprovalManager) -> None:
22
+ """Attach the approval manager coordinating the prompt handler."""
23
+ raise NotImplementedError # pragma: no cover
24
+
25
+ async def prompt_for_decision(
26
+ self,
27
+ request: ApprovalRequest,
28
+ timeout_seconds: int,
29
+ context_keys: list[str] | None = None,
30
+ ) -> ApprovalDecision:
31
+ """Return an approval decision for a pending HITL request."""
32
+ raise NotImplementedError # pragma: no cover
33
+
34
+
35
+ _SCHEMA_HITL_MODULE = "aip_agents.schema.hitl"
36
+ _HITL_MANAGER_MODULE = "aip_agents.agent.hitl.manager"
37
+ _HITL_PROMPT_MODULE = "aip_agents.agent.hitl.prompt"
38
+
39
+ _IMPORT_MAP = {
40
+ "ApprovalDecision": _SCHEMA_HITL_MODULE,
41
+ "ApprovalDecisionType": _SCHEMA_HITL_MODULE,
42
+ "ApprovalManager": _HITL_MANAGER_MODULE,
43
+ "ApprovalRequest": _SCHEMA_HITL_MODULE,
44
+ "BasePromptHandler": _HITL_PROMPT_MODULE,
45
+ }
46
+
47
+ __all__ = [
48
+ "ApprovalDecision",
49
+ "ApprovalDecisionType",
50
+ "ApprovalManager",
51
+ "ApprovalRequest",
52
+ "BasePromptHandler",
53
+ "PromptHandlerProtocol",
54
+ ]
55
+
56
+
57
+ def __getattr__(name: str) -> Any:
58
+ """Lazy-load public HITL contracts."""
59
+ module_name = _IMPORT_MAP.get(name)
60
+ if module_name is None:
61
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
62
+
63
+ module = importlib.import_module(module_name)
64
+ value = getattr(module, name)
65
+ globals()[name] = value
66
+ return value
67
+
68
+
69
+ def __dir__() -> list[str]:
70
+ """Return module attributes for dir()."""
71
+ return sorted(__all__)