A sophisticated application that orchestrates multiple LLMs to collaboratively reason through complex decisions, showing their debates, areas of consensus, and synthesized recommendations.
Inspired by Satya Nadella's demonstration of multi-model decision-making frameworks.
- Multi-Model Orchestration: Run multiple LLMs concurrently to debate questions
- Real-Time Streaming: Watch responses stream in real-time from each council member
- Chairman Synthesis: Designated chairman model synthesizes consensus and debates
- Decision History: Browse and review past decisions with full audit trail
- LiteLLM Integration: Unified interface for local (Ollama) and cloud models
- FastAPI server with async operations
- Server-Sent Events (SSE) for streaming responses
- SQLite database for decision history
- LiteLLM proxy integration
- Modern React with hooks
- Real-time streaming display
- TailwindCSS for styling
- Clean, responsive UI
- Python 3.10+
- Node.js 18+
- LiteLLM proxy running (default:
http://localhost:4000) - Ollama (optional, for local models)
The easiest way to run the application is using Docker:
# 1. Create .env file with your LiteLLM configuration
# See .env.docker.example for reference
# 2. Build and run
docker-compose up -d
# 3. Access the application
# Open http://localhost:8000For detailed Docker deployment instructions, see DOCKER.md.
cd backend
# Install dependencies
pip install -r requirements.txt
# Configure environment - copy .env.example to .env and update
cp .env.example .env
# Edit .env with your LiteLLM proxy URL
# Run the server
python main.pyThe backend will start on http://localhost:8000
cd frontend
# Install dependencies
npm install
# Run the development server
npm run devThe frontend will start on http://localhost:5173
-
Open the application at
http://localhost:5173 -
Enter your question in the query text area
-
Select council members - Choose at least 2 models to participate
-
Designate a chairman - This model will synthesize the final conclusion
-
Start the debate - Watch responses stream in real-time
-
Review synthesis - See consensus points, debates, and chairman's synthesis
-
Browse history - View past decisions and their complete audit trails
GET /api/config/models- Get available modelsPOST /api/config/test-model- Test model availability
POST /api/council/debate- Start a council debate (SSE streaming)
GET /api/history/- List all decisionsGET /api/history/{id}- Get decision details
The streaming debate endpoint emits the following events:
debate_start- Debate beginsmodel_start- Model starts respondingmodel_chunk- Streaming token from modelmodel_complete- Model finishesmodel_error- Model encounters errorsynthesis_start- Chairman begins synthesissynthesis_complete- Synthesis readydebate_complete- Debate finished
id: Primary keyquery: The question/decisionchairman_model: Model acting as chairmancreated_at,updated_at: Timestamps
id: Primary keydecision_id: Foreign key to decisionsmodel_name: Model that provided responseresponse_text: Full responsetokens_used: Token countresponse_time: Time to complete
id: Primary keydecision_id: Foreign key to decisionsconsensus_items: JSON array of consensus pointsdebates: JSON array of debate pointssynthesis_text: Chairman's synthesis
Backend .env:
LITELLM_PROXY_URL=http://localhost:4000
LITELLM_API_KEY=your-api-key-here
DATABASE_URL=sqlite+aiosqlite:///./database.db
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
cd backend
uvicorn main:app --reload --host 0.0.0.0 --port 8000cd frontend
npm run devcd frontend
npm run build- DxO Framework: Role-assignment system (Lead Researcher, Critical Reviewer, etc.)
- Ensemble Framework: Anonymization and different synthesis methods
- Custom Prompts: Template system for debate prompts
- Model Weighting: Confidence scoring and weighted synthesis
- Semantic Analysis: Advanced consensus/debate detection
- Export Options: JSON, Markdown, PDF exports
- User Authentication: Multi-user support
MIT
1.0.0 - Phase 1: LLM Council Framework MVP