Files
microdao-daarion/CURSOR-FIX-BOTS-COMPLETE.md

265 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔧 КРИТИЧНЕ ВИПРАВЛЕННЯ: Telegram Bots Routing
## ❌ ПРОБЛЕМА
Обидва боти (DAARWIZZ і Helion) відповідають неправильно:
- Helion відповідає як Qwen (не використовує свій system_prompt)
- DAARWIZZ може відповідати в чат Helion (неправильний routing)
---
## 🎯 ЗАВДАННЯ
### 1⃣ ПЕРЕВІРИТИ КОНФІГУРАЦІЮ НА СЕРВЕРІ
**Сервер:** 144.76.224.179 (root)
**Репозиторій на сервері:** `/opt/microdao-daarion`
Підключись до сервера і виконай:
```bash
cd /opt/microdao-daarion
# Перевірка 1: Токени в .env
echo "=== ТОКЕНИ ===="
grep "TELEGRAM_BOT_TOKEN" .env
# Має бути:
# DAARWIZZ_TELEGRAM_BOT_TOKEN=8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M
# HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM
# (можна видалити TELEGRAM_BOT_TOKEN якщо є)
# Перевірка 2: Структура payload в Helion webhook
echo -e "\n=== HELION PAYLOAD СТРУКТУРА ==="
sed -n '466,473p' gateway-bot/http_api.py
# Має бути:
# "payload": {
# "context": {
# "agent_name": HELION_NAME,
# "system_prompt": HELION_SYSTEM_PROMPT,
# "memory": memory_context,
# }
# },
# Перевірка 3: Токени в контейнері gateway
echo -e "\n=== ТОКЕНИ В GATEWAY КОНТЕЙНЕРІ ==="
docker exec dagi-gateway printenv | grep "TELEGRAM_BOT_TOKEN"
# Перевірка 4: Webhooks в Telegram
echo -e "\n=== WEBHOOK URLs ==="
curl -s "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/getWebhookInfo" | python3 -c "import sys, json; print('DAARWIZZ:', json.load(sys.stdin)['result'].get('url', 'NOT SET'))"
curl -s "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/getWebhookInfo" | python3 -c "import sys, json; print('Helion:', json.load(sys.stdin)['result'].get('url', 'NOT SET'))"
```
---
### 2⃣ ВИПРАВЛЕННЯ
#### A. Якщо токени неправильні в .env:
```bash
cd /opt/microdao-daarion
# Виправити токени
cat > .env.tokens << 'EOF'
DAARWIZZ_TELEGRAM_BOT_TOKEN=8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M
HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM
EOF
# Додати в .env (видаливши старі TELEGRAM_BOT_TOKEN рядки спочатку)
sed -i '/TELEGRAM_BOT_TOKEN/d' .env
cat .env.tokens >> .env
rm .env.tokens
```
#### B. Виправити Helion payload структуру:
**Файл:** `gateway-bot/http_api.py`
**Рядки:** 466-473
**Замінити:**
```python
"payload": {"context": {
"agent_name": HELION_NAME,
"system_prompt": HELION_SYSTEM_PROMPT,
"memory": memory_context,
},
},
```
**На:**
```python
"payload": {
"context": {
"agent_name": HELION_NAME,
"system_prompt": HELION_SYSTEM_PROMPT,
"memory": memory_context,
}
},
```
**Суть:** `"context"` має бути всередині `"payload"` з правильним indent, а не `"payload": {"context":` в одному рядку.
#### C. Додати DAARWIZZ_TELEGRAM_BOT_TOKEN в docker-compose.yml:
**Файл:** `docker-compose.yml`
**Секція:** `gateway``environment`
Знайди секцію gateway environment і **переконайся що є**:
```yaml
environment:
- ROUTER_URL=http://router:9102
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-}
- DAARWIZZ_TELEGRAM_BOT_TOKEN=${DAARWIZZ_TELEGRAM_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
```
#### D. Перевірити webhooks registration:
```bash
# Отримати поточний Cloudflare tunnel URL
TUNNEL_URL=$(ps aux | grep cloudflared | grep -v grep | grep -oP 'http://[^ ]+' | head -1)
echo "Tunnel: $TUNNEL_URL"
# Якщо тунелю немає - створити новий
if [ -z "$TUNNEL_URL" ]; then
# Зупинити старі
pkill cloudflared
# Створити новий
nohup cloudflared tunnel --url http://localhost:9300 > /var/log/cloudflared.log 2>&1 &
sleep 3
# Отримати URL з логу
TUNNEL_URL=$(grep -oP 'https://[a-z0-9-]+\.trycloudflare\.com' /var/log/cloudflared.log | head -1)
fi
echo "Using tunnel: $TUNNEL_URL"
# Зареєструвати webhooks
curl -X POST "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/setWebhook" \
-d "url=${TUNNEL_URL}/telegram/webhook"
curl -X POST "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/setWebhook" \
-d "url=${TUNNEL_URL}/helion/telegram/webhook"
```
---
### 3⃣ ПЕРЕЗАПУСК СЕРВІСІВ
```bash
cd /opt/microdao-daarion
# Перезапустити gateway з новими змінними
docker compose up -d gateway
# Перезапустити router (якщо змінювали llm_provider)
docker compose restart router
# Почекати 5 секунд
sleep 5
# Перевірити що все працює
docker compose ps
docker compose logs --tail=10 gateway
docker compose logs --tail=10 router
```
---
### 4⃣ ТЕСТУВАННЯ
Після виправлень:
#### Тест 1: DAARWIZZ бот
Надішли боту `@DAARWIZZBot`:
```
Хто ти?
```
**Очікувана відповідь:** Має згадувати DAARWIZZ, DAARION.city, microDAO
#### Тест 2: Helion бот
Надішли боту (username потрібно дізнатись через `getMe`):
```
Хто ти і що таке EcoMiner?
```
**Очікувана відповідь:** Має згадувати Helion, Energy Union, EcoMiner
#### Якщо НЕ працює - дивись логи:
```bash
# Gateway логи (останні 30 рядків)
docker compose logs --tail=30 gateway | grep -E "helion|daarwizz|Sending to Router"
# Router логи (останні 30 рядків)
docker compose logs --tail=30 router | grep -E "agent=|payload|context|DEBUG"
```
---
## 🔍 ДІАГНОСТИКА ПРОБЛЕМ
### Якщо Helion відповідає як Qwen:
1. **Перевір структуру payload** в `gateway-bot/http_api.py` (рядок 466)
2. **Перевір що HELION_SYSTEM_PROMPT завантажується:**
```bash
docker compose logs gateway | grep -i "helion.*prompt\|prompt.*loaded"
```
3. **Додай debug в router:**
```bash
# В providers/llm_provider.py після рядка 161
docker exec dagi-router cat /app/providers/llm_provider.py | grep -A5 "_get_system_prompt"
```
### Якщо боти відповідають в неправильний чат:
1. **Перевір що `send_telegram_message` отримує правильний токен:**
```bash
grep "send_telegram_message.*TELEGRAM_BOT_TOKEN" gateway-bot/http_api.py
```
Має бути:
- Рядок 198: `os.getenv("DAARWIZZ_TELEGRAM_BOT_TOKEN")`
- Рядок 262: `os.getenv("DAARWIZZ_TELEGRAM_BOT_TOKEN")`
- Рядок 498: `os.getenv("HELION_TELEGRAM_BOT_TOKEN")`
2. **Перевір webhooks:**
```bash
curl -s "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/getWebhookInfo"
```
URL має бути `/telegram/webhook` для DAARWIZZ
---
## ✅ КРИТЕРІЇ УСПІХУ
- ✅ DAARWIZZ бот відповідає про DAARION/microDAO
- ✅ Helion бот відповідає про Energy Union/EcoMiner (НЕ як Qwen)
- ✅ Кожен бот відповідає у свій чат (не плутає)
- ✅ Webhooks зареєстровані правильно
- ✅ Токени передаються в gateway контейнер
---
## 📝 ВАЖЛИВО
- **НЕ змінюй** файли prompt (`helion_prompt.txt`, `daarwizz_prompt.txt`) - вони правильні
- **НЕ створюй** нові webhook endpoints - вони є
- **Фокус на:** токени, payload структура, docker-compose environment
- **Після змін:** обов'язково перезапусти gateway і протестуй
---
**Після виконання - повідом про результат тестів!**