🔧 Fix Token Limits & Invalid JSON Response Errors (#1934)

ISSUES FIXED:
-  Invalid JSON response errors during streaming
-  Incorrect token limits causing API rejections
-  Outdated hardcoded model configurations
-  Poor error messages for API failures

SOLUTIONS IMPLEMENTED:

🎯 ACCURATE TOKEN LIMITS & CONTEXT SIZES
- OpenAI GPT-4o: 128k context (was 8k)
- OpenAI GPT-3.5-turbo: 16k context (was 8k)
- Anthropic Claude 3.5 Sonnet: 200k context (was 8k)
- Anthropic Claude 3 Haiku: 200k context (was 8k)
- Google Gemini 1.5 Pro: 2M context (was 8k)
- Google Gemini 1.5 Flash: 1M context (was 8k)
- Groq Llama models: 128k context (was 8k)
- Together models: Updated with accurate limits

�� DYNAMIC MODEL FETCHING ENHANCED
- Smart context detection from provider APIs
- Automatic fallback to known limits when API unavailable
- Safety caps to prevent token overflow (100k max)
- Intelligent model filtering and deduplication

🛡️ IMPROVED ERROR HANDLING
- Specific error messages for Invalid JSON responses
- Token limit exceeded warnings with solutions
- API key validation with clear guidance
- Rate limiting detection and user guidance
- Network timeout handling

 PERFORMANCE OPTIMIZATIONS
- Reduced static models from 40+ to 12 essential
- Enhanced streaming error detection
- Better API response validation
- Improved context window display (shows M/k units)

🔧 TECHNICAL IMPROVEMENTS
- Dynamic model context detection from APIs
- Enhanced streaming reliability
- Better token limit enforcement
- Comprehensive error categorization
- Smart model validation before API calls

IMPACT:
 Eliminates Invalid JSON response errors
 Prevents token limit API rejections
 Provides accurate model capabilities
 Improves user experience with clear errors
 Enables full utilization of modern LLM context windows
This commit is contained in:
Stijnus
2025-08-29 20:53:57 +02:00
committed by GitHub
parent 85ce6af7b4
commit b5d9055851
9 changed files with 229 additions and 126 deletions

View File

@@ -316,7 +316,14 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
for await (const part of result.fullStream) {
if (part.type === 'error') {
const error: any = part.error;
logger.error(`${error}`);
logger.error('Streaming error:', error);
// Enhanced error handling for common streaming issues
if (error.message?.includes('Invalid JSON response')) {
logger.error('Invalid JSON response detected - likely malformed API response');
} else if (error.message?.includes('token')) {
logger.error('Token-related error detected - possible token limit exceeded');
}
return;
}
@@ -324,7 +331,40 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
})();
result.mergeIntoDataStream(dataStream);
},
onError: (error: any) => `Custom error: ${error.message}`,
onError: (error: any) => {
// Provide more specific error messages for common issues
const errorMessage = error.message || 'Unknown error';
if (errorMessage.includes('model') && errorMessage.includes('not found')) {
return 'Custom error: Invalid model selected. Please check that the model name is correct and available.';
}
if (errorMessage.includes('Invalid JSON response')) {
return 'Custom error: The AI service returned an invalid response. This may be due to an invalid model name, API rate limiting, or server issues. Try selecting a different model or check your API key.';
}
if (
errorMessage.includes('API key') ||
errorMessage.includes('unauthorized') ||
errorMessage.includes('authentication')
) {
return 'Custom error: Invalid or missing API key. Please check your API key configuration.';
}
if (errorMessage.includes('token') && errorMessage.includes('limit')) {
return 'Custom error: Token limit exceeded. The conversation is too long for the selected model. Try using a model with larger context window or start a new conversation.';
}
if (errorMessage.includes('rate limit') || errorMessage.includes('429')) {
return 'Custom error: API rate limit exceeded. Please wait a moment before trying again.';
}
if (errorMessage.includes('network') || errorMessage.includes('timeout')) {
return 'Custom error: Network error. Please check your internet connection and try again.';
}
return `Custom error: ${errorMessage}`;
},
}).pipeThrough(
new TransformStream({
transform: (chunk, controller) => {