diff --git a/src/chat.js b/src/chat.js index bd815c1..803a556 100644 --- a/src/chat.js +++ b/src/chat.js @@ -13,7 +13,21 @@ function estimateTokens(text) { function calculateAvailableTokens(chatHistory, maxTokens) { const inputText = chatHistory.map(msg => msg.content).join(''); const inputTokens = estimateTokens(inputText); - const buffer = Math.max(2048, Math.floor(inputTokens * 1.5)); // Use 1.5x input tokens as buffer, minimum 2048 + + // For large context models (>32k), use a more reasonable buffer + // For smaller models, be more conservative + let buffer; + if (maxTokens > 32000) { + // Large context models: just reserve 10% or 2k tokens for safety + buffer = Math.min(2000, Math.floor(maxTokens * 0.1)); + } else if (maxTokens > 8000) { + // Medium models: reserve 20% or 1.5k tokens + buffer = Math.min(1500, Math.floor(maxTokens * 0.2)); + } else { + // Small models: keep conservative approach + buffer = Math.max(1000, Math.floor(inputTokens * 0.5)); + } + const availableTokens = Math.max(100, maxTokens - inputTokens - buffer); console.log(`Token calculation: max=${maxTokens}, input≈${inputTokens}, buffer=${buffer}, available≈${availableTokens}`); return availableTokens;