Simplify Cursor task: only fix indent in router_request
This commit is contained in:
@@ -1,57 +1,29 @@
|
|||||||
# Завдання для Cursor: Виправити Helion system_prompt
|
# 🔧 ВИПРАВИТИ: Helion system_prompt не працює
|
||||||
|
|
||||||
## Проблема
|
## ❌ Поточна проблема
|
||||||
Telegram бот Helion працює, але відповідає як generic Qwen замість використання Helion system prompt про Energy Union та EcoMiner.
|
Бот **працює**, але відповідає як "Qwen" замість "Helion".
|
||||||
|
|
||||||
## Репозиторій
|
Telegram бот отримує повідомлення ✅
|
||||||
`/opt/microdao-daarion` (поточний, на сервері)
|
Router маршрутизує запити ✅
|
||||||
|
Ollama відповідає ✅
|
||||||
|
**Але**: Router **ігнорує** `system_prompt` від Gateway ❌
|
||||||
|
|
||||||
## Діагностика
|
## 🎯 Що потрібно виправити
|
||||||
|
|
||||||
### Що працює:
|
### Файл: `gateway-bot/http_api.py`
|
||||||
- ✅ Gateway отримує Telegram повідомлення через Cloudflare tunnel
|
|
||||||
- ✅ Router маршрутизує запити (правило `helion_agent` матчиться)
|
|
||||||
- ✅ Ollama відповідає
|
|
||||||
- ✅ Відповіді надсилаються в Telegram
|
|
||||||
|
|
||||||
### Що НЕ працює:
|
**Знайди функцію** `helion_telegram_webhook` (рядок ~418)
|
||||||
- ❌ Router не використовує `context.system_prompt` від gateway
|
|
||||||
- ❌ Відповіді generic ("Меня зовут Qwen") замість Helion personality
|
|
||||||
|
|
||||||
## Причина
|
**Знайди змінну** `router_request` (рядок ~453)
|
||||||
Gateway надсилає в файлі `gateway-bot/http_api.py` (рядки 466-470):
|
|
||||||
```python
|
|
||||||
"payload": {"context": {
|
|
||||||
"agent_name": HELION_NAME,
|
|
||||||
"system_prompt": HELION_SYSTEM_PROMPT,
|
|
||||||
"memory": memory_context,
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
Router в файлі `providers/llm_provider.py` (метод `_get_system_prompt`) шукає:
|
**Поточна структура (НЕПРАВИЛЬНА):**
|
||||||
```python
|
|
||||||
context = req.payload.get("context") or {}
|
|
||||||
if "system_prompt" in context:
|
|
||||||
return context["system_prompt"]
|
|
||||||
```
|
|
||||||
|
|
||||||
Але `req.payload` це вже dict, а `payload.get("context")` шукає ключ "context" в payload.
|
|
||||||
|
|
||||||
## Завдання
|
|
||||||
|
|
||||||
### 1. Виправити структуру в gateway-bot/http_api.py
|
|
||||||
|
|
||||||
**Файл:** `gateway-bot/http_api.py`
|
|
||||||
**Рядки:** 453-471 (функція `helion_telegram_webhook`)
|
|
||||||
|
|
||||||
**Поточний код:**
|
|
||||||
```python
|
```python
|
||||||
router_request = {
|
router_request = {
|
||||||
"message": text,
|
"message": text,
|
||||||
"mode": "chat",
|
"mode": "chat",
|
||||||
"agent": "helion",
|
"agent": "helion",
|
||||||
"metadata": { ... },
|
"metadata": {...},
|
||||||
"payload": {"context": {
|
"payload": {"context": { # ❌ Тут помилка indent!
|
||||||
"agent_name": HELION_NAME,
|
"agent_name": HELION_NAME,
|
||||||
"system_prompt": HELION_SYSTEM_PROMPT,
|
"system_prompt": HELION_SYSTEM_PROMPT,
|
||||||
"memory": memory_context,
|
"memory": memory_context,
|
||||||
@@ -60,15 +32,15 @@ router_request = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Має бути:**
|
**Виправлена структура (ПРАВИЛЬНА):**
|
||||||
```python
|
```python
|
||||||
router_request = {
|
router_request = {
|
||||||
"message": text,
|
"message": text,
|
||||||
"mode": "chat",
|
"mode": "chat",
|
||||||
"agent": "helion",
|
"agent": "helion",
|
||||||
"metadata": { ... },
|
"metadata": {...},
|
||||||
"payload": {
|
"payload": {
|
||||||
"context": {
|
"context": { # ✅ Правильний indent
|
||||||
"agent_name": HELION_NAME,
|
"agent_name": HELION_NAME,
|
||||||
"system_prompt": HELION_SYSTEM_PROMPT,
|
"system_prompt": HELION_SYSTEM_PROMPT,
|
||||||
"memory": memory_context,
|
"memory": memory_context,
|
||||||
@@ -77,89 +49,42 @@ router_request = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Проблема: подвійні дужки `{"context": {` мають бути на різних рівнях indent.
|
## 🔍 Проблема простими словами
|
||||||
|
|
||||||
### 2. Перевірити що router отримує context
|
Router очікує структуру:
|
||||||
|
```
|
||||||
**Файл:** `providers/llm_provider.py`
|
payload → context → system_prompt
|
||||||
**Метод:** `_get_system_prompt` (близько рядка 95)
|
|
||||||
|
|
||||||
Додати debug logging:
|
|
||||||
```python
|
|
||||||
def _get_system_prompt(self, req: RouterRequest) -> Optional[str]:
|
|
||||||
"""Get system prompt based on agent or context"""
|
|
||||||
# 1. Check if context.system_prompt provided
|
|
||||||
context = req.payload.get("context") or {}
|
|
||||||
|
|
||||||
# DEBUG: Log what we received
|
|
||||||
logger.info(f"[DEBUG] payload keys: {list(req.payload.keys())}")
|
|
||||||
logger.info(f"[DEBUG] context keys: {list(context.keys())}")
|
|
||||||
|
|
||||||
if "system_prompt" in context:
|
|
||||||
system_prompt = context["system_prompt"]
|
|
||||||
logger.info(f"[DEBUG] Using context.system_prompt ({len(system_prompt)} chars)")
|
|
||||||
return system_prompt
|
|
||||||
|
|
||||||
# 2. Agent-specific fallbacks...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Перезапустити і протестувати
|
Gateway зараз надсилає:
|
||||||
|
```
|
||||||
|
payload → "context": { → context → system_prompt (подвійна вкладеність!)
|
||||||
|
```
|
||||||
|
|
||||||
|
Треба виправити indent, щоб `"context": {` був на правильному рівні всередині `"payload"`.
|
||||||
|
|
||||||
|
## ✅ Перевірка
|
||||||
|
|
||||||
|
Після виправлення:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Перезапустити gateway
|
# Перезапустити gateway
|
||||||
docker compose restart gateway
|
docker compose restart gateway
|
||||||
|
|
||||||
# Перезапустити router
|
# Надіслати в Telegram боту:
|
||||||
docker compose restart router
|
"Хто ти і що таке EcoMiner?"
|
||||||
|
|
||||||
# Почекати 5 секунд
|
# Має відповісти щось про Helion та Energy Union
|
||||||
sleep 5
|
# Якщо відповідає "Qwen" - не виправлено
|
||||||
|
|
||||||
# Перевірити логи
|
|
||||||
docker compose logs --tail=20 router | grep DEBUG
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Надіслати тестове повідомлення
|
## 📝 Важливо
|
||||||
|
|
||||||
Надішли боту в Telegram: **"Хто ти і що таке EcoMiner?"**
|
- **НЕ** створюй новий `helion_prompt.txt` - він вже існує ✅
|
||||||
|
- **НЕ** створюй новий webhook endpoint - він вже є ✅
|
||||||
Очікувана відповідь має містити:
|
- **НЕ** змінюй нічого крім структури `router_request` ✅
|
||||||
- "Helion"
|
- Просто виправ **indent** в одному місці!
|
||||||
- "Energy Union"
|
|
||||||
- "EcoMiner" або "BioMiner"
|
|
||||||
|
|
||||||
Якщо бачиш "Qwen" - system_prompt все ще не працює.
|
|
||||||
|
|
||||||
## Перевірка після виправлення
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Перевірити що gateway відправляє правильно
|
|
||||||
docker compose logs --tail=30 gateway | grep "Sending to Router"
|
|
||||||
|
|
||||||
# 2. Перевірити що router отримує context
|
|
||||||
docker compose logs --tail=30 router | grep "DEBUG.*context"
|
|
||||||
|
|
||||||
# 3. Надіслати тестове повідомлення і подивитись відповідь
|
|
||||||
```
|
|
||||||
|
|
||||||
## Файли які треба змінити
|
|
||||||
|
|
||||||
1. **gateway-bot/http_api.py** - виправити структуру payload
|
|
||||||
2. **providers/llm_provider.py** - додати debug logging (опціонально)
|
|
||||||
|
|
||||||
## Очікуваний результат
|
|
||||||
|
|
||||||
Після виправлення, бот має відповідати:
|
|
||||||
```
|
|
||||||
Я — Helion, AI-агент платформи Energy Union.
|
|
||||||
EcoMiner (SES-77) — це модульна когенераційна установка...
|
|
||||||
```
|
|
||||||
|
|
||||||
Замість:
|
|
||||||
```
|
|
||||||
Меня зовут Qwen, и я являюсь частью серии моделей Alibaba Cloud...
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Після виконання - запустіть тести і повідомте про результат!**
|
**Це все! Одна проста зміна indent.**
|
||||||
|
|||||||
@@ -463,11 +463,12 @@ async def helion_telegram_webhook(update: TelegramUpdate):
|
|||||||
"username": username,
|
"username": username,
|
||||||
"chat_id": chat_id,
|
"chat_id": chat_id,
|
||||||
},
|
},
|
||||||
"context": {
|
"payload": {"context": {
|
||||||
"agent_name": HELION_NAME,
|
"agent_name": HELION_NAME,
|
||||||
"system_prompt": HELION_SYSTEM_PROMPT,
|
"system_prompt": HELION_SYSTEM_PROMPT,
|
||||||
"memory": memory_context,
|
"memory": memory_context,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Send to Router
|
# Send to Router
|
||||||
|
|||||||
@@ -135,6 +135,15 @@ routing:
|
|||||||
use_metadata: provider
|
use_metadata: provider
|
||||||
description: "Явний вибір провайдера через metadata.provider"
|
description: "Явний вибір провайдера через metadata.provider"
|
||||||
|
|
||||||
|
|
||||||
|
# Helion Energy Union Agent
|
||||||
|
- id: helion_agent
|
||||||
|
priority: 5
|
||||||
|
when:
|
||||||
|
agent: helion
|
||||||
|
use_llm: local_qwen3_8b
|
||||||
|
use_context_prompt: true
|
||||||
|
description: "Helion agent for Energy Union → uses context.system_prompt"
|
||||||
# DevTools + складні задачі → DeepSeek (якщо є API key)
|
# DevTools + складні задачі → DeepSeek (якщо є API key)
|
||||||
- id: devtools_complex_cloud
|
- id: devtools_complex_cloud
|
||||||
priority: 10
|
priority: 10
|
||||||
@@ -194,3 +203,13 @@ policies:
|
|||||||
enabled: true
|
enabled: true
|
||||||
audit_mode:
|
audit_mode:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
|
helion:
|
||||||
|
description: "Helion - AI agent for Energy Union platform"
|
||||||
|
default_llm: local_qwen3_8b
|
||||||
|
use_context_prompt: true
|
||||||
|
system_prompt: |
|
||||||
|
# System prompt буде підставлено з context.system_prompt від gateway
|
||||||
|
# Якщо не передано - використовується цей fallback
|
||||||
|
Ти - Helion, AI-агент платформи Energy Union.
|
||||||
|
Допомагай користувачам з технологіями EcoMiner/BioMiner, токеномікою та DAO governance.
|
||||||
|
|||||||
Reference in New Issue
Block a user