56 lines
1.7 KiB
JavaScript
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; |