contaigents
Version:
Modular AI Content Ecosystem with Audio Generation
195 lines (194 loc) • 6.37 kB
JavaScript
import { Router } from 'express';
import { ChatService } from '../services/chatService.js';
const router = Router();
const chatService = new ChatService(process.cwd());
// POST /api/chat/session - Create a new chat session
router.post('/chat/session', async (req, res) => {
try {
const options = req.body;
console.log("Creating chat session with options:", options);
const session = await chatService.createSession(options);
res.status(201).json({
success: true,
session: {
id: session.id,
createdAt: session.createdAt,
systemPrompt: session.systemPrompt
}
});
}
catch (error) {
console.error('Error creating chat session:', error);
res.status(500).json({
success: false,
error: 'Failed to create chat session',
message: error.message
});
}
});
// POST /api/chat/message - Send a message to a chat session
router.post('/chat/message', async (req, res) => {
try {
const { sessionId, message, options } = req.body;
if (!sessionId || !message) {
return res.status(400).json({
success: false,
error: 'Session ID and message are required'
});
}
console.log(`Sending message to session ${sessionId}:`, message);
const response = await chatService.sendMessage(sessionId, message, options);
res.json({
success: true,
message: response
});
}
catch (error) {
console.error('Error sending message:', error);
res.status(500).json({
success: false,
error: 'Failed to send message',
message: error.message
});
}
});
// GET /api/chat/session/:sessionId/messages - Get all messages from a session
router.get('/chat/session/:sessionId/messages', async (req, res) => {
try {
const { sessionId } = req.params;
const messages = chatService.getMessages(sessionId);
if (messages.length === 0) {
const session = chatService.getSession(sessionId);
if (!session) {
return res.status(404).json({
success: false,
error: 'Chat session not found'
});
}
}
res.json({
success: true,
messages
});
}
catch (error) {
console.error('Error getting messages:', error);
res.status(500).json({
success: false,
error: 'Failed to get messages',
message: error.message
});
}
});
// GET /api/chat/session/:sessionId - Get session details
router.get('/chat/session/:sessionId', async (req, res) => {
try {
const { sessionId } = req.params;
const session = chatService.getSession(sessionId);
if (!session) {
return res.status(404).json({
success: false,
error: 'Chat session not found'
});
}
res.json({
success: true,
session: {
id: session.id,
createdAt: session.createdAt,
updatedAt: session.updatedAt,
messageCount: session.messages.filter(msg => msg.role !== 'system').length,
systemPrompt: session.systemPrompt
}
});
}
catch (error) {
console.error('Error getting session:', error);
res.status(500).json({
success: false,
error: 'Failed to get session',
message: error.message
});
}
});
// GET /api/chat/sessions - List all active sessions
router.get('/chat/sessions', async (req, res) => {
try {
const sessions = chatService.listSessions();
const sessionSummaries = sessions.map(session => ({
id: session.id,
createdAt: session.createdAt,
updatedAt: session.updatedAt,
messageCount: session.messages.filter(msg => msg.role !== 'system').length
}));
res.json({
success: true,
sessions: sessionSummaries
});
}
catch (error) {
console.error('Error listing sessions:', error);
res.status(500).json({
success: false,
error: 'Failed to list sessions',
message: error.message
});
}
});
// DELETE /api/chat/session/:sessionId - Clear/delete a chat session
router.delete('/chat/session/:sessionId', async (req, res) => {
try {
const { sessionId } = req.params;
const deleted = chatService.clearSession(sessionId);
if (!deleted) {
return res.status(404).json({
success: false,
error: 'Chat session not found'
});
}
res.json({
success: true,
message: 'Chat session deleted successfully'
});
}
catch (error) {
console.error('Error deleting session:', error);
res.status(500).json({
success: false,
error: 'Failed to delete session',
message: error.message
});
}
});
// POST /api/chat/quick - Quick chat endpoint for single message/response
router.post('/chat/quick', async (req, res) => {
try {
const { message, options } = req.body;
if (!message) {
return res.status(400).json({
success: false,
error: 'Message is required'
});
}
console.log("Quick chat message:", message);
// Create a temporary session for quick chat
const session = await chatService.createSession(options);
// Send message and get response
const response = await chatService.sendMessage(session.id, message, options);
// Clean up the temporary session
chatService.clearSession(session.id);
res.json({
success: true,
message: response
});
}
catch (error) {
console.error('Error in quick chat:', error);
res.status(500).json({
success: false,
error: 'Failed to process quick chat',
message: error.message
});
}
});
export default router;