model-manager
Gestion rapide et intelligente des modèles LLM — changements de provider, bascule rapide, fallback local.
Quand l'utiliser (Trigger)
Déclenchement standard selon le contexte de l'écosystème Hermès.
Mode d'emploi (Usage)
Mode d'emploi standard via l'agent Hermès. Skill: Model Manager
Permet de changer de modèle LLM via Hermes pour basculer rapidement entre performance, rapidité et spécialisation (coder/reasoning).
Commandes
hermes model— Interactive model/provider pickerhermes config set model.default <modele>— Set default modelhermes config set model.provider <provider>— Set providerhermes config set model.roles.<role> <modele>— Per-role routing
Structure des Modèles — Actuel (DeepSeek Direct API)
Le provider principal est DeepSeek (API directe, pas OpenRouter).
| Rôle | Modèle | Provider |
|---|---|---|
| 🏆 Par défaut / Rapide | deepseek-v4-flash | deepseek |
| 🧠 Planner / Reasoning | deepseek-v4-pro | deepseek |
| 🔧 Codage lourd | délégué à Claude Code CLI | anthropic |
Changer de modèle
# Méthode 1 — Interactive (recommandée)
hermes model
# Méthode 2 — Config directe
hermes config set model.default deepseek-v4-pro
hermes config set model.provider deepseek
# /reset pour prise d'effet
Les anciens
deepseek-chatetdeepseek-reasonersont dépréciés. v4-flash a le thinking ON par défaut. v4-pro en promo -75% jusqu’au 2026-05-31.
💰 Cas A — Forfaits illimités (ChatGPT Plus + Claude Code) — optimiser coût ET latence
Si tu as des abonnements forfaitaires, la règle reste : éviter les API pay-per-token quand un modèle inclus suffit. Mais ne mets pas automatiquement gpt-5.5 partout sur les gateways : en Telegram, les sessions longues + compression peuvent rendre le bot silencieux plusieurs minutes.
Profil recommandé pour Telegram / Gateway rapide
model:
provider: openai-codex
default: gpt-5-5-instant # ChatGPT Plus — rapide, coût marginal 0 $
roles:
explorer: gpt-5-5-instant
executor: gpt-5-5-instant
planner: gpt-5.5 # qualité quand il faut planifier
reviewer: gpt-5.5 # qualité quand il faut arbitrer/revoir
vision: gpt-5.5
fallback: []
auxiliary:
compression:
provider: openai-codex
model: gpt-5-5-instant # compression rapide, pas DeepSeek payant
title_generation:
provider: openai-codex
model: gpt-5-5-instant
approval:
provider: openai-codex
model: gpt-5-5-instant
web_extract:
provider: openai-codex
model: gpt-5-5-instant
fallback_providers:
- deepseek/deepseek-v4-flash # backup SI ChatGPT/Codex down
- deepseek/deepseek-v4-pro # backup SI ChatGPT/Codex down
Profil équilibré agentique — vitesse sans perte de qualité
Quand l’objectif explicite est réactivité + qualité agentique, ne pas basculer tout Hermes sur instant. Garder le centre décisionnel fort et accélérer la périphérie :
model:
provider: openai-codex
default: gpt-5.5
roles:
explorer: gpt-5-5-instant
planner: gpt-5.5
executor: gpt-5.5
reviewer: gpt-5-5-thinking
vision: gpt-5.5
fallback: []
Règle : instant pour triage/auxiliaires simples; gpt-5.5 pour plan/exécution/compression; thinking pour revue critique. Voir references/openai-codex-agentic-latency-routing.md.
Profil qualité maximale WebUI
model:
provider: openai-codex
default: gpt-5.5
roles:
explorer: gpt-5.5
planner: gpt-5.5
executor: gpt-5.5
reviewer: gpt-5.5
vision: gpt-5.5
fallback: []
Raison : ChatGPT Plus coûte $20/mois quel que soit ton volume. Utiliser DeepSeek pour les rôles/auxiliaires n’économise rien si OpenAI Codex OAuth est disponible — ça ajoute des coûts API. Par contre, utiliser gpt-5.5 partout peut coûter de la latence en gateway. Le bon compromis est gpt-5-5-instant pour Telegram/chat/auxiliaires, gpt-5.5 pour les décisions lourdes, et Claude Code pour le codage agentique.
Piège observé : Telegram peut sembler ne pas répondre alors que la gateway fonctionne : la session est en compression préflight sur un gros contexte (~110k tokens), avec gpt-5.5 comme modèle principal/auxiliaire. Dans ce cas, passer la gateway et auxiliary.compression à gpt-5-5-instant, réduire les sessions Telegram, ou démarrer /new améliore plus que changer de fallback.
Script one-shot : hermes-change-model.sh <modele> (change default + 5 roles d’un coup)
# Setup
echo 'export PATH="$HOME/.hermes/scripts:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Usage
hermes-change-model.sh gpt-5.5 # depuis n'importe où
Nettoyage des fallbacks superflus
Chaque fallback provider dans fallback_providers: ajoute du overhead au system prompt. Avec ChatGPT Plus + Claude Code, tu n’as besoin que de DeepSeek en backup :
Avant : groq ❌ | gemini ❌ | kimi ❌ | ollama ❌ ← 5 entries inutiles
Après : deepseek V4 Flash + V4 Pro ← 2 entries, backup pur
Commande pour nettoyer :
# Remplacer tous les fallbacks par juste deepseek
hermes config set fallback_providers \
"[{\"provider\":\"deepseek\",\"model\":\"deepseek-v4-flash\"},{\"provider\":\"deepseek\",\"model\":\"deepseek-v4-pro\"}]"
# model.fallback (fallback dans le MÊME provider) — vide par défaut
hermes config set model.fallback "[]"
Vision : pourquoi passer sur auto
Quand auxiliary.vision.provider = custom (gemini-2.5-flash), tu utilises ta clé API Gemini — pay-per-token. Or gpt-5.5 gère aussi la vision et est dans ton forfait ChatGPT Plus. Passer sur auto économise les frais Gemini. Même conclusion que la doc officielle : “si le main model a la vision, garder auto”.
🏆 Cas B — Pay-per-token (API DeepSeek, OpenRouter)
Quand tu paies à la consommation, le pattern modèle fort au centre, modèles légers en périphérie est validé par triangulation: doc officielle + Reddit 6B tokens + tests terrain.
Architecture recommandée
default: gpt-5.5 ← raisonnement lourd (abonnement ChatGPT)
roles:
explorer: deepseek-v4-flash ← cheap: $0.14/M, exploration rapide
planner: deepseek-v4-pro ← prix raisonnable pour planification
executor: deepseek-v4-flash ← tâches d'exécution simples
reviewer: deepseek-v4-pro ← revue de qualité
vision: deepseek-v4-flash ← vision basique
Avec fallback vers les modèles spécifiques via auxiliary: pour les tâches de fond.
Script one-shot : hermes-change-model.sh
~/.hermes/scripts/hermes-change-model.sh — change model.default + tous les roles d’un coup.
# Setup (déjà fait si ~/.hermes/scripts est dans le PATH)
echo 'export PATH="$HOME/.hermes/scripts:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Usage
hermes-change-model.sh gpt-5.5 # change default + 5 roles
Le script met à jour model.default + model.roles.* en une commande.
⚡ Optimisation des modèles auxiliaires
Au-delà de model.roles, Hermes a des tâches auxiliaires (vision, compression, titrage, approval, etc.). Par défaut, elles utilisent le même modèle que default — gaspille si c’est un modèle lourd.
Configuration auxiliaire recommandée
# ~/.hermes/config.yaml
auxiliary:
vision:
provider: custom
model: gemini-2.5-flash # vision → modèle spécialisé rapide
title_generation:
provider: deepseek
model: deepseek-v4-flash # titrer = pas besoin de 5.5
compression:
provider: deepseek
model: deepseek-v4-flash # résumer = tâche simple
approval:
provider: deepseek
model: deepseek-v4-flash # approval binaire = cheap
Pourquoi c’est important
| Tâche auxiliaire | Impact token | Recommandation doc |
|---|---|---|
| Title Gen | Exécuté à chaque session | “Un flash model écrit des titres aussi bien qu’Opus pour 1/100e” |
| Compression | Exécuté au-delà du seuil de contexte | “Résumer ne nécessite pas de raisonnement” |
| Approval | Mode smart auto-approve | “Modèles chers ici = gaspillage” |
| Vision | Analyse d’image | Idéal: gemini-2.5-flash via API custom |
Source: Doc officielle Hermes — Configuring Models, section “Common override patterns”.
Réduction d’overhead token
Reddit (3 jours, Token Bloat -71%):
- Supprimer les skills inutilisés
- Désactiver les MCP non nécessaires
- Réduire les toolsets au strict minimum
- Limiter les fallback providers (chaque fallback ajoute du contexte)
Benchmark communautaire (6B tokens analysés):
GPT-5.5(by far) → 2. Kimi k2.6 → 3. GLM 5.1 → 4. Minimax M2.7 → 5. Qwen 3.6 Max
Voir references/model-optimization-research.md pour les détails complets.
⚠️ Constraint: CPU Only (No GPU)
Bernard n’a pas de GPU sur son VPS. Modèles > 8B params = timeout/inference impossible. RAM disponible: ~11 GB total, ~3.5 GB libre après services.
Modèles locaux VALIDES pour CPU-only
llava:latest | 7B | 4.7 GB | ✅ vision locale (testé)
llama3.2:latest | 3.2B | 2.0 GB | ✅ agentic (rapide, économe)
deepseek-r1:8b | 8.2B | 5.2 GB | ✅ code / reasoning
Modèles SUPPRIMÉS (trop lourds pour CPU)
gemma3:12b | 12B | 8.1 GB | ❌ DELETE — timeout CPU (~5-10min)
pshohel/kimi-k2.5 | 3.2B | 2.0 GB | ❌ DELETE — doublon llama3.2
Ollama Local — Fallback Zero-Coût
Quand le crédit DeepSeek/API est épuisé → Ollama local prend le relais.
Configuration custom_providers (config.yaml)
custom_providers:
# ── Vision (local CPU) ─────────────────────────────────
ollama-vision-local:
provider: openrouter
base_url: http://localhost:11434/v1
model: llava:latest # 7B, léger, rapide
# ── Code (local CPU) ───────────────────────────────────
ollama-code-local:
provider: openrouter
base_url: http://localhost:11434/v1
model: deepseek-r1:8b # 8B, reasoning fort
# ── Agentic (local CPU) ────────────────────────────────
ollama-agent-local:
provider: openrouter
base_url: http://localhost:11434/v1
model: llama3.2:latest # 3.2B, rapide, ~2GB RAM
Chaîne de fallback
deepseek/deepseek-v4-flash→ DeepSeek direct (idéal)- Agents Claude Code en parallèle (abonnement)
- Urgence →
ollama-agent-local(llama3.2, zero coût, CPU)
Vérifier qu’Ollama fonctionne
curl -s http://localhost:11434/api/tags | python3 -m json.tool
OpenAI Codex OAuth — Utiliser son abonnement ChatGPT
Le provider OpenAI Codex OAuth permet d’utiliser un abonnement ChatGPT Plus/Pro directement dans Hermes — pas besoin de clé API OpenAI.
Setup
# 1. Lancer le device code flow
hermes auth add openai-codex
# 2. Ouvrir dans un navigateur : https://auth.openai.com/codex/device
# 3. Entrer le code affiché, connecter son compte ChatGPT
# 4. Basculer le provider
hermes config set model.provider openai-codex
hermes config set model.default gpt-5.5
Vérifier
hermes auth list openai-codex
### Vérifier
- **Ne PAS confondre `provider: openai-codex` avec `provider: openai-api`** — le premier utilise OAuth avec ChatGPT, le second une clé API OpenAI classique
- Si un refresh token expire, Hermes le marque comme mort et arrête de le réessayer → une nouvelle auth est nécessaire
- ⚠️ **`gpt-5.5-codex` peut être déprécié** (constaté le 2026-05-30) — voir `references/codex-model-names-and-discovery.md` pour la liste des slugs valides.
- ⚠️ **Erreur en cascade** — si `model.default` reste `gpt-5.5-codex` après avoir changé de provider (ex: deepseek), les appels auxiliaires (title_generation, compression) échouent aussi. Vérifier `model.default` après chaque changement de provider.
- Voir `references/provider-subscription-vs-api.md` pour plus de détails
- Voir `references/codex-model-names-and-discovery.md` pour la liste des modèles Codex disponibles
- Voir `references/gateway-chatgpt-plus-model-routing.md` pour le profil Telegram rapide `gpt-5-5-instant` avec ChatGPT Plus + Claude Code
- Voir `references/openai-codex-agentic-latency-routing.md` pour le profil équilibré `gpt-5.5` + `gpt-5-5-instant` + `gpt-5-5-thinking` optimisé vitesse sans perte agentique
- Voir `references/provider-pricing-comparison-2026-06.md` pour le tableau complet des prix officiels API (DeepSeek, Claude, GPT, Gemini) + scores WebDev Elo et ratios coût — recommandations par cas d'usage
## 🚨 Dépannage — Codex OAuth & changement de modèle
### Symptôme : footer runtime_footer ne s'affiche plus après switch de modèle
Quand tu changes de provider (ex: openai-codex → deepseek), le `display.runtime_footer` peut cesser de fonctionner car ses champs `fields` sont mal formatés.
**Solution :**
```bash
# Vérifier le format YAML dans config.yaml
grep -A3 runtime_footer ~/.hermes/config.yaml
# La ligne 'fields' doit être une vraie liste YAML :
# fields: [model, context_pct, cost] ✅
# PAS une chaîne :
# fields: '[model, context_pct, cost]' ❌
# Corriger avec Python si nécessaire :
python3 -c "
import yaml
with open('/home/bf/.hermes/config.yaml') as f:
cfg = yaml.safe_load(f)
cfg['display']['runtime_footer']['fields'] = ['model', 'context_pct', 'cost']
cfg['display']['show_cost'] = True
with open('/home/bf/.hermes/config.yaml','w') as f:
yaml.dump(cfg, f, default_flow_style=None, sort_keys=False)
"
# Redémarrer le gateway
hermes gateway restart
Symptôme : “The ‘gpt-5.5-codex’ model is not supported” — HTTP 400
Le token OAuth Codex a expiré ou le nom du modèle a changé. Pas un problème de clé API — l’OAuth est valide, c’est le modèle/l’authentification qui ne passe plus.
Diagnostic dans les logs :
grep "openai-codex\|codex" ~/.hermes/logs/errors.log | grep "400\|401\|403"
Étapes de résolution :
-
Ré-authentifier OAuth (le refresh token expire aussi) :
hermes auth add openai-codex→ Ouvrir
https://auth.openai.com/codex/devicedans un navigateur → Entrer le code affiché → Connecter le compte ChatGPT -
Si l’auth réussit mais le modèle est toujours rejeté : Le nom du modèle Codex (
gpt-5.5-codex,o3, etc.) n’est plus reconnu par le backend. → Solution : Basculer vers DeepSeek :hermes config set model.provider deepseek hermes config set model.default deepseek-v4-flash # Vérifier que fallback_providers pointe bien sur DeepSeek
⚠️ Piège : model.default oublié après changement de provider
Quand tu changes model.provider sans changer model.default, Hermes envoie l’ancien nom de modèle au nouveau provider :
provider=deepseek base_url=https://api.deepseek.com
model=gpt-5.5-codex ← OUBLIÉ ! DeepSeek ne connaît pas ce modèle
→ HTTP 400: "The supported API model names are deepseek-v4-pro or deepseek-v4-flash,
but you passed gpt-5.5-codex."
Solution : Toujours changer les deux ensemble :
hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash
# Optionnel : utiliser le script one-shot
hermes-change-model.sh deepseek-v4-flash
Symptôme : Toutes les tâches auxiliaires échouent après changement de provider
Title generation, context compression, vision — tout tombe avec l’erreur du même ancien modèle.
Deux causes possibles :
Cause A — model.default oublié : Le provider a changé mais le modèle par défaut pointe encore vers l’ancien provider.
Solution : hermes config set model.default <nouveau-modèle> et vérifier :
grep "default:" ~/.hermes/config.yaml
grep -A5 "roles:" ~/.hermes/config.yaml
Cause B — Provider sans credential (cascade credential mismatch) : model.provider est configuré vers un provider qui n’a aucun credential valide (ex: openai-codex configuré mais aucun token OAuth). La conversation principale tombe en fallback et fonctionne, mais toutes les tâches auxiliaires (title_generation, compression, approval, web_extract, skills_hub, triage, etc.) pointent encore vers le provider sans credential et échouent en cascade.
Symptômes dans les logs :
Primary auth failed — switching to fallback: deepseek / deepseek-v4-flash
Title generation failed: Provider 'openai-codex' is set in config.yaml but no API key was found.
Diagnostic rapide :
# 1. Vérifier si le provider configuré a un credential
hermes auth list | grep openai-codex # ← absent = credential manquant
# 2. Lister tous les credentials disponibles
hermes auth list
# 3. Lister tous les providers configurés pour les auxiliaires
grep -A2 "provider:" ~/.hermes/config.yaml | grep -v "^--$" | sort -u
Solution :
# Option A — Ajouter le credential (si tu veux garder openai-codex)
hermes auth add openai-codex # device code flow
# Option B — Basculer provider principal ET tous les auxiliaires vers un provider fonctionnel
hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash
# Puis éditer config.yaml pour changer tous les auxiliary.*.provider de openai-codex → deepseek
Piège : Même si model.fallback a un provider fonctionnel, les auxiliaires ne l’utilisent pas — ils utilisent leur propre provider: configuré dans auxiliary.*. Il faut corriger chaque auxiliaire un par un.
Provider confusion — Subscription vs API
L’abonnement Claude Pro/Max ne donne pas accès à l’API Anthropic (sauf Claude Max + crédits extra).
L’abonnement ChatGPT Plus/Pro peut être utilisé via le provider openai-codex (OAuth device flow).
Voir references/provider-subscription-vs-api.md pour les distinctions complètes et workarounds.