mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-18 12:49:29 +02:00
Fix: Amélioration des logs et gestion d'erreurs pour l'assistant IA OpenRouter
Problème : - Erreur 502 (Bad Gateway) sur /api/openrouter/chat - Message d'erreur générique "Provider returned error" peu informatif - Difficile de diagnostiquer la cause réelle du problème Solution backend (routes/openrouter.routes.js) : 1. Ajout de logs détaillés à chaque étape : - Début de requête avec modèle et nombre de messages - Validation de la clé API - Requête envoyée à OpenRouter - Réponse reçue avec status HTTP - Contenu de la réponse ou erreur détaillée 2. Amélioration de la gestion des erreurs : - Extraction du message d'erreur d'OpenRouter - Logs structurés avec contexte complet - Messages d'erreur plus descriptifs Solution frontend (src/services/OpenRouterService.ts) : 1. Ajout de logs console à chaque étape 2. Messages d'erreur contextuels selon le code HTTP : - 400 : Requête invalide (message d'erreur API) - 401 : Clé API invalide - 402 : Crédits épuisés - 429 : Trop de requêtes - 502/503 : Service temporairement indisponible 3. Validation de la réponse : - Vérification que le contenu existe - Message d'erreur si réponse vide Résultat : - Logs détaillés backend + frontend pour diagnostic - Messages d'erreur clairs et actionnables pour l'utilisateur - Meilleure traçabilité des problèmes OpenRouter
This commit is contained in:
2 files changed
+70
-13
No files matched your search
@@ -60,6 +60,8 @@ class OpenRouterService {
|
||||
*/
|
||||
async sendMessage(model: string, messages: Array<{ role: string; content: string }>): Promise<string> {
|
||||
try {
|
||||
console.log(`[OpenRouter] Envoi requête - model: ${model}, messages: ${messages.length}`);
|
||||
|
||||
const response = await fetch('/api/openrouter/chat', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
@@ -69,15 +71,42 @@ class OpenRouterService {
|
||||
body: JSON.stringify({ model, messages })
|
||||
});
|
||||
|
||||
console.log(`[OpenRouter] Réponse reçue - status: ${response.status}`);
|
||||
|
||||
if (!response.ok) {
|
||||
const error = await response.json().catch(() => ({ error: 'Erreur inconnue' }));
|
||||
throw new Error(error.error || 'Erreur lors de la communication avec l\'IA');
|
||||
const errorData = await response.json().catch(() => ({ error: 'Erreur inconnue' }));
|
||||
const errorMessage = errorData.error || `Erreur HTTP ${response.status}`;
|
||||
|
||||
console.error('[OpenRouter] Erreur:', errorMessage);
|
||||
|
||||
// Messages d'erreur plus clairs selon le code HTTP
|
||||
if (response.status === 400) {
|
||||
throw new Error(errorMessage);
|
||||
} else if (response.status === 401) {
|
||||
throw new Error('Clé API invalide. Vérifiez la configuration dans Paramètres.');
|
||||
} else if (response.status === 402) {
|
||||
throw new Error('Crédits OpenRouter épuisés. Rechargez votre compte.');
|
||||
} else if (response.status === 429) {
|
||||
throw new Error('Trop de requêtes. Attendez quelques instants.');
|
||||
} else if (response.status === 502 || response.status === 503) {
|
||||
throw new Error('Service OpenRouter temporairement indisponible. Réessayez dans quelques instants.');
|
||||
} else {
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data.choices?.[0]?.message?.content || 'Pas de réponse';
|
||||
const content = data.choices?.[0]?.message?.content;
|
||||
|
||||
if (!content) {
|
||||
console.error('[OpenRouter] Réponse vide:', data);
|
||||
throw new Error('Aucune réponse générée par le modèle');
|
||||
}
|
||||
|
||||
console.log(`[OpenRouter] Succès - ${content.length} caractères`);
|
||||
return content;
|
||||
} catch (error: any) {
|
||||
console.error('Erreur lors de l\'envoi du message:', error);
|
||||
console.error('[OpenRouter] Erreur exception:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user