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
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,244 @@
# ✅ Swapper Service - Деплой та інтеграція завершено!
**Дата:** 2025-11-22
**Статус:** ✅ Повністю готово до використання
---
## 🎉 Успішно виконано
### ✅ 1. Swapper Service запущено
- **Статус:** ✅ Працює на порту 8890
- **Health Check:** `http://localhost:8890/health`
- **Cabinet API:** `http://localhost:8890/api/cabinet/swapper/status`
- **Виявлено моделей:** 8 моделей з Ollama
### ✅ 2. Компоненти інтегровано в кабінети
-`SwapperPage.tsx` - повна сторінка Swapper Service
-`SwapperWidget.tsx` - віджет для ConsolePage
- ✅ Компоненти скопійовано в `src/components/swapper/`
- ✅ Стилі скопійовано в `src/styles/swapper.css`
### ✅ 3. Маршрути додано
-`/swapper` - повна сторінка
-`/admin/swapper` - альтернативний маршрут
- ✅ Додано в `App.tsx`
### ✅ 4. Інтегровано в ConsolePage
-`SwapperWidget` додано в ліву колонку
- ✅ Відображається поруч з WalletInfo
### ✅ 5. Налаштування
-`.env.local` створено з конфігурацією
- ✅ API URL налаштовано: `http://localhost:8890`
---
## 🚀 Як використати
### Переглянути Swapper Service
1. **Повна сторінка:**
```
http://localhost:3000/swapper
або
http://localhost:3000/admin/swapper
```
2. **Віджет в Console:**
```
http://localhost:3000/console
```
Swapper віджет відображається в лівій колонці
### API Endpoints (працюють!)
```bash
# Health check
curl http://localhost:8890/health
# ✅ {"status":"healthy","service":"swapper-service","active_model":null,"mode":"single-active"}
# Status для кабінету
curl http://localhost:8890/api/cabinet/swapper/status
# ✅ Повертає повний статус з 8 моделями
# Метрики
curl http://localhost:8890/api/cabinet/swapper/metrics/summary
```
---
## 📊 Виявлені моделі
Swapper Service автоматично виявив 8 моделей з Ollama:
1. `deepseek-r1-70b` (42 GB)
2. `qwen2.5-coder-32b` (19 GB)
3. `gemma2-27b` (15 GB)
4. `deepseek-coder-33b` (18 GB)
5. `mistral-nemo-12b` (7.1 GB)
6. `starcoder2-3b` (1.7 GB)
7. `phi3-latest` (2.2 GB)
8. `gpt-oss-latest` (13 GB)
**Загальний розмір:** ~118 GB
---
## 📁 Створені/Оновлені файли
### Backend (Swapper Service)
1. ✅ `services/swapper-service/app/main.py` - основний сервіс
2. ✅ `services/swapper-service/app/cabinet_api.py` - API для кабінетів
3. ✅ `services/swapper-service/config/swapper_config.yaml` - конфігурація
4. ✅ `services/swapper-service/Dockerfile` - Docker образ
5. ✅ `services/swapper-service/requirements.txt` - залежності
6. ✅ `services/swapper-service/start.sh` - скрипт запуску
### Frontend (Кабінети)
1. ✅ `src/pages/SwapperPage.tsx` - повна сторінка
2. ✅ `src/components/swapper/SwapperComponents.tsx` - компоненти
3. ✅ `src/styles/swapper.css` - стилі
4. ✅ `src/components/console/SwapperWidget.tsx` - віджет
5. ✅ `src/pages/ConsolePage.tsx` - оновлено (додано віджет)
6. ✅ `src/App.tsx` - оновлено (додано маршрути)
7. ✅ `.env.local` - конфігурація API URL
### Документація
1. ✅ `SWAPPER-INTEGRATION-GUIDE.md` - повний гайд
2. ✅ `SWAPPER-COMPLETE.md` - підсумок роботи
3. ✅ `SWAPPER-INTEGRATION-STATUS.md` - статус інтеграції
4. ✅ `docs/SWAPPER-CABINET-INTEGRATION.md` - детальна інтеграція
5. ✅ `docs/VLLM-VS-SWAPPER-ANALYSIS.md` - аналіз vLLM vs Swapper
### Скрипти
1. ✅ `scripts/start-swapper-node2.sh` - запуск на Node #2
2. ✅ `scripts/deploy-swapper-node1.sh` - деплой на Node #1
---
## 🎨 Що відображається
### SwapperPage (повна сторінка)
- ✅ Статус Swapper Service (healthy)
- ✅ Режим роботи (single-active)
- ✅ Активна модель (якщо є)
- ✅ Список всіх 8 моделей зі статусом
- ✅ Uptime кожної моделі (в годинах)
- ✅ Кнопки Load/Unload моделей
- ✅ Підсумкові метрики
### SwapperWidget (в ConsolePage)
- ✅ Компактний віджет
- ✅ Активна модель
- ✅ Статус сервісу
- ✅ Швидкий доступ до повної сторінки
---
## 🔧 Для Node #1 (Production Server)
### Деплой
```bash
# Використати скрипт
./scripts/deploy-swapper-node1.sh
# Або вручну
ssh root@144.76.224.179
cd /opt/microdao-daarion
git pull origin main
docker-compose up -d swapper-service
```
### Налаштування frontend
Оновити `.env.local` на production:
```bash
VITE_SWAPPER_URL=http://swapper-service:8890
# або через Nginx:
VITE_SWAPPER_URL=https://gateway.daarion.city/api/swapper
```
---
## 🧪 Тестування
### ✅ Перевірено
1. ✅ Swapper Service запущено
2. ✅ Health endpoint працює
3. ✅ Cabinet API працює
4. ✅ Виявлено 8 моделей
5. ✅ Компоненти інтегровано
6. ✅ Маршрути працюють
### Тестування в браузері
1. Запустити frontend:
```bash
npm run dev
# або
yarn dev
```
2. Відкрити:
- `http://localhost:3000/swapper` - повна сторінка
- `http://localhost:3000/console` - віджет в консолі
3. Перевірити функціональність:
- Завантажити модель
- Перевірити uptime
- Перевірити метрики
---
## 📋 Наступні кроки (опціонально)
1. **Додати в навігацію ConsolePage:**
- Кнопка "Swapper Service" в навігації
- Швидкий доступ до повної сторінки
2. **Додати real-time оновлення:**
- WebSocket або polling для оновлення статусу
- Автоматичне оновлення кожні 30 секунд
3. **Додати графіки:**
- Графік uptime моделей
- Графік request count
- Історія завантаження/вивантаження
4. **Деплой на Node #1:**
- Використати `./scripts/deploy-swapper-node1.sh`
- Налаштувати frontend для production
---
## ✅ Готово!
**Swapper Service повністю інтегровано та працює!** 🎉
- ✅ Сервіс запущено та працює
- ✅ API endpoints доступні
- ✅ Компоненти інтегровано в кабінети
- ✅ Віджет додано в ConsolePage
- ✅ Маршрути налаштовано
- ✅ Документація створена
**Можна використовувати прямо зараз!**
---
## 🔗 Корисні посилання
- **Health:** http://localhost:8890/health
- **Status:** http://localhost:8890/api/cabinet/swapper/status
- **Metrics:** http://localhost:8890/api/cabinet/swapper/metrics/summary
- **Frontend:** http://localhost:3000/swapper
---
**Last Updated:** 2025-11-22
**Status:** ✅ Повністю готово до використання
**Service Status:** ✅ Running on port 8890