turbollm 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -211
- package/dist/cli.js +664 -232
- package/dist/webdist/assets/{ChatScreen-DY2flMe9.js → ChatScreen-DwW1RFdb.js} +10 -10
- package/dist/webdist/assets/{CustomizeScreen-Cl6H68Sy.js → CustomizeScreen-DSE61GGl.js} +1 -1
- package/dist/webdist/assets/{DeveloperScreen-zC1nePXh.js → DeveloperScreen-BYGLUEKp.js} +1 -1
- package/dist/webdist/assets/{EnginesScreen-CrsziC3B.js → EnginesScreen-D1fV7OUs.js} +1 -1
- package/dist/webdist/assets/{ModelDetailDialog-BOvumdHI.js → ModelDetailDialog-DOWC_r7x.js} +1 -1
- package/dist/webdist/assets/{ModelDirs-Bj-XrX0c.js → ModelDirs-BnEgYeD7.js} +1 -1
- package/dist/webdist/assets/{ModelsScreen-BTir-kDY.js → ModelsScreen-CsIWlTix.js} +1 -1
- package/dist/webdist/assets/{SettingsScreen-B696egCa.js → SettingsScreen-BsoeEYxo.js} +1 -1
- package/dist/webdist/assets/check-BEcwngnz.js +1 -0
- package/dist/webdist/assets/{circle-x-CsuAddI_.js → circle-x-BMU1-bqZ.js} +1 -1
- package/dist/webdist/assets/{common-DIXPIrUd.js → common-CsaPxOo6.js} +1 -1
- package/dist/webdist/assets/{copy-button-BtQZA6P8.js → copy-button-VN55eluX.js} +1 -1
- package/dist/webdist/assets/{dialog-Dpyml8ZT.js → dialog-oym6ZR4Z.js} +1 -1
- package/dist/webdist/assets/{index-sjgdofsd.js → index-DdsLEQg8.js} +2 -2
- package/dist/webdist/assets/{pencil-BuQwoNyj.js → pencil-BUeTGZ2m.js} +1 -1
- package/dist/webdist/assets/{personas-CQapYHeK.js → personas-B44JP8XF.js} +1 -1
- package/dist/webdist/assets/{plus-B1w15FoZ.js → plus-B4N6E4A9.js} +1 -1
- package/dist/webdist/assets/{refresh-cw-BoAcjLtt.js → refresh-cw-35eljdhP.js} +1 -1
- package/dist/webdist/assets/{save-DE1APWTG.js → save-AXon2pXP.js} +1 -1
- package/dist/webdist/assets/{skeleton-Dvq8tYzC.js → skeleton-BqBFt4sB.js} +1 -1
- package/dist/webdist/assets/{sparkles-C54kYWeQ.js → sparkles-C1EIsU4T.js} +1 -1
- package/dist/webdist/assets/{trash-2-DIMVgidH.js → trash-2-BOZ6n1d2.js} +1 -1
- package/dist/webdist/index.html +1 -1
- package/package.json +1 -1
- package/dist/webdist/assets/check-DFwkcl_5.js +0 -1
package/README.md
CHANGED
|
@@ -38,16 +38,12 @@ LLMs** — built for people who today hand-compile forks and hunt forums for the
|
|
|
38
38
|
## Contents
|
|
39
39
|
|
|
40
40
|
- [Why TurboLLM](#why-turbollm)
|
|
41
|
+
- [Speed: TurboLLM vs LM Studio](#speed-turbollm-vs-lm-studio)
|
|
41
42
|
- [Features](#features)
|
|
42
43
|
- [Quick start](#quick-start)
|
|
43
44
|
- [⭐ Bring any engine — the headline feature](#-bring-any-engine--the-headline-feature)
|
|
44
|
-
- [Models — bring your own, or browse Hugging Face](#models)
|
|
45
|
-
- [Auto-tuning & performance](#auto-tuning--performance)
|
|
46
|
-
- [Chat](#chat)
|
|
47
|
-
- [APIs & integrations](#apis--integrations)
|
|
48
45
|
- [Run Claude Code on your own GPU](#run-claude-code-on-your-own-gpu)
|
|
49
46
|
- [Use it from any device on your network](#use-it-from-any-device-on-your-network)
|
|
50
|
-
- [Share the GPU with ComfyUI](#share-the-gpu-with-comfyui)
|
|
51
47
|
- [Command-line reference](#command-line-reference)
|
|
52
48
|
- [Configuration & data](#configuration--data)
|
|
53
49
|
- [Requirements](#requirements)
|
|
@@ -90,121 +86,48 @@ TurboLLM does the opposite:
|
|
|
90
86
|
|
|
91
87
|
---
|
|
92
88
|
|
|
93
|
-
##
|
|
89
|
+
## Speed: TurboLLM vs LM Studio
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
- **Curated catalog** — llama.cpp, KoboldCpp, llamafile, MLX, vLLM, plus forks (ik_llama, TurboQuant) — one-click install where a prebuilt exists
|
|
99
|
-
- **End-to-end build from source** (Windows + CUDA) — clone, `cmake` (Ninja + `nvcc`), compile `llama-server`, bundle its CUDA runtime, and auto-register it from inside the app, with a live compiler log and a success screen. **No CUDA Toolkit? Click "Download CUDA"** — it fetches NVIDIA's official build components (~0.5 GB) and assembles a toolkit for you. Or point it at a conda-env / custom CUDA path. (Manual command guide kept for other setups.)
|
|
100
|
-
- **Honest updates** — checks the real upstream release/commit and flags *Update available* / *Rebuild available* (never a fake "you're on the latest"), with per-engine auto-update
|
|
101
|
-
- Auto-provision a GPU-matched `llama-server` build on first run (CUDA / ROCm / Metal / SYCL / Vulkan, CPU fallback)
|
|
102
|
-
- One engine dropdown, grouped — pick the engine; a version dropdown appears when you have more than one build
|
|
103
|
-
|
|
104
|
-
**Models**
|
|
105
|
-
- Use your own local GGUF / safetensors, or browse & download from Hugging Face in-app
|
|
106
|
-
- Per-model load profiles (context, GPU offload, KV-cache quant, flash-attn, draft models)
|
|
107
|
-
- **Configurable multi-GPU per model** — tensor split / main-GPU pick (llama.cpp), tensor-parallel (vLLM)
|
|
108
|
-
- Auto-tune on load with a **VRAM-fit verdict before you load**
|
|
109
|
-
- Measured tokens/sec per model — never faked — live while you chat and remembered
|
|
110
|
-
|
|
111
|
-
**Chat**
|
|
112
|
-
- Streaming chat with live t/s, TTFT, context meter, and reasoning/thinking support
|
|
113
|
-
- **Persona picker** (8 styles, including Research) + per-chat system prompt and full sampling controls
|
|
114
|
-
- **Inline Unicode charts** when a comparison or trend genuinely warrants a visual
|
|
115
|
-
- Image and document attachments — including **send an image or file with no text**
|
|
116
|
-
|
|
117
|
-
**Agentic tools**
|
|
118
|
-
- **Built-in tools** — `web_search` (Tavily, advanced depth), `fetch_url`, and sandboxed `run_code`
|
|
119
|
-
- **MCP server support** — connect any MCP server (stdio or SSE) from the Customize screen; tools appear automatically in every chat
|
|
120
|
-
- **Research persona** — forces multi-step web search before every reply, cites sources inline
|
|
121
|
-
- Agentic tool loop with live tool-call cards (pending → done/error) streamed in the UI
|
|
122
|
-
|
|
123
|
-
**Integrations**
|
|
124
|
-
- OpenAI- **and** Anthropic-compatible APIs — run Claude Code on your own GPU
|
|
125
|
-
- **Smart gateway** — name a model in any request and it auto-loads; keep up to 4 models hot (LRU)
|
|
126
|
-
- **Embeddings** (`/v1/embeddings`) and **structured output** (GBNF grammar / JSON-constrained)
|
|
127
|
-
- LAN sharing with optional API-key auth
|
|
128
|
-
- **Share the GPU with ComfyUI** — auto-unload the model while ComfyUI renders, reload when it's done
|
|
129
|
-
|
|
130
|
-
**Platform**
|
|
131
|
-
- ~0.3 MB npm package on Node — no Electron, no Chromium, no Python
|
|
132
|
-
- Offline-first, no account, no telemetry
|
|
91
|
+
Same GPU (RTX 5070 Ti 16 GB), same model, same 200K context — measured generation speed.
|
|
92
|
+
**TurboLLM is faster than LM Studio on the very same official llama.cpp, and faster still when you
|
|
93
|
+
run a community fork LM Studio can't.**
|
|
133
94
|
|
|
134
|
-
|
|
95
|
+
**① On official llama.cpp, TurboLLM is faster.** It auto-provisions a GPU-native engine build (CUDA
|
|
96
|
+
13 for Blackwell here) and tunes expert-offload to the layer, so at the *same* KV-cache quant it
|
|
97
|
+
beats LM Studio's bundled runtime:
|
|
135
98
|
|
|
136
|
-
|
|
99
|
+
| Qwen3.6-35B-A3B · 200K | TurboLLM | LM Studio | Speed-up |
|
|
100
|
+
|---|:---:|:---:|:---:|
|
|
101
|
+
| official llama.cpp — `q4_0` | **74.7 t/s** | 61.0 t/s | **1.2×** |
|
|
102
|
+
| official llama.cpp — `q8_0` | **72.3 t/s** | ~66 t/s\* | **1.1×** |
|
|
137
103
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
104
|
+
**② Run a faster engine and pull far ahead.** Because TurboLLM runs *any* engine, you can drop in
|
|
105
|
+
the **TurboQuant** fork — a llama.cpp fork with a low-bit `turbo4` KV cache that LM Studio simply
|
|
106
|
+
can't load — in one click. On a large-KV model it delivers `q8_0`-level quality at **more than
|
|
107
|
+
double the speed**:
|
|
141
108
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
```
|
|
109
|
+
| Qwen3.6-27B · 200K · matched quality | TurboLLM + TurboQuant | LM Studio | Speed-up |
|
|
110
|
+
|---|:---:|:---:|:---:|
|
|
111
|
+
| `turbo4` vs `q8_0` | **24.6 t/s** | 11.4 t/s | **2.2×** |
|
|
146
112
|
|
|
147
|
-
**
|
|
148
|
-
|
|
149
|
-
1. Detects your GPU and **downloads a matching `llama-server` build** (CUDA for NVIDIA, ROCm
|
|
150
|
-
for AMD, Metal for Apple, SYCL for Intel, Vulkan otherwise — with a CPU fallback).
|
|
151
|
-
2. Starts on <http://127.0.0.1:6996> and opens your browser.
|
|
152
|
-
3. Drops you on the **Chat** screen, ready to load a model.
|
|
153
|
-
|
|
154
|
-
Then open **Models**, download or pick a GGUF, click **Load**, and start chatting. Stop the
|
|
155
|
-
daemon any time with **Ctrl+C**.
|
|
156
|
-
|
|
157
|
-
<p align="center">
|
|
158
|
-
<img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/engines.png" width="860" alt="TurboLLM Engines screen: hardware-aware recommendation, a unified engine catalog (llama.cpp, KoboldCpp, llamafile, vLLM, forks), and build-from-source" />
|
|
159
|
-
</p>
|
|
113
|
+
Same run, **1.7× faster prefill** too (1288 vs 757 tok/s).
|
|
160
114
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
- models.png : the Models › Library with measured t/s per model
|
|
165
|
-
- tuning.png : the model load-params panel (ctx/ngl/NextN/VRAM verdict)
|
|
166
|
-
-->
|
|
115
|
+
<sub>\*LM Studio's `q8_0` mildly spilled VRAM at its best offload. A low-bit KV cache helps most
|
|
116
|
+
when the cache is large; TurboLLM's auto-tuner and on-screen measured t/s pick the fastest engine +
|
|
117
|
+
config for each model, so you don't have to.</sub>
|
|
167
118
|
|
|
168
119
|
---
|
|
169
120
|
|
|
170
|
-
##
|
|
171
|
-
|
|
172
|
-
No other local-LLM app lets you run **whatever inference engine you want**. TurboLLM treats
|
|
173
|
-
the engine as a swappable component.
|
|
174
|
-
|
|
175
|
-
**Add a custom engine** (Engines screen → **Add engine**):
|
|
176
|
-
|
|
177
|
-
1. Compile or download any `llama-server`-compatible binary — stock
|
|
178
|
-
[llama.cpp](https://github.com/ggml-org/llama.cpp), a community fork, or your own build.
|
|
179
|
-
2. Point TurboLLM at the **folder** — it scans for the `llama-server` binary, runs a
|
|
180
|
-
**capability probe**, and learns exactly which flags and features that build supports.
|
|
181
|
-
*(Optional: paste the source repo URL so TurboLLM flags when a newer build ships.)*
|
|
182
|
-
3. Activate it. The load-parameter UI **adapts to that engine** — features the build doesn't
|
|
183
|
-
support are hidden; ones it adds (e.g. low-bit KV cache, NextN) light up.
|
|
184
|
-
|
|
185
|
-
No prebuilt for your OS? The **build-from-source guide** checks your toolchain (git / CMake /
|
|
186
|
-
CUDA / MSVC), hands you the exact build commands, then drops you into the folder scan above.
|
|
187
|
-
|
|
188
|
-
**Auto-provisioned default.** Don't want to fetch anything? On first run TurboLLM downloads
|
|
189
|
-
the right upstream prebuilt for your GPU automatically — and a **backend picker** lets you
|
|
190
|
-
switch between CUDA / ROCm / Metal / SYCL / Vulkan / CPU at any time (it downloads the variant
|
|
191
|
-
you choose, LM Studio-style).
|
|
192
|
-
|
|
193
|
-
**Engine types.** **llama.cpp / GGUF**, **KoboldCpp** and **llamafile** (GGUF, every OS),
|
|
194
|
-
**MLX** (macOS), and **vLLM** (Linux + NVIDIA) are all first-class engine kinds — install from
|
|
195
|
-
the curated catalog, pick the right one per model, and switch from a single dropdown.
|
|
121
|
+
## Features
|
|
196
122
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
the
|
|
123
|
+
The headline — **[running any engine, including community forks](#-bring-any-engine--the-headline-feature)** —
|
|
124
|
+
has its own section below. Everything else is grouped here; each summary is the gist, expand for
|
|
125
|
+
the detail:
|
|
200
126
|
|
|
201
|
-
>
|
|
202
|
-
|
|
203
|
-
> on your part beyond producing the binary (and often not even that).
|
|
127
|
+
<details>
|
|
128
|
+
<summary><strong>📦 Models — bring your own, or browse Hugging Face</strong></summary>
|
|
204
129
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
## Models
|
|
130
|
+
<br/>
|
|
208
131
|
|
|
209
132
|
- **Use the folders you already have.** Point TurboLLM at any directory of GGUFs — your
|
|
210
133
|
existing LM Studio / Ollama / manual downloads — **no re-downloading.** It parses GGUF
|
|
@@ -213,62 +136,66 @@ the UI when something fails to load.
|
|
|
213
136
|
and download with **resume + SHA-256 verification**. Gated models (Llama, Gemma) work via
|
|
214
137
|
your own HF token, which **never leaves your machine**.
|
|
215
138
|
- **Import from any URL** — not just Hugging Face. Paste a direct `.gguf` link (model-author
|
|
216
|
-
sites, mirrors, private servers); it disk-space-checks and downloads through the same
|
|
217
|
-
manager.
|
|
139
|
+
sites, mirrors, private servers); it disk-space-checks and downloads through the same manager.
|
|
218
140
|
- **Quant recommendation per GPU** and a **VRAM-fit verdict** so you pick a quant that
|
|
219
141
|
actually fits before you commit.
|
|
220
|
-
- **Primary download folder**, real-time **measured t/s per model**, and **delete-from-disk
|
|
221
|
-
— full library management.
|
|
142
|
+
- **Primary download folder**, real-time **measured t/s per model**, and **delete-from-disk**.
|
|
222
143
|
|
|
223
|
-
|
|
144
|
+
</details>
|
|
224
145
|
|
|
225
|
-
|
|
146
|
+
<details>
|
|
147
|
+
<summary><strong>⚡ Auto-tuning & performance</strong></summary>
|
|
148
|
+
|
|
149
|
+
<br/>
|
|
226
150
|
|
|
227
151
|
- **Auto-benchmark on load** derives fast defaults for your exact GPU.
|
|
228
152
|
- **Recommended sampling from the model card** — auto-tune reads the model's Hugging Face card
|
|
229
153
|
(falling back to the original model behind a requant) and prefills the author's recommended
|
|
230
|
-
`temperature / top_k / top_p / min_p
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
and **speculative decoding (NextN / MTP / draft)**.
|
|
154
|
+
`temperature / top_k / top_p / min_p`. No recommendation → your sampling is left untouched.
|
|
155
|
+
- **Real measured tokens/sec** in the model list — **live** while generating, **last-session**
|
|
156
|
+
when idle (never a synthetic estimate).
|
|
157
|
+
- **Full load-parameter UI**, a superset of what other tools expose: context length, GPU offload
|
|
158
|
+
(`-ngl`), **MoE CPU-offload (`--n-cpu-moe`)**, parallel slots, **KV-cache quant type** (incl.
|
|
159
|
+
low-bit on supporting forks), CPU threads, flash attention, and **speculative decoding (NextN /
|
|
160
|
+
MTP / draft)**.
|
|
238
161
|
- **Fast by default:** flash attention on, NextN self-speculative decoding on for models that
|
|
239
|
-
carry a draft head, threads auto —
|
|
240
|
-
engine actually accepts.
|
|
162
|
+
carry a draft head, threads auto — safely gated to what your engine actually accepts.
|
|
241
163
|
- **Multi-GPU, per model** — split a model across cards (layer/row split + main-GPU pick on
|
|
242
|
-
llama.cpp, tensor-parallel on vLLM). Defaults are no-ops, so single-GPU rigs are untouched
|
|
243
|
-
the VRAM verdict budgets across the GPUs the split actually uses.
|
|
164
|
+
llama.cpp, tensor-parallel on vLLM). Defaults are no-ops, so single-GPU rigs are untouched.
|
|
244
165
|
- **Saved per-model profiles** — tune once, and it loads that way every time.
|
|
245
166
|
|
|
246
|
-
|
|
167
|
+
</details>
|
|
247
168
|
|
|
248
|
-
|
|
169
|
+
<details>
|
|
170
|
+
<summary><strong>💬 Chat & agentic tools — a genuinely good UI, not an afterthought</strong></summary>
|
|
249
171
|
|
|
250
|
-
|
|
172
|
+
<br/>
|
|
251
173
|
|
|
252
174
|
- **Streaming** with a **stop** button, **live tokens/sec**, **prompt-processing %** and
|
|
253
175
|
**prefill t/s**, **time-to-first-token**, **total time**, exact **token counts**, and a
|
|
254
176
|
**context-usage meter** (filled / max) on every reply.
|
|
255
|
-
- **Thinking control** — toggle reasoning **off**
|
|
256
|
-
|
|
177
|
+
- **Thinking control** — toggle reasoning **off** for a direct answer, or leave it **on** with
|
|
178
|
+
collapsible, timed "thought for N s" blocks.
|
|
257
179
|
- **Markdown + syntax-highlighted code** with one-click copy — plus **inline Unicode charts**
|
|
258
180
|
the model draws when a comparison, trend, or hierarchy is genuinely worth a visual.
|
|
259
181
|
- **Personas** — pick a style (Concise · Detailed · Blunt · Formal · Tutor · Creative · Default)
|
|
260
182
|
per conversation, no prompt-wrangling required.
|
|
261
183
|
- **Edit, regenerate, delete, copy** any message; **persistent, searchable conversations**
|
|
262
184
|
with rename, delete, and **auto-generated titles**.
|
|
263
|
-
- **Per-chat system prompt** and **per-chat sampling** overrides —
|
|
264
|
-
|
|
265
|
-
- **Image input** for vision models
|
|
266
|
-
|
|
267
|
-
|
|
185
|
+
- **Per-chat system prompt** and **per-chat sampling** overrides — temperature, top-p/k, min-p,
|
|
186
|
+
repeat/presence/frequency penalties, and **stop strings**.
|
|
187
|
+
- **Image input** for vision models, and **TurboLLM Expert** — a built-in assistant that knows
|
|
188
|
+
the app and your hardware for onboarding and troubleshooting without leaving the UI.
|
|
189
|
+
- **Agentic tools** — built-in `web_search` (Tavily), `fetch_url`, and sandboxed `run_code`, plus
|
|
190
|
+
**MCP server support** (stdio / SSE) so any MCP server's tools appear in every chat. A **Research**
|
|
191
|
+
persona forces multi-step web search and cites sources inline.
|
|
268
192
|
|
|
269
|
-
|
|
193
|
+
</details>
|
|
270
194
|
|
|
271
|
-
|
|
195
|
+
<details>
|
|
196
|
+
<summary><strong>🔌 APIs & integrations — OpenAI + Anthropic, plus a model-loading gateway</strong></summary>
|
|
197
|
+
|
|
198
|
+
<br/>
|
|
272
199
|
|
|
273
200
|
With a model loaded, TurboLLM serves two compatible APIs on the same port:
|
|
274
201
|
|
|
@@ -282,20 +209,110 @@ curl http://127.0.0.1:6996/v1/chat/completions \
|
|
|
282
209
|
- **OpenAI-compatible** `/v1/chat/completions`, `/v1/embeddings`, … — point any OpenAI client
|
|
283
210
|
or tool at it. Embedding models are auto-detected and pooled separately, so a RAG pipeline and
|
|
284
211
|
a chat model can stay loaded side by side.
|
|
285
|
-
- **Anthropic-compatible** `/v1/messages` — including **tool use and streaming** — which
|
|
286
|
-
|
|
287
|
-
- **Structured output** — constrain any response to a **GBNF grammar** (or JSON shape)
|
|
288
|
-
reliable machine-readable results.
|
|
212
|
+
- **Anthropic-compatible** `/v1/messages` — including **tool use and streaming** — which powers
|
|
213
|
+
Claude Code below. No other local host offers this.
|
|
214
|
+
- **Structured output** — constrain any response to a **GBNF grammar** (or JSON shape).
|
|
289
215
|
- **API-key auth** you can require when sharing over a LAN (Settings → Network).
|
|
290
216
|
|
|
291
|
-
|
|
217
|
+
**The gateway loads models for you.** Most local hosts make you load a model first, then call it.
|
|
218
|
+
TurboLLM's gateway reads the `model` field of any incoming request, **fuzzy-matches it to your
|
|
219
|
+
library, and loads it on the fly** if it isn't already running — then keeps up to **four models
|
|
220
|
+
hot** in an LRU pool so the next switch is instant. An agent (or Claude Code) that hops between a
|
|
221
|
+
coding model, a vision model, and an embedder just names each one and it works — no pre-wiring.
|
|
222
|
+
|
|
223
|
+
</details>
|
|
292
224
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
225
|
+
<details>
|
|
226
|
+
<summary><strong>🎨 Share the GPU with ComfyUI</strong></summary>
|
|
227
|
+
|
|
228
|
+
<br/>
|
|
229
|
+
|
|
230
|
+
If you run **ComfyUI** on the same GPU, an LLM holding VRAM while ComfyUI renders means both
|
|
231
|
+
fight for memory (and one usually OOMs). TurboLLM can hand the GPU over automatically:
|
|
232
|
+
|
|
233
|
+
- The instant ComfyUI starts a render, TurboLLM **unloads its model and pauses new loads**.
|
|
234
|
+
- When ComfyUI's queue drains, TurboLLM **reloads the exact model it unloaded**.
|
|
235
|
+
|
|
236
|
+
It's **push-based, not polling** — ComfyUI signals TurboLLM the moment a job starts/ends, so the
|
|
237
|
+
handoff is immediate and deterministic (the model is gone *before* ComfyUI executes).
|
|
238
|
+
|
|
239
|
+
**One-time setup** (Settings → ComfyUI): turn on **Pause for ComfyUI**, enter your ComfyUI folder
|
|
240
|
+
(the one containing `custom_nodes`), click **Install gate** (it writes a small custom node wired to
|
|
241
|
+
this daemon), then **restart ComfyUI** once. The panel shows a live indicator (rendering / idle /
|
|
242
|
+
connected); **Remove** undoes it.
|
|
243
|
+
|
|
244
|
+
</details>
|
|
245
|
+
|
|
246
|
+
<details>
|
|
247
|
+
<summary><strong>🪶 Platform — tiny, offline, private</strong></summary>
|
|
248
|
+
|
|
249
|
+
<br/>
|
|
250
|
+
|
|
251
|
+
- A **~0.3 MB npm package** on Node — no Electron, no bundled Chromium, no Python.
|
|
252
|
+
- **Offline-first** — no account, no backend, no internet, no telemetry.
|
|
253
|
+
- **Windows · macOS · Linux**, with a CPU fallback when there's no GPU.
|
|
254
|
+
|
|
255
|
+
</details>
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Quick start
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# run without installing (recommended for first try)
|
|
263
|
+
npx turbollm
|
|
264
|
+
|
|
265
|
+
# or install globally
|
|
266
|
+
npm install -g turbollm
|
|
267
|
+
turbollm
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**On first run** the daemon:
|
|
271
|
+
|
|
272
|
+
1. Detects your GPU and **downloads a matching `llama-server` build** (CUDA for NVIDIA, ROCm
|
|
273
|
+
for AMD, Metal for Apple, SYCL for Intel, Vulkan otherwise — with a CPU fallback).
|
|
274
|
+
2. Starts on <http://127.0.0.1:6996> and opens your browser.
|
|
275
|
+
3. Drops you on the **Chat** screen, ready to load a model.
|
|
276
|
+
|
|
277
|
+
Then open **Models**, download or pick a GGUF, click **Load**, and start chatting. Stop the
|
|
278
|
+
daemon any time with **Ctrl+C**.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## ⭐ Bring any engine — the headline feature
|
|
283
|
+
|
|
284
|
+
No other local-LLM app lets you run **whatever inference engine you want**. TurboLLM treats
|
|
285
|
+
the engine as a swappable component.
|
|
286
|
+
|
|
287
|
+
**Add a custom engine** (Engines screen → **Add engine**):
|
|
288
|
+
|
|
289
|
+
1. Compile or download any `llama-server`-compatible binary — stock
|
|
290
|
+
[llama.cpp](https://github.com/ggml-org/llama.cpp), a community fork, or your own build.
|
|
291
|
+
2. Point TurboLLM at the **folder** — it scans for the `llama-server` binary, runs a
|
|
292
|
+
**capability probe**, and learns exactly which flags and features that build supports.
|
|
293
|
+
*(Optional: paste the source repo URL so TurboLLM flags when a newer build ships.)*
|
|
294
|
+
3. Activate it. The load-parameter UI **adapts to that engine** — features the build doesn't
|
|
295
|
+
support are hidden; ones it adds (e.g. low-bit KV cache, NextN) light up.
|
|
296
|
+
|
|
297
|
+
No prebuilt for your OS? The **build-from-source guide** checks your toolchain (git / CMake /
|
|
298
|
+
CUDA / MSVC), hands you the exact build commands, then drops you into the folder scan above.
|
|
299
|
+
|
|
300
|
+
**Auto-provisioned default.** Don't want to fetch anything? On first run TurboLLM downloads
|
|
301
|
+
the right upstream prebuilt for your GPU automatically — and a **backend picker** lets you
|
|
302
|
+
switch between CUDA / ROCm / Metal / SYCL / Vulkan / CPU at any time (it downloads the variant
|
|
303
|
+
you choose, LM Studio-style).
|
|
304
|
+
|
|
305
|
+
**Engine types.** **llama.cpp / GGUF**, **KoboldCpp** and **llamafile** (GGUF, every OS),
|
|
306
|
+
**MLX** (macOS), and **vLLM** (Linux + NVIDIA) are all first-class engine kinds — install from
|
|
307
|
+
the curated catalog, pick the right one per model, and switch from a single dropdown.
|
|
308
|
+
|
|
309
|
+
**Fully supervised.** Every engine runs under a real state machine: health-gated readiness,
|
|
310
|
+
graceful stop, an **idle auto-stop** watchdog, and **live logs + clear error surfacing** in
|
|
311
|
+
the UI when something fails to load.
|
|
312
|
+
|
|
313
|
+
> Why it matters: fork-exclusive features — **speculative decoding (NextN / MTP / draft)**,
|
|
314
|
+
> low-bit KV cache, new quant formats — are usable on day 0, with **zero compiler knowledge**
|
|
315
|
+
> on your part beyond producing the binary (and often not even that).
|
|
299
316
|
|
|
300
317
|
---
|
|
301
318
|
|
|
@@ -306,11 +323,14 @@ Code](https://www.npmjs.com/package/@anthropic-ai/claude-code) can run against w
|
|
|
306
323
|
you've loaded — no cloud key, fully offline. One command wires it up:
|
|
307
324
|
|
|
308
325
|
```bash
|
|
309
|
-
turbollm launch claude
|
|
326
|
+
turbollm launch claude # auto-loads a model if none is running, then opens Claude Code
|
|
327
|
+
turbollm launch claude --model qwen3-8b # load a specific model first, then launch
|
|
310
328
|
```
|
|
311
329
|
|
|
312
330
|
It sets Claude Code's `ANTHROPIC_BASE_URL` / `ANTHROPIC_MODEL` at TurboLLM and execs `claude`;
|
|
313
|
-
extra args are forwarded. If
|
|
331
|
+
extra args are forwarded. If no model is loaded it auto-loads your last-used one (or the first
|
|
332
|
+
in your library); `--model` picks a specific one by key or name. If `claude` isn't installed,
|
|
333
|
+
it tells you how. The in-app
|
|
314
334
|
**Developer** screen also shows copy-paste env snippets for any OpenAI- or Anthropic-compatible
|
|
315
335
|
tool (Open WebUI, Kilo Code, opencode, …).
|
|
316
336
|
|
|
@@ -329,29 +349,6 @@ Turn on **Require API key** in Settings → Network when you expose it.
|
|
|
329
349
|
|
|
330
350
|
---
|
|
331
351
|
|
|
332
|
-
## Share the GPU with ComfyUI
|
|
333
|
-
|
|
334
|
-
If you run **ComfyUI** on the same GPU, an LLM holding VRAM while ComfyUI renders means both
|
|
335
|
-
fight for memory (and one usually OOMs). TurboLLM can hand the GPU over automatically:
|
|
336
|
-
|
|
337
|
-
- The instant ComfyUI starts a render, TurboLLM **unloads its model and pauses new loads**.
|
|
338
|
-
- When ComfyUI's queue drains, TurboLLM **reloads the exact model it unloaded**.
|
|
339
|
-
|
|
340
|
-
It's **push-based, not polling** — ComfyUI signals TurboLLM the moment a job starts/ends, so
|
|
341
|
-
the handoff is immediate and deterministic (the model is gone *before* ComfyUI executes).
|
|
342
|
-
|
|
343
|
-
**One-time setup** (Settings → ComfyUI):
|
|
344
|
-
|
|
345
|
-
1. Turn on **Pause for ComfyUI** and **Save**.
|
|
346
|
-
2. Enter your ComfyUI folder (the one containing `custom_nodes`) and click **Install gate**.
|
|
347
|
-
TurboLLM writes a small custom node into ComfyUI, wired to this daemon.
|
|
348
|
-
3. **Restart ComfyUI** once so it loads the node.
|
|
349
|
-
|
|
350
|
-
The Settings panel shows a live indicator (rendering / idle / connected). To undo it, click
|
|
351
|
-
**Remove** in the same panel.
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
352
|
## Command-line reference
|
|
356
353
|
|
|
357
354
|
```bash
|
|
@@ -359,7 +356,9 @@ turbollm # start on :6996, open browser
|
|
|
359
356
|
turbollm --port 9000 # listen on a specific port
|
|
360
357
|
turbollm --no-open # start without opening a browser
|
|
361
358
|
turbollm --addr 0.0.0.0:6996 # bind all interfaces (LAN sharing)
|
|
362
|
-
turbollm
|
|
359
|
+
turbollm --stop # stop a running daemon (any terminal)
|
|
360
|
+
turbollm launch claude # start Claude Code (auto-loads a model if none is running)
|
|
361
|
+
turbollm launch claude --model qwen3-8b # load a specific model, then launch
|
|
363
362
|
```
|
|
364
363
|
|
|
365
364
|
| Flag | Description |
|
|
@@ -368,8 +367,13 @@ turbollm launch claude # start Claude Code against the loaded model
|
|
|
368
367
|
| `--addr <host:port>` | Full host:port override, e.g. `0.0.0.0:6996` for LAN sharing |
|
|
369
368
|
| `--no-open` | Start without opening a browser window |
|
|
370
369
|
| `--config <file>` | Path to a custom config file |
|
|
370
|
+
| `--stop` | Stop a running TurboLLM daemon (reads `~/.turbollm/daemon.pid`) and exit |
|
|
371
371
|
| `--help`, `-h` | Show usage and exit |
|
|
372
372
|
|
|
373
|
+
`turbollm launch claude` also accepts `--model <key|name>` to load a specific model before
|
|
374
|
+
launching; without it, an already-loaded model is used, or the last-used / first model is
|
|
375
|
+
auto-loaded.
|
|
376
|
+
|
|
373
377
|
---
|
|
374
378
|
|
|
375
379
|
## Configuration & data
|
|
@@ -452,43 +456,6 @@ Frontend hot-reload: `cd web && npm run dev` (proxies `/api` and `/v1` to the da
|
|
|
452
456
|
**Stack:** Node ≥22 · TypeScript · Hono · `node:sqlite` · tsup — and a React 19 + Tailwind v4 +
|
|
453
457
|
shadcn/ui frontend. One TypeScript codebase, shipped as an npm package.
|
|
454
458
|
|
|
455
|
-
```
|
|
456
|
-
turbollm/
|
|
457
|
-
bin/turbollm.mjs launcher shim (Node guard) -> dist/cli.js
|
|
458
|
-
src/
|
|
459
|
-
cli.ts entrypoint: wiring + graceful shutdown
|
|
460
|
-
server.ts Hono app: CORS, API, gateway, embedded SPA
|
|
461
|
-
engines/ provisioning, probe, registry, lifecycle state machine
|
|
462
|
-
api/routes.ts /api/v1/* handlers
|
|
463
|
-
gateway/ /v1/* OpenAI + Anthropic gateway
|
|
464
|
-
models/ · chat/ · hf/ · bench/ · downloads/
|
|
465
|
-
web/ React + TS + Tailwind + shadcn frontend (own package.json)
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
---
|
|
469
|
-
|
|
470
|
-
## Screenshots
|
|
471
|
-
|
|
472
|
-
The unified engine catalog: a hardware-aware recommendation up top, then every supported engine (llama.cpp, KoboldCpp, llamafile, vLLM, and forks) with build-from-source for the rest.
|
|
473
|
-
|
|
474
|
-
<p align="center"><img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/engines.png" width="860" alt="TurboLLM Engines screen: hardware-aware recommendation and a unified engine catalog" /></p>
|
|
475
|
-
|
|
476
|
-
Chat mid-conversation: pinned model selector, a live context meter, streaming reply with running token count and tokens/sec.
|
|
477
|
-
|
|
478
|
-
<p align="center"><img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/chat.png" width="860" alt="TurboLLM Chat screen: model selector, live context meter, streaming reply with tokens/sec" /></p>
|
|
479
|
-
|
|
480
|
-
The Models library: GGUF and MLX models discovered in your folders, each with measured tokens/sec and a VRAM-fit verdict, grouped by quant.
|
|
481
|
-
|
|
482
|
-
<p align="center"><img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/models.png" width="860" alt="TurboLLM Models library: discovered models with measured tokens/sec and quant grouping" /></p>
|
|
483
|
-
|
|
484
|
-
Per-model tuning: context length, GPU layers, KV-cache type, flash attention, and speculative decoding, all with a live VRAM-fit verdict.
|
|
485
|
-
|
|
486
|
-
<p align="center"><img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/tuning.png" width="860" alt="TurboLLM model tuning panel: context, GPU layers, KV-cache type, flash attention, VRAM-fit verdict" /></p>
|
|
487
|
-
|
|
488
|
-
Customize: pick a web-search provider and wire up MCP tool servers the model can call during conversations.
|
|
489
|
-
|
|
490
|
-
<p align="center"><img src="https://raw.githubusercontent.com/mohitsoni48/Turbo-LLM/main/assets/screenshots/customize.png" width="860" alt="TurboLLM Customize screen: web-search provider and MCP tool servers" /></p>
|
|
491
|
-
|
|
492
459
|
---
|
|
493
460
|
|
|
494
461
|
## License
|