# Migration OpenRouter → OpenCode Go — 2026-06-16 Objectif : basculer la stack LLM du NAS vers **OpenCode Go** (forfait Go, endpoint `https://opencode.ai/zen/go/v1`, auth `Authorization: Bearer ` uniquement — pas de `x-bf-vk`, pas de `HTTP-Referer`/`X-Title`). ## Modèles OpenCode Go IDs **sans préfixe** (`glm-5.1`, `deepseek-v4-pro`…), PAS `openrouter/` ni `deepseek/`. Utilisables en **OpenAI-compat (oa-compat)** : `deepseek-v4-flash`, `deepseek-v4-pro`, `glm-5.1`, `qwen3.7-plus`, `kimi-k2.6`, `kimi-k2.7-code`, `minimax-m3`, `glm-5`, `qwen3.6-plus`, `mimo-v2.5-pro`… ⚠️ **NE FONCTIONNE PAS** : - `qwen3.7-max` → `Model not supported for format oa-compat` (dispo seulement en format Anthropic côté OpenCode Go). Tout consommateur OpenAI-compat (Bifrost custom provider, Open WebUI, family-help) doit utiliser `glm-5.1` à la place. - MiniMax M2.7 vision via OpenCode Go = `prompt_tokens:0` (vision cassée). ## Ce qui a été migré | Cible | Avant | Après | Clé | |---|---|---|---| | **hermes-tt** (config.yaml) | deepseek-v4-flash | défaut `deepseek-v4-pro`, fallback `deepseek-v4-flash`, délégation (data-engineer) `deepseek-v4-pro` | HERMES_TT_OPENCODE_KEY (provider `opencode-go`) | | **hermes-nyora** | deepseek-v4-flash | défaut `glm-5.1`, fallback `qwen3.7-plus` | HERMES_NYORA_OPENCODE_KEY | | **hermes-perso** | deepseek-v4-flash | défaut `qwen3.7-plus`, fallback `deepseek-v4-flash` | HERMES_PERSO_OPENCODE_KEY | | **Bifrost** | — | provider `opencode` route `glm-5.1, deepseek-v4-pro, qwen3.7-plus, kimi-k2.6, minimax-m3` ; alias `claude-*→deepseek-v4-flash` (openrouter) conservé | BIFROST_OPENCODE_KEY | | **Open WebUI** | Bifrost seul | 2e connexion directe OpenCode Go (`OPENAI_API_BASE_URLS` pluriel) | BIFROST_OPENCODE_KEY | | **family-help** | OpenRouter (modèle unique) | routing par skill : medical/nutrition `glm-5.1`, homework `qwen3.7-plus`, legal_admin `deepseek-v4-pro`, tech/general `deepseek-v4-flash` ; fallback OpenRouter (web + erreur) | OPENCODE_API_KEY (=BIFROST_OPENCODE_KEY) | | **n8n actifs** | commentaires/refs OpenRouter | nettoyés (NABIL.md Quotidien, Monitoring sources IA, Ingest Opportunités) | — | ## Hermes — config.yaml Modèle défini dans `/volume1/docker/hermes-platform/hermes-{tt,nyora,perso}/data/config.yaml` : `model.default` + `model.provider: opencode-go`, `fallback_providers[0]`, `fallback_model`. Hermes **réécrit config.yaml au shutdown** → procédure : `docker stop` → éditer → `docker start` (éditer container arrêté pour éviter le clobber). Healthcheck port 8642, API OpenAI-compat (`/v1/chat/completions`, modèle proxy `hermes-agent`). ## Bifrost — PIÈGE MAJEUR (voir mémoire bifrost-keys-config-json) Bifrost v1.5.13 **ne recharge PAS les clés des providers au redémarrage** (elles ne vivaient qu'en mémoire). Fix durable = **`/volume1/docker/bifrost/data/config.json`** (providers + clés, chargé au boot) + `allow_all_keys=1` dans `governance_virtual_key_provider_configs`. - Providers dans config.json NE doivent PAS être aussi dans le store (`sqlite3 config.db "DELETE FROM config_providers; DELETE FROM config_keys;"`, bifrost stoppé). - `sqlite3 config.db "UPDATE governance_virtual_key_provider_configs SET allow_all_keys=1;"`. - ⚠️ éditer providers/clés/VK via l'UI Bifrost peut re-casser (reset allow_all_keys / conflit config.json). - Backup config.db pré-migration : `/tmp/config.db.backup-*` (NAS). ## n8n — workflows AO inactifs : NON migrés (à faire délibérément) Les 15 workflows AO/veille contenant encore OpenRouter sont **archivés** (`isArchived=true`) → l'API n8n refuse de les éditer (`Cannot update an archived workflow`). Le pipeline AO **actif** (`AO — Insertion Baserow FINAL`, hisVAANSYpixR4Si) est déjà propre. Pour réutiliser un workflow AO archivé : le désarchiver (UI), migrer son Code node (`openrouter.ai/api/v1/chat/completions` → `opencode.ai/zen/go/v1/chat/completions`, clé sk-or → OpenCode, retirer HTTP-Referer/X-Title, modèle → `deepseek-v4-pro`), re-tester, ré-archiver. Règle Code node n8n : `require('https')` + parsing manuel d'URL, jamais `fetch`/`new URL`/`$helpers`. Liste des archivés concernés : edFMGtI2HHWW72aT, JTwurk7XVBUXSHKn, BCgZYRJcxoHOMDhm, iuxVgZFfpKdYFNqG, xJtW4algsBcx6r1E, EEDr0xx9krRq2nwN, 7zWWJhP2aQbzQhZG, QALWT3NwMQjOuY6u, N3yQWk0XyhyS5wZX, hcOmozHadfBnHzri, nZiXRcwSAXsoj2M6, Mdl5SRcT9rYw48VZ, dPnpoHkc6hEXdsFF, wS3SzRFfcaDDD34g, xu4smQdEGrHFx1zK, RRKUk3GvnULj7edE. ## Hors scope (laissés sur OpenRouter, actifs/famille — à migrer sur décision) Workflows n8n actifs encore sur OpenRouter en direct (endpoint+clé) : `Mode-nedya`, `FAMILLE | Recettes Weekend`, `Labellisation Auto`.