Guide perso, noindex

LLM Council

App locale qui fait débattre 4 intelligences artificielles sur ta question pour donner la meilleure réponse possible.

Fork: abovefear/llm-council. Tourne uniquement sur ton Mac, rien en ligne, données privées.

À quoi ça sert

Une seule IA peut se tromper, halluciner, ou être biaisée par son entraînement. En posant la même question à 4 modèles différents (OpenAI, Anthropic, Google, xAI) et en les faisant s'autoévaluer en aveugle, tu obtiens une réponse plus solide qu'avec un seul.

Décisions stratégiques

M&A, pricing, positionnement marché. 4 avis croisés valent mieux qu'une voix unique.

Sujets techniques pointus

Architecture, choix de stack, debug obscur. Les modèles ont chacun des forces différentes.

Anti-hallucination

Si un modèle invente une stat, les 3 autres le dénoncent au Stage 2 (review croisée).

Comment ça marche, en 3 étapes

1

Tu poses ta question

Elle est envoyée en parallèle aux 4 modèles. Chacun répond indépendamment, sans voir ce que les autres écrivent.

Pourquoi: éviter que les réponses se contaminent mutuellement.

2

Les modèles se notent en aveugle

Chaque modèle voit les réponses des autres SANS savoir qui les a écrites, puis les classe par qualité (précision, profondeur).

Pourquoi: l'anonymisation empêche un modèle de favoriser sa propre famille. Le jugement est forcé d'être objectif.

3

Le Chairman synthétise

Un des 4 modèles est désigné Chairman (par défaut Claude Sonnet 4.5). Il lit toutes les réponses ET les notes, puis produit la réponse finale.

Pourquoi: tu obtiens une seule réponse cohérente plutôt que 4 morceaux à recoller.

Lancer l'app

Première fois sur ce Mac

Ouvre l'app Terminal (Cmd+Espace, tape "Terminal", Entrée). Colle cette commande, puis Entrée:

cd ~/Desktop/CLAUDE/llm-council && ./start.sh

Le script fait 4 choses automatiquement:

  1. Nettoie les anciennes sessions qui traîneraient en mémoire (process zombies)
  2. Vérifie que les 4 modèles + le Chairman existent vraiment sur OpenRouter (sinon il s'arrête avec un message clair)
  3. Lance le backend (le cerveau de l'app) sur le port 8001
  4. Lance le frontend (l'interface visuelle) sur le port 5173

Puis ouvre http://localhost:5173 dans Safari ou Chrome. C'est l'interface de chat.

Première utilisation

Le tout premier lancement prend 20-30 secondes (uvicorn et vite démarrent). Les fois suivantes c'est instantané.

Arrêter l'app

Dans le terminal où l'app tourne, appuie sur les touches du clavier Control + C ensemble, comme tu appuierais sur Cmd + S pour sauvegarder.

Erreur classique

Ne tape PAS le texte "Ctrl+C" suivi de Entrée. C'est une combinaison de touches physiques, pas une commande à taper. Si tu tapes "Ctrl+C", zsh te répond "command not found".

Le Control+C coupe backend et frontend en même temps. Si ça ne s'arrête pas (rare), lance dans un autre terminal:

llmkill

(installation détaillée dans la section troubleshooting ci-dessous)

Si ça plante

"Address already in use" sur le port 8001 au démarrage

Cause: un ancien backend tourne encore en mémoire. Tu as probablement fermé une fenêtre Terminal sans faire Control+C avant. Il occupe toujours le port 8001, un peu comme une ligne téléphonique squattée.

Fix automatique: le start.sh de ce repo nettoie tout seul avant de démarrer. Si tu vois encore l'erreur, lance:

llmkill && ./start.sh

Si tu n'as pas installé llmkill, utilise la version longue:

pkill -9 -f "python -m backend.main"; pkill -9 -f "vite"; sleep 1 && ./start.sh
Stage 3 affiche "Unable to generate final synthesis"

Cause: le modèle Chairman a planté. La raison la plus fréquente: son slug (identifiant) sur OpenRouter a été retiré ou renommé (surtout pour les modèles "preview").

Fix: lance le script de vérification des slugs:

cd ~/Desktop/CLAUDE/llm-council && uv run check-models.py

S'il indique MANQUE pour un modèle, édite backend/config.py et remplace le slug par un des candidats valides que le script te propose.

Seulement 2 modèles répondent au Stage 1 sur 4

Même cause que ci-dessus: 2 slugs sont obsolètes côté config. Le script check-models.py les identifie en quelques secondes.

Depuis la dernière mise à jour de ce repo, check-models.py tourne automatiquement à chaque ./start.sh et bloque le démarrage si un slug est cassé. Donc ce problème ne devrait plus arriver.

"Repository not found" sur un repo GitHub public

Cause: ton Mac envoie des identifiants GitHub d'un ancien compte (jowideweb suspendu). GitHub ne dit pas "non autorisé", il fait poliment semblant que le repo n'existe pas.

Fix:

gh auth logout --user jowideweb
gh auth status

Vérifie qu'il ne reste que dimjohn en compte actif.

"command not found: Ctrl+C"

Cause: tu as tapé "Ctrl+C" au clavier puis Entrée. Le shell pense que c'est une commande.

Fix: ce n'est pas une commande, c'est une combinaison de touches. Appuie sur la touche Control du clavier et garde-la enfoncée, puis appuie sur C. Relâche les deux. C'est tout.

Installer "llmkill" pour tuer les zombies depuis n'importe quel terminal

Une seule commande à coller dans Terminal (sélectionne tout du cat à installe."):

cat >> ~/.zshrc << 'EOF'

# Tue les process LLM Council
llmkill() {
    pkill -9 -f "python -m backend.main" 2>/dev/null
    pkill -9 -f "vite" 2>/dev/null
    pkill -9 -f "npm run dev" 2>/dev/null
    echo "LLM Council process killed."
}
EOF
source ~/.zshrc && echo "llmkill installe."

Après ça, tape llmkill depuis n'importe quel terminal pour nettoyer en un mot.

Changer les modèles du conseil

Édite backend/config.py (clic droit sur le fichier dans Finder, "Ouvrir avec" TextEdit ou VS Code). Tu y trouves la liste:

COUNCIL_MODELS = [
    "openai/gpt-5.1",
    "anthropic/claude-sonnet-4.5",
    "google/gemini-3.1-pro-preview",
    "x-ai/grok-4.20",
]

CHAIRMAN_MODEL = "anthropic/claude-sonnet-4.5"

Configs testées au 2026-05-29

Use caseSuggestion
Qualité maxGPT 5.1 + Claude Sonnet 4.5 + Gemini 3.1 Pro + Grok 4.20
Cost-efficientGPT 5.1 + Claude Sonnet 4.5 + Gemini 2.5 Pro + DeepSeek v3.1
Chairman fiableanthropic/claude-sonnet-4.5 (GA, pas preview)

Trouver les slugs disponibles

Pour lister les modèles d'une famille (remplace gemini par claude, gpt, grok, deepseek):

curl -s https://openrouter.ai/api/v1/models | python3 -c "import json,sys; [print(m['id']) for m in json.load(sys.stdin)['data']]" | grep -i gemini
Penser à

Après avoir édité config.py, relance ./start.sh. Le pre-flight check te confirme que les nouveaux slugs sont valides avant de démarrer.

Mises à jour

Vérifier que les modèles existent toujours

OpenRouter retire et renomme régulièrement des modèles, surtout les "preview". Le script check-models.py tourne automatiquement à chaque ./start.sh et bloque le démarrage si un slug a sauté.

Pour le lancer à la main (sans démarrer l'app):

cd ~/Desktop/CLAUDE/llm-council && uv run check-models.py

Récupérer les nouveautés du repo upstream (Karpathy)

Si Karpathy publie une amélioration sur son repo:

cd ~/Desktop/CLAUDE/llm-council
git remote add upstream https://github.com/karpathy/llm-council.git
git fetch upstream
git merge upstream/master

La première ligne (git remote add) ne se fait qu'une fois. Les fois suivantes, juste fetch + merge.

Si Git signale un conflit avec tes modifs perso (config.py, start.sh), garde tes versions: git checkout --ours backend/config.py start.sh.

Karpathy ne maintient pas le repo

Le projet est marqué "vibe coded, non supporté". Tu peux pull les updates s'il y en a, mais ne t'attends pas à des fixes réguliers. C'est sain de considérer ton fork comme la version de référence.

Glossaire pour non-dev

Terminal
L'app Mac où tu tapes des commandes texte au lieu de cliquer. Cmd+Espace puis "Terminal" pour l'ouvrir.
Backend
Le "cerveau" de l'app. C'est lui qui appelle les modèles OpenRouter. Tourne sur le port 8001. Pas d'interface visible.
Frontend
L'interface visuelle dans le navigateur (boutons, chat, tabs des réponses). Tourne sur le port 5173.
Port
Un numéro qui identifie une "ligne de communication" entre programmes sur ton Mac. 8001 et 5173 sont les lignes utilisées par cette app. Si un autre programme y parle déjà, conflit.
Slug
L'identifiant technique unique d'un modèle. Exemple: openai/gpt-5.1 est le slug de GPT 5.1 sur OpenRouter. Il faut le bon slug exact, sinon l'app ne sait pas à qui parler.
API key (clé API, token)
Un mot de passe spécial qui prouve à un service (OpenRouter, GitHub, etc.) que c'est bien toi qui demandes. À garder secret comme un mot de passe normal.
OpenRouter
Service qui te donne accès à plein de modèles (OpenAI, Anthropic, Google, xAI, DeepSeek) avec une seule clé API. L'app utilise ta clé pour leur parler à tous.
Process zombie
Programme que tu croyais arrêté mais qui tourne encore en mémoire. Sur Mac il continue d'occuper son port même si tu as fermé le terminal. Solution: pkill ou llmkill.
uv
Outil qui installe les dépendances Python (le backend). uv sync installe tout ce qu'il faut.
npm
Équivalent de uv mais pour JavaScript (le frontend). npm install installe les dépendances.
git
Système qui suit les versions du code. git pull récupère les changements des autres, git push envoie les tiens.
GitHub
Plateforme qui héberge les repos git. Le "Google Drive du code".
Fork
Copie perso d'un repo public pour y faire tes modifs sans toucher l'original. Tu as forké karpathy/llm-council en abovefear/llm-council.
Stage 1 / Stage 2 / Stage 3
Les 3 étapes de la réponse. Stage 1 = les 4 modèles répondent. Stage 2 = ils se notent en aveugle. Stage 3 = le Chairman synthétise.