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