Skip to content

Commit c5df2f1

Browse files
docs: clarify GraphTools are compatible with any tool wrapper
- Add 'Composable Tool Wrappers' section explaining GraphTools implement standard interfaces - List example wrappers: InvokableApprovableTool, InvokableReviewEditTool, FollowUpTool - Clarify nested interrupts work with any interrupt-based wrapper, not just InvokableApprovableTool Change-Id: Ic3156bf0d28bb30b11dcd61092972bc2d12faccb
1 parent 44e0085 commit c5df2f1

3 files changed

Lines changed: 19 additions & 5 deletions

File tree

adk/common/tool/graphtool/README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,23 @@ The tool automatically:
116116
2. Wraps the interrupt with `CompositeInterrupt` for proper propagation
117117
3. Restores state and resumes execution when `runner.ResumeWithParams` is called
118118

119+
### Composable Tool Wrappers
120+
121+
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:
122+
123+
- **`InvokableApprovableTool`**: Adds human approval before tool execution
124+
- **`InvokableReviewEditTool`**: Allows users to review and edit tool arguments
125+
- **`FollowUpTool`**: Asks users follow-up questions during execution
126+
- Custom wrappers you create
127+
119128
### Nested Interrupts
120129

121-
GraphTools can be wrapped with `InvokableApprovableTool` for two-level approval:
122-
1. **Outer interrupt**: Tool-level approval (via `InvokableApprovableTool`)
123-
2. **Inner interrupt**: Workflow-level approval (via `StatefulInterrupt` inside nodes)
130+
When a GraphTool with internal interrupts is wrapped by another interrupt-based wrapper (e.g., `InvokableApprovableTool`), both interrupt layers work independently:
131+
132+
1. **Outer interrupt**: Wrapper-level interrupt (e.g., approval via `InvokableApprovableTool`)
133+
2. **Inner interrupt**: Workflow-level interrupt (via `StatefulInterrupt` inside graph nodes)
124134

125-
Both interrupts work independently due to distinct interrupt state types.
135+
This works because each layer uses distinct interrupt state types, preventing conflicts.
126136

127137
## Tool Options
128138

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/alicebob/miniredis/v2 v2.35.0
99
github.com/bytedance/sonic v1.14.2
1010
github.com/chromedp/chromedp v0.9.5
11-
github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972
11+
github.com/cloudwego/eino v0.7.22
1212
github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6
1313
github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20251117090452-bd6375a0b3cf
1414
github.com/cloudwego/eino-ext/components/document/parser/pdf v0.0.0-20251117090452-bd6375a0b3cf

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,12 @@ github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI
129129
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
130130
github.com/cloudwego/eino v0.7.14 h1:Ff62Z3dhdaGMFKG0cAVjcWfY7lb6mTkkBv4WFfdDU2k=
131131
github.com/cloudwego/eino v0.7.14/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ=
132+
github.com/cloudwego/eino v0.7.21 h1:kkq7hlHYzwkGOAMbY4ffym4oBT7e9g5hXpJTsZbhsik=
133+
github.com/cloudwego/eino v0.7.21/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ=
132134
github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972 h1:qxtj2YY+Z0aMzBCyzeD/S9grWDguOJinAjyadlsXsaU=
133135
github.com/cloudwego/eino v0.7.22-0.20260119120351-c3d518fff972/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ=
136+
github.com/cloudwego/eino v0.7.22 h1:GiDt+MHoOsgjIN3rI6ECiQ+NX1UIr0NzLKMdjOltHBc=
137+
github.com/cloudwego/eino v0.7.22/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ=
134138
github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6 h1:gS4nAOpQQC5WItt1k32yjZt9O2UWMpnbgF6vkMQAWhg=
135139
github.com/cloudwego/eino-ext/callbacks/cozeloop v0.1.6/go.mod h1:ZniRkgN+9FUFxtN60X7yzD6UOruqrKQusjrOiGcH4I8=
136140
github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20251117090452-bd6375a0b3cf h1:Uwh3VT+xPrfDjM677dj1pSidCzBFoTrYlC274kEci5w=

0 commit comments

Comments
 (0)