|
38 | 38 | import com.google.adk.models.LlmRequest; |
39 | 39 | import com.google.adk.models.LlmResponse; |
40 | 40 | import com.google.adk.telemetry.Tracing; |
| 41 | +import com.google.adk.tools.BaseTool; |
| 42 | +import com.google.adk.tools.BaseToolset; |
41 | 43 | import com.google.adk.tools.ToolContext; |
42 | 44 | import com.google.common.collect.ImmutableList; |
43 | 45 | import com.google.common.collect.Iterables; |
@@ -99,10 +101,24 @@ private Flowable<Event> preprocess( |
99 | 101 | RequestProcessor toolsProcessor = |
100 | 102 | (ctx, req) -> { |
101 | 103 | LlmRequest.Builder builder = req.toBuilder(); |
102 | | - return agent |
103 | | - .canonicalTools(new ReadonlyContext(ctx)) |
| 104 | + ReadonlyContext readonlyContext = new ReadonlyContext(ctx); |
| 105 | + return Flowable.fromIterable(agent.toolsUnion()) |
104 | 106 | .concatMapCompletable( |
105 | | - tool -> tool.processLlmRequest(builder, ToolContext.builder(ctx).build())) |
| 107 | + toolOrToolset -> { |
| 108 | + ToolContext toolContext = ToolContext.builder(ctx).build(); |
| 109 | + if (toolOrToolset instanceof BaseToolset toolset) { |
| 110 | + return toolset |
| 111 | + .processLlmRequest(builder, toolContext) |
| 112 | + .andThen( |
| 113 | + toolset |
| 114 | + .getTools(readonlyContext) |
| 115 | + .concatMapCompletable( |
| 116 | + tool -> tool.processLlmRequest(builder, toolContext))); |
| 117 | + } else if (toolOrToolset instanceof BaseTool tool) { |
| 118 | + return tool.processLlmRequest(builder, toolContext); |
| 119 | + } |
| 120 | + return Completable.complete(); |
| 121 | + }) |
106 | 122 | .andThen( |
107 | 123 | Single.fromCallable( |
108 | 124 | () -> RequestProcessingResult.create(builder.build(), ImmutableList.of()))); |
|
0 commit comments