diff --git a/adk/common/tool/graphtool/README.md b/adk/common/tool/graphtool/README.md index 5beeac0..ad8eca1 100644 --- a/adk/common/tool/graphtool/README.md +++ b/adk/common/tool/graphtool/README.md @@ -116,13 +116,23 @@ The tool automatically: 2. Wraps the interrupt with `CompositeInterrupt` for proper propagation 3. Restores state and resumes execution when `runner.ResumeWithParams` is called +### Composable Tool Wrappers + +GraphTools implement standard `tool.InvokableTool` or `tool.StreamableTool` interfaces, making them compatible with any tool wrapper in the ecosystem. Examples of wrappers you can use: + +- **`InvokableApprovableTool`**: Adds human approval before tool execution +- **`InvokableReviewEditTool`**: Allows users to review and edit tool arguments +- **`FollowUpTool`**: Asks users follow-up questions during execution +- Custom wrappers you create + ### Nested Interrupts -GraphTools can be wrapped with `InvokableApprovableTool` for two-level approval: -1. **Outer interrupt**: Tool-level approval (via `InvokableApprovableTool`) -2. **Inner interrupt**: Workflow-level approval (via `StatefulInterrupt` inside nodes) +When a GraphTool with internal interrupts is wrapped by another interrupt-based wrapper (e.g., `InvokableApprovableTool`), both interrupt layers work independently: + +1. **Outer interrupt**: Wrapper-level interrupt (e.g., approval via `InvokableApprovableTool`) +2. **Inner interrupt**: Workflow-level interrupt (via `StatefulInterrupt` inside graph nodes) -Both interrupts work independently due to distinct interrupt state types. +This works because each layer uses distinct interrupt state types, preventing conflicts. ## Tool Options diff --git a/go.mod b/go.mod index 22aeaa8..f0389cd 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/alicebob/miniredis/v2 v2.35.0 github.com/bytedance/sonic v1.14.2 github.com/chromedp/chromedp v0.9.5 - github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972 + github.com/cloudwego/eino v0.7.22 github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6 github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20251117090452-bd6375a0b3cf github.com/cloudwego/eino-ext/components/document/parser/pdf v0.0.0-20251117090452-bd6375a0b3cf diff --git a/go.sum b/go.sum index cfe05ac..bc21f9c 100644 --- a/go.sum +++ b/go.sum @@ -129,8 +129,12 @@ github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= github.com/cloudwego/eino v0.7.14 h1:Ff62Z3dhdaGMFKG0cAVjcWfY7lb6mTkkBv4WFfdDU2k= github.com/cloudwego/eino v0.7.14/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ= +github.com/cloudwego/eino v0.7.21 h1:kkq7hlHYzwkGOAMbY4ffym4oBT7e9g5hXpJTsZbhsik= +github.com/cloudwego/eino v0.7.21/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ= github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972 h1:qxtj2YY+Z0aMzBCyzeD/S9grWDguOJinAjyadlsXsaU= github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ= +github.com/cloudwego/eino v0.7.22 h1:GiDt+MHoOsgjIN3rI6ECiQ+NX1UIr0NzLKMdjOltHBc= +github.com/cloudwego/eino v0.7.22/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ= github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6 h1:gS4nAOpQQC5WItt1k32yjZt9O2UWMpnbgF6vkMQAWhg= github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6/go.mod h1:ZniRkgN+9FUFxtN60X7yzD6UOruqrKQusjrOiGcH4I8= github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20251117090452-bd6375a0b3cf h1:Uwh3VT+xPrfDjM677dj1pSidCzBFoTrYlC274kEci5w=