LLM Council
App locale qui envoie une question à plusieurs LLM, les fait s'autoévaluer en aveugle, puis un Chairman compile la réponse finale. Fork : abovefear/llm-council.
Où vit le code
~/Desktop/CLAUDE/llm-council
Upstream : karpathy/llm-council. Fork perso sous org abovefear (owner dimjohn).
Lancer
cd ~/Desktop/CLAUDE/llm-council
./start.sh
Ouvre http://localhost:5173. Backend FastAPI sur :8001, frontend Vite sur :5173.
Arrêter
Ctrl + C dans le terminal qui tourne. Coupe backend et frontend ensemble.
Clé OpenRouter
Fichier .env à la racine du projet :
OPENROUTER_API_KEY=sk-or-v1-...
Sur ce Mac, la clé persistante est dans ~/Desktop/CLAUDE/.openrouter-api-key. Pour régénérer .env sans la retaper :
echo "OPENROUTER_API_KEY=$(cat ~/Desktop/CLAUDE/.openrouter-api-key)" > .env
Customiser le conseil
Éditer backend/config.py. Exemple cost-efficient avec DeepSeek :
COUNCIL_MODELS = [
"openai/gpt-5.1",
"google/gemini-3-pro-preview",
"anthropic/claude-sonnet-4.5",
"deepseek/deepseek-chat",
]
CHAIRMAN_MODEL = "anthropic/claude-sonnet-4.5"
Tester un nouveau modèle : ajouter son slug OpenRouter dans la liste, relancer ./start.sh. Pas de migration, pas de cache à invalider.
Sync les updates upstream
cd ~/Desktop/CLAUDE/llm-council
git fetch upstream
git merge upstream/master
Si tu n'as pas configuré le remote upstream :
git remote add upstream https://github.com/karpathy/llm-council.git
Troubleshooting
"Repository not found" sur un repo public GitHub
Cause classique : creds cachés d'un compte suspendu (ex jowideweb) dans le Keychain Mac. GitHub ne dit pas "unauthorized", il ment et dit "not found". Fix :
gh auth logout --user jowideweb
gh auth status # vérifier que seul dimjohn reste actif
"No pyproject.toml found" sur uv sync
Tu es au mauvais endroit. uv sync doit tourner DANS le dossier du projet, pas dans ~.
cd ~/Desktop/CLAUDE/llm-council
uv sync
Vulns npm au moment du npm install
Projet non maintenu par Karpathy. Fix safe :
cd frontend && npm audit fix && cd ..
Port déjà utilisé (5173 ou 8001)
lsof -ti :5173 | xargs kill -9
lsof -ti :8001 | xargs kill -9
Aucune réponse, les modèles muets
Vérifier la clé dans .env (sans guillemets, sans espace), puis tester direct :
curl -s -H "Authorization: Bearer $(grep OPENROUTER ~/Desktop/CLAUDE/llm-council/.env | cut -d= -f2)" \
https://openrouter.ai/api/v1/credits | head
Stack technique
- Backend : FastAPI, Python 3.10+, async
httpx, API OpenRouter - Frontend : React + Vite,
react-markdown - Storage : JSON dans
data/conversations/ - Package management :
uvpour Python,npmpour JS
Fonctionnement en 3 étapes
- First opinions. Question envoyée à tous les modèles en parallèle. Réponses affichées en tabs.
- Review. Chaque modèle voit les réponses des autres (anonymisées pour éviter les biais), classe par accuracy et insight.
- Final response. Le Chairman synthétise tout en une réponse finale.