[2026-06-16] update balda-valera: context problem, owner token, diagnostics
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user