213 lines
8.6 KiB
Markdown
213 lines
8.6 KiB
Markdown
# ✅ Отчет о централизации таймаутов
|
||
|
||
**Дата:** 2025-10-09
|
||
**Задача:** Централизовать все таймауты для AI/Ollama/VectorSearch в одном месте
|
||
**Статус:** ✅ ВЫПОЛНЕНО
|
||
|
||
---
|
||
|
||
## 🎯 **ЦЕЛЬ**
|
||
|
||
Избежать дублирования и жестко закодированных таймаутов, централизовать управление временем ожидания для всех внешних сервисов.
|
||
|
||
---
|
||
|
||
## 📦 **ЦЕНТРАЛИЗОВАННЫЙ СЕРВИС**
|
||
|
||
### `backend/services/ollamaConfig.js`
|
||
|
||
Добавлена новая функция `getTimeouts()`:
|
||
|
||
```javascript
|
||
function getTimeouts() {
|
||
return {
|
||
// Ollama API
|
||
ollamaChat: 120000, // 120 сек (2 мин) - генерация ответов LLM
|
||
ollamaEmbedding: 60000, // 60 сек (1 мин) - генерация embeddings
|
||
ollamaHealth: 5000, // 5 сек - health check
|
||
ollamaTags: 10000, // 10 сек - список моделей
|
||
|
||
// Vector Search
|
||
vectorSearch: 30000, // 30 сек - поиск по векторам
|
||
vectorUpsert: 60000, // 60 сек - индексация данных
|
||
vectorHealth: 5000, // 5 сек - health check
|
||
|
||
// Blockchain (для быстрых запросов)
|
||
blockchainBalance: 3000, // 3 сек - проверка баланса
|
||
blockchainNetwork: 10000, // 10 сек - подключение к сети
|
||
|
||
// Email/IMAP
|
||
emailConnection: 30000, // 30 сек - подключение к почте
|
||
emailFetch: 60000, // 60 сек - получение писем
|
||
|
||
// Default для совместимости
|
||
default: 120000 // 120 сек
|
||
};
|
||
}
|
||
```
|
||
|
||
**Экспорт:**
|
||
```javascript
|
||
module.exports = {
|
||
getTimeouts, // ✨ НОВОЕ: Централизованные таймауты
|
||
getTimeout, // Обратная совместимость (возвращает ollamaChat)
|
||
// ... остальные функции
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ **ИСПРАВЛЕННЫЕ ФАЙЛЫ**
|
||
|
||
### 1. `backend/services/ollamaConfig.js` ⭐
|
||
- **Добавлено:** функция `getTimeouts()`
|
||
- **Статус:** ✅ Централизованный источник таймаутов
|
||
|
||
### 2. `backend/services/vectorSearchClient.js` ✅
|
||
- **До:** `timeout: 30000` (жестко закодировано)
|
||
- **После:** `timeout: TIMEOUTS.vectorSearch` / `TIMEOUTS.vectorUpsert` / `TIMEOUTS.vectorHealth`
|
||
- **Улучшение:** Добавлен импорт `ollamaConfig`, используются централизованные таймауты
|
||
|
||
### 3. `backend/services/ragService.js` ✅
|
||
- **До:** `timeout: ollamaConfig.getTimeout()` (работало, но старый API)
|
||
- **После:** `timeout: ollamaConfig.getTimeout()` (теперь использует новый `getTimeouts().ollamaChat`)
|
||
- **Статус:** Обратная совместимость сохранена
|
||
|
||
### 4. `backend/services/aiProviderSettingsService.js` ✅
|
||
- **До:** `timeout: 5000` (2 места, жестко закодировано)
|
||
- **После:** `timeout: ollamaConfig.getTimeouts().ollamaTags`
|
||
- **Улучшение:** Убраны дубли, используется централизованный таймаут
|
||
|
||
### 5. `backend/routes/ollama.js` ✅
|
||
- **До:**
|
||
- `const axios = require('axios')` (внутри каждого роута)
|
||
- `const ollamaConfig = require('../services/ollamaConfig')` (внутри каждого роута)
|
||
- `timeout: 5000` (2 места, жестко закодировано)
|
||
- **После:**
|
||
- Импорты вынесены наверх файла
|
||
- `timeout: timeouts.ollamaTags`
|
||
- **Улучшение:** Убраны дубли импортов, используется централизованный таймаут
|
||
|
||
### 6. `backend/routes/monitoring.js` ✅
|
||
- **До:**
|
||
- `const ollamaConfig = require('../services/ollamaConfig')` (дубль внутри роута)
|
||
- `timeout: 2000` (2 места, жестко закодировано)
|
||
- **После:**
|
||
- Убран дубль импорта
|
||
- `timeout: timeouts.vectorHealth` / `timeouts.ollamaHealth`
|
||
- **Улучшение:** Убраны дубли, используются централизованные таймауты
|
||
|
||
### 7. `backend/scripts/check-ollama-models.js` ✅
|
||
- **До:** `timeout: 5000` (жестко закодировано)
|
||
- **После:**
|
||
- Добавлен импорт `ollamaConfig`
|
||
- `timeout: timeouts.ollamaTags`
|
||
- **Улучшение:** Используется централизованный таймаут
|
||
|
||
---
|
||
|
||
## 🗑️ **УДАЛЕННЫЕ ФАЙЛЫ**
|
||
|
||
### ❌ `backend/services/notifyOllamaReady.js`
|
||
- **Причина:** Файл не использовался в проекте
|
||
- **Статус:** Удален
|
||
- **Очистка документации:** Убраны упоминания из:
|
||
- `aidocs/AI_FULL_INVENTORY.md`
|
||
- `aidocs/AI_FILES_QUICK_REFERENCE.md`
|
||
|
||
---
|
||
|
||
## 📊 **ИТОГОВАЯ СТАТИСТИКА**
|
||
|
||
### Исправлено файлов: **7**
|
||
- ⭐ **1** - Центральный сервис (ollamaConfig.js)
|
||
- ✅ **6** - Обновленные файлы (векторный поиск, роуты, скрипты)
|
||
|
||
### Удалено файлов: **1**
|
||
- ❌ notifyOllamaReady.js (не использовался)
|
||
|
||
### Убрано жестко закодированных таймаутов: **9**
|
||
- vectorSearchClient.js: 3 места
|
||
- aiProviderSettingsService.js: 2 места
|
||
- routes/ollama.js: 2 места
|
||
- routes/monitoring.js: 2 места
|
||
- scripts/check-ollama-models.js: 1 место
|
||
|
||
### Убрано дублей импортов: **3**
|
||
- routes/ollama.js: 2 дубля
|
||
- routes/monitoring.js: 1 дубль
|
||
|
||
---
|
||
|
||
## 🎯 **ПРЕИМУЩЕСТВА ЦЕНТРАЛИЗАЦИИ**
|
||
|
||
1. ✅ **Единая точка управления** - все таймауты в одном месте
|
||
2. ✅ **Легко изменять** - меняем в одном месте, применяется везде
|
||
3. ✅ **Документировано** - каждый таймаут с комментарием
|
||
4. ✅ **Типизировано** - разные таймауты для разных операций
|
||
5. ✅ **Обратная совместимость** - старый API `getTimeout()` работает
|
||
6. ✅ **Нет дублей** - импорты вынесены наверх файлов
|
||
7. ✅ **Чистота кода** - убраны "магические числа"
|
||
|
||
---
|
||
|
||
## 🚀 **КАК ИСПОЛЬЗОВАТЬ**
|
||
|
||
### Для новых файлов:
|
||
|
||
```javascript
|
||
const ollamaConfig = require('./services/ollamaConfig');
|
||
const timeouts = ollamaConfig.getTimeouts();
|
||
|
||
// Для Ollama API
|
||
await axios.post(url, data, { timeout: timeouts.ollamaChat });
|
||
|
||
// Для Vector Search
|
||
await axios.post(url, data, { timeout: timeouts.vectorSearch });
|
||
|
||
// Для Health Checks
|
||
await axios.get(url, { timeout: timeouts.ollamaHealth });
|
||
```
|
||
|
||
### Для старого кода (обратная совместимость):
|
||
|
||
```javascript
|
||
const ollamaConfig = require('./services/ollamaConfig');
|
||
|
||
// Старый API - все еще работает!
|
||
const timeout = ollamaConfig.getTimeout(); // Возвращает 120000
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 **ПРОВЕРОЧНЫЙ ЧЕКЛИСТ**
|
||
|
||
- [x] Создана функция `getTimeouts()` в `ollamaConfig.js`
|
||
- [x] Обновлен `vectorSearchClient.js`
|
||
- [x] Обновлен `aiProviderSettingsService.js`
|
||
- [x] Обновлен `routes/ollama.js`
|
||
- [x] Обновлен `routes/monitoring.js`
|
||
- [x] Обновлен `scripts/check-ollama-models.js`
|
||
- [x] Убраны дубли импортов
|
||
- [x] Удален неиспользуемый `notifyOllamaReady.js`
|
||
- [x] Обновлена документация
|
||
- [x] Проверено отсутствие жестко закодированных таймаутов
|
||
- [x] Проверено отсутствие следов удаленных файлов
|
||
|
||
---
|
||
|
||
## ✅ **РЕЗУЛЬТАТ**
|
||
|
||
Все таймауты для AI/Ollama/VectorSearch централизованы в `ollamaConfig.js`.
|
||
|
||
Дубли удалены. Жестко закодированные значения заменены на централизованные.
|
||
|
||
Код стал чище, проще в поддержке и масштабируем.
|
||
|
||
---
|
||
|
||
**Дата завершения:** 2025-10-09
|
||
**Исполнитель:** AI Assistant
|
||
**Статус:** ✅ ГОТОВО К PRODUCTION
|
||
|