LLM Council

LLM Council (Local, Distributed)

Système de consensus multi-LLM local avec Ollama : réponses parallèles → revue anonymisée → synthèse chairman.

Inférence locale uniquement (Ollama), aucun appel cloud
Contrats JSON/Zod stricts entre services
Observabilité + historique de runs pour des démos reproductibles

Teaser démo

Ce que vous voyez en 30 secondes : réponses (Stage 1), revue anonymisée (Stage 2), synthèse (Stage 3), santé + latences.

Vue d’ensemble de l’UI LLM Council avec health et run controls
Vue d’ensemble + health
Stage 1 avec réponses et latences
Stage 1 réponses
Stage 2 avec revue anonymisée
Stage 2 reviews
Classement agrégé des pairs anonymisés
Classement agrégé
Stage 3 avec synthèse du chairman
Stage 3 synthèse
Historique des runs et export
Historique + export

Problème

Un seul modèle peut produire des réponses fragiles, biaisées ou inconsistantes. Comparer plusieurs modèles de façon reproductible est difficile, et il est souvent impossible d’expliquer pourquoi un résultat final a été retenu.

Le local-first compte : les données sensibles restent sur la machine, l’inférence fonctionne hors ligne, les coûts sont prévisibles et l’on évite le vendor lock‑in.

Solution (vue d’ensemble)

LLM Council sépare les rôles en services indépendants : membres (réponses), orchestrateur (coordination + anonymisation), chairman (synthèse) et UI (visualisation).

L’orchestrateur n’appelle pas les LLMs ; il coordonne uniquement les requêtes et agrège les réponses.

Architecture

Architecture LLM CouncilFlux local de consensus multi-LLM avec orchestrateur, pairs Ollama et synthèse président.UI clientprompt + politiqueOrchestrateurcontrats ZodPairs Ollamavotes anonymisésChairmansynthèse + JSONSQLitehistorique runsHealth/Heartbeatstatut LANLocal uniquementPas d'inférence cloud

Architecture en bref — L’UI envoie un prompt et une politique à l’orchestrateur. Celui-ci distribue vers les pairs Ollama, anonymise, collecte les votes, puis transmet au chairman pour une réponse JSON finale. Health/heartbeat et historique de runs sont stockés localement.

Ports & services
  • UI : 5173 • Orchestrateur : 9000 • Chairman : 9100
  • Membres : 8001–8003 • Ollama : 11434
  • Trafic local uniquement ; aucune inférence externe.

Pipeline (Stages 1–3)

Stage 1 — Réponses parallèles
  • Input : prompt + politique depuis l’UI.
  • Action : les membres appellent les modèles Ollama locaux.
  • Output : N réponses candidates + latences.
  • Tolérance : un membre manquant n’arrête pas le run.
Stage 2 — Revue anonymisée
  • Input : réponses mappées en A/B/C.
  • Action : revues et scores anonymisés (évite le biais d’identité).
  • Output : classements + critiques.
  • Tolérance : nécessite au moins 2 réponses.
Stage 3 — Synthèse chairman
  • Input : top réponses + reviews.
  • Action : synthèse finale avec schéma JSON strict.
  • Output : réponse unique + métadonnées.
  • Tolérance : synthèse même si reviews incomplètes.

Décisions d’ingénierie

  • Contrats JSON/Zod stricts à chaque frontière.
  • Agrégation type Borda pour un classement stable.
  • Monitoring heartbeat + /health agrégé.
  • SQLite + WAL pour démos reproductibles.
  • Tolérance aux pannes partielles (Stage 2 >=2 réponses).

Reproductibilité

npm install
npm --prefix orchestrator install
npm --prefix chairman install
npm --prefix ui install

cp .env.example .env
cp orchestrator/.env.example orchestrator/.env
cp chairman/.env.example chairman/.env
cp ui/.env.example ui/.env

./scripts/run_all_local.sh
open http://localhost:5173

Astuce : cliquez sur Run Pipeline puis ouvrez les onglets Stage 1–3.

Sécurité & confidentialité

  • Inférence locale via Ollama ; aucun appel cloud.
  • Historique SQLite activable/désactivable selon la sensibilité des démos.
  • Pas d’auth/rate limiting par défaut (à ajouter pour un usage LAN partagé).

Limites & roadmap

Limites
  • Pas d’auth ni rate limiting par défaut (scope démo).
  • Pas de persistance distribuée (état local uniquement).
  • Qualité dépendante des modèles et du matériel locaux.
Roadmap
  • Retry/backoff pour modèles instables.
  • Auth + rôles pour démos LAN partagées.
  • Client d’inférence consolidé pour configs uniformes.
  • Tests étendus sur transitions et schémas.
  • Tracing OpenTelemetry optionnel.

Ce que cela démontre

CapacitéPreuveOù regarder
Orchestration distribuéeCoordination + fan-outorchestrator/src/server.ts
Contrats strictsSchémas Zod + validation JSONorchestrator/src/contracts/*
ObservabilitéHeartbeat + /health agrégéorchestrator/src/health.ts
Visualisation UIVues Stage + run historyui/
    LLM Council — Orchestrateur multi-LLM local — Case Study