Skip to main content

Run queries with multiple AI servers

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multibrain-0.5.2.tar.gz (145.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

multibrain-0.5.2-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file multibrain-0.5.2.tar.gz.

File metadata

  • Download URL: multibrain-0.5.2.tar.gz
  • Upload date:
  • Size: 145.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for multibrain-0.5.2.tar.gz
Algorithm Hash digest
SHA256 d4960191b0df13b9ccb0fe6ce0fd9f066e42b170f720524dce23e4f9f357d5fe
MD5 80d5f5c3f6a962127cbe92c4665f2aa1
BLAKE2b-256 22591990155683cd058df0dcb99074aaf06c050a1a8b66a3a6560d79dc9ed565

See more details on using hashes here.

File details

Details for the file multibrain-0.5.2-py3-none-any.whl.

File metadata

  • Download URL: multibrain-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for multibrain-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3333e831bf182766d4b9dc8ae45088b462cc3b31f3f8de3872d681f168202cb9
MD5 b0ed1ba6a223a85bfdf4d241487c54cd
BLAKE2b-256 0a74012966f6c6f50cb97c661986716e7a79cd407bab4d32d98b858331f8d8fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page