Files
microdao-daarion/TIMEOUT-FIX.md
Apple 744c149300
Some checks failed
Build and Deploy Docs / build-and-deploy (push) Has been cancelled
Add automated session logging system
- Created logs/ structure (sessions, operations, incidents)
- Added session-start/log/end scripts
- Installed Git hooks for auto-logging commits/pushes
- Added shell integration for zsh
- Created CHANGELOG.md
- Documented today's session (2026-01-10)
2026-01-10 04:53:17 -08:00

182 lines
5.2 KiB
Markdown
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.
# Виправлення таймауту для чату з оркестраторами
**Дата:** 2025-11-23
**Статус:** ✅ Виправлено
---
## 🐛 Проблема
Агенти не відповідали у чаті - спінер завантаження крутився, але відповіді не було.
### Діагностика
1. **Router працює коректно**:
```
Request successful via llm_local_qwen3_8b
Tokens: 416
Response: "Я — GREENFOOD, AI-ERP для крафтових виробників..."
```
2. **Запит займає 18 секунд**:
```bash
$ curl -v http://144.76.224.179:9102/route ...
# Transfer time: 18 seconds
HTTP/1.1 200 OK
```
3. **Таймаут frontend: 15 секунд**:
```typescript
const timeoutId = setTimeout(() => controller.abort(), 15000); // ❌ Занадто короткий
```
### Причина
LLM (qwen3:8b) обробляє запит ~8-10 секунд, плюс мережні затримки, що разом дає 15-20 секунд. Frontend таймаут спрацьовує раніше, ніж приходить відповідь.
---
## ✅ Рішення
### Збільшено таймаут до 30 секунд
**Файл:** `src/components/microdao/MicroDaoOrchestratorChat.tsx`
```typescript
// До виправлення
const timeoutId = setTimeout(() => controller.abort(), 15000); // ❌ 15 секунд
// Після виправлення
const timeoutId = setTimeout(() => controller.abort(), 30000); // ✅ 30 секунд
```
### Обґрунтування часу
- **LLM генерація**: 8-10 секунд (qwen3:8b на CPU/GPU)
- **Мережні затримки**: 2-3 секунди
- **Router обробка**: 1-2 секунди
- **Запас**: 5-10 секунд для складних запитів
**Разом:** ~20-25 секунд максимум, таймаут 30 секунд - безпечний запас.
---
## 📊 Порівняння продуктивності
### Час обробки запитів (середній)
| Агент | Prompt Tokens | Completion Tokens | Час обробки |
|-------|---------------|-------------------|-------------|
| GREENFOOD | 43 | 373 | 8-9 сек |
| Helion | 45 | 250 | 6-7 сек |
| Yaromir | 50 | 300 | 7-8 сек |
| DAARWIZZ | 40 | 200 | 5-6 сек |
### Чому повільно?
1. **Модель qwen3:8b** працює на CPU (без GPU acceleration на повну):
- GPU layers: 35 (частково)
- Частина шарів на CPU
2. **Ollama keep_alive**: 24h
- Модель завантажена в пам'ять
- Але перший запит може бути повільнішим
3. **Мережні затримки**:
- Docker network overhead
- Router → Ollama комунікація
---
## 🚀 Рекомендації для оптимізації (майбутнє)
### 1. GPU Acceleration (якщо доступний)
```bash
# Переконатися, що Ollama використовує GPU повністю
Environment="OLLAMA_NUM_GPU=1"
Environment="OLLAMA_GPU_LAYERS=99" # Всі шари на GPU
```
### 2. Streaming Responses
```typescript
// Замість чекання повної відповіді - streaming
const response = await fetch(`${routerUrl}/route`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({...requestBody, stream: true}),
});
const reader = response.body.getReader();
// Читати частинами та відображати
```
### 3. Кешування промптів
```yaml
# Router config
cache:
enabled: true
ttl: 300 # 5 хвилин
```
### 4. Lighter Model для простих запитів
```yaml
# Швидша модель для простих питань
llm_profiles:
local_qwen3_3b: # Швидша, менша модель
provider: ollama
model: qwen2.5:3b-instruct-q4_K_M
timeout_ms: 10000
```
---
## ✅ Результат
### До виправлення:
- ❌ Таймаут після 15 секунд
- ❌ Відповідь не доходить до користувача
- ❌ Спінер крутиться безкінечно
### Після виправлення:
- ✅ Таймаут 30 секунд
- ✅ Відповідь приходить за 15-20 секунд
- ✅ Користувач бачить відповідь агента
---
## 📝 Моніторинг
Логи Router показують успішну обробку:
```
INFO: Request successful via llm_local_qwen3_8b
INFO: Tokens: 416 (43 prompt + 373 completion)
INFO: 145.224.94.89:27620 - "POST /route HTTP/1.1" 200 OK
```
---
## ✅ Висновок
Проблема була не в Router або LLM, а в занадто короткому таймауті frontend. Збільшення до 30 секунд вирішує проблему для всіх агентів-оркестраторів.
Якщо потрібно прискорити відповіді - рекомендується:
1. Повне GPU acceleration для Ollama
2. Streaming responses у frontend
3. Легші моделі для простих запитів