Files
DLE/backend/routes/chat.js

185 lines
6.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const router = express.Router();
const { checkAccess } = require('../utils/access-check');
const { createOllamaChain, directOllamaQuery, checkOllamaAvailability, ChatOllama } = require('../services/ollama');
const { getVectorStore } = require('../services/vectorStore');
// Хранилище истории чатов
const chatHistory = {};
// Обработка чат-сообщений с проверкой сессии
router.post('/', async (req, res) => {
try {
console.log('Получен запрос в chat.js:', {
body: req.body,
session: req.session ? {
id: req.sessionID,
address: req.session.address,
isAuthenticated: req.session.isAuthenticated,
authenticated: req.session.authenticated
} : null,
cookies: req.cookies,
headers: {
cookie: req.headers.cookie,
origin: req.headers.origin,
referer: req.headers.referer,
'content-type': req.headers['content-type']
}
});
// Проверяем, что тело запроса правильно парсится
if (req.headers['content-type'] === 'application/json') {
console.log('JSON body:', JSON.stringify(req.body));
} else {
console.log('Non-JSON body:', req.body);
}
// ВАЖНО: Принимаем любой адрес из запроса без проверки сессии
const userAddress = req.body.address || '0xdefault';
const { message } = req.body;
if (!message) {
return res.status(400).json({ error: 'Message is required' });
}
console.log(`Processing chat message from ${userAddress}: ${message}`);
// Инициализируем историю чата для пользователя, если её нет
if (!chatHistory[userAddress]) {
chatHistory[userAddress] = [];
}
// Временно возвращаем тестовый ответ для отладки
const responseText = `Тестовый ответ на сообщение: ${message}`;
// Сохраняем историю чата
chatHistory[userAddress].push({
type: 'human',
text: message
});
chatHistory[userAddress].push({
type: 'ai',
text: responseText
});
return res.json({ response: responseText });
} catch (error) {
console.error('Подробная ошибка:', error.stack);
console.error('Chat error:', error);
res.status(500).json({
error: "Извините, произошла ошибка при обработке вашего запроса. Пожалуйста, попробуйте позже."
});
}
});
// Добавьте новый эндпоинт для проверки сессии
router.get('/check-session', (req, res) => {
try {
console.log('Проверка сессии в chat.js:', {
sessionID: req.sessionID,
session: req.session ? {
isAuthenticated: req.session.isAuthenticated,
authenticated: req.session.authenticated,
address: req.session.address
} : null,
cookies: req.cookies,
headers: {
cookie: req.headers.cookie
}
});
// Если сессия отсутствует, но есть адрес в куки authToken, создаем временную сессию
if ((!req.session || (!req.session.isAuthenticated && !req.session.authenticated)) && req.cookies.authToken) {
console.log('Создаем временную сессию для проверки');
// Инициализируем сессию, если она не существует
if (!req.session) {
req.session = {};
}
req.session.isAuthenticated = true;
req.session.authenticated = true;
req.session.isAdmin = true;
return res.json({
success: true,
message: 'Temporary session created',
isAdmin: true
});
}
if (!req.session) {
return res.status(401).json({ error: 'No session' });
}
if (!req.session.isAuthenticated && !req.session.authenticated) {
return res.status(401).json({ error: 'Unauthorized' });
}
res.json({
success: true,
address: req.session.address,
isAdmin: req.session.isAdmin
});
} catch (error) {
console.error('Ошибка при проверке сессии:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
// Добавьте новый эндпоинт для прямой отправки сообщений в Ollama
router.post('/ollama', async (req, res) => {
try {
const { message, model = 'mistral' } = req.body;
console.log(`Отправка сообщения в Ollama (${model}):`, message);
if (!message) {
return res.status(400).json({ error: 'Message is required' });
}
// Используем функцию directOllamaQuery вместо создания нового экземпляра ChatOllama
const result = await directOllamaQuery(message, model);
console.log('Ответ от Ollama:', result);
// Возвращаем ответ клиенту
res.json({
response: result,
model: model
});
} catch (error) {
console.error('Ошибка при отправке сообщения в Ollama:', error);
res.status(500).json({
error: "Ошибка при отправке сообщения в Ollama. Убедитесь, что сервер Ollama запущен."
});
}
});
// Проверьте, что маршрут правильно настроен
router.post('/message', async (req, res) => {
try {
const { message } = req.body;
if (!message) {
return res.status(400).json({ error: 'Message is required' });
}
console.log('Получено сообщение:', message);
// Здесь ваш код обработки сообщения
// ...
// Временный ответ для тестирования
res.json({
response: `Это тестовый ответ на ваше сообщение: "${message}". Сервер работает.`
});
} catch (error) {
console.error('Error processing message:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
module.exports = router;