From f0a750c8a3d5486ccaada193a346eb09fb62fd2b Mon Sep 17 00:00:00 2001 From: oyi77 Date: Mon, 27 Apr 2026 03:52:44 +0700 Subject: [PATCH] feat(compression): integrate pipeline into chatCore request flow Insert compression pipeline before existing compressContext() in chatCore.ts (~line 1228). Uses dynamic imports for compression modules, wrapped in try/catch so errors are non-fatal. Logs compression stats via log?.info?('COMPRESSION', ...). No changes to request flow when mode=off. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- open-sse/handlers/chatCore.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/open-sse/handlers/chatCore.ts b/open-sse/handlers/chatCore.ts index 49aefdbc8c..d3715b718b 100644 --- a/open-sse/handlers/chatCore.ts +++ b/open-sse/handlers/chatCore.ts @@ -1221,6 +1221,36 @@ export async function handleChatCore({ body?.messages || body?.input || body?.contents || body?.request?.contents || []; if (body && Array.isArray(allMessages) && allMessages.length > 0) { const estimatedTokens = estimateTokens(JSON.stringify(allMessages)); + + // --- Modular Compression Pipeline (Phase 1: Lite mode) --- + // Runs BEFORE the existing reactive compressContext() to proactively reduce tokens. + try { + const { getCompressionSettings } = await import("../../src/lib/db/compression"); + const { selectCompressionStrategy, applyCompression } = + await import("../services/compression/strategySelector"); + const { trackCompressionStats } = await import("../services/compression/stats"); + const config = await getCompressionSettings(); + const mode = selectCompressionStrategy(config, comboName ?? null, estimatedTokens); + if (mode !== "off") { + const result = applyCompression(body, mode, { model: effectiveModel }); + if (result.compressed && result.stats) { + body = result.body as typeof body; + trackCompressionStats(result.stats); + log?.info?.( + "COMPRESSION", + `Prompt compressed (${mode}): ${result.stats.originalTokens} -> ${result.stats.compressedTokens} tokens (${result.stats.savingsPercent}% saved, techniques: ${result.stats.techniquesUsed.join(",")})` + ); + } + } + } catch (err) { + log?.warn?.( + "COMPRESSION", + "Compression pipeline error (non-fatal): " + + (err instanceof Error ? err.message : String(err)) + ); + } + // --- End Modular Compression Pipeline --- + let contextLimit = getTokenLimit(provider, effectiveModel); if (isCombo && comboName) {