Asking a single LLM gives you one perspective. Different models excel at different things. This sends your question to several models at once, has them evaluate each other anonymously (to prevent bias), and a chairman model synthesizes the best final answer. All streamed live to a battle-arena UI. Fork of Karpathy's llm-council, rebuilt from scratch.
Your question goes in parallel to 2–6 models. Side-by-side panels with colors and word counts. If fewer than 2 respond, it automatically retries the failed ones and then tries backup models.
Each model receives the anonymized answers ("Response A/B/C…") and produces a ranking with justification. An aggregate ranking is computed and shown as a podium with medals.
A chairman model analyzes all the answers and evaluations and synthesizes a concise final answer (3–4 paragraphs). If it fails, it retries and then tries each backup sequentially.
| Aspect | Original | This fork |
|---|---|---|
| Model selection | Hardcoded in config.py | Dynamic UI over the current free-model list |
| Number of models | Fixed (4) | Configurable 2–6 from the frontend |
| Chairman model | Fixed | Selectable separately |
| Retry/fallback | None | Full retry + backup chain |
| Error visibility | Generic | Type-specific per model (timeout, rate_limit…) |
| Language | English | Full Spanish (UI + answers) |
| UI | Basic tabs | Arena with panels, podium, timeline |
stage1_start → [stage1_retry …] → stage1_complete → stage2_start → stage2_complete → stage3_start → [stage3_retry …] → stage3_complete → title_complete → complete
Free-tier models have rate limits and outages. Stage 1: retries failures + backup models. Stage 3: the chairman retries and then tries 7 backups sequentially. Every failure returns a structured error type visible in the UI.