Описание изменений

This commit is contained in:
2025-03-03 20:43:58 +03:00
parent 13e240f871
commit d36fc255d8
56 changed files with 4451 additions and 3390 deletions

185
backend/routes/chat.js Normal file
View File

@@ -0,0 +1,185 @@
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;