185 lines
6.3 KiB
JavaScript
185 lines
6.3 KiB
JavaScript
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;
|