- Svelte 32.7%
- JavaScript 23.7%
- TypeScript 20.3%
- Python 18.4%
- Shell 2.6%
- Other 2.3%
| deploy | ||
| docs | ||
| frontend | ||
| scripts | ||
| src/multibrain | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| CHANGELOG.txt | ||
| LICENSE-apache.txt | ||
| LICENSE-CC.txt | ||
| multibrain-moe.conf | ||
| pyproject.toml | ||
| README.md | ||
| REFACTOR.md | ||
| start-multibrain-fastapi | ||
| start_dev_servers.sh | ||
| test_api_endpoints.py | ||
MultiBrain
MultiBrain is a powerful web application that queries multiple AI models simultaneously, providing real-time streaming responses and intelligent summaries. Built with Svelte 5 and FastAPI, it offers a modern, responsive interface for comparing AI responses side-by-side.
🚀 Features
- Multi-Model Querying: Query multiple AI providers simultaneously (OpenAI, Anthropic, Groq, Ollama, etc.)
- Real-Time Streaming: Watch responses stream in real-time from all configured models
- Intelligent Summaries: Automatic synthesis of all responses into a unified, fact-checked summary
- Bring Your Own Keys: Secure, client-side API key management with local encryption
- Modern UI: Beautiful, responsive interface built with Svelte and Tailwind CSS
- Keyboard Shortcuts: Efficient navigation with customizable keyboard shortcuts
- No Limits: Configure unlimited AI models with no artificial restrictions
📋 Requirements
- Python 3.8+
- Node.js 16+
- npm or yarn
- Svelte 5.0+ (included in dependencies)
🛠️ Installation
Backend Setup
- Clone the repository:
git clone https://spacecruft.org/deepcrayon/multibrain
cd multibrain
- Create a Python virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install the package:
pip install -U pip setuptools wheel
pip install -e .
Frontend Setup
- Navigate to the frontend directory:
cd frontend
- Install dependencies:
npm install
🚦 Running the Application
Development Mode
- Start the backend API server:
multibrain-api
The API server will run on http://localhost:8000
- In a new terminal, start the frontend development server:
cd frontend
npm run dev
The frontend will run on http://localhost:5173
Production Mode
- Build the frontend:
cd frontend
npm run build
- Start the backend with static file serving:
multibrain-api --serve-static
Visit http://localhost:8000 to use the application.
🔧 Configuration
Adding LLM Providers
- Click the "Configure LLMs" button in the header
- Select a provider preset or choose "Custom"
- Enter your API credentials:
- Display Name: A friendly name for the LLM
- API URL: The OpenAI-compatible endpoint
- Model: The specific model to use
- API Key: Your provider's API key
Supported Providers
- OpenAI: GPT-4, GPT-3.5-turbo
- Anthropic: Claude 3 Opus, Sonnet, Haiku
- Groq: Mixtral, Llama 2
- Ollama: Local models (Llama 2, Mistral, CodeLlama)
- Custom: Any OpenAI-compatible endpoint
Setting a Summary LLM
The summary LLM analyzes all responses and provides a unified answer:
- Configure at least one LLM
- In the configuration modal, select your preferred model from the "Summary LLM" dropdown
- The summary will automatically generate after all responses complete
⌨️ Keyboard Shortcuts
Ctrl+K: Open LLM configurationCtrl+/: Focus query inputCtrl+Enter: Submit queryShift+?: Show keyboard shortcutsEscape: Close modals
🏗️ Architecture
Frontend (Svelte 5 + Vite)
The frontend has been fully migrated to Svelte 5, leveraging the latest features:
- Runes API: Using
$state,$derived,$effectfor reactive state management - Props with
$props(): Modern component prop handling - Bindable Props: Two-way binding with
$bindable - Snippets: Reusable template fragments for better composition
frontend/
├── src/
│ ├── components/ # Svelte 5 components with runes
│ ├── stores/ # State management (.svelte.js files)
│ ├── lib/ # Utilities and helpers
│ └── App.svelte # Main application
Key Svelte 5 Features Used:
- State Management: All stores use
.svelte.jsextension with runes - Component Props: Migrated from
export letto$props() - Reactive Effects: Using
$effectfor side effects instead of$: - Performance: Leveraging Svelte 5's improved reactivity system
Backend (FastAPI)
src/multibrain/
├── api/
│ ├── routes/ # API endpoints
│ │ ├── streaming.py # SSE streaming logic
│ │ └── router.py # Route definitions
│ └── main.py # FastAPI application
🔒 Security
- Local Storage: API keys are encrypted using Web Crypto API
- No Backend Storage: Keys are never sent to or stored on the backend
- Secure Proxy: Backend proxies requests to avoid CORS issues
- HTTPS Ready: Full support for secure deployments
🧪 Development
Svelte 5 Migration
This project has been fully migrated to Svelte 5. Key changes include:
- All components use the new runes API (
$state,$derived,$effect) - Stores are now
.svelte.jsfiles with reactive primitives - Props use the
$props()rune for better type safety - Two-way binding with
$bindablefor form inputs - Improved performance with Svelte 5's optimized compiler
Running Tests
# Backend tests
pytest
# Frontend tests
cd frontend
npm test
Component Development
When creating new components, follow the Svelte 5 patterns:
// Use $props() for component props
let { value = $bindable(''), onsubmit } = $props();
// Use $state for reactive state
let count = $state(0);
// Use $derived for computed values
let doubled = $derived(count * 2);
// Use $effect for side effects
$effect(() => {
console.log('Count changed:', count);
});
Building for Production
# Build Python package
python -m build
# Build frontend
cd frontend
npm run build
📝 API Documentation
Once the backend is running, visit:
- Interactive API docs:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
Key Endpoints
POST /api/query/stream: Stream responses from multiple LLMsPOST /api/llm/validate: Test LLM configurationPOST /api/llm/models: List available models
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Alternative licensing under Creative Commons CC BY-SA 4.0 International is also available.
🙏 Acknowledgments
- Built with Svelte 5 and FastAPI
- UI components styled with Tailwind CSS
- Markdown rendering by Marked
- Migrated to Svelte 5 runes API for improved performance and developer experience
📞 Support
- Documentation: https://spacecruft.org/deepcrayon/multibrain
- Issues: https://spacecruft.org/deepcrayon/multibrain/issues
Copyright © 2025 Jeff Moe