Mistral AI Common Errors
Overview
Quick reference for the most common Mistral AI errors and their solutions.
Prerequisites
-
Mistral AI SDK installed
-
API credentials configured
-
Access to error logs
Instructions
Step 1: Identify the Error
Check error message, status code, and request ID in your logs or console.
Step 2: Find Matching Error Below
Match your error to one of the documented cases.
Step 3: Apply Solution
Follow the solution steps for your specific error.
Output
-
Identified error cause
-
Applied fix
-
Verified resolution
Error Handling
401 Unauthorized - Authentication Failed
Error Message:
Error: Authentication failed. Invalid API key. Status: 401 # HTTP 401 Unauthorized
Cause: API key is missing, expired, or invalid.
Solution:
set -euo pipefail
Verify API key is set
echo $MISTRAL_API_KEY
Test API key
curl -H "Authorization: Bearer ${MISTRAL_API_KEY}"
https://api.mistral.ai/v1/models
Code Fix:
// Ensure API key is loaded const apiKey = process.env.MISTRAL_API_KEY; if (!apiKey) { throw new Error('MISTRAL_API_KEY is not set'); } const client = new Mistral({ apiKey });
429 Too Many Requests - Rate Limited
Error Message:
Error: Rate limit exceeded. Please retry after X seconds. Status: 429 # HTTP 429 Too Many Requests Headers: Retry-After: 60
Cause: Too many requests in a short period.
Solution: Implement exponential backoff. See mistral-rate-limits skill.
// Quick fix: Add delay and retry
async function withRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error: any) {
if (error.status === 429 && i < maxRetries - 1) { # HTTP 429 Too Many Requests
const retryAfter = parseInt(error.headers?.['retry-after'] || '60');
console.log(Rate limited. Waiting ${retryAfter}s...);
await new Promise(r => setTimeout(r, retryAfter * 1000)); # 1000: 1 second in ms
} else {
throw error;
}
}
}
throw new Error('Max retries exceeded');
}
400 Bad Request - Invalid Parameters
Error Message:
Error: Invalid request. Check your parameters. Status: 400 # HTTP 400 Bad Request {"message": "Invalid model: mistral-ultra"}
Cause: Invalid model name, malformed messages, or incorrect parameters.
Solution:
// Valid model names const VALID_MODELS = [ 'mistral-large-latest', 'mistral-medium-latest', // Deprecated - use small or large 'mistral-small-latest', 'open-mistral-7b', 'open-mixtral-8x7b', 'mistral-embed', ] as const;
// Validate before request
function validateRequest(model: string, messages: any[]) {
if (!VALID_MODELS.includes(model as any)) {
throw new Error(Invalid model: ${model});
}
if (!messages || messages.length === 0) {
throw new Error('Messages array cannot be empty');
}
for (const msg of messages) {
if (!['system', 'user', 'assistant', 'tool'].includes(msg.role)) {
throw new Error(Invalid role: ${msg.role});
}
}
}
413 Payload Too Large - Context Exceeded
Error Message:
Error: Request too large. Maximum context length exceeded. Status: 413 # 413 = configured value
Cause: Too many tokens in the request.
Solution:
// Truncate conversation history function truncateMessages(messages: Message[], maxTokens = 30000): Message[] { # 30000: 30 seconds in ms // Keep system message const systemMsg = messages.find(m => m.role === 'system'); const otherMsgs = messages.filter(m => m.role !== 'system');
// Estimate ~4 chars per token let tokenEstimate = systemMsg ? systemMsg.content.length / 4 : 0; const truncated: Message[] = systemMsg ? [systemMsg] : [];
// Add messages from most recent for (let i = otherMsgs.length - 1; i >= 0; i--) { const msgTokens = otherMsgs[i].content.length / 4; if (tokenEstimate + msgTokens > maxTokens) break; tokenEstimate += msgTokens; truncated.unshift(otherMsgs[i]); }
return truncated; }
500/503 Server Error - Mistral Service Issue
Error Message:
Error: Internal server error Status: 500/503 # 503: HTTP 500 Internal Server Error
Cause: Mistral AI service experiencing issues.
Solution:
set -euo pipefail
Check Mistral status
curl -s https://status.mistral.ai/ | head -20
Implement circuit breaker
class CircuitBreaker { private failures = 0; private lastFailure?: Date; private readonly threshold = 5; private readonly resetTimeout = 60000; // 1 minute # 60000: 1 minute in ms
async call<T>(fn: () => Promise<T>): Promise<T> { if (this.isOpen()) { throw new Error('Circuit breaker is open'); }
try {
const result = await fn();
this.failures = 0;
return result;
} catch (error: any) {
if (error.status >= 500) { # HTTP 500 Internal Server Error
this.failures++;
this.lastFailure = new Date();
}
throw error;
}
}
private isOpen(): boolean { if (this.failures < this.threshold) return false; const elapsed = Date.now() - (this.lastFailure?.getTime() || 0); return elapsed < this.resetTimeout; } }
Network Timeout
Error Message:
Error: Request timeout after 30000ms
Cause: Network connectivity or server latency issues.
Solution:
// Increase timeout const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, timeout: 60000, // 60 seconds # 60000: 1 minute in ms });
// For streaming, use longer timeout const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, timeout: 120000, // 2 minutes for long responses # 120000 = configured value });
Invalid Tool/Function Schema
Error Message:
Error: Invalid tool definition {"message": "function.parameters must be a valid JSON Schema"}
Cause: Malformed function calling schema.
Solution:
// Correct tool schema const tool = { type: 'function', function: { name: 'get_weather', // lowercase, underscores description: 'Get weather for a location', parameters: { type: 'object', properties: { location: { type: 'string', // Valid JSON Schema types description: 'City name', }, }, required: ['location'], // Array of required property names }, }, };
Quick Diagnostic Commands
set -euo pipefail
Check API connectivity
curl -I https://api.mistral.ai/v1/models
-H "Authorization: Bearer ${MISTRAL_API_KEY}"
List available models
curl https://api.mistral.ai/v1/models
-H "Authorization: Bearer ${MISTRAL_API_KEY}" | jq '.data[].id'
Check local configuration
env | grep MISTRAL
Test basic chat
curl https://api.mistral.ai/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer ${MISTRAL_API_KEY}"
-d '{
"model": "mistral-small-latest",
"messages": [{"role": "user", "content": "Hello"}]
}'
Escalation Path
-
Collect evidence with mistral-debug-bundle
-
Check Mistral status page: https://status.mistral.ai/
-
Contact support via Discord or email
Resources
-
Mistral AI Status Page
-
Mistral AI Discord
-
Mistral AI API Reference
Next Steps
For comprehensive debugging, see mistral-debug-bundle .
Examples
Basic usage: Apply mistral common errors to a standard project setup with default configuration options.
Advanced scenario: Customize mistral common errors for production environments with multiple constraints and team-specific requirements.