From dc34ec5283f1a22f151ebec4f2ba1fbce8761817 Mon Sep 17 00:00:00 2001 From: "Siren.W" <45112049+sirenexcelsior@users.noreply.github.com> Date: Mon, 25 May 2026 10:30:54 +0300 Subject: [PATCH] Do not expose tools for standalone text-only LLMRunner tasks (#59) Removes tool exposure from the standalone `LLMRunner` when `enableTools=false`. Some standalone text-only tasks, such as L1 extraction, expect plain text output and do not need tool access. Passing even a read-only tool subset can still encourage tool-calling behavior on OpenAI-compatible backends, which makes this path less stable than necessary. With this change: - `enableTools=true` keeps the existing sandboxed tool behavior - `enableTools=false` sends no tools at all --- src/adapters/standalone/llm-runner.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/adapters/standalone/llm-runner.ts b/src/adapters/standalone/llm-runner.ts index 2f7c9e1..13bf620 100644 --- a/src/adapters/standalone/llm-runner.ts +++ b/src/adapters/standalone/llm-runner.ts @@ -149,12 +149,6 @@ function createSandboxedTools(workspaceDir: string, logger?: Logger) { }; } -/** Read-only tool subset — used when enableTools=false to avoid empty tools rejection. */ -function createReadOnlyTools(workspaceDir: string, logger?: Logger) { - const all = createSandboxedTools(workspaceDir, logger); - return { read_file: all.read_file }; -} - // ============================ // StandaloneLLMRunner // ============================ @@ -197,17 +191,17 @@ export class StandaloneLLMRunner implements LLMRunner { compatibility: "compatible", }); - // Select tools based on mode + // For pure text tasks like L1 extraction, avoid exposing any tools. const tools = this.enableTools ? createSandboxedTools(workspaceDir, this.logger) - : createReadOnlyTools(workspaceDir, this.logger); + : undefined; try { const result = await generateText({ model: provider.chat(this.model), system: params.systemPrompt, prompt: params.prompt, - tools, + ...(tools ? { tools } : {}), stopWhen: stepCountIs(this.enableTools ? MAX_TOOL_ITERATIONS : 1), maxOutputTokens: maxTokens, abortSignal: AbortSignal.timeout(timeoutMs),