From a71dd1aee6ece711679dece158814617b296b50c Mon Sep 17 00:00:00 2001 From: oyi77 Date: Mon, 27 Apr 2026 03:52:13 +0700 Subject: [PATCH] feat(compression): implement stats tracking module Add estimateCompressionTokens() (char/4 heuristic), createCompressionStats() for per-request stats (original/compressed tokens, savings %, techniques), and trackCompressionStats() for logging. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- open-sse/services/compression/stats.ts | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 open-sse/services/compression/stats.ts diff --git a/open-sse/services/compression/stats.ts b/open-sse/services/compression/stats.ts new file mode 100644 index 0000000000..5e84f0b22e --- /dev/null +++ b/open-sse/services/compression/stats.ts @@ -0,0 +1,38 @@ +import type { CompressionStats, CompressionMode } from "./types"; + +const CHARS_PER_TOKEN = 4; + +export function estimateCompressionTokens(text: string | object | null | undefined): number { + if (!text) return 0; + const str = typeof text === "string" ? text : JSON.stringify(text); + return Math.ceil(str.length / CHARS_PER_TOKEN); +} + +export function createCompressionStats( + originalBody: Record, + compressedBody: Record, + mode: CompressionMode, + techniquesUsed: string[] +): CompressionStats { + const originalTokens = estimateCompressionTokens(originalBody); + const compressedTokens = estimateCompressionTokens(compressedBody); + const savingsPercent = + originalTokens > 0 + ? Math.round(((originalTokens - compressedTokens) / originalTokens) * 10000) / 100 + : 0; + return { + originalTokens, + compressedTokens, + savingsPercent, + techniquesUsed, + mode, + timestamp: Date.now(), + }; +} + +export function trackCompressionStats(stats: CompressionStats): void { + if (stats.originalTokens <= 0) return; + console.log( + `[COMPRESSION] mode=${stats.mode} tokens=${stats.originalTokens}->${stats.compressedTokens} savings=${stats.savingsPercent}% techniques=${stats.techniquesUsed.join(",")}` + ); +}