Multibrain combines multiple AIs to improve responses and accuracy. Maybe. https://spacecruft.org/deepcrayon/multibrain
  • Svelte 32.7%
  • JavaScript 23.7%
  • TypeScript 20.3%
  • Python 18.4%
  • Shell 2.6%
  • Other 2.3%
Find a file
2025-09-16 16:10:13 -06:00
deploy Refactor, phase 4 2025-09-14 19:41:34 -06:00
docs Update to current Svelte 5 2025-09-15 17:43:30 -06:00
frontend Add About 2025-09-16 16:10:13 -06:00
scripts Update to current Svelte 5 2025-09-15 17:43:30 -06:00
src/multibrain Add follow up question prompt 2025-09-16 15:08:25 -06:00
tests Cleanup old cruft. Type hints, formatting, lint 2025-09-14 20:00:31 -06:00
.env.example Refactor, phase 4 2025-09-14 19:41:34 -06:00
.gitignore Ignore dynamic version 2025-09-14 20:20:20 -06:00
CHANGELOG.txt v0.5.2 2025-09-16 15:17:36 -06:00
LICENSE-apache.txt Apache 2.0 2025-04-23 11:31:33 -06:00
LICENSE-CC.txt CC by SA 4.0 International 2025-04-23 11:31:48 -06:00
multibrain-moe.conf apache config 2025-09-15 20:55:42 -06:00
pyproject.toml Cleanup old cruft. Type hints, formatting, lint 2025-09-14 20:00:31 -06:00
README.md Update to current Svelte 5 2025-09-15 17:43:30 -06:00
REFACTOR.md Refactor plan 2025-09-14 18:45:03 -06:00
start-multibrain-fastapi crufty startup script 2025-09-15 20:55:53 -06:00
start_dev_servers.sh Refactor, phase 3 2025-09-14 19:14:08 -06:00
test_api_endpoints.py Add follow up question prompt 2025-09-16 15:08:25 -06:00

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.

MultiBrain License Svelte

🚀 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

  1. Clone the repository:
git clone https://spacecruft.org/deepcrayon/multibrain
cd multibrain
  1. Create a Python virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install the package:
pip install -U pip setuptools wheel
pip install -e .

Frontend Setup

  1. Navigate to the frontend directory:
cd frontend
  1. Install dependencies:
npm install

🚦 Running the Application

Development Mode

  1. Start the backend API server:
multibrain-api

The API server will run on http://localhost:8000

  1. In a new terminal, start the frontend development server:
cd frontend
npm run dev

The frontend will run on http://localhost:5173

Production Mode

  1. Build the frontend:
cd frontend
npm run build
  1. Start the backend with static file serving:
multibrain-api --serve-static

Visit http://localhost:8000 to use the application.

🔧 Configuration

Adding LLM Providers

  1. Click the "Configure LLMs" button in the header
  2. Select a provider preset or choose "Custom"
  3. 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:

  1. Configure at least one LLM
  2. In the configuration modal, select your preferred model from the "Summary LLM" dropdown
  3. The summary will automatically generate after all responses complete

⌨️ Keyboard Shortcuts

  • Ctrl+K: Open LLM configuration
  • Ctrl+/: Focus query input
  • Ctrl+Enter: Submit query
  • Shift+?: Show keyboard shortcuts
  • Escape: 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, $effect for 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:

  1. State Management: All stores use .svelte.js extension with runes
  2. Component Props: Migrated from export let to $props()
  3. Reactive Effects: Using $effect for side effects instead of $:
  4. 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.js files with reactive primitives
  • Props use the $props() rune for better type safety
  • Two-way binding with $bindable for 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 LLMs
  • POST /api/llm/validate: Test LLM configuration
  • POST /api/llm/models: List available models

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. 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


Copyright © 2025 Jeff Moe