- TTS: xtts-v2 integration with voice cloning support
- Document: docling integration for PDF/DOCX/PPTX processing
- Memory Service: added /facts/upsert, /facts/{key}, /facts endpoints
- Added required dependencies (TTS, docling)
236 lines
9.6 KiB
Markdown
236 lines
9.6 KiB
Markdown
# 🏗️ Аналіз архітектури НОДА2 (MacBook Pro M4 Max)
|
||
|
||
**Дата:** 2026-01-12
|
||
**Статус:** ✅ Повний аналіз архітектури
|
||
|
||
---
|
||
|
||
## 📊 Поточний стан сервісів
|
||
|
||
### Основні сервіси (Healthy)
|
||
|
||
| Сервіс | Контейнер | Статус | Порт | Uptime | Призначення |
|
||
|--------|-----------|--------|------|--------|-------------|
|
||
| **Router** | `dagi-router` | ✅ Healthy | 9102 | 37+ годин | Маршрутизація запитів |
|
||
| **Swapper** | `swapper-service` | ✅ Healthy | 8890 | 19+ годин | Динамічне завантаження моделей |
|
||
| **DevTools** | `dagi-devtools` | ✅ Healthy | 8008 | 37+ годин | Інструменти розробки |
|
||
| **Gateway** | `dagi-gateway` | ✅ Healthy | 9300 | 37+ годин | Telegram/Discord боти |
|
||
| **RBAC** | `dagi-rbac` | ✅ Healthy | 9200 | 37+ годин | Контроль доступу |
|
||
| **CrewAI** | `dagi-crewai` | ✅ Healthy | 9010 | 37+ годин | Оркестрація агентів |
|
||
| **PostgreSQL** | `dagi-postgres` | ✅ Healthy | 5432 | 37+ годин | База даних |
|
||
| **Prometheus** | `dagi-prometheus` | ✅ Healthy | 9091 | 37+ годин | Метрики |
|
||
| **Jupyter** | `jupyter-lab` | ✅ Healthy | 8888 | 37+ годин | Нотатки |
|
||
|
||
### Сервіси з проблемами (Unhealthy)
|
||
|
||
| Сервіс | Контейнер | Статус | Порт | Проблема |
|
||
|--------|-----------|--------|------|----------|
|
||
| **NATS** | `dagi-nats` | ⚠️ Unhealthy | 4222 | Health check не проходить |
|
||
| **Memory** | `memory-service` | ⚠️ Unhealthy | 8001 | Health check не проходить |
|
||
| **RAG** | `dagi-rag-service` | 🔄 Restarting | 9500 | Постійні перезапуски |
|
||
| **Image Gen** | `dagi-image-gen` | ⚠️ Unhealthy | 9600 | Health check не проходить |
|
||
| **TTS** | `dagi-tts-service` | ⚠️ Unhealthy | 9800 | Health check не проходить |
|
||
| **STT** | `dagi-stt-service` | ⚠️ Unhealthy | 9401 | Health check не проходить |
|
||
| **OCR** | `ocr-service` | ⚠️ Unhealthy | 8896 | Health check не проходить |
|
||
| **Web Search** | `dagi-web-search-service` | ⚠️ Unhealthy | 8897 | Health check не проходить |
|
||
| **Qdrant** | `qdrant-vector-db` | ⚠️ Unhealthy | 6333-6335 | Health check не проходить |
|
||
|
||
---
|
||
|
||
## 🔄 Архітектура Router
|
||
|
||
### Конфігурація Router
|
||
- **Файл:** `services/router/router_config.yaml`
|
||
- **Мінімальна конфігурація:** Тільки messaging inbound
|
||
- **Провайдери:** 17 провайдерів зареєстровано
|
||
|
||
### Провайдери Router (17 штук)
|
||
1. `llm_local_qwen3_8b` - LLMProvider
|
||
2. `llm_cloud_deepseek` - LLMProvider
|
||
3. `llm_qwen3_vl` - LLMProvider
|
||
4. `llm_specialist_vision_8b` - LLMProvider
|
||
5. `llm_specialist_math_7b` - LLMProvider
|
||
6. `llm_specialist_reasoning_3b` - LLMProvider
|
||
7. `llm_specialist_rag_4b` - LLMProvider
|
||
8. ... (ще 10 провайдерів)
|
||
|
||
### Змінні середовища Router
|
||
- `DAGI_ROUTER_CONFIG=/app/router-config.yml`
|
||
- `RBAC_BASE_URL=http://rbac:9200`
|
||
- `DEVTOOLS_BASE_URL=http://devtools:8008`
|
||
- `CREWAI_BASE_URL=http://crewai:9010`
|
||
- `RAG_SERVICE_URL=http://rag-service:9500`
|
||
- `MEMORY_SERVICE_URL=http://memory-service:8000`
|
||
|
||
### Залежності Router
|
||
- Залежить від: `devtools`, `crewai`, `rbac`
|
||
- Підключений до: NATS (для messaging)
|
||
|
||
---
|
||
|
||
## 🔄 Архітектура Swapper Service
|
||
|
||
### Конфігурація Swapper
|
||
- **Файл:** `services/swapper-service/config/swapper_config_node2.yaml`
|
||
- **Режим:** `single-active` (одна модель за раз)
|
||
- **GPU:** Увімкнено (Apple Silicon Metal acceleration)
|
||
- **Default модель:** `gpt-oss-latest` (автоматично завантажується)
|
||
|
||
### Моделі в Swapper (8 моделей)
|
||
|
||
| Модель | Тип | Розмір | Пріоритет | Статус |
|
||
|--------|-----|-------|-----------|--------|
|
||
| **gpt-oss-latest** | LLM | 13.0 GB | High | ✅ **Loaded** (19.36 год uptime) |
|
||
| **phi3-latest** | LLM | 2.2 GB | High | Unloaded |
|
||
| **starcoder2-3b** | Code | 1.7 GB | Medium | Unloaded |
|
||
| **mistral-nemo-12b** | LLM | 7.1 GB | High | Unloaded |
|
||
| **gemma2-27b** | LLM | 15.0 GB | Medium | Unloaded |
|
||
| **deepseek-coder-33b** | Code | 18.0 GB | High | Unloaded |
|
||
| **qwen2.5-coder-32b** | Code | 19.0 GB | High | Unloaded |
|
||
| **deepseek-r1-70b** | LLM | 42.0 GB | High | Unloaded |
|
||
|
||
### Змінні середовища Swapper
|
||
- `OLLAMA_BASE_URL=http://host.docker.internal:11434`
|
||
- `SWAPPER_CONFIG_PATH=/app/config/swapper_config.yaml`
|
||
- `SWAPPER_MODE=single-active`
|
||
- `MAX_CONCURRENT_MODELS=1`
|
||
- `MODEL_SWAP_TIMEOUT=30`
|
||
|
||
### Доступ до Ollama
|
||
- **Через:** `host.docker.internal:11434` (MacBook Docker Desktop)
|
||
- **Механізм:** `extra_hosts: host.docker.internal:host-gateway`
|
||
- **Ollama:** Працює на хості (не в контейнері)
|
||
|
||
---
|
||
|
||
## 🔗 Інтеграція Router ↔ Swapper
|
||
|
||
### Поточна ситуація
|
||
- ✅ Router має 17 провайдерів
|
||
- ✅ Swapper працює незалежно
|
||
- ⚠️ **Потрібна перевірка:** Чи Router використовує Swapper як провайдер?
|
||
|
||
### Можливі інтеграції
|
||
1. **Пряма інтеграція:** Router викликає Swapper API для завантаження моделей
|
||
2. **Через провайдери:** Router має провайдер, який використовує Swapper
|
||
3. **Через NATS:** Повідомлення між Router та Swapper через NATS
|
||
|
||
---
|
||
|
||
## 📦 Моделі в Ollama (на хості)
|
||
|
||
### Доступні моделі
|
||
- `llava:13b` - Vision model (8GB)
|
||
- `gpt-oss:latest` - Активна в Swapper (13GB)
|
||
- Інші моделі (потрібна детальна перевірка)
|
||
|
||
---
|
||
|
||
## 🔍 Детальний аналіз
|
||
|
||
### 1. Swapper Service Metrics
|
||
|
||
**Активна модель:**
|
||
- **Назва:** `gpt-oss-latest`
|
||
- **Uptime:** 19.36 годин
|
||
- **Request count:** 0 (не використовується активно)
|
||
- **Loaded at:** 2026-01-11T14:40:18
|
||
|
||
**Загальна статистика:**
|
||
- **Total models:** 8
|
||
- **Loaded models:** 1 (gpt-oss-latest)
|
||
- **Available models:** 8
|
||
- **Mode:** single-active
|
||
|
||
### 2. Router Configuration
|
||
|
||
**Messaging:**
|
||
- **Inbound enabled:** ✅
|
||
- **Source subject:** `agent.filter.decision`
|
||
- **Target subject:** `router.invoke.agent`
|
||
|
||
**Провайдери:**
|
||
- 17 провайдерів зареєстровано
|
||
- Типи: LLMProvider, VisionProvider, тощо
|
||
|
||
### 3. Docker Network
|
||
|
||
**Network:** `dagi-network`
|
||
- Всі сервіси підключені до однієї мережі
|
||
- Можуть спілкуватися через внутрішні імена контейнерів
|
||
|
||
---
|
||
|
||
## 🔧 Як працює НОДА2
|
||
|
||
### Потік запиту (припущення)
|
||
|
||
1. **Вхідний запит** → Router (порт 9102)
|
||
2. **Router аналізує** запит та визначає провайдера
|
||
3. **Якщо потрібен LLM:**
|
||
- Router викликає Swapper API
|
||
- Swapper перевіряє чи модель завантажена
|
||
- Якщо ні - завантажує з Ollama
|
||
- Swapper викликає Ollama для генерації
|
||
- Результат повертається через Swapper → Router → Клієнт
|
||
|
||
### Комунікація між сервісами
|
||
|
||
```
|
||
Client → Router (9102) → Swapper (8890) → Ollama (host:11434)
|
||
↓
|
||
NATS (4222) → Інші сервіси
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Відомі проблеми
|
||
|
||
### 1. NATS Unhealthy
|
||
- **Проблема:** Health check не проходить
|
||
- **Вплив:** Можливі проблеми з messaging
|
||
- **Рішення:** Перевірити конфігурацію health check
|
||
|
||
### 2. RAG Service Restarting
|
||
- **Проблема:** Постійні перезапуски
|
||
- **Вплив:** RAG функціональність недоступна
|
||
- **Рішення:** Перевірити логи та залежності
|
||
|
||
### 3. Багато Unhealthy сервісів
|
||
- **Проблема:** 9 сервісів unhealthy
|
||
- **Вплив:** Часткова функціональність
|
||
- **Рішення:** Систематична перевірка кожного сервісу
|
||
|
||
---
|
||
|
||
## 📝 Рекомендації
|
||
|
||
### Пріоритет 1: Виправити критичні сервіси
|
||
1. NATS - критичний для messaging
|
||
2. RAG Service - важливий для пошуку
|
||
3. Memory Service - важливий для агентів
|
||
|
||
### Пріоритет 2: Оптимізація
|
||
1. Перевірити чи Router використовує Swapper
|
||
2. Налаштувати автоматичне завантаження моделей за потреби
|
||
3. Оптимізувати використання пам'яті
|
||
|
||
### Пріоритет 3: Моніторинг
|
||
1. Налаштувати алерти для unhealthy сервісів
|
||
2. Додати метрики використання моделей
|
||
3. Логування інтеграцій
|
||
|
||
---
|
||
|
||
## 🔍 Наступні кроки для детального аналізу
|
||
|
||
1. Перевірити чи Router викликає Swapper
|
||
2. Протестувати маршрутизацію запитів
|
||
3. Перевірити логи інтеграції
|
||
4. Налаштувати моніторинг
|
||
|
||
---
|
||
|
||
**Оновлено:** 2026-01-12
|
||
**Статус:** ✅ Аналіз завершено
|