- 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)
7.6 KiB
7.6 KiB
🔗 Детальна інтеграція Router ↔ Swapper на НОДА2
Дата: 2026-01-12
Статус: ✅ Повний аналіз інтеграції
🔄 Як працює Router на НОДА2
Конфігурація Router
Змінні середовища:
SWAPPER_URL=http://192.168.1.33:8890(IP адреса хоста)NATS_URL=nats://nats:4222STT_URL=http://192.168.1.33:8895VISION_URL=http://192.168.1.33:11434OCR_URL=http://192.168.1.33:8896
Конфігураційні файли:
router_config.yaml- базова конфігурація messagingrouter-config.yml- конфігурація агентів та LLM профілів
Провайдери Router (17 штук)
LLM Провайдери:
llm_local_qwen3_8b- Локальний Qwen3 8Bllm_cloud_deepseek- Cloud DeepSeekllm_qwen3_vl- Vision Qwen3llm_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 Gatewayllm_specialist_security_guard_7b- Security Guard
DevTools Провайдери:
devtools_devtools- DevToolsdevtools_helion- Heliondevtools_cto- CTOdevtools_monitor- Monitordevtools_greenfood- GreenFood
Інші провайдери:
tools- ToolProviderorchestrator_crewai- CrewAIProviderparser- 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 штук):
- ✅ gpt-oss-latest (13GB) - АКТИВНА (19.36 год uptime)
- phi3-latest (2.2GB) - Unloaded
- starcoder2-3b (1.7GB) - Unloaded
- mistral-nemo-12b (7.1GB) - Unloaded
- gemma2-27b (15GB) - Unloaded
- deepseek-coder-33b (18GB) - Unloaded
- qwen2.5-coder-32b (19GB) - Unloaded
- 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):
-
Перевірка доступності Swapper:
health_resp = await http_client.get(f"{SWAPPER_URL}/health", timeout=5.0) -
Завантаження моделі через Swapper:
load_resp = await http_client.post( f"{SWAPPER_URL}/load", json={"model": model_name} ) -
Отримання списку моделей:
resp = await http_client.get(f"{SWAPPER_URL}/models", timeout=5.0) -
Використання Swapper для генерації:
- Router викликає Swapper API
- Swapper перевіряє чи модель завантажена
- Якщо ні - завантажує з Ollama
- Swapper викликає Ollama для генерації
- Результат повертається через Swapper → Router
Потік запиту
Клієнт
↓
Router (9102)
↓ [визначає що потрібен LLM]
Swapper (8890)
↓ [перевіряє модель]
↓ [якщо не завантажена - завантажує]
Ollama (host:11434)
↓ [генерує відповідь]
Swapper
↓
Router
↓
Клієнт
📊 Поточний стан інтеграції
✅ Що працює
-
Router:
- ✅ Запущений та healthy
- ✅ Підключений до NATS
- ✅ Має 17 провайдерів
- ✅ Може викликати Swapper API
-
Swapper:
- ✅ Запущений та healthy
- ✅ Активна модель
gpt-oss-latest - ✅ Доступ до Ollama працює
- ✅ API працює
-
Ollama:
- ✅ Працює на хості
- ✅ 9 моделей доступні
- ✅ Модель
gpt-oss:latestзавантажена
⚠️ Потенційні проблеми
-
Router використовує IP адресу:
SWAPPER_URL=http://192.168.1.33:8890- Може не працювати якщо IP зміниться
- Краще використовувати Docker service name:
http://swapper-service:8890
-
Swapper не використовується активно:
- Request count: 0
- Модель завантажена, але не використовується
- Можливо Router не викликає Swapper для генерації
-
NATS Unhealthy:
- Може впливати на messaging між сервісами
- Потрібна перевірка
🔍 Детальний аналіз коду
Router викликає Swapper для:
- Health check - перевірка доступності
- Load model - завантаження моделі
- Get models - отримання списку моделей
- Generate - генерація тексту (через Swapper API)
Swapper API endpoints:
GET /health- перевірка здоров'яGET /models- список моделейPOST /models/{name}/load- завантажити модельPOST /models/{name}/unload- вивантажити модельPOST /generate- генерація тексту
📝 Рекомендації
1. Виправити SWAPPER_URL в Router
# Замість:
SWAPPER_URL=http://192.168.1.33:8890
# Використати:
SWAPPER_URL=http://swapper-service:8890
2. Протестувати інтеграцію
- Надіслати тестовий запит через Router
- Перевірити чи Router викликає Swapper
- Перевірити логи обох сервісів
3. Налаштувати моніторинг
- Додати метрики викликів Swapper з Router
- Логувати завантаження моделей
- Відстежувати використання моделей
🎯 Висновок
НОДА2 працює наступним чином:
- ✅ Router - центральний маршрутизатор запитів
- ✅ Swapper - динамічне завантаження моделей з Ollama
- ✅ Ollama - локальний LLM runtime на хості
- ✅ Інтеграція - Router може викликати Swapper для LLM завдань
Потік:
Запит → Router → Swapper → Ollama → Swapper → Router → Відповідь
Статус: ✅ Інтеграція налаштована та готова до використання
Оновлено: 2026-01-12
Статус: ✅ Аналіз завершено