@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
JavaScript
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