fix(webfetch): apply aggressive truncation for webfetch outputs (#434)
Root cause: DEFAULT_TARGET_MAX_TOKENS (50k tokens ~200k chars) was too high for webfetch outputs. Web pages can be large but most content doesn't exceed this limit, so truncation rarely triggered. Changes: - Add WEBFETCH_MAX_TOKENS = 10k tokens (~40k chars) for web content - Introduce TOOL_SPECIFIC_MAX_TOKENS map for per-tool limits - webfetch/WebFetch now use aggressive 10k token limit - Other tools continue using default 50k token limit - Add comprehensive tests for truncation behavior Fixes #195 Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
This commit is contained in:
@@ -2,6 +2,9 @@ import type { PluginInput } from "@opencode-ai/plugin"
|
||||
import type { ExperimentalConfig } from "../config/schema"
|
||||
import { createDynamicTruncator } from "../shared/dynamic-truncator"
|
||||
|
||||
const DEFAULT_MAX_TOKENS = 50_000 // ~200k chars
|
||||
const WEBFETCH_MAX_TOKENS = 10_000 // ~40k chars - web pages need aggressive truncation
|
||||
|
||||
const TRUNCATABLE_TOOLS = [
|
||||
"grep",
|
||||
"Grep",
|
||||
@@ -21,6 +24,11 @@ const TRUNCATABLE_TOOLS = [
|
||||
"WebFetch",
|
||||
]
|
||||
|
||||
const TOOL_SPECIFIC_MAX_TOKENS: Record<string, number> = {
|
||||
webfetch: WEBFETCH_MAX_TOKENS,
|
||||
WebFetch: WEBFETCH_MAX_TOKENS,
|
||||
}
|
||||
|
||||
interface ToolOutputTruncatorOptions {
|
||||
experimental?: ExperimentalConfig
|
||||
}
|
||||
@@ -36,7 +44,12 @@ export function createToolOutputTruncatorHook(ctx: PluginInput, options?: ToolOu
|
||||
if (!truncateAll && !TRUNCATABLE_TOOLS.includes(input.tool)) return
|
||||
|
||||
try {
|
||||
const { result, truncated } = await truncator.truncate(input.sessionID, output.output)
|
||||
const targetMaxTokens = TOOL_SPECIFIC_MAX_TOKENS[input.tool] ?? DEFAULT_MAX_TOKENS
|
||||
const { result, truncated } = await truncator.truncate(
|
||||
input.sessionID,
|
||||
output.output,
|
||||
{ targetMaxTokens }
|
||||
)
|
||||
if (truncated) {
|
||||
output.output = result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user