
switchboard
A lightweight, modern looking and easy to deploy chat interface to large language models that can be used as-is and easily self-hosted, themed and modified as needed.
Repository Info
About This Server
A lightweight, modern looking and easy to deploy chat interface to large language models that can be used as-is and easily self-hosted, themed and modified as needed.
Model Context Protocol (MCP) - This server can be integrated with AI applications to provide additional context and capabilities, enabling enhanced AI interactions and functionality.
Documentation
Switchboard! - v0.0.1
Aiming to be a lightweight, modern looking and easy to deploy chat interface to large language models that can be used as-is and easily self-hosted, themed and modified as needed.
Switchboard is a web 'app' that is shipped as a single web page (HTML, JS, WASM and CSS) and is written with Rust, targetting WASM, for high performance. Other than communicating to the OpenAI-compatible API you set in the configuration, the app makes no other connections.
Note: Everything is under heavy development right now; Consider any data as disposable as log compatability isn't guaranteed yet.
WARNING: CHATLOG BREAKS ARE INCOMING FOR THE NEXT FEW COMMITS. (WILL STABILIZE AND UPDATE DEMO SITE ONCE I FEEL BETTER ABOUT THE UI FOR THE LOGS)
!Screenshot of Switchboard in action
Demo Site
Try The Live Demo Site!
(Requires an OpenRouter AI key or your own OpenAI compatible endpoint and key)
Features
-
Clean and Simple: Setup your API settings and you're good to go!
-
Multimodal support for images: Paste an image in from the clipboard to the message and it will be sent to the AI with the text.
-
Themable: Clone this repo and change tailwind-import.css to have the webpage look how you want it to look. Or fork and update the modular components for deeper customization.
-
Supports OpenAI-compatbile APIs such as llama.cpp's server, which when combined with llama-swap, will allow multiple models to be served. It also works with popular cloud API providers such as openrouter.
-
Save slots allow you to save your conversation in the web browser's storage, meaning no file management is required.
-
Chatlogs can be imported and exported using JSON.
Requirements
Building from source requires the git and tailwindcss executables to be in your path, in
addition to having a Rust toolchain installed.
Building and Running
Once you have a Rust toolchain, make sure the tailwindcss executable is in your
path becausae it's referenced in the build scripts. The build process will also expect git
to be in your path, too.
Install Trunk to build and serve the project and make sure
the resulting trunk executable is in the PATH for your shell:
rustup target add wasm32-unknown-unknown
cargo install --locked trunk
The pull down the project's source code, change to the dirctory and serve with trunk:
git clone https://github.com/tbogdala/switchboard.git
cd switchboard
trunk serve --release
At this point, browse to http://localhost:8080 on your browser to see the app.
When deploying to a website that is going to host it someplace other than the root,
you can generate the website with the following trunk command, where the website files are
located in /switchboard:
trunk serve --release --public-url /switchboard/
Notes on Usage
-
The demo site and other places you host this site will likely have a problem if only part of the connection is HTTPS. If you host this project on an HTTPS webserver, the OpenAI-compatible endpoints you connect to will also have to be HTTPS or else it will get blocked as a security violation. When running the project locally using Trunk, this behavior doesn't happen.
-
Firefox, and it's derivatives, may have a small local storage pool by default. You can browse to
about:config, search for thedom.storage.default_quotaparameter and setting it to102400for 100MB of local storage. -
Currently, errors are under reported and if something is not acting right, bring up the Web Developer Tools (or equivalent) and look at the 'console' tab for error mesasages.
-
For image support, the current implementation only sends the image data when it's the last message in the chatlog so that it doesn't use up token processing with each subsequent request. Feedback can be provided on this, if there's a more preffered way to handle images in the chatlog; please open a ticket or start a discussion. Image size is also not factored into the token budget estimation (unsure if this has negative effects in practice).
Roadmap
The first major milestone is to get the small version of this project usable. This will entail just a single endpoint and a simple system message for prompt generation. Chatlog features will be basic and just include delete, regenerate and edit capabilities. This will provide a minimalistic starting point for others to use as just a general chat interface.
Afterwards, that version will get branched and named the 'nano' version of the project. The main branch will then work on more advanced features such as multiple characters, multiple API endpoints and possibly advanced integrations with something like an MCP server. Things that are more complicated.
License
This code is open sourced under the MIT license.
Quick Start
Clone the repository
git clone https://github.com/tbogdala/switchboardInstall dependencies
cd switchboard
npm installFollow the documentation
Check the repository's README.md file for specific installation and usage instructions.
Repository Details
Recommended MCP Servers
Discord MCP
Enable AI assistants to seamlessly interact with Discord servers, channels, and messages.
Knit MCP
Connect AI agents to 200+ SaaS applications and automate workflows.
Apify MCP Server
Deploy and interact with Apify actors for web scraping and data extraction.
BrowserStack MCP
BrowserStack MCP Server for automated testing across multiple browsers.
Zapier MCP
A Zapier server that provides automation capabilities for various apps.