Files
microdao-daarion/SWAPPER-COMPLETE.md
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

11 KiB
Raw Permalink Blame History

Swapper Service - Повна реалізація завершена

Дата: 2025-11-22
Статус: Готово до використання


📋 Виконані завдання

1. Відповідь про vLLM vs Swapper

Рекомендація: Swapper Service — оптимальний вибір для DAARION Stack

Чому:

  • Підходить для обмежених ресурсів (Node #2 MacBook з 64GB RAM)
  • Економія пам'яті (важливо з 8 моделями ~118GB)
  • Легка інтеграція з існуючим Ollama
  • Підтримка Apple Silicon (Metal)
  • Гнучкість перемикання між моделями

Детальний аналіз: docs/VLLM-VS-SWAPPER-ANALYSIS.md


2. Створено Swapper Service

Створені файли:

  • services/swapper-service/app/main.py — основний сервіс
  • services/swapper-service/app/cabinet_api.py — API для кабінетів
  • services/swapper-service/app/__init__.py
  • services/swapper-service/requirements.txt
  • services/swapper-service/Dockerfile
  • services/swapper-service/config/swapper_config.yaml
  • services/swapper-service/start.sh — скрипт запуску
  • services/swapper-service/README.md — повна документація
  • Додано в docker-compose.yml

Функціональність:

  • Динамічне завантаження/вивантаження моделей
  • Single-active mode (одна модель за раз)
  • Відстеження uptime моделей (в годинах)
  • Метрики (request count, uptime, load/unload times)
  • Інтеграція з Ollama
  • REST API для керування моделями

3. API Endpoints для кабінетів

Створені endpoints:

  • GET /api/cabinet/swapper/status — повний статус для кабінету
  • GET /api/cabinet/swapper/models — список моделей з деталями
  • GET /api/cabinet/swapper/metrics/summary — підсумкові метрики

Що відображається:

  • Активна модель (назва, uptime, request count)
  • Список всіх моделей зі статусом
  • Час роботи кожної моделі (uptime в годинах)
  • Можливість завантажити/вивантажити моделі
  • Підсумкові метрики (total uptime, most used model)

4. Інтеграція в кабінети

Створені компоненти:

  • services/swapper-service/cabinet-integration.tsx — React/TypeScript компоненти
  • services/swapper-service/cabinet-integration.css — стилі для кабінетів

Компоненти:

  • SwapperStatusCard — головна картка зі статусом
  • SwapperMetricsSummary — підсумкові метрики
  • SwapperPage — повна сторінка Swapper Service

Документація:

  • docs/SWAPPER-CABINET-INTEGRATION.md — детальна інтеграція
  • Приклади для React та Vue
  • API клієнт сервіс
  • Приклади використання

🚀 Як запустити

Варіант 1: Docker (рекомендовано)

cd /Users/apple/github-projects/microdao-daarion

# Запустити Swapper Service
docker-compose up -d swapper-service

# Перевірити статус
docker-compose ps swapper-service

# Перевірити логи
docker-compose logs -f swapper-service

Варіант 2: Локально (для розробки)

cd /Users/apple/github-projects/microdao-daarion/services/swapper-service

# Запустити скрипт (створює venv та встановлює залежності)
./start.sh

Варіант 3: Вручну

cd /Users/apple/github-projects/microdao-daarion/services/swapper-service

# Створити venv
python3 -m venv venv
source venv/bin/activate

# Встановити залежності
pip install -r requirements.txt

# Налаштувати змінні оточення
export OLLAMA_BASE_URL=http://localhost:11434
export SWAPPER_CONFIG_PATH=./config/swapper_config.yaml

# Запустити
python3 -m uvicorn app.main:app --host 0.0.0.0 --port 8890

🧪 Тестування

1. Health Check

curl http://localhost:8890/health

Очікуваний результат:

{
  "status": "healthy",
  "service": "swapper-service",
  "active_model": null,
  "mode": "single-active"
}

2. Status для кабінету

curl http://localhost:8890/api/cabinet/swapper/status | python3 -m json.tool

Очікуваний результат:

{
  "service": "swapper-service",
  "status": "healthy",
  "mode": "single-active",
  "active_model": null,
  "total_models": 8,
  "available_models": [...],
  "loaded_models": [],
  "models": [...]
}

3. Список моделей

curl http://localhost:8890/models | python3 -m json.tool

4. Завантажити модель

curl -X POST http://localhost:8890/models/deepseek-r1-70b/load

5. Метрики

curl http://localhost:8890/api/cabinet/swapper/metrics/summary | python3 -m json.tool

📊 Інтеграція в кабінети

Node #1 (Production Server)

  1. Додати Swapper секцію в адмін-консоль:

    • Імпортувати компоненти з cabinet-integration.tsx
    • Додати маршрут /admin/swapper
    • Налаштувати API URL: http://swapper-service:8890
  2. Додати в sidebar:

    { id: 'swapper', label: 'Swapper Service', icon: 'swap' }
    
  3. Використати компонент:

    import { SwapperPage } from '@/services/swapper-service/cabinet-integration';
    
    <Route path="/admin/swapper" element={<SwapperPage />} />
    

Node #2 (MacBook Development)

  1. Те саме що для Node #1, але:

    • API URL: http://localhost:8890 (локальний розробка)
  2. Або через Docker:

    • API URL: http://swapper-service:8890 (якщо через docker-compose)

📁 Структура файлів

services/swapper-service/
├── app/
│   ├── __init__.py
│   ├── main.py              # Основний сервіс
│   └── cabinet_api.py       # API для кабінетів
├── config/
│   └── swapper_config.yaml  # Конфігурація моделей
├── Dockerfile
├── requirements.txt
├── start.sh                 # Скрипт запуску
├── README.md                # Документація
├── cabinet-integration.tsx  # React компоненти
└── cabinet-integration.css  # Стилі

🔗 API Endpoints

Основні endpoints

Method Endpoint Опис
GET /health Health check
GET /status Статус сервісу
GET /models Список моделей
GET /models/{name} Інформація про модель
POST /models/{name}/load Завантажити модель
POST /models/{name}/unload Вивантажити модель
GET /metrics Метрики всіх моделей
GET /metrics/{name} Метрики моделі

Cabinet API endpoints

Method Endpoint Опис
GET /api/cabinet/swapper/status Статус для кабінету
GET /api/cabinet/swapper/models Моделі для кабінету
GET /api/cabinet/swapper/metrics/summary Підсумкові метрики

📚 Документація

  1. README.md — повний опис API та використання
  2. SWAPPER-CABINET-INTEGRATION.md — детальна інтеграція в кабінети
  3. VLLM-VS-SWAPPER-ANALYSIS.md — аналіз vLLM vs Swapper
  4. SWAPPER-SERVICE-SETUP.md — інструкції з налаштування

Чеклист готовності

  • Swapper Service код створено
  • Dockerfile та requirements.txt
  • Конфігураційний файл
  • Додано в docker-compose.yml
  • Cabinet API endpoints
  • React компоненти для кабінетів
  • CSS стилі
  • Документація
  • Скрипт запуску
  • Аналіз vLLM vs Swapper
  • Запуск на Node #2 (потрібно виконати вручну)
  • Інтеграція в кабінет Node #2 (потрібно виконати вручну)
  • Інтеграція в кабінет Node #1 (потрібно виконати вручну)

🎯 Наступні кроки

Для Node #2 (MacBook)

  1. Запустити Swapper Service:

    cd /Users/apple/github-projects/microdao-daarion
    docker-compose up -d swapper-service
    # або локально: ./services/swapper-service/start.sh
    
  2. Перевірити роботу:

    curl http://localhost:8890/health
    curl http://localhost:8890/api/cabinet/swapper/status
    
  3. Інтегрувати в кабінет:

    • Додати компоненти з cabinet-integration.tsx
    • Додати стилі з cabinet-integration.css
    • Налаштувати API URL

Для Node #1 (Production Server)

  1. Додати Swapper Service в docker-compose.yml на сервері

  2. Запустити:

    ssh root@144.76.224.179
    cd /opt/microdao-daarion
    git pull origin main
    docker-compose up -d swapper-service
    
  3. Інтегрувати в кабінет (як для Node #2)


🐛 Troubleshooting

Swapper Service не запускається

# Перевірити логи
docker logs swapper-service
# або
cat /tmp/swapper.log

# Перевірити чи Ollama доступний
curl http://localhost:11434/api/tags

# Перевірити конфігурацію
cat services/swapper-service/config/swapper_config.yaml

API не відповідає

# Перевірити чи сервіс запущений
docker ps | grep swapper-service
# або
lsof -i :8890

# Перевірити health
curl http://localhost:8890/health

Модель не завантажується

# Перевірити чи модель є в Ollama
curl http://localhost:11434/api/tags | grep "model_name"

# Перевірити статус Swapper
curl http://localhost:8890/status

# Спробувати завантажити вручну
curl -X POST http://localhost:8890/models/model_name/load

📞 Підтримка

  • Документація: services/swapper-service/README.md
  • Інтеграція: docs/SWAPPER-CABINET-INTEGRATION.md
  • Аналіз: docs/VLLM-VS-SWAPPER-ANALYSIS.md

Last Updated: 2025-11-22
Status: Готово до використання
Next: Запустити та протестувати на Node #2