aip-agents-binary 0.6.0__py3-none-any.whl → 0.6.2__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 (306) hide show
  1. aip_agents/agent/langgraph_react_agent.py +194 -2
  2. aip_agents/examples/hello_world_ptc.py +49 -0
  3. aip_agents/ptc/__init__.py +48 -0
  4. aip_agents/ptc/doc_gen.py +122 -0
  5. aip_agents/ptc/exceptions.py +39 -0
  6. aip_agents/ptc/executor.py +143 -0
  7. aip_agents/ptc/mcp/__init__.py +45 -0
  8. aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
  9. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  10. aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
  11. aip_agents/ptc/naming.py +184 -0
  12. aip_agents/ptc/payload.py +26 -0
  13. aip_agents/ptc/prompt_builder.py +571 -0
  14. aip_agents/ptc/ptc_helper.py +16 -0
  15. aip_agents/ptc/sandbox_bridge.py +58 -0
  16. aip_agents/ptc/template_utils.py +33 -0
  17. aip_agents/ptc/templates/__init__.py +1 -0
  18. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  19. aip_agents/sandbox/__init__.py +43 -0
  20. aip_agents/sandbox/defaults.py +9 -0
  21. aip_agents/sandbox/e2b_runtime.py +267 -0
  22. aip_agents/sandbox/template_builder.py +131 -0
  23. aip_agents/sandbox/types.py +24 -0
  24. aip_agents/sandbox/validation.py +50 -0
  25. aip_agents/tools/__init__.py +2 -0
  26. aip_agents/tools/execute_ptc_code.py +308 -0
  27. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/METADATA +1 -1
  28. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/RECORD +30 -282
  29. aip_agents/__init__.pyi +0 -19
  30. aip_agents/a2a/__init__.pyi +0 -3
  31. aip_agents/a2a/server/__init__.pyi +0 -4
  32. aip_agents/a2a/server/base_executor.pyi +0 -73
  33. aip_agents/a2a/server/google_adk_executor.pyi +0 -51
  34. aip_agents/a2a/server/langflow_executor.pyi +0 -43
  35. aip_agents/a2a/server/langgraph_executor.pyi +0 -47
  36. aip_agents/a2a/types.pyi +0 -132
  37. aip_agents/agent/__init__.pyi +0 -9
  38. aip_agents/agent/base_agent.pyi +0 -221
  39. aip_agents/agent/base_langgraph_agent.pyi +0 -233
  40. aip_agents/agent/google_adk_agent.pyi +0 -141
  41. aip_agents/agent/google_adk_constants.pyi +0 -3
  42. aip_agents/agent/hitl/__init__.pyi +0 -6
  43. aip_agents/agent/hitl/config.pyi +0 -15
  44. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +0 -42
  45. aip_agents/agent/hitl/manager.pyi +0 -200
  46. aip_agents/agent/hitl/models.pyi +0 -3
  47. aip_agents/agent/hitl/prompt/__init__.pyi +0 -4
  48. aip_agents/agent/hitl/prompt/base.pyi +0 -24
  49. aip_agents/agent/hitl/prompt/deferred.pyi +0 -30
  50. aip_agents/agent/hitl/registry.pyi +0 -101
  51. aip_agents/agent/interface.pyi +0 -81
  52. aip_agents/agent/interfaces.pyi +0 -44
  53. aip_agents/agent/langflow_agent.pyi +0 -133
  54. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +0 -49
  55. aip_agents/agent/langgraph_react_agent.pyi +0 -131
  56. aip_agents/agent/system_instruction_context.pyi +0 -13
  57. aip_agents/clients/__init__.pyi +0 -4
  58. aip_agents/clients/langflow/__init__.pyi +0 -4
  59. aip_agents/clients/langflow/client.pyi +0 -140
  60. aip_agents/clients/langflow/types.pyi +0 -7
  61. aip_agents/constants.pyi +0 -7
  62. aip_agents/examples/__init__.pyi +0 -0
  63. aip_agents/examples/compare_streaming_client.pyi +0 -48
  64. aip_agents/examples/compare_streaming_server.pyi +0 -18
  65. aip_agents/examples/demo_memory_recall.pyi +0 -58
  66. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +0 -9
  67. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +0 -9
  68. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +0 -9
  69. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +0 -15
  70. aip_agents/examples/hello_world_a2a_langchain_client.pyi +0 -5
  71. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +0 -5
  72. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +0 -5
  73. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +0 -5
  74. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +0 -5
  75. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +0 -15
  76. aip_agents/examples/hello_world_a2a_langchain_server.pyi +0 -15
  77. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +0 -15
  78. aip_agents/examples/hello_world_a2a_langflow_client.pyi +0 -9
  79. aip_agents/examples/hello_world_a2a_langflow_server.pyi +0 -14
  80. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +0 -5
  81. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +0 -5
  82. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +0 -16
  83. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +0 -9
  84. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +0 -9
  85. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +0 -2
  86. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +0 -9
  87. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +0 -5
  88. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +0 -5
  89. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +0 -14
  90. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +0 -15
  91. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +0 -15
  92. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +0 -48
  93. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +0 -48
  94. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +0 -45
  95. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +0 -5
  96. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +0 -15
  97. aip_agents/examples/hello_world_google_adk.pyi +0 -5
  98. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +0 -5
  99. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +0 -5
  100. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +0 -5
  101. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +0 -5
  102. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +0 -5
  103. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +0 -5
  104. aip_agents/examples/hello_world_google_adk_stream.pyi +0 -5
  105. aip_agents/examples/hello_world_langchain.pyi +0 -5
  106. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +0 -2
  107. aip_agents/examples/hello_world_langchain_mcp_http.pyi +0 -5
  108. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +0 -16
  109. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +0 -5
  110. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +0 -18
  111. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +0 -5
  112. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +0 -5
  113. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +0 -5
  114. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +0 -5
  115. aip_agents/examples/hello_world_langchain_stream.pyi +0 -5
  116. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +0 -5
  117. aip_agents/examples/hello_world_langflow_agent.pyi +0 -35
  118. aip_agents/examples/hello_world_langgraph.pyi +0 -5
  119. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +0 -5
  120. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +0 -5
  121. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +0 -5
  122. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +0 -5
  123. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +0 -5
  124. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +0 -5
  125. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +0 -5
  126. aip_agents/examples/hello_world_langgraph_stream.pyi +0 -5
  127. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +0 -5
  128. aip_agents/examples/hello_world_model_switch_cli.pyi +0 -30
  129. aip_agents/examples/hello_world_multi_agent_adk.pyi +0 -6
  130. aip_agents/examples/hello_world_multi_agent_langchain.pyi +0 -5
  131. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +0 -5
  132. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +0 -5
  133. aip_agents/examples/hello_world_pii_logger.pyi +0 -5
  134. aip_agents/examples/hello_world_sentry.pyi +0 -21
  135. aip_agents/examples/hello_world_step_limits.pyi +0 -17
  136. aip_agents/examples/hello_world_stock_a2a_server.pyi +0 -17
  137. aip_agents/examples/hello_world_tool_output_client.pyi +0 -5
  138. aip_agents/examples/hello_world_tool_output_server.pyi +0 -19
  139. aip_agents/examples/hitl_demo.pyi +0 -67
  140. aip_agents/examples/pii_demo_langgraph_client.pyi +0 -5
  141. aip_agents/examples/pii_demo_langgraph_server.pyi +0 -20
  142. aip_agents/examples/pii_demo_multi_agent_client.pyi +0 -5
  143. aip_agents/examples/pii_demo_multi_agent_server.pyi +0 -40
  144. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +0 -5
  145. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +0 -19
  146. aip_agents/examples/tools/__init__.pyi +0 -9
  147. aip_agents/examples/tools/adk_arithmetic_tools.pyi +0 -24
  148. aip_agents/examples/tools/adk_weather_tool.pyi +0 -18
  149. aip_agents/examples/tools/data_generator_tool.pyi +0 -15
  150. aip_agents/examples/tools/data_visualization_tool.pyi +0 -19
  151. aip_agents/examples/tools/image_artifact_tool.pyi +0 -26
  152. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +0 -17
  153. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +0 -20
  154. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +0 -25
  155. aip_agents/examples/tools/langchain_weather_tool.pyi +0 -19
  156. aip_agents/examples/tools/langgraph_streaming_tool.pyi +0 -43
  157. aip_agents/examples/tools/mock_retrieval_tool.pyi +0 -13
  158. aip_agents/examples/tools/pii_demo_tools.pyi +0 -54
  159. aip_agents/examples/tools/random_chart_tool.pyi +0 -20
  160. aip_agents/examples/tools/serper_tool.pyi +0 -16
  161. aip_agents/examples/tools/stock_tools.pyi +0 -36
  162. aip_agents/examples/tools/table_generator_tool.pyi +0 -22
  163. aip_agents/examples/tools/time_tool.pyi +0 -15
  164. aip_agents/examples/tools/weather_forecast_tool.pyi +0 -14
  165. aip_agents/guardrails/__init__.pyi +0 -6
  166. aip_agents/guardrails/engines/__init__.pyi +0 -4
  167. aip_agents/guardrails/engines/base.pyi +0 -61
  168. aip_agents/guardrails/engines/nemo.pyi +0 -46
  169. aip_agents/guardrails/engines/phrase_matcher.pyi +0 -48
  170. aip_agents/guardrails/exceptions.pyi +0 -23
  171. aip_agents/guardrails/manager.pyi +0 -42
  172. aip_agents/guardrails/middleware.pyi +0 -87
  173. aip_agents/guardrails/schemas.pyi +0 -43
  174. aip_agents/guardrails/utils.pyi +0 -19
  175. aip_agents/mcp/__init__.pyi +0 -0
  176. aip_agents/mcp/client/__init__.pyi +0 -5
  177. aip_agents/mcp/client/base_mcp_client.pyi +0 -148
  178. aip_agents/mcp/client/connection_manager.pyi +0 -51
  179. aip_agents/mcp/client/google_adk/__init__.pyi +0 -3
  180. aip_agents/mcp/client/google_adk/client.pyi +0 -75
  181. aip_agents/mcp/client/langchain/__init__.pyi +0 -3
  182. aip_agents/mcp/client/langchain/client.pyi +0 -48
  183. aip_agents/mcp/client/persistent_session.pyi +0 -122
  184. aip_agents/mcp/client/session_pool.pyi +0 -101
  185. aip_agents/mcp/client/transports.pyi +0 -132
  186. aip_agents/mcp/utils/__init__.pyi +0 -0
  187. aip_agents/mcp/utils/config_validator.pyi +0 -82
  188. aip_agents/memory/__init__.pyi +0 -5
  189. aip_agents/memory/adapters/__init__.pyi +0 -4
  190. aip_agents/memory/adapters/base_adapter.pyi +0 -150
  191. aip_agents/memory/adapters/mem0.pyi +0 -22
  192. aip_agents/memory/base.pyi +0 -60
  193. aip_agents/memory/constants.pyi +0 -25
  194. aip_agents/memory/factory.pyi +0 -24
  195. aip_agents/memory/guidance.pyi +0 -3
  196. aip_agents/memory/simple_memory.pyi +0 -23
  197. aip_agents/middleware/__init__.pyi +0 -5
  198. aip_agents/middleware/base.pyi +0 -75
  199. aip_agents/middleware/manager.pyi +0 -84
  200. aip_agents/middleware/todolist.pyi +0 -125
  201. aip_agents/schema/__init__.pyi +0 -9
  202. aip_agents/schema/a2a.pyi +0 -40
  203. aip_agents/schema/agent.pyi +0 -65
  204. aip_agents/schema/hitl.pyi +0 -89
  205. aip_agents/schema/langgraph.pyi +0 -28
  206. aip_agents/schema/model_id.pyi +0 -54
  207. aip_agents/schema/step_limit.pyi +0 -63
  208. aip_agents/schema/storage.pyi +0 -21
  209. aip_agents/sentry/__init__.pyi +0 -3
  210. aip_agents/sentry/sentry.pyi +0 -48
  211. aip_agents/storage/__init__.pyi +0 -8
  212. aip_agents/storage/base.pyi +0 -58
  213. aip_agents/storage/clients/__init__.pyi +0 -3
  214. aip_agents/storage/clients/minio_client.pyi +0 -137
  215. aip_agents/storage/config.pyi +0 -29
  216. aip_agents/storage/providers/__init__.pyi +0 -5
  217. aip_agents/storage/providers/base.pyi +0 -88
  218. aip_agents/storage/providers/memory.pyi +0 -79
  219. aip_agents/storage/providers/object_storage.pyi +0 -98
  220. aip_agents/tools/__init__.pyi +0 -9
  221. aip_agents/tools/browser_use/__init__.pyi +0 -14
  222. aip_agents/tools/browser_use/action_parser.pyi +0 -18
  223. aip_agents/tools/browser_use/browser_use_tool.pyi +0 -50
  224. aip_agents/tools/browser_use/llm_config.pyi +0 -52
  225. aip_agents/tools/browser_use/minio_storage.pyi +0 -109
  226. aip_agents/tools/browser_use/schemas.pyi +0 -32
  227. aip_agents/tools/browser_use/session.pyi +0 -4
  228. aip_agents/tools/browser_use/session_errors.pyi +0 -53
  229. aip_agents/tools/browser_use/steel_session_recording.pyi +0 -63
  230. aip_agents/tools/browser_use/streaming.pyi +0 -81
  231. aip_agents/tools/browser_use/structured_data_parser.pyi +0 -86
  232. aip_agents/tools/browser_use/structured_data_recovery.pyi +0 -43
  233. aip_agents/tools/browser_use/types.pyi +0 -45
  234. aip_agents/tools/code_sandbox/__init__.pyi +0 -3
  235. aip_agents/tools/code_sandbox/constant.pyi +0 -4
  236. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +0 -102
  237. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +0 -29
  238. aip_agents/tools/constants.pyi +0 -138
  239. aip_agents/tools/document_loader/__init__.pyi +0 -7
  240. aip_agents/tools/document_loader/base_reader.pyi +0 -75
  241. aip_agents/tools/document_loader/docx_reader_tool.pyi +0 -10
  242. aip_agents/tools/document_loader/excel_reader_tool.pyi +0 -26
  243. aip_agents/tools/document_loader/pdf_reader_tool.pyi +0 -11
  244. aip_agents/tools/document_loader/pdf_splitter.pyi +0 -18
  245. aip_agents/tools/gl_connector/__init__.pyi +0 -3
  246. aip_agents/tools/gl_connector/tool.pyi +0 -74
  247. aip_agents/tools/gl_connector_tools.pyi +0 -39
  248. aip_agents/tools/memory_search/__init__.pyi +0 -5
  249. aip_agents/tools/memory_search/base.pyi +0 -69
  250. aip_agents/tools/memory_search/mem0.pyi +0 -19
  251. aip_agents/tools/memory_search/schema.pyi +0 -15
  252. aip_agents/tools/memory_search_tool.pyi +0 -3
  253. aip_agents/tools/time_tool.pyi +0 -16
  254. aip_agents/tools/tool_config_injector.pyi +0 -26
  255. aip_agents/tools/web_search/__init__.pyi +0 -3
  256. aip_agents/tools/web_search/serper_tool.pyi +0 -19
  257. aip_agents/types/__init__.pyi +0 -36
  258. aip_agents/types/a2a_events.pyi +0 -3
  259. aip_agents/utils/__init__.pyi +0 -11
  260. aip_agents/utils/a2a_connector.pyi +0 -146
  261. aip_agents/utils/artifact_helpers.pyi +0 -203
  262. aip_agents/utils/constants.pyi +0 -10
  263. aip_agents/utils/datetime/__init__.pyi +0 -4
  264. aip_agents/utils/datetime/normalization.pyi +0 -95
  265. aip_agents/utils/datetime/timezone.pyi +0 -48
  266. aip_agents/utils/env_loader.pyi +0 -10
  267. aip_agents/utils/event_handler_registry.pyi +0 -23
  268. aip_agents/utils/file_prompt_utils.pyi +0 -21
  269. aip_agents/utils/final_response_builder.pyi +0 -34
  270. aip_agents/utils/formatter_llm_client.pyi +0 -71
  271. aip_agents/utils/langgraph/__init__.pyi +0 -3
  272. aip_agents/utils/langgraph/converter.pyi +0 -49
  273. aip_agents/utils/langgraph/tool_managers/__init__.pyi +0 -5
  274. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +0 -35
  275. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +0 -48
  276. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +0 -56
  277. aip_agents/utils/langgraph/tool_output_management.pyi +0 -329
  278. aip_agents/utils/logger.pyi +0 -60
  279. aip_agents/utils/metadata/__init__.pyi +0 -5
  280. aip_agents/utils/metadata/activity_metadata_helper.pyi +0 -25
  281. aip_agents/utils/metadata/activity_narrative/__init__.pyi +0 -7
  282. aip_agents/utils/metadata/activity_narrative/builder.pyi +0 -35
  283. aip_agents/utils/metadata/activity_narrative/constants.pyi +0 -10
  284. aip_agents/utils/metadata/activity_narrative/context.pyi +0 -32
  285. aip_agents/utils/metadata/activity_narrative/formatters.pyi +0 -48
  286. aip_agents/utils/metadata/activity_narrative/utils.pyi +0 -12
  287. aip_agents/utils/metadata/schemas/__init__.pyi +0 -4
  288. aip_agents/utils/metadata/schemas/activity_schema.pyi +0 -18
  289. aip_agents/utils/metadata/schemas/thinking_schema.pyi +0 -20
  290. aip_agents/utils/metadata/thinking_metadata_helper.pyi +0 -4
  291. aip_agents/utils/metadata_helper.pyi +0 -117
  292. aip_agents/utils/name_preprocessor/__init__.pyi +0 -6
  293. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +0 -52
  294. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +0 -38
  295. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +0 -41
  296. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +0 -34
  297. aip_agents/utils/pii/__init__.pyi +0 -5
  298. aip_agents/utils/pii/pii_handler.pyi +0 -96
  299. aip_agents/utils/pii/pii_helper.pyi +0 -78
  300. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +0 -73
  301. aip_agents/utils/reference_helper.pyi +0 -81
  302. aip_agents/utils/sse_chunk_transformer.pyi +0 -166
  303. aip_agents/utils/step_limit_manager.pyi +0 -112
  304. aip_agents/utils/token_usage_helper.pyi +0 -60
  305. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/WHEEL +0 -0
  306. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/top_level.txt +0 -0
@@ -1,233 +0,0 @@
1
- from _typeshed import Incomplete
2
- from a2a.types import AgentCard as AgentCard
3
- from abc import abstractmethod
4
- from aip_agents.agent.base_agent import BaseAgent as BaseAgent
5
- from aip_agents.agent.system_instruction_context import get_current_date_context as get_current_date_context
6
- from aip_agents.constants import TEXT_PREVIEW_LENGTH as TEXT_PREVIEW_LENGTH
7
- from aip_agents.mcp.client import LangchainMCPClient as LangchainMCPClient
8
- from aip_agents.memory import BaseMemory as BaseMemory, MemoryFactory as MemoryFactory, MemoryMethod as MemoryMethod
9
- from aip_agents.memory.constants import MemoryDefaults as MemoryDefaults
10
- from aip_agents.schema.agent import StreamMode as StreamMode
11
- from aip_agents.schema.hitl import HitlMetadata as HitlMetadata
12
- from aip_agents.tools.tool_config_injector import CONFIG_SCHEMA_ATTR as CONFIG_SCHEMA_ATTR, TOOL_CONFIG_SCHEMA_ATTR as TOOL_CONFIG_SCHEMA_ATTR, inject_config_methods_into_tool as inject_config_methods_into_tool
13
- from aip_agents.types import A2AEvent as A2AEvent, A2AStreamEventType as A2AStreamEventType
14
- from aip_agents.utils import augment_query_with_file_paths as augment_query_with_file_paths, validate_references as validate_references
15
- from aip_agents.utils.langgraph.tool_managers.a2a_tool_manager import A2AToolManager as A2AToolManager
16
- from aip_agents.utils.langgraph.tool_managers.delegation_tool_manager import DelegationToolManager as DelegationToolManager
17
- from aip_agents.utils.logger import get_logger as get_logger
18
- from aip_agents.utils.metadata.activity_metadata_helper import create_tool_activity_info as create_tool_activity_info
19
- from aip_agents.utils.metadata_helper import DefaultStepMessages as DefaultStepMessages, Kind as Kind, MetadataFieldKeys as MetadataFieldKeys, Status as Status, end_step_counter_scope as end_step_counter_scope, get_next_step_number as get_next_step_number, start_step_counter_scope as start_step_counter_scope
20
- from aip_agents.utils.pii import deanonymize_final_response_content as deanonymize_final_response_content
21
- from aip_agents.utils.sse_chunk_transformer import SSEChunkTransformer as SSEChunkTransformer
22
- from aip_agents.utils.token_usage_helper import STEP_USAGE_KEY as STEP_USAGE_KEY, TOTAL_USAGE_KEY as TOTAL_USAGE_KEY, USAGE_METADATA_KEY as USAGE_METADATA_KEY
23
- from collections.abc import AsyncGenerator, Sequence
24
- from dataclasses import dataclass
25
- from gllm_core.event import EventEmitter
26
- from gllm_core.schema import Chunk as Chunk
27
- from langchain_core.tools import BaseTool
28
- from langgraph.graph import StateGraph
29
- from langgraph.graph.message import add_messages as add_messages
30
- from langgraph.graph.state import CompiledStateGraph
31
- from langgraph.types import Checkpointer
32
- from typing import Any
33
-
34
- logger: Incomplete
35
-
36
- @dataclass
37
- class _StreamingContext:
38
- """Context object for managing streaming state and configuration."""
39
- original_query: str
40
- graph_input: dict[str, Any]
41
- config: dict[str, Any]
42
- memory_user_id: str | None
43
- current_thread_id: str
44
- token: Any
45
- enable_token_streaming: bool
46
- final_event_yielded: bool = ...
47
- pending_artifacts: list | None = ...
48
- seen_artifact_hashes: set | None = ...
49
- processed_message_count: int = ...
50
- final_state: dict[str, Any] | None = ...
51
- last_final_content: str | None = ...
52
- saved_memory: bool = ...
53
- is_token_streaming: bool = ...
54
- def __post_init__(self) -> None:
55
- """Initialize mutable defaults."""
56
-
57
- class BaseLangGraphAgent(BaseAgent):
58
- """Base class for LangGraph-based agents with unified tool approach.
59
-
60
- Provides core LangGraph functionality including:
61
- - Graph compilation and execution
62
- - State schema management
63
- - I/O mapping between user inputs and graph states
64
- - Event emission support
65
- - Tool resolution and handling
66
- - A2A communication capabilities via tools
67
- - Agent delegation capabilities via tools
68
- - MCP server integration via tools
69
- - Enhanced output extraction from various state formats
70
-
71
- Tool Management:
72
- - regular_tools: Standard LangChain tools provided during initialization
73
- - mcp_tools: Tools retrieved from MCP servers
74
- - resolved_tools: Combined collection of all tools for graph execution
75
-
76
- Subclasses must implement:
77
- - define_graph(): Define the specific graph structure
78
- - _prepare_graph_input(): Convert user input to graph state
79
- - _format_graph_output(): Convert final graph state to user output
80
- """
81
- state_schema: Incomplete
82
- thread_id_key: Incomplete
83
- enable_a2a_token_streaming: Incomplete
84
- event_emitter: Incomplete
85
- checkpointer: Incomplete
86
- tool_output_manager: Incomplete
87
- memory: BaseMemory | None
88
- a2a_tool_manager: Incomplete
89
- delegation_tool_manager: Incomplete
90
- regular_tools: list[BaseTool]
91
- mcp_tools: list[BaseTool]
92
- resolved_tools: list[BaseTool]
93
- def __init__(self, name: str, instruction: str, description: str | None = None, model: Any | None = None, tools: Sequence[BaseTool] | None = None, state_schema: type | None = None, thread_id_key: str = 'thread_id', event_emitter: EventEmitter | None = None, checkpointer: Checkpointer | None = None, enable_a2a_token_streaming: bool = False, **kwargs: Any) -> None:
94
- '''Initialize the BaseLangGraphAgent.
95
-
96
- Args:
97
- name: The name of the agent.
98
- instruction: The system instruction for the agent.
99
- description: Human-readable description of the agent.
100
- model: The model to use (lm_invoker, LangChain model, string, etc.).
101
- tools: Sequence of regular LangChain tools (not A2A or delegation tools).
102
- state_schema: The state schema for the LangGraph. Defaults to basic message state.
103
- thread_id_key: Key for thread ID in configuration.
104
- event_emitter: Optional event emitter for streaming updates.
105
- checkpointer: Optional checkpointer for conversation persistence.
106
- enable_a2a_token_streaming: Enable token-level streaming for A2A responses.
107
- - False (default): Stream message-level events only
108
- - True: Stream individual tokens plus message-level events
109
- **kwargs: Additional keyword arguments passed to BaseAgent (including tool_configs and memory settings).
110
- Memory settings include:
111
- - memory_backend: Memory backend (e.g., "mem0")
112
- - agent_id: Agent identifier for memory scoping
113
- - memory_namespace: Memory namespace
114
- - save_interaction_to_memory: Whether to save interactions (default True)
115
- '''
116
- def set_operation_mode(self, mode: str) -> None:
117
- '''Set the operation mode for dependency tracking.
118
-
119
- Args:
120
- mode: Operation mode - "parallel" (default) or "sequential"
121
- '''
122
- @abstractmethod
123
- def define_graph(self, graph_builder: StateGraph) -> CompiledStateGraph:
124
- """Define the specific graph structure for this agent type.
125
-
126
- Subclasses must implement this method to:
127
- 1. Add nodes to the graph_builder
128
- 2. Add edges and conditional edges
129
- 3. Set entry points
130
- 4. Return the compiled graph
131
-
132
- Args:
133
- graph_builder: The StateGraph builder to define nodes and edges on.
134
-
135
- Returns:
136
- The compiled graph ready for execution.
137
- """
138
- def register_a2a_agents(self, agent_cards: list[AgentCard]) -> None:
139
- """Register A2A communication capabilities using the A2A tool manager.
140
-
141
- Args:
142
- agent_cards (list[AgentCard]): List of AgentCard instances for external communication.
143
- """
144
- def register_delegation_agents(self, agents: list[BaseAgent]) -> None:
145
- """Register internal agent delegation capabilities using the delegation tool manager.
146
-
147
- Args:
148
- agents: List of BaseAgent instances for internal task delegation.
149
- """
150
- tools: Incomplete
151
- def update_regular_tools(self, new_tools: list[BaseTool], rebuild_graph: bool | None = None) -> None:
152
- """Update regular tools (not capabilities).
153
-
154
- Args:
155
- new_tools: New list of regular tools to use.
156
- rebuild_graph: Whether to rebuild graph. If None, uses auto_rebuild_graph setting.
157
- """
158
- def run(self, query: str, **kwargs: Any) -> dict[str, Any]:
159
- """Synchronously run the LangGraph agent.
160
-
161
- Args:
162
- query: The input query for the agent.
163
- **kwargs: Additional keyword arguments.
164
-
165
- Returns:
166
- Dictionary containing the agent's response.
167
- """
168
- async def arun(self, query: str, **kwargs: Any) -> dict[str, Any]:
169
- """Asynchronously run the LangGraph agent with lazy MCP initialization.
170
-
171
- Args:
172
- query: The input query for the agent.
173
- **kwargs: Additional keyword arguments including configurable for LangGraph.
174
-
175
- Returns:
176
- Dictionary containing the agent's response and full final state.
177
- """
178
- async def arun_stream(self, query: str, **kwargs: Any) -> AsyncGenerator[str | dict[str, Any], None]:
179
- """Asynchronously stream the LangGraph agent's response.
180
-
181
- If MCP configuration exists, connects to the MCP server and registers tools before streaming.
182
- This method properly handles both LM Invoker and LangChain model streaming:
183
- - For LM Invoker: Uses StreamEventHandler to capture streaming events
184
- - For LangChain models: Uses LangGraph's native streaming implementation
185
-
186
- Args:
187
- query: The input query for the agent.
188
- **kwargs: Additional keyword arguments.
189
-
190
- Yields:
191
- Chunks of output (strings or dicts) from the streaming response.
192
- """
193
- async def cleanup(self) -> None:
194
- """Cleanup MCP resources including persistent sessions.
195
-
196
- This method performs best-effort cleanup of MCP client resources.
197
- Errors during cleanup are logged but do not raise exceptions to ensure
198
- the cleanup process completes gracefully.
199
- """
200
- async def arun_a2a_stream(self, query: str, **kwargs: Any) -> AsyncGenerator[A2AEvent, None]:
201
- '''Asynchronously streams the agent\'s response in A2A format.
202
-
203
- Args:
204
- query: The input query for the agent.
205
- **kwargs: Additional keyword arguments.
206
-
207
- Yields:
208
- Dictionaries with "status" and "content" keys.
209
- Possible statuses: "working", "completed", "failed", "canceled".
210
- '''
211
- async def arun_sse_stream(self, query: str, task_id: str | None = None, context_id: str | None = None, **kwargs: Any) -> AsyncGenerator[A2AEvent, None]:
212
- '''Stream agent response as SSE-compatible chunks.
213
-
214
- This method wraps arun_a2a_stream and transforms output to the normalized
215
- dict format matching A2AConnector.astream_to_agent output, enabling direct
216
- streaming without A2A server overhead.
217
-
218
- Args:
219
- query: The input query for the agent.
220
- task_id: Optional task identifier for the stream.
221
- context_id: Optional context identifier for the stream.
222
- **kwargs: Additional arguments passed to arun_a2a_stream.
223
-
224
- Yields:
225
- SSEChunk dicts with normalized structure:
226
- - status: "success" | "error"
227
- - task_state: "working" | "completed" | "failed" | "canceled"
228
- - content: Text content or None
229
- - event_type: Always string (never enum)
230
- - final: True for terminal events
231
- - metadata: Normalized metadata dict
232
- - artifacts: Only present when non-empty
233
- '''
@@ -1,141 +0,0 @@
1
- from _typeshed import Incomplete
2
- from a2a.types import AgentCard
3
- from aip_agents.agent.base_agent import BaseAgent as BaseAgent
4
- from aip_agents.agent.google_adk_constants import DEFAULT_AUTH_URL as DEFAULT_AUTH_URL
5
- from aip_agents.mcp.client.google_adk.client import GoogleADKMCPClient as GoogleADKMCPClient
6
- from aip_agents.utils.a2a_connector import A2AConnector as A2AConnector
7
- from aip_agents.utils.logger import get_logger as get_logger
8
- from collections.abc import AsyncGenerator, AsyncIterator
9
- from google.adk.agents import LlmAgent
10
- from google.adk.tools.langchain_tool import LangchainTool
11
- from langchain.tools import BaseTool as LangchainBaseTool
12
- from pydantic import BaseModel
13
- from typing import Any
14
-
15
- logger: Incomplete
16
- MODEL_TEMPERATURE: float
17
-
18
- class A2AToolInput(BaseModel):
19
- """Input for the A2ATool."""
20
- query: str
21
-
22
- class A2ATool(LangchainBaseTool):
23
- """A tool that communicates with an A2A agent."""
24
- name: str
25
- description: str
26
- args_schema: type[BaseModel]
27
- agent_card: AgentCard
28
-
29
- def create_a2a_tool(agent_card: AgentCard) -> LangchainTool:
30
- """Create a LangChain tool from an A2A agent card.
31
-
32
- Args:
33
- agent_card (AgentCard): The A2A agent card to create a tool for.
34
-
35
- Returns:
36
- LangchainTool: A LangChain tool that can communicate with the A2A agent.
37
- """
38
-
39
- class GoogleADKAgent(BaseAgent):
40
- """An agent that wraps a native Google ADK Agent with MCP support.
41
-
42
- This class implements the AgentInterface and uses Google's LlmAgent
43
- to handle the core conversation and tool execution logic via ADK's
44
- async-first design. It includes persistent MCP session management for
45
- stateful tool execution across multiple calls.
46
-
47
- The agent supports:
48
- - Native ADK tools (FunctionTool, LangchainTool)
49
- - MCP tools via GoogleADKMCPClient with session persistence
50
- - Sub-agent delegation using ADK's built-in multi-agent capabilities
51
- - A2A communication through tool integration
52
- """
53
- adk_native_agent: LlmAgent
54
- model: Incomplete
55
- max_iterations: Incomplete
56
- tools: Incomplete
57
- agents: Incomplete
58
- session_service: Incomplete
59
- name: Incomplete
60
- def __init__(self, name: str, instruction: str, model: str, tools: list[Any] | None = None, description: str | None = None, max_iterations: int = 3, agents: list['GoogleADKAgent'] | None = None, **kwargs: Any) -> None:
61
- '''Initializes the GoogleADKAgent with MCP support.
62
-
63
- Args:
64
- name: The name of this wrapper agent.
65
- instruction: The instruction for this wrapper agent.
66
- model: The name of the Google ADK model to use (e.g., "gemini-1.5-pro-latest").
67
- tools: An optional list of callable tools for the ADK agent.
68
- description: An optional human-readable description.
69
- max_iterations: Maximum number of iterations to run (default: 3).
70
- agents: Optional list of sub-agents that this agent can delegate to using ADK\'s
71
- built-in multi-agent capabilities. These will be passed as sub_agents to the
72
- underlying LlmAgent.
73
- **kwargs: Additional keyword arguments passed to the parent `__init__`.
74
- '''
75
- def run(self, query: str, **kwargs: Any) -> dict[str, Any]:
76
- '''Synchronously runs the Google ADK agent by wrapping the internal async run method.
77
-
78
- Args:
79
- query: The input query for the agent.
80
- **kwargs: Additional keyword arguments passed to the internal async run method.
81
- Supports "session_id", "user_id", "app_name".
82
-
83
- Returns:
84
- A dictionary containing the agent\'s response.
85
-
86
- Raises:
87
- RuntimeError: If `asyncio.run()` is called from an already running event loop,
88
- or for other unhandled errors during synchronous execution.
89
- '''
90
- async def arun(self, query: str, **kwargs: Any) -> dict[str, Any]:
91
- '''Asynchronously runs the agent with MCP tool support.
92
-
93
- This method ensures MCP tools are properly initialized before execution
94
- and provides persistent session management for stateful MCP tools.
95
-
96
- Args:
97
- query: The user\'s query to process.
98
- **kwargs: Additional keyword arguments. Supports "session_id", "user_id", "app_name".
99
-
100
- Returns:
101
- A dictionary containing the output, tool_calls, and session_id.
102
- '''
103
- async def cleanup(self) -> None:
104
- """Clean up ADK and MCP resources."""
105
- async def arun_stream(self, query: str, **kwargs: Any) -> AsyncIterator[str]:
106
- '''Runs the agent with the given query and streams the response parts.
107
-
108
- Args:
109
- query: The user\'s query to process.
110
- **kwargs: Additional keyword arguments. Supports "session_id", "user_id", "app_name".
111
-
112
- Yields:
113
- Text response chunks from the model. If an error occurs, the error message is yielded.
114
- '''
115
- def register_a2a_agents(self, agent_cards: list[AgentCard]) -> None:
116
- """Convert known A2A agents to LangChain tools.
117
-
118
- This method takes the agents from a2a_config.known_agents, creates A2AAgent
119
- instances for each one, and wraps them in LangChain tools.
120
-
121
- Args:
122
- agent_cards (list[AgentCard]): List of A2A agent cards to register as tools.
123
-
124
- Returns:
125
- None: The tools are added to the existing tools list.
126
- """
127
- async def arun_a2a_stream(self, query: str, configurable: dict[str, Any] | None = None, **kwargs: Any) -> AsyncGenerator[dict[str, Any], None]:
128
- '''Asynchronously streams the agent\'s response in a format compatible with A2A.
129
-
130
- This method formats the ADK agent\'s streaming responses into a consistent format
131
- that the A2A executor can understand and process.
132
-
133
- Args:
134
- query: The input query for the agent.
135
- configurable: Optional dictionary for configuration, may include:
136
- - thread_id: The A2A task ID (used as session_id).
137
- **kwargs: Additional keyword arguments. Supports "user_id", "app_name".
138
-
139
- Yields:
140
- Dictionary with \'status\' and \'content\' fields that describe the agent\'s response state.
141
- '''
@@ -1,3 +0,0 @@
1
- __all__ = ['DEFAULT_AUTH_URL']
2
-
3
- DEFAULT_AUTH_URL: str
@@ -1,6 +0,0 @@
1
- from aip_agents.agent.hitl.config import ToolApprovalConfig as ToolApprovalConfig
2
- from aip_agents.agent.hitl.manager import ApprovalManager as ApprovalManager
3
- from aip_agents.agent.hitl.prompt import BasePromptHandler as BasePromptHandler, DeferredPromptHandler as DeferredPromptHandler
4
- from aip_agents.schema.hitl import ApprovalDecision as ApprovalDecision, ApprovalLogEntry as ApprovalLogEntry, ApprovalRequest as ApprovalRequest
5
-
6
- __all__ = ['ToolApprovalConfig', 'ApprovalManager', 'ApprovalDecision', 'ApprovalLogEntry', 'ApprovalRequest', 'BasePromptHandler', 'DeferredPromptHandler']
@@ -1,15 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
- @dataclass
4
- class ToolApprovalConfig:
5
- """Configuration for HITL approval behavior attached to a tool.
6
-
7
- Supplying this configuration marks the tool as requiring approval. Only the
8
- timeout is configurable; timeouts always result in a safe skip.
9
-
10
- Attributes:
11
- timeout_seconds: Defaults to 300; must be >0.
12
- """
13
- timeout_seconds: int = ...
14
- def __post_init__(self) -> None:
15
- """Validate configuration after initialization."""
@@ -1,42 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.agent.hitl.config import ToolApprovalConfig as ToolApprovalConfig
3
- from aip_agents.agent.hitl.manager import ApprovalManager as ApprovalManager
4
- from aip_agents.schema.hitl import ApprovalDecision as ApprovalDecision, ApprovalDecisionType as ApprovalDecisionType, ApprovalRequest as ApprovalRequest, HitlMetadata as HitlMetadata
5
- from aip_agents.schema.langgraph import ToolCallResult as ToolCallResult
6
- from aip_agents.tools.tool_config_injector import TOOL_CONFIGS_KEY as TOOL_CONFIGS_KEY
7
- from aip_agents.utils.datetime import ensure_utc_datetime as ensure_utc_datetime
8
- from aip_agents.utils.logger import get_logger as get_logger
9
- from collections.abc import Callable
10
- from typing import Any
11
-
12
- logger: Incomplete
13
- MAX_CONTEXT_MESSAGE_LENGTH: int
14
-
15
- class LangGraphHitLMixin:
16
- """Provide Human-in-the-Loop helpers for LangGraph agents."""
17
- tool_configs: dict[str, Any] | None
18
- name: str
19
- @property
20
- def hitl_manager(self) -> ApprovalManager | None:
21
- """Return the active ``ApprovalManager``, creating one if needed."""
22
- @hitl_manager.setter
23
- def hitl_manager(self, manager: ApprovalManager | None) -> None:
24
- """Set the HITL approval manager instance.
25
-
26
- Args:
27
- manager: ApprovalManager instance or None.
28
- """
29
- def ensure_hitl_manager(self) -> ApprovalManager | None:
30
- """Ensure an ``ApprovalManager`` exists when HITL configs are present."""
31
- def use_hitl_manager(self, manager: ApprovalManager) -> None:
32
- """Replace the current ``ApprovalManager`` with the supplied instance.
33
-
34
- Args:
35
- manager: The ApprovalManager instance to use for HITL approvals.
36
- """
37
- def register_hitl_notifier(self, notifier: Callable[[ApprovalRequest], None]) -> None:
38
- """Register a notifier callback to receive HITL approval requests.
39
-
40
- Args:
41
- notifier: Callback function that will be called with approval requests.
42
- """
@@ -1,200 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.agent.hitl.config import ToolApprovalConfig as ToolApprovalConfig
3
- from aip_agents.agent.hitl.prompt import BasePromptHandler as BasePromptHandler, DeferredPromptHandler as DeferredPromptHandler
4
- from aip_agents.agent.hitl.registry import hitl_registry as hitl_registry
5
- from aip_agents.schema.hitl import ApprovalDecision as ApprovalDecision, ApprovalDecisionType as ApprovalDecisionType, ApprovalLogEntry as ApprovalLogEntry, ApprovalRequest as ApprovalRequest
6
- from collections.abc import Callable as Callable, Iterable
7
- from typing import Any
8
-
9
- MAX_ARGUMENTS_PREVIEW_LENGTH: int
10
- DECISION_MESSAGE_MAP: Incomplete
11
- TOOL_EXECUTION_BLOCKING_DECISIONS: Incomplete
12
-
13
- class ApprovalManager:
14
- """Manages the HITL approval workflow for tools.
15
-
16
- This class coordinates the approval process from configuration through
17
- to final decision, handling timeouts and cleanup.
18
- """
19
- def __init__(self, prompt_handler: BasePromptHandler | None = None) -> None:
20
- """Initialize the approval manager.
21
-
22
- Args:
23
- prompt_handler: Optional prompt handler for user interaction.
24
- Defaults to DeferredPromptHandler which exposes pending requests
25
- for out-of-band resolution.
26
- """
27
- def create_approval_request(self, tool_name: str, arguments: dict[str, Any], config: ToolApprovalConfig, context: dict[str, str] | None = None) -> ApprovalRequest:
28
- """Create a new approval request for a tool call.
29
-
30
- Args:
31
- tool_name: Name of the tool being called.
32
- arguments: Tool arguments (will be JSON serialized).
33
- config: Approval configuration for this tool.
34
- context: Optional context metadata. Defaults to None.
35
-
36
- Returns:
37
- The created approval request.
38
- """
39
- def get_pending_request(self, request_id: str) -> ApprovalRequest | None:
40
- """Get a pending approval request by ID.
41
-
42
- Args:
43
- request_id: The unique identifier of the approval request.
44
-
45
- Returns:
46
- The pending approval request if found, None otherwise.
47
- """
48
- def approve_request(self, request: ApprovalRequest, operator_input: str = 'approved') -> ApprovalDecision:
49
- '''Record an approval decision for a request.
50
-
51
- This method creates an approval decision, calculates latency metrics,
52
- and removes the request from the active requests queue.
53
-
54
- Args:
55
- request: The approval request to approve.
56
- operator_input: Raw operator input that led to this decision. Defaults to "approved".
57
-
58
- Returns:
59
- The recorded approval decision.
60
- '''
61
- def reject_request(self, request: ApprovalRequest, operator_input: str = 'rejected') -> ApprovalDecision:
62
- '''Record a rejection decision for a request.
63
-
64
- This method creates a rejection decision, calculates latency metrics,
65
- and removes the request from the active requests queue.
66
-
67
- Args:
68
- request: The approval request to reject.
69
- operator_input: Raw operator input that led to this decision. Defaults to "rejected".
70
-
71
- Returns:
72
- The recorded rejection decision.
73
- '''
74
- def skip_request(self, request: ApprovalRequest, operator_input: str = 'skipped') -> ApprovalDecision:
75
- '''Record a skip decision for a request.
76
-
77
- This method creates a skip decision, calculates latency metrics,
78
- and removes the request from the active requests queue.
79
-
80
- Args:
81
- request: The approval request to skip.
82
- operator_input: Raw operator input that led to this decision. Defaults to "skipped".
83
-
84
- Returns:
85
- The recorded skip decision.
86
- '''
87
- def timeout_request(self, request: ApprovalRequest, operator_input: str = 'TIMEOUT') -> ApprovalDecision:
88
- '''Record a timeout decision for a request, always skipping the tool.
89
-
90
- Args:
91
- request (ApprovalRequest): The approval request that timed out.
92
- operator_input (str, optional): Input from the operator (defaults to "TIMEOUT").
93
-
94
- Returns:
95
- ApprovalDecision: The timeout decision.
96
- '''
97
- def check_timeout(self, request: ApprovalRequest) -> ApprovalDecision | None:
98
- """Check if a request has timed out and return timeout decision if so.
99
-
100
- Args:
101
- request: The approval request to check.
102
-
103
- Returns:
104
- Timeout decision if timed out, None otherwise.
105
- """
106
- async def prompt_for_decision(self, request: ApprovalRequest, timeout_seconds: int, context_keys: list[str] | None = None) -> ApprovalDecision:
107
- """Prompt for a decision using the configured handler.
108
-
109
- This method delegates to the configured prompt handler to obtain
110
- an approval decision from the operator. The handler may be interactive
111
- (CLI) or deferred (programmatic, resume-in-place).
112
-
113
- Args:
114
- request: The approval request to prompt for.
115
- timeout_seconds: How long to wait for input.
116
- context_keys: Optional keys to display from context. Defaults to None.
117
-
118
- Returns:
119
- The operator's decision on the request.
120
- """
121
- def list_pending_requests(self) -> Iterable[ApprovalRequest]:
122
- """Return a snapshot of currently pending requests.
123
-
124
- This method provides a thread-safe snapshot of all currently active
125
- approval requests that are waiting for operator decisions.
126
-
127
- Returns:
128
- An iterable of all pending approval requests.
129
- """
130
- def resolve_pending_request(self, request_id: str, decision: str, operator_input: str = '') -> ApprovalDecision:
131
- '''Resolve a pending request with an explicit decision.
132
-
133
- Args:
134
- request_id: The unique identifier of the pending approval request.
135
- decision: The decision string (e.g., "approved", "rejected", "skipped").
136
- operator_input: Optional raw operator input, defaults to the decision string. Defaults to "".
137
-
138
- Returns:
139
- The recorded approval decision.
140
-
141
- Raises:
142
- KeyError: If no pending request exists with the given request_id.
143
- ValueError: If the decision string is not supported.
144
- '''
145
- def create_log_entry(self, decision: ApprovalDecision, tool_name: str, agent_id: str | None = None, thread_id: str | None = None, additional_context: dict[str, Any] | None = None) -> ApprovalLogEntry:
146
- """Create a log entry for a decision.
147
-
148
- Args:
149
- decision: The approval decision.
150
- tool_name: Name of the tool.
151
- agent_id: Optional agent identifier. Defaults to None.
152
- thread_id: Optional thread/session identifier. Defaults to None.
153
- additional_context: Optional additional logging context. Defaults to None.
154
-
155
- Returns:
156
- Structured log entry.
157
- """
158
- def cleanup_expired_requests(self) -> int:
159
- """Clean up expired requests and return count of cleaned requests.
160
-
161
- This method removes all approval requests that have exceeded their
162
- timeout period from the active requests queue. This is typically
163
- called periodically to prevent memory leaks from abandoned requests.
164
-
165
- Returns:
166
- The number of expired requests that were cleaned up.
167
- """
168
- def register_waiter(self, request_id: str, future: Any) -> None:
169
- """Register a waiter future for an approval request.
170
-
171
- Args:
172
- request_id: The id for which to wait.
173
- future: An asyncio.Future that will receive a tuple(decision, operator_input).
174
- """
175
- def unregister_waiter(self, request_id: str) -> None:
176
- """Unregister a waiter if present (used on timeout/cancellation).
177
-
178
- Args:
179
- request_id (str): The ID of the request to unregister the waiter for.
180
- """
181
- async def wait_for_pending_decision(self, request: ApprovalRequest, timeout_seconds: int) -> ApprovalDecision:
182
- """Wait for a pending request to be resolved and return the final decision.
183
-
184
- Args:
185
- request: The pending approval request to wait for.
186
- timeout_seconds: Maximum time to wait before treating as timeout.
187
-
188
- Returns:
189
- The finalized approval decision.
190
- """
191
- @staticmethod
192
- def get_decision_message(decision: ApprovalDecision) -> str:
193
- """Get the appropriate message for a HITL decision.
194
-
195
- Args:
196
- decision: The approval decision to get a message for.
197
-
198
- Returns:
199
- A human-readable message explaining the decision outcome.
200
- """
@@ -1,3 +0,0 @@
1
- from aip_agents.schema.hitl import ApprovalDecision as ApprovalDecision, ApprovalDecisionType as ApprovalDecisionType, ApprovalLogEntry as ApprovalLogEntry, ApprovalRequest as ApprovalRequest
2
-
3
- __all__ = ['ApprovalDecisionType', 'ApprovalRequest', 'ApprovalDecision', 'ApprovalLogEntry']
@@ -1,4 +0,0 @@
1
- from aip_agents.agent.hitl.prompt.base import BasePromptHandler as BasePromptHandler
2
- from aip_agents.agent.hitl.prompt.deferred import DeferredPromptHandler as DeferredPromptHandler
3
-
4
- __all__ = ['BasePromptHandler', 'DeferredPromptHandler']