[2026-06-16] update balda-valera: context problem, owner token, diagnostics

This commit is contained in:
Alexey Martemyanov
2026-06-16 20:59:26 +06:00
parent 0a3f728b96
commit e3197994b2
2 changed files with 94 additions and 18 deletions
+53 -1
View File
@@ -75,14 +75,66 @@ DOCKER_OPTS={"max_tokens": 2048, "temperature": 0.7}
При изменении `.env` всегда использовать `up -d`.
## Контекст (история сообщений)
**Не работает** для OpenAI-совместимых провайдеров (DeepSeek, ChatGPT и т.д.).
Причина: ADK Runner (`google.golang.org/adk`) inject'ит историю в мульти-тур только для Gemini API. Для OpenAI-compatible провайдеров (через `base_url` переопределение) ADK не inject'ит предыдущие сообщения в вызов модели — каждый turn получает только одно сообщение.
`balda.sessions.persistent: true` — влияет на хранение balda-сессии между рестартами, но не на inject истории в API вызов.
### Возможные решения
1. **Inject'ить историю в RunSessionTurnPayload** — перед вызовом `r.Run()` загрузить предыдущие сообщения из ADK session store и передать как мульти-контент. Патч в `zulip_handler.go` и `balda.go`.
2. **Передать историю через global_instruction** — обогащать промпт предыдущими сообщениями из balda session хранилища.
3. **Использовать Gemini API** (нативный ADK inject истории).
## Owner token
При старте генерируется owner token. Выводится в лог:
```
balda owner authentication required auth_command="/start owner=<TOKEN>"
```
Для авторизации через Telegram (или Zulip с /start):
```
/start owner=<TOKEN>
```
При старте с пустым `state.db` (после `rm`) — owner не зарегистрирован. Бот принимает сообщения но не отвечает до `/start`.
`state.db` путь: контейнер `/workspace/.config/balda/state.db`, на хосте `~/Docker/balda-agent/.config/balda/state.db`.
## Диагностика: Валера не отвечает в Zulip
### Симптом: в логах `command running` → `command handled` за секунду, без `received provider event`
Причины (проверять по порядку):
1. **Стухший embedded NATS** — swarm внутри процесса не может доставить команду до session/task actor'ов.
Фикс: `docker-compose restart` (если не помогло → `up -d`)
2. **Удалён / пустой state.db** — после удаления balda не может зарегистрировать swarm акторы.
Фикс: `rm state.db` и `up -d` (balda создаст заново). Owner токен сбросится — нужен `/start owner=...`.
3. **Нет owner** — `handleMessage` выходит при `getOwnerID() == 0`.
Фикс: `/start owner=<TOKEN>` в Telegram или Zulip.
4. **stream_only_with_session** — сообщение в теме без сессии молча дропается.
Фикс: написать `@Валера <текст>` чтобы создать сессию.
5. **DeepSeek не отвечает (context loss)** — см. раздел «Контекст».
## Конфигурация провайдера
В `config.yaml` обязательно:
```yaml
balda:
provider: deepseek
sessions:
persistent: true
persistence: sqlite
zulip:
events_polling:
enabled: false # true → если events polling нужен (сейчас отключён)
enabled: false
stream_only_with_session: true
runtime:
providers: