8.9 KiB
Migration cerveau Hermes DeepSeek V4 Flash -> Mimo V2.5 (perso, HARNESS/dsh-vps, tt, nyora)
Date : 2026-08-17 Portee : hermes-perso, hermes-HARNESS (dsh-vps, VPS Contabo), hermes-tt, hermes-nyora.
Pourquoi
Changement tarifaire DeepSeek V4 Flash cote OpenCode. Mimo V2.5 deja valide en
production sur d'autres usages (extraction documentaire nyora-convert-api,
scoring broll_coherence_qc.py, et deja pilote comme cerveau sur hermes-nyora
depuis le 15/07 -- voir hermes-nyora/verdict-pilote-mimo-v25.md). Cette
migration etend son role au cerveau par defaut des 4 instances Hermes.
Ce qui a ete decouvert en route (motif transverse, meme cause a chaque fois)
Chaque instance a livre une surprise differente de ce que la config versionnee (git) ou la doc annoncait -- meme cause a chaque fois : des valeurs de configuration jamais revalidees contre le comportement reel du provider.
- Git desynchronise du live (nyora, puis perso, puis tt) -- le fichier
data/config.yamlcommite ne refletait pas la config reellement chargee par le conteneur (bascules faites en live sans commit). Reconciliation faite instance par instance avant toute nouvelle ecriture. - Mecanisme d'auth key_env casse sur le chemin Bifrost
provider: custom(tente sur hermes-nyora) -- substituerapi_keylitteral parkey_enva casse l'authentification Bifrost (401 virtual_key_not_found, fallback silencieux vers deepseek-v4-flash). Rollback propre effectue. Root cause probable : construction differente du header (Authorization: Bearervsx-bf-vk) selon le champ utilise -- non resolu, cfbifrost-access.md(Bifrost exigex-bf-vk, rejetteAuthorization: Beareren 401). A reprendre cote code/config Hermes avant nouvelle tentative. Le secretbfk-...reste donc en clair dans leconfig.yamllive de nyora -- dette assumee, pas corrigee de force. context_length: 128000/max_tokens: 8192herites de DeepSeek, jamais recalibres pour mimo-v2.5 -- objet du present runbook (detail ci-dessous).
Pattern de bascule retenu (Pattern A)
Pour perso/tt/nyora : model.default -> provider: opencode-go, api_key/
base_url vides (resolution automatique via OPENCODE_GO_API_KEY), PAS
provider: custom/bifrost-proxy (chemin casse, cf point 2 ci-dessus).
Seul hermes-HARNESS (dsh-vps) route reellement via Bifrost par construction
(provider: bifrost dans settings.yaml, VK vk-dsh-vps) -- c'est le
pattern attendu et documente pour cette instance, aucune ambiguite.
Correction context_length / max_tokens (2026-08-17)
Symptome : le couple mimo-v2.5/opencode-go dans la table Bifrost
governance_model_pricing est totalement vide (aucune limite renseignee)
-- ce n'est donc pas une source fiable pour calibrer le yaml. La valeur
128000/8192 presente sur toutes les instances etait une copie du bloc
DeepSeek d'origine, jamais revalidee.
Source de verite retenue : specs constructeur croisees (Xiaomi officiel, OpenRouter, HuggingFace, Requesty) -- convergent sur un contexte tres superieur (262k a 1M tokens selon l'hebergeur) et un plafond de sortie de l'ordre de 131k tokens. Ne pas reprendre les valeurs deepseek-v4-flash (1M / 384k) -- specs d'un autre modele, les copier aurait cree une nouvelle valeur fausse dans l'autre sens (plafond de sortie surdeclare ~3x).
Valeurs appliquees (bloc model:, key_env/api_key non touches) :
context_length: 1048576
max_tokens: 131000 # dsh-vps : contextWindow / maxTokens (meme valeurs)
Resultat par instance (ordre de bascule : perso -> HARNESS -> tt -> nyora) :
| Instance | Avant | Apres | Verification |
|---|---|---|---|
| hermes-perso | 128000/8192 | 1048576/131000 | model_used=mimo-v2.5 confirme, finish_reason=stop, aucune erreur. Commit bolbol/hermes-perso@0c64f40. |
| hermes-HARNESS (dsh-vps) | contextWindow 131072/maxTokens 8192 | 1048576/131000 | Logs Bifrost (vk-dsh-vps) : appels post-restart model=mimo-v2.5, status=success, aucune erreur. Pas de repo git pour ce fichier (volume Docker nomme, sauvegarde horodatee .bak-ctxfix-20260817 seule trace). UID/GID VPS = 1001:1001 (PAS la convention NAS 1026:100). |
| hermes-tt | 128000/8192 | 1048576/131000 | Logs internes gateway : API call #1: model=mimo-v2.5 provider=opencode-go ... finish_reason=stop. Piege methodologique : le modele s'est auto-declare a tort deepseek-v4-flash quand on lui demandait son propre nom en JSON -- l'auto-declaration d'un LLM sur son identite n'est PAS une source fiable, toujours verifier par les logs internes/gateway. Commit bolbol/hermes-tt@0015ab5. |
| hermes-nyora | 128000/8192 | 1048576/131000 | Logs Bifrost (Nabil-Key) : model=mimo-v2.5, status=success, stop_reason=stop. Secret en clair (api_key: bfk-...) laisse intact (dette separee, point 2). Commit bolbol/hermes-nyora@4067a85. |
Aucun repli necessaire sur aucune instance -- 1048576/131000 accepte partout sans erreur de limite cote opencode-go/Bifrost au premier essai.
Points restes ouverts (proprietaire a designer, pas noyes dans ce runbook)
- Secret Bifrost en clair sur hermes-nyora (
api_key: bfk-..., x2 dans le yaml live) + mecanisme d'auth key_env casse sur le chemin Bifrost custom- VK dediee
BIFROST_VK_HERMES_NYORAprovisionnee le 18/07 jamais cablee -- trois symptomes du meme sujet non traite (routage Bifrost/Nabil-Key de nyora jamais finalise proprement). A cadrer en session dediee.
- VK dediee
- Few-shot des skills AO/RLA sur hermes-tt (
dco-generation-tt,courriers-officiels-tt,gsd-ao-evaluation) -- la regle anti-inference est deja en place et confirmee respectee par mimo-v2.5 en test reel, mais les exemples few-shot restent a peupler avec Nabil (references/exemples- valides/, note deja ecrite dans les skills eux-memes -- explicitement pas a faire par un agent seul).
Voir aussi
hermes-nyora/verdict-pilote-mimo-v25.md, hermes-tt/passation-pj-hermes-tt-deepseek-mimo.md,
common/bifrost-access.md, common/bifrost-vk-incidents.md, common/opencode-go-migration.md.
Yesmine-Key (VK Bifrost, hermes-desktop-yesmine — client pas encore actif)
Perimetre : uniquement la VK Bifrost Yesmine-Key (id 028c7103-cc9f-4139-96a1-3d5420b2d2dd).
Aucune instance NAS ni fichier agent — toute la config vit en DB Bifrost
(governance_virtual_key_provider_configs).
Etat trouve (Phase 1, verifie en live, rien suppose) :
allowed_models(provideropencode, row id=38) =["deepseek-v4-flash"]uniquement — mimo-v2.5 absent malgre une decision anterieure supposee (audit du 17/08).allow_all_keysdeja a 1 (pas de correction necessaire la-dessus).- Aucun concept de "modele par defaut" par VK cote Bifrost : schema
governance_virtual_keysn'a pas de champ modele ;routing_rules/routing_targetsne referencent aucunvirtual_key_idscope sur Yesmine-Key. Seul filtre existant =allowed_models. Le seul enregistrement scope sur cette VK dansgovernance_model_configsest un rate-limit generique (model_name='*'), pas un modele par defaut. - Pas de concept context_length/max_output au niveau VK — ces valeurs sont globales par modele
(
governance_model_pricing), deja documente vide pourmimo-v2.5/opencode-goplus haut dans ce runbook. Hors perimetre de corriger cette table globale ici (deja couverte par les valeurs en dur 1048576/131000 appliquees sur les yaml de la flotte ; Bifrost lui-meme ne bloque pas sur cette table vide, confirme par le test Phase 3 ci-dessous).
Correction appliquee (Phase 2, edition DB directe — PAS l'API governance, piege allow_all_keys
reset connu) :
UPDATE governance_virtual_key_provider_configs
SET allowed_models = '["mimo-v2.5"]'
WHERE id = 38 AND virtual_key_id = '028c7103-cc9f-4139-96a1-3d5420b2d2dd' AND provider = 'opencode';
docker restart bifrost obligatoire (chargement DB au boot, memoire vive garde l'ancien etat sinon)
— confirme healthy apres ~50s.
Test Phase 3 (controle minimal, hors tool-calling — pas de client reel a simuler) :
- Appel direct
x-bf-vkversmimo-v2.5:resolved_model_used: mimo-v2.5,finish_reason: stop, aucune erreur. - Verification du retrait reel (pas juste un ajout) : appel
deepseek-v4-flashsur la meme VK → rejete (could not auto resolve a provider for the request) — confirme que le retrait est effectif, pas seulement documentaire.
Trace : ce changement n'existe qu'en DB Bifrost (config.db, table
governance_virtual_key_provider_configs), aucun fichier Git associe — pas de repo pour cette
config, contrairement aux instances Hermes. Cette entree de runbook est la seule trace ecrite du
changement, a ne pas oublier lors d'une future migration modele generale sur Bifrost.
Point ouvert : Yesmine-Key reste provisionnee sans consommateur actif — aucun agent/client
n'appelle cette cle aujourd'hui (hermes-desktop-yesmine n'existe pas encore cote Windows/Claude
Desktop). A reevaluer (usage reel, cout, modele par defaut souhaite) quand ce client devient actif.