require('dotenv').config(); const express = require('express'); const { OpenAI } = require('openai'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const app = express(); const port = process.env.PORT || 3000; // Configuration OpenAI const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // Middleware app.use(express.json()); app.use(express.static('public')); // Middleware CORS (pour développement) app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); // Routes API app.post('/api/chat', async (req, res) => { try { const completion = await openai.chat.completions.create({ model: "gpt-4", messages: [ { role: "system", content: "Tu es Rosalinda, une assistante IA spécialisée en développement logiciel. Sois concise, technique et utile." }, { role: "user", content: req.body.message } ], temperature: 0.7 }); res.json({ reply: completion.choices[0].message.content }); } catch (error) { console.error('OpenAI Error:', error); res.status(500).json({ error: error.message }); } }); app.post('/api/image', async (req, res) => { try { const response = await openai.images.generate({ prompt: req.body.prompt, n: 1, size: "1024x1024" }); res.json({ imageUrl: response.data[0].url }); } catch (error) { console.error('DALL-E Error:', error); res.status(500).json({ error: error.message }); } }); // Configuration pour l'audio const upload = multer({ dest: 'uploads/' }); app.post('/api/whisper', upload.single('audio'), async (req, res) => { try { const transcription = await openai.audio.transcriptions.create({ file: fs.createReadStream(req.file.path), model: "whisper-1" }); fs.unlinkSync(req.file.path); // Nettoyage res.json({ text: transcription.text }); } catch (error) { console.error('Whisper Error:', error); res.status(500).json({ error: error.message }); } }); // Démarrer le serveur // Gestion des erreurs 404 app.use((req, res) => { res.status(404).json({ error: 'Endpoint non trouvé' }); }); // Gestion des erreurs globales app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ error: 'Erreur interne du serveur' }); }); app.listen(port, () => { console.log(`Serveur backend démarré sur http://localhost:${port}`); console.log(`Endpoints disponibles:`); console.log(`- POST /api/chat`); console.log(`- POST /api/image`); console.log(`- POST /api/whisper`); });