Skip to content

themacmarketer/llm-council

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

This fork modifies the original council, to add a research phase using perplexity/sonar to provide more context to the topic, before council members are consulted.

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

  1. Stage 0: Pre-research. Before the council deliberates, Perplexity Sonar (via Straico) performs web research to gather factual context. The query is decomposed into 2-3 focused sub-queries (factual, practical, contextual) which are researched in parallel, then synthesized into a rich context document. This prevents hallucination and grounds the council's responses in real-world information.
  2. Stage 1: First opinions. The user query is given to all LLMs individually along with the research context, 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.
  3. 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.
  4. 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.

All stage outputs include a copy button for easy markdown export. Conversations can be renamed (inline editing) and deleted (with confirmation) from the sidebar.

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 Keys

Create a .env file in the project root:

OPENROUTER_API_KEY=sk-or-v1-...
STRAICO_API_KEY=your-straico-api-key
  • OpenRouter: Get your API key at openrouter.ai. Make sure to purchase the credits you need, or sign up for automatic top up.
  • Straico: Get your API key at straico.com. This is used for Stage 0 pre-research via Perplexity Sonar (~10-12 coins per query).

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

  • Backend: FastAPI (Python 3.10+), async httpx, OpenRouter API
  • Frontend: React + Vite, react-markdown for rendering
  • Storage: JSON files in data/conversations/
  • Pre-research: Perplexity Sonar via Straico API (multi-query decomposition)
  • Package Management: uv for Python, npm (or bun) for JavaScript

About

LLM Council works together to answer your hardest questions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 44.3%
  • JavaScript 39.1%
  • CSS 15.4%
  • Other 1.2%