- Vision Encoder Service (OpenCLIP ViT-L/14, GPU-accelerated)
- FastAPI app with text/image embedding endpoints (768-dim)
- Docker support with NVIDIA GPU runtime
- Port 8001, health checks, model info API
- Qdrant Vector Database integration
- Port 6333/6334 (HTTP/gRPC)
- Image embeddings storage (768-dim, Cosine distance)
- Auto collection creation
- Vision RAG implementation
- VisionEncoderClient (Python client for API)
- Image Search module (text-to-image, image-to-image)
- Vision RAG routing in DAGI Router (mode: image_search)
- VisionEncoderProvider integration
- Documentation (5000+ lines)
- SYSTEM-INVENTORY.md - Complete system inventory
- VISION-ENCODER-STATUS.md - Service status
- VISION-RAG-IMPLEMENTATION.md - Implementation details
- vision_encoder_deployment_task.md - Deployment checklist
- services/vision-encoder/README.md - Deployment guide
- Updated WARP.md, INFRASTRUCTURE.md, Jupyter Notebook
- Testing
- test-vision-encoder.sh - Smoke tests (6 tests)
- Unit tests for client, image search, routing
- Services: 17 total (added Vision Encoder + Qdrant)
- AI Models: 3 (qwen3:8b, OpenCLIP ViT-L/14, BAAI/bge-m3)
- GPU Services: 2 (Vision Encoder, Ollama)
- VRAM Usage: ~10 GB (concurrent)
Status: Production Ready ✅
18 KiB
18 KiB
Завдання для Cursor AI: Запуск агента Helion на сервері
Репозиторій: microdao-daarion (поточний)
Сервер: 144.76.224.179
Мета: Запустити Telegram бота Helion для платформи Energy Union
📋 Контекст
Агент Helion повністю розроблений на рівні коду, але не запущений на сервері. Потрібно:
- Додати Memory Service в docker-compose.yml
- Налаштувати всі залежності
- Створити інструкції для запуску на сервері
Існуючі компоненти:
- ✅
gateway-bot/helion_prompt.txt- system prompt (200+ рядків) - ✅
gateway-bot/http_api.py- endpoint/helion/telegram/webhook - ✅
gateway-bot/memory_client.py- клієнт для Memory Service - ✅
services/memory-service/- код Memory Service - ✅
.env- Telegram токен вже є - ✅
scripts/setup-nginx-gateway.sh- скрипт для HTTPS - ✅
scripts/register-agent-webhook.sh- скрипт для webhook
🎯 Завдання 1: Додати Memory Service в docker-compose.yml
Файл: docker-compose.yml
Що зробити:
- Додати сервіс memory-service після
rag-service:
# Memory Service
memory-service:
build:
context: ./services/memory-service
dockerfile: Dockerfile
container_name: dagi-memory-service
ports:
- "8000:8000"
environment:
- DATABASE_URL=${MEMORY_DATABASE_URL:-postgresql://postgres:postgres@postgres:5432/daarion_memory}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
volumes:
- ./logs:/app/logs
- memory-data:/app/data
depends_on:
- postgres
networks:
- dagi-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
- Додати PostgreSQL для Memory Service (якщо ще немає):
# PostgreSQL Database
postgres:
image: postgres:15-alpine
container_name: dagi-postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=daarion_memory
volumes:
- postgres-data:/var/lib/postgresql/data
- ./services/memory-service/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- dagi-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
- Оновити volumes секцію:
volumes:
rag-model-cache:
driver: local
memory-data:
driver: local
postgres-data:
driver: local
- Додати STT Service (для голосових повідомлень - опціонально):
# STT Service (Speech-to-Text)
stt-service:
build:
context: ./services/stt-service
dockerfile: Dockerfile
container_name: dagi-stt-service
ports:
- "9000:9000"
environment:
- MODEL_NAME=${STT_MODEL_NAME:-openai/whisper-base}
- DEVICE=${STT_DEVICE:-cpu}
volumes:
- ./logs:/app/logs
- stt-model-cache:/root/.cache/huggingface
networks:
- dagi-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
interval: 30s
timeout: 10s
retries: 3
- Оновити gateway environment:
gateway:
# ... існуючий код ...
environment:
- ROUTER_URL=http://router:9102
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-}
- DAARWIZZ_NAME=${DAARWIZZ_NAME:-DAARWIZZ}
- DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
- HELION_TELEGRAM_BOT_TOKEN=${HELION_TELEGRAM_BOT_TOKEN:-}
- HELION_NAME=${HELION_NAME:-Helion}
- HELION_PROMPT_PATH=/app/gateway-bot/helion_prompt.txt
- MEMORY_SERVICE_URL=http://memory-service:8000
- STT_SERVICE_URL=http://stt-service:9000 # Додати це
🎯 Завдання 2: Оновити .env файл
Файл: .env
Що додати:
# -----------------------------------------------------------------------------
# Memory Service Configuration
# -----------------------------------------------------------------------------
MEMORY_DATABASE_URL=postgresql://postgres:postgres@postgres:5432/daarion_memory
MEMORY_SERVICE_URL=http://memory-service:8000
# -----------------------------------------------------------------------------
# STT Service Configuration (optional)
# -----------------------------------------------------------------------------
STT_SERVICE_URL=http://stt-service:9000
STT_MODEL_NAME=openai/whisper-base
STT_DEVICE=cpu
# -----------------------------------------------------------------------------
# PostgreSQL Configuration
# -----------------------------------------------------------------------------
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=daarion_memory
🎯 Завдання 3: Перевірити Memory Service має init.sql
Файл: services/memory-service/init.sql
Створити файл якщо відсутній:
-- Memory Service Database Schema
-- Created: 2025-01-16
-- User facts table
CREATE TABLE IF NOT EXISTS user_facts (
id SERIAL PRIMARY KEY,
user_id VARCHAR(255) NOT NULL,
team_id VARCHAR(255),
fact_key VARCHAR(255) NOT NULL,
fact_value TEXT,
fact_value_json JSONB,
token_gated BOOLEAN DEFAULT FALSE,
token_requirements JSONB,
metadata JSONB DEFAULT '{}',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id, team_id, fact_key)
);
-- Dialog summaries table
CREATE TABLE IF NOT EXISTS dialog_summaries (
id SERIAL PRIMARY KEY,
team_id VARCHAR(255) NOT NULL,
channel_id VARCHAR(255),
agent_id VARCHAR(255),
user_id VARCHAR(255),
period_start TIMESTAMP NOT NULL,
period_end TIMESTAMP NOT NULL,
summary_text TEXT,
summary_json JSONB,
message_count INTEGER DEFAULT 0,
participant_count INTEGER DEFAULT 0,
topics TEXT[],
meta JSONB DEFAULT '{}',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Agent memory events table
CREATE TABLE IF NOT EXISTS agent_memory_events (
id SERIAL PRIMARY KEY,
agent_id VARCHAR(255) NOT NULL,
team_id VARCHAR(255) NOT NULL,
channel_id VARCHAR(255),
user_id VARCHAR(255),
scope VARCHAR(50) DEFAULT 'short_term',
kind VARCHAR(50) NOT NULL,
body_text TEXT,
body_json JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_user_facts_user_team ON user_facts(user_id, team_id);
CREATE INDEX IF NOT EXISTS idx_dialog_summaries_team_channel ON dialog_summaries(team_id, channel_id);
CREATE INDEX IF NOT EXISTS idx_agent_memory_events_agent_team ON agent_memory_events(agent_id, team_id);
CREATE INDEX IF NOT EXISTS idx_agent_memory_events_created ON agent_memory_events(created_at DESC);
-- Update trigger for user_facts
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_user_facts_updated_at BEFORE UPDATE ON user_facts
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
🎯 Завдання 4: Перевірити Memory Service має health endpoint
Файл: services/memory-service/app/main.py
Перевірити наявність:
@app.get("/health")
async def health():
"""Health check endpoint"""
return {
"status": "healthy",
"service": "memory-service",
"timestamp": datetime.utcnow().isoformat()
}
Якщо відсутній - додати.
🎯 Завдання 5: Створити інструкцію для запуску на сервері
Файл: DEPLOY-HELION-SERVER.md
Створити файл з інструкціями:
# Інструкція: Запуск Helion на сервері 144.76.224.179
## Крок 1: Підготовка сервера
```bash
# SSH на сервер
ssh root@144.76.224.179
# Оновити систему
apt-get update && apt-get upgrade -y
# Встановити Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# Встановити Docker Compose
apt-get install -y docker-compose
# Встановити додаткові утиліти
apt-get install -y git curl jq certbot
Крок 2: Клонувати репозиторій
# Клонувати код
cd /opt
git clone https://github.com/IvanTytar/microdao-daarion.git
cd microdao-daarion
# Створити директорії для логів та даних
mkdir -p logs data/rbac
chmod -R 755 logs data
Крок 3: Налаштувати .env
# Скопіювати приклад
cp .env.example .env
# Відредагувати .env
nano .env
Важливі змінні для Helion:
HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM
HELION_NAME=Helion
HELION_PROMPT_PATH=./gateway-bot/helion_prompt.txt
MEMORY_SERVICE_URL=http://memory-service:8000
MEMORY_DATABASE_URL=postgresql://postgres:postgres@postgres:5432/daarion_memory
OLLAMA_BASE_URL=http://host.docker.internal:11434
OLLAMA_MODEL=qwen3:8b
Крок 4: Налаштувати DNS
Потрібно зробити ДО запуску скриптів!
-
Зайти в панель управління DNS (Cloudflare / Hetzner DNS)
-
Створити A запис:
- Name:
gateway.daarion.city - Type:
A - Value:
144.76.224.179 - TTL: 300
- Name:
-
Перевірити DNS:
dig gateway.daarion.city +short
# Повинно вивести: 144.76.224.179
Крок 5: Запустити Ollama (якщо локально)
# Встановити Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Запустити Ollama
ollama serve &
# Завантажити модель
ollama pull qwen3:8b
Крок 6: Запустити DAGI Stack
# Збілдити та запустити сервіси
docker-compose up -d
# Перевірити статус
docker-compose ps
# Переглянути логи
docker-compose logs -f gateway
# Очікувані сервіси:
# - dagi-router (9102)
# - dagi-gateway (9300)
# - dagi-memory-service (8000)
# - dagi-postgres (5432)
# - dagi-devtools (8008)
# - dagi-crewai (9010)
# - dagi-rbac (9200)
# - dagi-rag-service (9500)
Крок 7: Перевірити health endpoints
# Gateway
curl http://localhost:9300/health
# Повинно вивести:
# {
# "status": "healthy",
# "agents": {
# "daarwizz": {"name": "DAARWIZZ", "prompt_loaded": true},
# "helion": {"name": "Helion", "prompt_loaded": true}
# }
# }
# Memory Service
curl http://localhost:8000/health
# Router
curl http://localhost:9102/health
Крок 8: Налаштувати HTTPS Gateway
# Запустити скрипт (автоматично створює Let's Encrypt сертифікати)
sudo ./scripts/setup-nginx-gateway.sh gateway.daarion.city admin@daarion.city
# Перевірити HTTPS
curl https://gateway.daarion.city/health
Скрипт автоматично:
- Встановить certbot
- Отримає SSL сертифікат
- Налаштує nginx reverse proxy
- Створить auto-renewal для сертифікатів
- Запустить nginx в Docker контейнері
Крок 9: Зареєструвати Telegram Webhook
# Зареєструвати webhook для Helion
./scripts/register-agent-webhook.sh \
helion \
8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM \
gateway.daarion.city
# Перевірити webhook
curl "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/getWebhookInfo"
Крок 10: Тестування
- Відкрити бота в Telegram
- Надіслати повідомлення: "Привіт! Що таке EcoMiner?"
- Очікувати відповідь від Helion
Debugging
# Переглянути логи Gateway
docker-compose logs -f gateway
# Переглянути логи Memory Service
docker-compose logs -f memory-service
# Переглянути логи Router
docker-compose logs -f router
# Перевірити webhook статус
curl "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/getWebhookInfo" | jq
# Увійти в контейнер Gateway
docker exec -it dagi-gateway bash
# Перевірити промпт файл
cat /app/gateway-bot/helion_prompt.txt
Troubleshooting
Проблема: Memory Service не доступний
# Перевірити чи запущено
docker ps | grep memory-service
# Перезапустити
docker-compose restart memory-service
# Переглянути логи
docker-compose logs --tail=100 memory-service
Проблема: Бот не відповідає
# 1. Перевірити webhook
curl "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/getWebhookInfo"
# 2. Перевірити Gateway доступний
curl https://gateway.daarion.city/health
# 3. Перевірити nginx
docker logs nginx-gateway
# 4. Переглянути логи Gateway
docker-compose logs -f gateway
Проблема: SSL сертифікат не отримується
# Перевірити DNS
dig gateway.daarion.city +short
# Спробувати отримати сертифікат вручну
sudo certbot certonly --standalone -d gateway.daarion.city --email admin@daarion.city
# Перезапустити nginx
docker restart nginx-gateway
Моніторинг
# Статус всіх сервісів
docker-compose ps
# Використання ресурсів
docker stats
# Disk usage
df -h
# Логи всіх сервісів
docker-compose logs --tail=50
# Restart всього стеку
docker-compose restart
Backup
# Backup бази даних
docker exec dagi-postgres pg_dump -U postgres daarion_memory > backup_$(date +%Y%m%d).sql
# Backup логів
tar -czf logs_backup_$(date +%Y%m%d).tar.gz logs/
# Backup .env
cp .env .env.backup
Оновлення коду
cd /opt/microdao-daarion
git pull origin main
docker-compose build
docker-compose up -d
docker-compose logs -f gateway
---
## 🎯 Завдання 6: Створити fallback для Memory Service (опціонально)
**Файл**: `gateway-bot/memory_client.py`
### Додати fallback режим:
Якщо Memory Service недоступний, gateway має працювати в stateless режимі.
Перевірити що методи `get_context()` та `save_chat_turn()` вже мають try-catch і повертають порожні дані при помилці:
```python
async def get_context(...) -> Dict[str, Any]:
try:
# ... existing code ...
except Exception as e:
logger.warning(f"Memory context fetch failed: {e}")
return {
"facts": [],
"recent_events": [],
"dialog_summaries": []
}
Це вже реалізовано - перевірити що працює.
📝 Checklist для виконання
- Завдання 1: Додати memory-service в docker-compose.yml
- Завдання 1: Додати postgres в docker-compose.yml
- Завдання 1: Додати stt-service в docker-compose.yml (опціонально)
- Завдання 1: Оновити volumes секцію
- Завдання 2: Оновити .env з новими змінними
- Завдання 3: Створити init.sql для PostgreSQL
- Завдання 4: Перевірити health endpoint в Memory Service
- Завдання 5: Створити DEPLOY-HELION-SERVER.md
- Завдання 6: Перевірити fallback режим в memory_client.py
🧪 Тестування після змін
Локальне тестування (на Mac)
# Запустити стек локально
cd /Users/apple/github-projects/microdao-daarion
docker-compose up -d
# Перевірити health endpoints
curl http://localhost:9300/health
curl http://localhost:8000/health
# Переглянути логи
docker-compose logs -f gateway memory-service
Перевірка файлів
# Перевірити що всі файли на місці
ls -la gateway-bot/helion_prompt.txt
ls -la services/memory-service/Dockerfile
ls -la services/memory-service/init.sql
ls -la scripts/setup-nginx-gateway.sh
ls -la scripts/register-agent-webhook.sh
📚 Додаткова інформація
Архітектура Helion
User (Telegram)
↓
Telegram Bot API (webhook)
↓
nginx-gateway (HTTPS)
↓
Gateway Service (/helion/telegram/webhook)
↓
Memory Service (fetch context)
↓
DAGI Router (process with Helion prompt)
↓
LLM (Ollama qwen3:8b)
↓
Memory Service (save history)
↓
Telegram Bot API (send response)
Документація
- Helion Quick Start:
docs/HELION-QUICKSTART.md - Agents Map:
docs/agents.md - System Prompt:
gateway-bot/helion_prompt.txt - Memory Service README:
services/memory-service/README.md
⚠️ Важливі нотатки
- Токени в .env: Ніколи не комітити .env файл в git
- DNS налаштування: Має бути зроблено ДО запуску setup-nginx-gateway.sh
- Ollama: Має бути запущено локально або віддалено
- Memory fallback: Якщо Memory Service не доступний, бот працюватиме без історії
- SSL сертифікати: Автоматично оновлюються кожної неділі через cron
Після виконання всіх завдань, агент Helion має запрацювати! 🚀