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,261 @@
# ✅ Налаштування default_model для НОДА2
**Дата:** 2025-11-23
**Статус:** ✅ Конфігурація створена
---
## 🎯 Що зроблено
### 1. Створено конфігураційний файл для НОДА2
**Файл:** `services/swapper-service/config/swapper_config_node2.yaml`
**Особливості для НОДА2 (MacBook M4 Max):**
-`metal_acceleration: true` - Apple Silicon GPU acceleration
-`default_model: gpt-oss:latest` - автоматичне завантаження при старті
-`ollama.url: http://localhost:11434` - Native Ollama (не через Docker)
- ✅ 8 моделей налаштовано (відповідно до встановлених на НОДА2)
**Моделі в конфігурації:**
1. `gpt-oss:latest` (13 GB, 20.9B) - **default_model** - основна модель
2. `phi3:latest` (2.2 GB, 3.8B) - легка модель
3. `qwen3-vl:latest` (6.1 GB, 8.8B) - vision модель
4. `starcoder2:latest` (1.7 GB, 3B) - code specialist
5. `qwen2.5-coder:latest` (4.7 GB, 7.6B) - advanced code
6. `gemma2:latest` (5.4 GB, 9.2B) - reasoning
7. `mistral-nemo:latest` (7.1 GB, 12.2B) - advanced reasoning
8. `deepseek-r1:latest` (5.2 GB, 8.2B) - strategic reasoning
### 2. Логіка автоматичного завантаження
**Файл:** `services/swapper-service/app/main.py`
- При ініціалізації Swapper Service перевіряє `default_model` в конфігурації
- Якщо вказано → автоматично завантажує модель
- Логує процес завантаження
---
## 📋 Як застосувати на НОДА2
### Варіант 1: Використати локальну конфігурацію (рекомендовано)
```bash
# 1. Перевірити чи працює Swapper Service
cd /Users/apple/github-projects/microdao-daarion
docker-compose ps swapper-service
# 2. Оновити конфігурацію (якщо використовується volume mount)
# Або скопіювати конфігурацію в правильну директорію
cp services/swapper-service/config/swapper_config_node2.yaml \
services/swapper-service/config/swapper_config.yaml
# 3. Перезапустити Swapper Service
docker-compose restart swapper-service
# 4. Перевірити логи
docker-compose logs swapper-service --tail 30
```
### Варіант 2: Запуск локально (без Docker)
```bash
# 1. Перейти в директорію Swapper Service
cd /Users/apple/github-projects/microdao-daarion/services/swapper-service
# 2. Встановити змінну оточення для конфігурації
export SWAPPER_CONFIG_PATH=./config/swapper_config_node2.yaml
export OLLAMA_BASE_URL=http://localhost:11434
export SWAPPER_MODE=single-active
# 3. Запустити сервіс
python3 -m uvicorn app.main:app --host 0.0.0.0 --port 8890
# 4. Перевірити логи (шукати "default model")
```
### Варіант 3: Оновити через docker-compose (якщо конфіг монтується)
```bash
# 1. Перевірити docker-compose.yml
# Переконатися, що volume монтує правильну конфігурацію:
# volumes:
# - ./services/swapper-service/config:/app/config:ro
# 2. Скопіювати конфігурацію НОДА2
cp services/swapper-service/config/swapper_config_node2.yaml \
services/swapper-service/config/swapper_config.yaml
# 3. Перезапустити
docker-compose restart swapper-service
# 4. Перевірити логи
docker-compose logs swapper-service --tail 30 | grep -i "default\|gpt-oss"
```
---
## 🔍 Перевірка
### 1. Перевірити чи завантажилась модель
```bash
# На НОДА2
curl http://localhost:8890/status | jq
```
**Очікуваний результат:**
```json
{
"status": "healthy",
"active_model": "gpt-oss:latest",
"available_models": ["gpt-oss:latest", "phi3:latest", ...],
"loaded_models": ["gpt-oss:latest"],
"mode": "single-active",
"total_models": 8
}
```
### 2. Перевірити в кабінеті НОДА2
Відкрити: `http://localhost:8899/nodes/node-2-macbook-m4max`
**Очікуваний результат:**
- Swapper Service показує активну модель: `gpt-oss:latest`
- Статус моделі: `loaded` або `active`
- GPU використання: Apple Silicon Metal acceleration
### 3. Перевірити логи
```bash
# Якщо через Docker
docker-compose logs swapper-service | grep -i "default\|gpt-oss"
# Якщо локально
# Логи будуть в консолі, шукати:
# 🔄 Loading default model: gpt-oss:latest
# ✅ Default model loaded: gpt-oss:latest
```
---
## 📊 Результат
### До змін:
-Всі моделі `UNLOADED` при старті
- ❌ Перший запит повільний (~10-30 сек на завантаження)
- ✅ Економія пам'яті (0 GB при старті)
### Після змін:
-`gpt-oss:latest` автоматично завантажується при старті
- ✅ Швидка відповідь на перший запит (~1-2 сек)
- ⚠️ Використання пам'яті: ~13 GB (прийнятно для 64GB RAM)
---
## 🎯 Переваги
1. **Швидкість:**
- Перший запит відразу працює
- Немає затримки на завантаження моделі
2. **Зручність:**
- Модель готова до використання одразу після старту
- Не потрібно чекати на завантаження
3. **Оптимальний вибір:**
- `gpt-oss:latest` - швидка модель для більшості запитів
- 13 GB - прийнятний розмір для 64GB RAM
- 20.9B параметрів - хороша якість відповідей
---
## ⚙️ Альтернативні варіанти default_model
### Легка модель (менше пам'яті):
```yaml
swapper:
default_model: phi3:latest # 2.2 GB, 3.8B params - швидка легка модель
```
### Vision модель (для обробки зображень):
```yaml
swapper:
default_model: qwen3-vl:latest # 6.1 GB, 8.8B params - vision capabilities
```
### Code модель (для розробки):
```yaml
swapper:
default_model: starcoder2:latest # 1.7 GB, 3B params - code specialist
```
### Вимкнути автоматичне завантаження:
```yaml
swapper:
# default_model: gpt-oss:latest # Закоментовано - моделі завантажуються тільки за запитом
```
---
## 🔧 Особливості НОДА2
### Apple Silicon (M4 Max):
-`metal_acceleration: true` - використання GPU прискорення
- ✅ 40-core GPU - потужна обробка
- ✅ 64GB RAM - достатньо для великих моделей
### Ollama на НОДА2:
- ✅ Native Ollama: `http://localhost:11434` (через Pieces OS або brew)
- ✅ Docker Ollama: `http://localhost:11435` (якщо запущений)
- ⚠️ Swapper Service використовує Native Ollama за замовчанням
### Моделі на НОДА2:
- ✅ 8 моделей встановлено (~118 GB загалом)
- ✅ Різноманітність: LLM, Code, Vision, Reasoning
- ✅ Великі моделі доступні (до 42 GB)
---
## ✅ Статус
**Конфігурація створена:**
-`services/swapper-service/config/swapper_config_node2.yaml`
- ✅ Логіка автоматичного завантаження вже додана (в `main.py`)
- ✅ Налаштовано для Apple Silicon (Metal acceleration)
**Наступний крок:**
- Застосувати конфігурацію на НОДА2
- Перезапустити Swapper Service
- Перевірити логи та статус
---
## 📝 Примітки
1. **Конфігурація НОДА2 відрізняється від НОДА1:**
- НОДА1: NVIDIA GPU, `qwen3-8b` (4.87 GB)
- НОДА2: Apple Silicon, `gpt-oss:latest` (13 GB)
2. **Ollama на НОДА2:**
- Може працювати через Pieces OS або brew
- Порт: `11434` (native) або `11435` (Docker)
- Swapper Service використовує `http://localhost:11434`
3. **Моделі:**
- На НОДА2 встановлені інші моделі, ніж на НОДА1
- Конфігурація відповідає реально встановленим моделям
- Можна змінити `default_model` на будь-яку з доступних
---
**Готово до застосування на НОДА2!** 🚀