llm-council README

The project's README from github.com/karpathy/llm-council. As one markdown file: README.md.

LLM Council

llmcouncil

The idea of this repo is that instead of asking a question to your favorite LLM provider (e.g. OpenAI GPT 5.1, Google Gemini 3.0 Pro, Anthropic Claude Sonnet 4.5, xAI Grok 4, eg.c), you can group them into your "LLM Council". This repo is a simple, local web app that essentially looks like ChatGPT except it uses OpenRouter to send your query to multiple LLMs, it then asks them to review and rank each other's work, and finally a Chairman LLM produces the final response.

In a bit more detail, here is what happens when you submit a query:

  1. Stage 1: First opinions. The user query is given to all LLMs individually, and the responses are collected. The individual responses are shown in a "tab view", so that the user can inspect them all one by one.
  2. Stage 2: Review. Each individual LLM is given the responses of the other LLMs. Under the hood, the LLM identities are anonymized so that the LLM can't play favorites when judging their outputs. The LLM is asked to rank them in accuracy and insight.
  3. Stage 3: Final response. The designated Chairman of the LLM Council takes all of the model's responses and compiles them into a single final answer that is presented to the user.

Vibe Code Alert

This project was 99% vibe coded as a fun Saturday hack because I wanted to explore and evaluate a number of LLMs side by side in the process of reading books together with LLMs. It's nice and useful to see multiple responses side by side, and also the cross-opinions of all LLMs on each other's outputs. I'm not going to support it in any way, it's provided here as is for other people's inspiration and I don't intend to improve it. Code is ephemeral now and libraries are over, ask your LLM to change it in whatever way you like.

Setup

1. Install Dependencies

The project uses uv for project management.

Backend:

uv sync

Frontend:

cd frontend
npm install
cd ..

2. Configure API Key

Create a .env file in the project root:

OPENROUTER_API_KEY=sk-or-v1-...

Get your API key at openrouter.ai. Make sure to purchase the credits you need, or sign up for automatic top up.

3. Configure Models (Optional)

Edit backend/config.py to customize the council:

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

CHAIRMAN_MODEL = "google/gemini-3-pro-preview"

Running the Application

Option 1: Use the start script

./start.sh

Option 2: Run manually

Terminal 1 (Backend):

uv run python -m backend.main

Terminal 2 (Frontend):

cd frontend
npm run dev

Then open http://localhost:5173 in your browser.

Tech Stack

llm-council (karpathy/llm-council)

Searching Database…

Что это такое?LLM Council — это локальное веб-приложение, которое отправляет ваш вопрос группе LLM через OpenRouter. Каждая из них анонимно оценивает и ранжирует ответы остальных, после чего назначенная LLM-председатель собирает всё в один итоговый ответ.
Это готовый онлайн-сервис или то, что я запускаю у себя?Это локальное веб-приложение, которое вы запускаете на своём компьютере, а не готовый продукт в облаке: бэкенд на FastAPI и фронтенд на React/Vite. Внешне и по ощущениям оно похоже на ChatGPT.
Как это запустить?Установите зависимости бэкенда через uv, а зависимости фронтенда через npm. Затем либо используйте готовый стартовый скрипт, либо запустите бэкенд FastAPI и фронтенд Vite в двух отдельных терминалах и откройте приложение в браузере.
Нужен ли мне ключ API OpenRouter?Да, ключ API OpenRouter нужно указать в файле .env. Поскольку OpenRouter берёт плату за каждый вызов модели во всём совете, нужно купить кредиты или включить автопополнение.
Проект кто-то активно поддерживает?Нет. Автор сделал его как взломанный за выходные проект на 99% через вайб-кодинг и прямо говорит, что поддерживать и улучшать его не будет. Если хотите изменений, он советует попросить LLM доработать его самостоятельно.
Куда попадают мои данные переписки?Никуда: ни в базу данных, ни во внешний сервис для хранения ничего не отправляется. Переписки сохраняются локально в виде обычных JSON-файлов в data/conversations/.
Как поменять модели, которые входят в совет?Отредактируйте backend/config.py: там можно добавлять, удалять или заменять LLM, а также модель-председатель, которая используется в совете.
Как совет на самом деле выдаёт один итоговый ответ?Сначала каждая LLM самостоятельно отвечает и анонимно ранжирует ответы остальных, после чего назначенная LLM-председатель получает все ответы и собирает из них один итоговый ответ, который видит пользователь.
Зачем karpathy сделал это?Он хотел быстрый способ сравнивать несколько LLM бок о бок, включая их оценки выводов друг друга, пока за выходные читал книги вместе с LLM.
Creator
karpathy
Size
0.3 MB
Stars
25.6K
Updated
CommitNov 22
Age
10mo
Commits · 90 Days