Skip to main content

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

Metadata

Release files for multibrain 0.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for multibrain 0.5.2
File Size Uploaded Provenance Actions
multibrain-0.5.2.tar.gz 145.4 kB Without provenance Details for multibrain-0.5.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for multibrain 0.5.2
File Interpreter ABI Platform Actions
multibrain-0.5.2-py3-none-any.whl Python 3 none any Details for multibrain-0.5.2-py3-none-any.whl

Total release size: 169.1 kB

Release files / multibrain-0.5.2.tar.gz

Download URL multibrain-0.5.2.tar.gz
Size 145.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d4960191b0df13b9ccb0fe6ce0fd9f066e42b170f720524dce23e4f9f357d5fe
BLAKE2b-256 checksum
How to use checksums
22591990155683cd058df0dcb99074aaf06c050a1a8b66a3a6560d79dc9ed565
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / multibrain-0.5.2-py3-none-any.whl

Download URL multibrain-0.5.2-py3-none-any.whl
Size 23.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3333e831bf182766d4b9dc8ae45088b462cc3b31f3f8de3872d681f168202cb9
BLAKE2b-256 checksum
How to use checksums
0a74012966f6c6f50cb97c661986716e7a79cd407bab4d32d98b858331f8d8fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Security for multibrain 0.5.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page