From e90409e2e91040a8bd71a81375190a02726c3c93 Mon Sep 17 00:00:00 2001 From: Ivan Tytar Date: Mon, 17 Nov 2025 00:07:49 +0100 Subject: [PATCH] Simplify Cursor task: only fix indent in router_request --- CURSOR-FIX-HELION.md | 157 +++++++++++----------------------------- gateway-bot/http_api.py | 3 +- router-config.yml | 19 +++++ 3 files changed, 62 insertions(+), 117 deletions(-) diff --git a/CURSOR-FIX-HELION.md b/CURSOR-FIX-HELION.md index af87b88f..22f65f37 100644 --- a/CURSOR-FIX-HELION.md +++ b/CURSOR-FIX-HELION.md @@ -1,57 +1,29 @@ -# Завдання для Cursor: Виправити Helion system_prompt +# 🔧 ВИПРАВИТИ: Helion system_prompt не працює -## Проблема -Telegram бот Helion працює, але відповідає як generic Qwen замість використання Helion system prompt про Energy Union та EcoMiner. +## ❌ Поточна проблема +Бот **працює**, але відповідає як "Qwen" замість "Helion". -## Репозиторій -`/opt/microdao-daarion` (поточний, на сервері) +Telegram бот отримує повідомлення ✅ +Router маршрутизує запити ✅ +Ollama відповідає ✅ +**Але**: Router **ігнорує** `system_prompt` від Gateway ❌ -## Діагностика +## 🎯 Що потрібно виправити -### Що працює: -- ✅ Gateway отримує Telegram повідомлення через Cloudflare tunnel -- ✅ Router маршрутизує запити (правило `helion_agent` матчиться) -- ✅ Ollama відповідає -- ✅ Відповіді надсилаються в Telegram +### Файл: `gateway-bot/http_api.py` -### Що НЕ працює: -- ❌ Router не використовує `context.system_prompt` від gateway -- ❌ Відповіді generic ("Меня зовут Qwen") замість Helion personality +**Знайди функцію** `helion_telegram_webhook` (рядок ~418) -## Причина -Gateway надсилає в файлі `gateway-bot/http_api.py` (рядки 466-470): -```python -"payload": {"context": { - "agent_name": HELION_NAME, - "system_prompt": HELION_SYSTEM_PROMPT, - "memory": memory_context, -}, -``` +**Знайди змінну** `router_request` (рядок ~453) -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 router_request = { "message": text, "mode": "chat", "agent": "helion", - "metadata": { ... }, - "payload": {"context": { + "metadata": {...}, + "payload": {"context": { # ❌ Тут помилка indent! "agent_name": HELION_NAME, "system_prompt": HELION_SYSTEM_PROMPT, "memory": memory_context, @@ -60,15 +32,15 @@ router_request = { } ``` -**Має бути:** +**Виправлена структура (ПРАВИЛЬНА):** ```python router_request = { "message": text, "mode": "chat", "agent": "helion", - "metadata": { ... }, + "metadata": {...}, "payload": { - "context": { + "context": { # ✅ Правильний indent "agent_name": HELION_NAME, "system_prompt": HELION_SYSTEM_PROMPT, "memory": memory_context, @@ -77,89 +49,42 @@ router_request = { } ``` -Проблема: подвійні дужки `{"context": {` мають бути на різних рівнях indent. +## 🔍 Проблема простими словами -### 2. Перевірити що router отримує context - -**Файл:** `providers/llm_provider.py` -**Метод:** `_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... +Router очікує структуру: +``` +payload → context → system_prompt ``` -### 3. Перезапустити і протестувати +Gateway зараз надсилає: +``` +payload → "context": { → context → system_prompt (подвійна вкладеність!) +``` + +Треба виправити indent, щоб `"context": {` був на правильному рівні всередині `"payload"`. + +## ✅ Перевірка + +Після виправлення: ```bash # Перезапустити gateway docker compose restart gateway -# Перезапустити router -docker compose restart router +# Надіслати в Telegram боту: +"Хто ти і що таке EcoMiner?" -# Почекати 5 секунд -sleep 5 - -# Перевірити логи -docker compose logs --tail=20 router | grep DEBUG +# Має відповісти щось про Helion та Energy Union +# Якщо відповідає "Qwen" - не виправлено ``` -### 4. Надіслати тестове повідомлення +## 📝 Важливо -Надішли боту в Telegram: **"Хто ти і що таке EcoMiner?"** - -Очікувана відповідь має містити: -- "Helion" -- "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... -``` +- **НЕ** створюй новий `helion_prompt.txt` - він вже існує ✅ +- **НЕ** створюй новий webhook endpoint - він вже є ✅ +- **НЕ** змінюй нічого крім структури `router_request` ✅ +- Просто виправ **indent** в одному місці! --- -**Після виконання - запустіть тести і повідомте про результат!** +**Це все! Одна проста зміна indent.** diff --git a/gateway-bot/http_api.py b/gateway-bot/http_api.py index 01529a51..7c393623 100644 --- a/gateway-bot/http_api.py +++ b/gateway-bot/http_api.py @@ -463,11 +463,12 @@ async def helion_telegram_webhook(update: TelegramUpdate): "username": username, "chat_id": chat_id, }, - "context": { + "payload": {"context": { "agent_name": HELION_NAME, "system_prompt": HELION_SYSTEM_PROMPT, "memory": memory_context, }, + }, } # Send to Router diff --git a/router-config.yml b/router-config.yml index 693ad74e..f173a430 100644 --- a/router-config.yml +++ b/router-config.yml @@ -135,6 +135,15 @@ routing: use_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) - id: devtools_complex_cloud priority: 10 @@ -194,3 +203,13 @@ policies: enabled: true audit_mode: 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.