nas-runbooks/common/OPENCODE-GO-MIGRATION.md

4.6 KiB

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 <clé> 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-maxModel 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/completionsopencode.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.