A lightweight web interface for Ollama and llama.cpp with markdown rendering, syntax highlighting, intelligent context compression, and persistent conversation management. Designed to run on low-powered hardware.
Because why not? Having choices puts you in control.
- Ollama + llama.cpp β Switch backends on the fly; automatic fallback
- Context Compression β Compresses long conversations to fit model context windows (rolling window, intelligent summary)
- Conversations β Create, rename, search, and persist chat sessions in SQLite
- Markdown + Metrics β Rendered responses with token count, speed, and timing
- Lightweight β Runs on Raspberry Pi 4 with 8 GB RAM
Automatic installation (recommended):
curl -fsSL https://github.com/ukkit/chat-o-llama/raw/main/install.sh | bashThis will:
- Install Python and uv if missing
- Install Ollama if not present
- Download and set up Chat-O-Llama
- Start the service at http://localhost:3113
Manual installation:
git clone https://github.com/ukkit/chat-o-llama.git
cd chat-o-llama
# Activate the git hook for automatic versioning
git config core.hooksPath .githooks
# Using uv (recommended)
uv venv venv
source venv/bin/activate
uv sync
./chat-manager.sh startInstalling llama.cpp:
curl -fsSL https://github.com/ukkit/chat-o-llama/raw/main/install-llamacpp.sh | bashFor detailed steps, see install.md.
App Screenshots
First screen after installation
Available backends β Ollama and Llama.cpp
Quick switch between Ollama and Llama.cpp
Chat in llama.cpp with visible L indicator
2026.0616.1906
- Secret key loaded from
SECRET_KEYenv var; falls back toos.urandom(32)β hardcoded placeholder removed - Fixed crash in
/api/chatwhen request body is missing or not valid JSON - Fixed Ollama health check always reporting available regardless of backend reachability
2026.0609.1208
- Startup time reduced from 10β40s to ~500ms β backend health checks deferred to first request
- Compression subsystem and DB tables only initialised when
compression.enabled = true MCPManagerreduced to one shared lazy instance; no longer created at import time- highlight.js, marked.js, and github-dark CSS bundled locally β UI works fully offline
- Removed
psutil(unused dependency) - Context compression decoupled from message storage β
ConversationManagerreturns raw messages only; compression is an explicit step viabuild_chat_context() ContextCompressoris now the single entry point for all compression operations- Removed
mcpfrom required dependencies (install separately if needed) - Updated Flask, requests, and llama-cpp-python to current versions
- Domain glossary added (
CONTEXT.md)
2025.0718.0000 (last semantic release: v2.1.0)
- Collapsible sidebar with Llama icon
- Enhanced chat selection identification
- Disable chatbox for unavailable models
- Model dropdown validation bug fix
Common issues:
- Port in use? Run:
./chat-manager.sh start 3030 - No models? Install one:
ollama pull tinyllama - Backend issues? Check status:
./chat-manager.sh backend status
Documentation
| Document | Description |
|---|---|
| Installation Guide | Detailed installation instructions |
| Features | Complete features overview |
| Process Management | Using chat-manager.sh for service control |
| Configuration | Configuration options and settings |
| API Reference | REST API documentation |
| Troubleshooting | Common issues and solutions |
| Device | CPU | RAM | OS |
|---|---|---|---|
| Raspberry Pi 4 Model B Rev 1.4 | ARM Cortex-A72 | 8GB | Raspberry Pi OS |
| Dell Optiplex 3070 | i3-9100T | 8GB | Debian 12 |
| Nokia Purebook X14 | i5-10210U | 16GB | Windows 11 Home |
Quite a few known issues we are working on.
If you find this project helpful, consider:
- π Starring the repository on GitHub
- π€ Supporting development
- π Reporting bugs and suggesting features
MIT License β see LICENSE for details.

