UNPKG

@ooples/token-optimizer-mcp

Version:

Intelligent context window optimization for Claude Code - store content externally via caching and compression, freeing up your context window for what matters

54 lines 2.18 kB
export class SummarizationModule { model; tokenCounter; metrics; constructor(model, tokenCounter, metrics) { this.model = model; this.tokenCounter = tokenCounter; this.metrics = metrics; } async summarize(text, options = {}) { const startTime = Date.now(); const originalTokenResult = await Promise.resolve(this.tokenCounter.count(text)); const originalTokens = originalTokenResult.tokens; // Build summarization prompt const prompt = this.buildSummarizationPrompt(text, options); // Generate summary using foundation model const summary = await this.model.generate(prompt, { maxTokens: options.maxOutputTokens || Math.floor(originalTokens * 0.3), temperature: 0.3, // Lower temperature for factual summarization }); const summaryTokenResult = await Promise.resolve(this.tokenCounter.count(summary)); const summaryTokens = summaryTokenResult.tokens; const compressionRatio = summaryTokens / originalTokens; // Track metrics if (this.metrics) { this.metrics.recordSummarization({ originalTokens, summaryTokens, compressionRatio, latency: Date.now() - startTime, }); } return { summary, originalTokens, summaryTokens, compressionRatio, }; } buildSummarizationPrompt(text, options) { const style = options.style || 'concise'; const targetLength = options.maxOutputTokens ? `approximately ${options.maxOutputTokens} tokens` : `about ${Math.floor(text.length * 0.3)} characters`; let prompt = `Please provide a ${style} summary of the following text in ${targetLength}:\n\n`; if (options.preserveCodeBlocks) { prompt += 'IMPORTANT: Preserve all code blocks and technical details exactly as written.\n\n'; } prompt += `Text to summarize:\n${text}\n\nSummary:`; return prompt; } } //# sourceMappingURL=SummarizationModule.js.map