diff --git a/open-sse/services/compression/index.ts b/open-sse/services/compression/index.ts new file mode 100644 index 0000000000..d1f69eb6af --- /dev/null +++ b/open-sse/services/compression/index.ts @@ -0,0 +1,31 @@ +/** + * Compression Pipeline — Phase 1 (Lite mode) + * + * Modular prompt compression that runs BEFORE the existing reactive context manager. + * Lite mode: 5 techniques, ~10-15% token savings, <1ms latency. + */ + +// Types +export type { + CompressionMode, + CompressionConfig, + CompressionStats, + CompressionResult, +} from "./types"; +export { DEFAULT_COMPRESSION_CONFIG } from "./types"; + +// Lite compression techniques +export { + applyLiteCompression, + collapseWhitespace, + dedupSystemPrompt, + compressToolResults, + removeRedundantContent, + replaceImageUrls, +} from "./lite"; + +// Strategy selector +export { selectCompressionStrategy, getEffectiveMode, applyCompression } from "./strategySelector"; + +// Stats tracking +export { estimateCompressionTokens, createCompressionStats, trackCompressionStats } from "./stats"; diff --git a/open-sse/services/compression/types.ts b/open-sse/services/compression/types.ts new file mode 100644 index 0000000000..4d37d2f9a9 --- /dev/null +++ b/open-sse/services/compression/types.ts @@ -0,0 +1,45 @@ +/** + * Compression Pipeline Types — Phase 1 (Lite mode) + * + * Modular prompt compression that runs BEFORE the existing reactive context manager. + */ + +/** Compression mode levels (only 'off' and 'lite' are active in Phase 1) */ +export type CompressionMode = "off" | "lite" | "standard" | "aggressive" | "ultra"; + +/** Compression configuration stored in DB */ +export interface CompressionConfig { + enabled: boolean; + defaultMode: CompressionMode; + autoTriggerTokens: number; + cacheMinutes: number; + preserveSystemPrompt: boolean; + comboOverrides: Record; +} + +/** Per-request compression statistics */ +export interface CompressionStats { + originalTokens: number; + compressedTokens: number; + savingsPercent: number; + techniquesUsed: string[]; + mode: CompressionMode; + timestamp: number; +} + +/** Result of a compression operation */ +export interface CompressionResult { + body: Record; + compressed: boolean; + stats: CompressionStats | null; +} + +/** Default compression config values */ +export const DEFAULT_COMPRESSION_CONFIG: CompressionConfig = { + enabled: false, + defaultMode: "off", + autoTriggerTokens: 0, + cacheMinutes: 5, + preserveSystemPrompt: true, + comboOverrides: {}, +};