mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-23 23:28:17 +02:00
Feature: Chatbox IA avec OpenRouter et sélecteur de modèles
Ajout d'un chatbot interactif alimenté par OpenRouter API avec les fonctionnalités suivantes: - Bouton flottant en bas à droite pour ouvrir le chat - Sélecteur de modèles IA avec tous les modèles disponibles via l'API OpenRouter - Interface de chat avec historique des messages (utilisateur/assistant) - Indicateur de chargement avec animation - Boutons pour effacer l'historique et fermer le chat - Auto-scroll vers le dernier message - Backend: route POST /api/openrouter/chat pour la communication avec l'API - Service frontend: méthode sendMessage() dans OpenRouterService Retrait du composant MadeWithDyad comme demandé.
This commit is contained in:
3 files changed
+241
-5
No files matched your search
@@ -137,4 +137,55 @@ router.post('/refresh-models', authenticateToken, requireAdmin, async (req, res)
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* POST /api/openrouter/chat
|
||||
* Envoyer un message au modèle IA
|
||||
*/
|
||||
router.post('/chat', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const { model, messages } = req.body;
|
||||
|
||||
if (!model || !messages || !Array.isArray(messages)) {
|
||||
return res.status(400).json({ error: 'Modèle et messages requis' });
|
||||
}
|
||||
|
||||
// Récupérer la clé API
|
||||
const setting = await getOne('SELECT value FROM settings WHERE key = ?', ['openrouter_api_key']);
|
||||
|
||||
if (!setting || !setting.value) {
|
||||
return res.status(400).json({ error: 'Clé API OpenRouter non configurée' });
|
||||
}
|
||||
|
||||
// Appeler l'API OpenRouter
|
||||
const fetch = (await import('node-fetch')).default;
|
||||
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Authorization': `Bearer ${setting.value}`,
|
||||
'HTTP-Referer': process.env.APP_URL || 'http://localhost:5000',
|
||||
'X-Title': 'NoteFlow',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: model,
|
||||
messages: messages
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json().catch(() => ({}));
|
||||
logger.error(`Erreur API OpenRouter chat: ${response.status}`, errorData);
|
||||
return res.status(response.status).json({
|
||||
error: errorData.error?.message || 'Erreur lors de la communication avec l\'IA'
|
||||
});
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
res.json(data);
|
||||
} catch (error) {
|
||||
logger.error('Erreur lors du chat OpenRouter:', error);
|
||||
res.status(500).json({ error: 'Erreur serveur' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in new issue
Block a user