Files
microdao-daarion/NODE2-ARCHITECTURE-ANALYSIS.md
Apple 5290287058 feat: implement TTS, Document processing, and Memory Service /facts API
- 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)
2026-01-17 08:16:37 -08:00

236 lines
9.6 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.
# 🏗️ Аналіз архітектури НОДА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
**Статус:** ✅ Аналіз завершено