| name | mistral-common-errors |
| description | Diagnose and fix Mistral AI common errors and exceptions.
Use when encountering Mistral errors, debugging failed requests,
or troubleshooting integration issues.
Trigger with phrases like "mistral error", "fix mistral",
"mistral not working", "debug mistral".
|
| allowed-tools | Read, Grep, Bash(curl:*) |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
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
Cause: API key is missing, expired, or invalid.
Solution:
echo $MISTRAL_API_KEY
curl -H "Authorization: Bearer ${MISTRAL_API_KEY}" \
https://api.mistral.ai/v1/models
Code Fix:
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
Headers: Retry-After: 60
Cause: Too many requests in a short period.
Solution:
Implement exponential backoff. See mistral-rate-limits skill.
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) {
const retryAfter = parseInt(error.headers?.['retry-after'] || '60');
console.log(`Rate limited. Waiting ${retryAfter}s...`);
await new Promise(r => setTimeout(r, retryAfter * 1000));
} else {
throw error;
}
}
}
throw new Error('Max retries exceeded');
}
400 Bad Request - Invalid Parameters
Error Message:
Error: Invalid request. Check your parameters.
Status: 400
{"message": "Invalid model: mistral-ultra"}
Cause: Invalid model name, malformed messages, or incorrect parameters.
Solution:
const VALID_MODELS = [
'mistral-large-latest',
'mistral-medium-latest',
'mistral-small-latest',
'open-mistral-7b',
'open-mixtral-8x7b',
'mistral-embed',
] as const;
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
Cause: Too many tokens in the request.
Solution:
function truncateMessages(messages: Message[], maxTokens = 30000): Message[] {
const systemMsg = messages.find(m => m.role === 'system');
const otherMsgs = messages.filter(m => m.role !== 'system');
let tokenEstimate = systemMsg ? systemMsg.content.length / 4 : 0;
const truncated: Message[] = systemMsg ? [systemMsg] : [];
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
Cause: Mistral AI service experiencing issues.
Solution:
curl -s https://status.mistral.ai/ | head -20
class CircuitBreaker {
private failures = 0;
private lastFailure?: Date;
private readonly threshold = 5;
private readonly resetTimeout = 60000;
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) {
this.failures++;
this.lastFailure = new Date();
}
throw error;
}
}
private isOpen(): boolean {
if (this. < .) ;
elapsed = .() - (.?.() || );
elapsed < .;
}
}
Network Timeout
Error Message:
Error: Request timeout after 30000ms
Cause: Network connectivity or server latency issues.
Solution:
const client = new Mistral({
apiKey: process.env.MISTRAL_API_KEY,
timeout: 60000,
});
const client = new Mistral({
apiKey: process.env.MISTRAL_API_KEY,
timeout: 120000,
});
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:
const tool = {
type: 'function',
function: {
name: 'get_weather',
description: 'Get weather for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'City name',
},
},
required: ['location'],
},
},
};
Quick Diagnostic Commands
curl -I https://api.mistral.ai/v1/models \
-H "Authorization: Bearer ${MISTRAL_API_KEY}"
curl https://api.mistral.ai/v1/models \
-H "Authorization: Bearer ${MISTRAL_API_KEY}" | jq '.data[].id'
env | grep MISTRAL
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
Next Steps
For comprehensive debugging, see mistral-debug-bundle.