Files
microdao-daarion/NODE2-INTEGRATION-DETAILS.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

245 lines
7.6 KiB
Markdown
Raw Permalink 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.
# 🔗 Детальна інтеграція Router ↔ Swapper на НОДА2
**Дата:** 2026-01-12
**Статус:** ✅ Повний аналіз інтеграції
---
## 🔄 Як працює Router на НОДА2
### Конфігурація Router
**Змінні середовища:**
- `SWAPPER_URL=http://192.168.1.33:8890` (IP адреса хоста)
- `NATS_URL=nats://nats:4222`
- `STT_URL=http://192.168.1.33:8895`
- `VISION_URL=http://192.168.1.33:11434`
- `OCR_URL=http://192.168.1.33:8896`
**Конфігураційні файли:**
- `router_config.yaml` - базова конфігурація messaging
- `router-config.yml` - конфігурація агентів та LLM профілів
### Провайдери Router (17 штук)
**LLM Провайдери:**
- `llm_local_qwen3_8b` - Локальний Qwen3 8B
- `llm_cloud_deepseek` - Cloud DeepSeek
- `llm_qwen3_vl` - Vision Qwen3
- `llm_specialist_vision_8b` - Vision спеціаліст
- `llm_specialist_math_7b` - Math спеціаліст
- `llm_specialist_reasoning_3b` - Reasoning спеціаліст
- `llm_specialist_rag_4b` - RAG спеціаліст
- `llm_specialist_lang_gateway_4b` - Language Gateway
- `llm_specialist_security_guard_7b` - Security Guard
**DevTools Провайдери:**
- `devtools_devtools` - DevTools
- `devtools_helion` - Helion
- `devtools_cto` - CTO
- `devtools_monitor` - Monitor
- `devtools_greenfood` - GreenFood
**Інші провайдери:**
- `tools` - ToolProvider
- `orchestrator_crewai` - CrewAIProvider
- `parser` - OCRProvider
---
## 🔄 Як працює Swapper на НОДА2
### Конфігурація Swapper
**Файл:** `services/swapper-service/config/swapper_config_node2.yaml`
**Налаштування:**
- **Режим:** `single-active` (одна модель за раз)
- **GPU:** Увімкнено (Apple Silicon Metal)
- **Default модель:** `gpt-oss-latest` (автоматично завантажується)
- **Ollama URL:** `http://host.docker.internal:11434`
**Моделі (8 штук):**
1.**gpt-oss-latest** (13GB) - **АКТИВНА** (19.36 год uptime)
2. phi3-latest (2.2GB) - Unloaded
3. starcoder2-3b (1.7GB) - Unloaded
4. mistral-nemo-12b (7.1GB) - Unloaded
5. gemma2-27b (15GB) - Unloaded
6. deepseek-coder-33b (18GB) - Unloaded
7. qwen2.5-coder-32b (19GB) - Unloaded
8. deepseek-r1-70b (42GB) - Unloaded
### Доступ до Ollama
**Механізм:**
- Swapper контейнер → `host.docker.internal:11434` → Ollama на хості
- Використовує `extra_hosts: host.docker.internal:host-gateway`
- Працює через Docker Desktop network
**Моделі в Ollama (9 штук):**
- llava:13b (13B)
- mistral-nemo:12b (12.2B)
- gemma2:27b (27.2B)
- deepseek-coder:33b (33B)
- qwen2.5-coder:32b (32.8B)
- deepseek-r1:70b (70.6B)
- starcoder2:3b (3B)
- phi3:latest (3.8B)
-**gpt-oss:latest (20.9B)** - активна в Swapper
---
## 🔗 Інтеграція Router ↔ Swapper
### Як Router використовує Swapper
**З коду Router (`main.py`):**
1. **Перевірка доступності Swapper:**
```python
health_resp = await http_client.get(f"{SWAPPER_URL}/health", timeout=5.0)
```
2. **Завантаження моделі через Swapper:**
```python
load_resp = await http_client.post(
f"{SWAPPER_URL}/load",
json={"model": model_name}
)
```
3. **Отримання списку моделей:**
```python
resp = await http_client.get(f"{SWAPPER_URL}/models", timeout=5.0)
```
4. **Використання Swapper для генерації:**
- Router викликає Swapper API
- Swapper перевіряє чи модель завантажена
- Якщо ні - завантажує з Ollama
- Swapper викликає Ollama для генерації
- Результат повертається через Swapper → Router
### Потік запиту
```
Клієнт
Router (9102)
↓ [визначає що потрібен LLM]
Swapper (8890)
↓ [перевіряє модель]
↓ [якщо не завантажена - завантажує]
Ollama (host:11434)
↓ [генерує відповідь]
Swapper
Router
Клієнт
```
---
## 📊 Поточний стан інтеграції
### ✅ Що працює
1. **Router:**
- ✅ Запущений та healthy
- ✅ Підключений до NATS
- ✅ Має 17 провайдерів
- ✅ Може викликати Swapper API
2. **Swapper:**
- ✅ Запущений та healthy
- ✅ Активна модель `gpt-oss-latest`
- ✅ Доступ до Ollama працює
- ✅ API працює
3. **Ollama:**
- ✅ Працює на хості
- ✅ 9 моделей доступні
- ✅ Модель `gpt-oss:latest` завантажена
### ⚠️ Потенційні проблеми
1. **Router використовує IP адресу:**
- `SWAPPER_URL=http://192.168.1.33:8890`
- Може не працювати якщо IP зміниться
- Краще використовувати Docker service name: `http://swapper-service:8890`
2. **Swapper не використовується активно:**
- Request count: 0
- Модель завантажена, але не використовується
- Можливо Router не викликає Swapper для генерації
3. **NATS Unhealthy:**
- Може впливати на messaging між сервісами
- Потрібна перевірка
---
## 🔍 Детальний аналіз коду
### Router викликає Swapper для:
1. **Health check** - перевірка доступності
2. **Load model** - завантаження моделі
3. **Get models** - отримання списку моделей
4. **Generate** - генерація тексту (через Swapper API)
### Swapper API endpoints:
- `GET /health` - перевірка здоров'я
- `GET /models` - список моделей
- `POST /models/{name}/load` - завантажити модель
- `POST /models/{name}/unload` - вивантажити модель
- `POST /generate` - генерація тексту
---
## 📝 Рекомендації
### 1. Виправити SWAPPER_URL в Router
```yaml
# Замість:
SWAPPER_URL=http://192.168.1.33:8890
# Використати:
SWAPPER_URL=http://swapper-service:8890
```
### 2. Протестувати інтеграцію
- Надіслати тестовий запит через Router
- Перевірити чи Router викликає Swapper
- Перевірити логи обох сервісів
### 3. Налаштувати моніторинг
- Додати метрики викликів Swapper з Router
- Логувати завантаження моделей
- Відстежувати використання моделей
---
## 🎯 Висновок
**НОДА2 працює наступним чином:**
1. ✅ **Router** - центральний маршрутизатор запитів
2. ✅ **Swapper** - динамічне завантаження моделей з Ollama
3. ✅ **Ollama** - локальний LLM runtime на хості
4. ✅ **Інтеграція** - Router може викликати Swapper для LLM завдань
**Потік:**
```
Запит → Router → Swapper → Ollama → Swapper → Router → Відповідь
```
**Статус:** ✅ Інтеграція налаштована та готова до використання
---
**Оновлено:** 2026-01-12
**Статус:** ✅ Аналіз завершено