Files
nexusAI/packages/orchestration-service/src/routes/chat.js
2026-04-26 22:28:54 -07:00

56 lines
1.7 KiB
JavaScript

const { Router } = require('express')
const { chat, chatStream } = require('../chat/index');
const memory = require('../services/memory')
const logger = require('@nexusai/shared');
const router = Router();
router.post('/', async (req, res) => {
const { sessionId, message } = req.body;
if (!sessionId) return res.status(400).json({ error: 'sessionId is required'});
if (!message) return res.status(400).json({ error: 'message is required'});
try {
const result = await chat(sessionId, message, {
model: req.body.model,
temperature: req.body.temperature,
});
res.json(result)
} catch (err) {
logger.error(`[orchestration] chat error: `, err.message)
res.status(500).json ({ error: err.message})
}
});
router.post('/stream', async (req, res) => {
const {sessionId, message} = req.body;
if(!sessionId || !message) {
return res.status(400).json({
error: 'sessionId and message are required'
});
}
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
res.flushHeaders();
try {
const { model, tokenCount } = await chatStream(
sessionId,
message,
(delta) => { res.write(`data: ${JSON.stringify({ text: delta })}\n\n`) },
{ model: req.body.model, temperature: req.body.temperature }
);
res.write(`data: ${JSON.stringify({ done: true, model, tokenCount })}\n\n`);
} catch (err) {
res.write(`data: ${JSON.stringify({error: err.message})}\n\n`);
} finally {
res.end();
}
});
module.exports = router;