// server.js
import express from « express »;
import cors from « cors »;
import fetch from « node-fetch »;
const app = express();
app.use(cors());
app.use(express.json());
const PERSONAS = {
classic: {
name: « Conseiller neutre »,
system: « Tu es un assistant clair, utile et factuel. Réponds en français, concis, étapes numérotées si utile. »
},
fun: {
name: « Créatif joueur »,
system: « Tu es enjoué, métaphorique avec parcimonie, ton chaleureux, tutoie l’utilisateur, reste concret. »
},
expertTech: {
name: « Ingénieur tech »,
system: « Tu es un expert technique. Réponds avec précision, exemples de code minimaux, vérifie les erreurs probables. »
},
vendeurB2B: {
name: « Conseiller B2B »,
system: « Tu aides à vendre en B2B de manière professionnelle, orientée ROI, courte, persuasive, sans jargon vide. »
},
coach: {
name: « Coach empathique »,
system: « Tu encourages, reformules, proposes des plans d’action réalistes en 3 à 5 étapes. »
}
};
app.post(« /chat », async (req, res) => {
const { message, personaId = « classic » } = req.body || {};
const persona = PERSONAS[personaId] || PERSONAS.classic;
// ⚠️ Remplace par ton appel à l’API OpenAI officielle (stream recommandé).
// Ici un pseudo-exemple de streaming via fetch + SSE-like.
res.setHeader(« Content-Type », « text/event-stream; charset=utf-8 »);
res.setHeader(« Cache-Control », « no-cache »);
res.setHeader(« Connection », « keep-alive »);
// Exemple d’appel (non fonctionnel tel quel) :
const resp = await fetch(« https://api.openai.com/v1/chat/completions », {
method: « POST »,
headers: {
« Authorization »: `Bearer ${process.env.OPENAI_API_KEY}`,
« Content-Type »: « application/json »
},
body: JSON.stringify({
model: « gpt-5-thinking »,
stream: true,
messages: [
{ role: « system », content: persona.system },
{ role: « user », content: message }
]
})
});
// Stream du résultat vers le client
for await (const chunk of resp.body) {
res.write(`data: ${chunk.toString()}\n\n`);
}
res.end();
});
app.listen(3000, () => console.log(« Server on http://localhost:3000 »));