docs: whitelist Bifrost double-couche (redaction-pro), bug prefixe nginx /api/, dualite catalogues opencode/opencode-go, fix model_override deprecie hermes-perso
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# hermes-perso — model_override deprecie sur la session Telegram (ox-alpha-free)
|
||||
|
||||
**Instance auteur** : hermes-perso
|
||||
**Date** : 2026-09-02
|
||||
**Tags** : hermes-perso, telegram, opencode, model_override
|
||||
**Statut** : valide
|
||||
|
||||
---
|
||||
|
||||
## Probleme
|
||||
|
||||
La session Telegram DM de Nabil (`agent:main:telegram:dm:2084513684` dans `/opt/data/sessions/sessions.json`) avait un `model_override` fige sur `ox-alpha-free` (provider `opencode-go`). Ce modele est marque `"status": "deprecated"` dans le registre `models_dev_cache.json` et l'API `opencode.ai/zen/go/v1/chat/completions` renvoie `401 "Model ox-alpha-free is not supported"` en confirmation directe. Tous les messages Telegram envoyes sous ce override echouaient silencieusement.
|
||||
|
||||
## Contexte et contraintes
|
||||
|
||||
`/opt/data/` du conteneur `hermes-agent-perso` est en 0700 (uid 1026), illisible en SSH direct meme depuis un compte scope comme claude-ops. Acces uniquement via `docker exec` (qui tourne root dans le conteneur, contourne le mur de permissions cote host).
|
||||
|
||||
## Ce qui NE fonctionne PAS
|
||||
|
||||
| Tentative | Erreur obtenue | Raison de l'echec |
|
||||
|-----------|----------------|-------------------|
|
||||
| Lecture directe via SSH claude-ops (`cat /opt/data/...`) | Permission denied | data/ en 0700 uid 1026, claude-ops non proprietaire |
|
||||
| Edition via `ssh nas-host` directement sur les fichiers `.env`/`docker-compose.yml.disabled` du dossier hermes-perso | Aucune trace du model_override actif | Config statique ; le choix de modele reel vit dans `sessions.json`, pas dans les fichiers de config au repos |
|
||||
|
||||
## Solution validee
|
||||
|
||||
```bash
|
||||
# 1. Backup avant toute ecriture
|
||||
docker exec hermes-agent-perso cp /opt/data/sessions/sessions.json \
|
||||
/opt/data/sessions/sessions.json.bak-fix-ox-alpha-$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# 2. Edition cible via script Python transfere en base64 (docker cp) puis execute root dans le conteneur
|
||||
# -> modifie uniquement sessions[key].model_override.model, rien d'autre
|
||||
docker cp fix_model.py hermes-agent-perso:/tmp/fix_model.py
|
||||
docker exec hermes-agent-perso python3 /tmp/fix_model.py
|
||||
```
|
||||
|
||||
Bascule effectuee : `ox-alpha-free` → `hy3` (meme provider `opencode-go`, meme `base_url`, changement minimal).
|
||||
|
||||
## Verification
|
||||
|
||||
```bash
|
||||
docker exec hermes-agent-perso python3 -c "import json; d=json.load(open('/opt/data/sessions/sessions.json')); print(d['agent:main:telegram:dm:2084513684']['model_override'])"
|
||||
# Attendu : {'model': 'hy3', 'provider': 'opencode-go', 'base_url': 'https://opencode.ai/zen/go/v1'}
|
||||
```
|
||||
JSON valide (`json.load` sans exception) confirme apres ecriture.
|
||||
|
||||
## Pieges specifiques
|
||||
|
||||
- Ne jamais editer `sessions.json` a la main sans backup — c'est un fichier d'etat vivant, reecrit en continu par le process gateway actif (`active_turn_token` doit etre `null` avant d'editer, sinon risque de race condition avec une conversation en cours).
|
||||
- Le mecanisme exact par lequel le Telegram bot laisse choisir un modele "directement" (mentionne par Nabil) n'a pas ete localise dans cette session (pas de endpoint `/docs` ou `/openapi.json` trouve sur l'API server interne, port 8642) — probablement une commande bot (`/model <nom>`) qui ecrit dans ce meme `model_override`. A confirmer.
|
||||
- Toujours verifier le statut d'un modele OpenCode dans `models_dev_cache.json` (du conteneur hermes-agent concerne) avant de l'assigner en dur quelque part — voir common/opencode-go-migration.md pour la distinction des deux catalogues opencode.
|
||||
|
||||
## References
|
||||
|
||||
- common/opencode-go-migration.md
|
||||
- common/bifrost-vk-incidents.md (incident du meme jour, cause differente mais meme famille de symptome : modele non fonctionnel silencieusement)
|
||||
Reference in New Issue
Block a user