Skip to content

Latest commit

 

History

175 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Run Qwen3.8-27B (NVFP4) on a 5090 !

Frontier-class coding AI, running entirely on your own hardware.

No cloud · no subscription · no rate limits · nothing you type ever leaves your PC

One click on Windows 11, one command on Linux. On Windows you unzip, double-click and press Install, and the app sets up everything itself; on Linux the scripts run directly. Either way you can chat with the model when it finishes, and you can put a real coding agent on top of it: the DeepSeek Harness in your browser, which came first of the four we benchmarked, or Claude Code if you would rather use the client you already know. Both read and write your files and run commands — answered by the GPU in your own machine.

License Windows 11 Linux RTX 5090 Model Engine


Download ZIP

Unzip → double-click Start Qwen 5090.cmd → click Install. That's it.

Running Linux instead? There is no installer to download and no WSL — the scripts run directly on your box. Start here.

The Qwen 5090 control panel: status pills across the top, a model picker, and one Install / Repair button

The control panel. One button installs WSL2, Ubuntu, the AI engine and the model.


Windows  ·  Linux  ·  Coding agents  ·  How good is it?  ·  Which agent wins  ·  Requirements  ·  Power users  ·  Troubleshooting


The model is Qwen3.8-27B, and it is not a toy: on real-world bug fixing it scores 61.7 against Claude Opus 4.6 Max's 53.4 — see How good is it? for the full table and the honest caveats.

Get started on Windows

  1. Download the ZIP and unzip it anywhere (Desktop is fine). Windows may flag the download: right-click the ZIP → Properties → tick Unblock before unzipping, and choose "More info → Run anyway" if SmartScreen asks.
  2. Double-click Start Qwen 5090.cmd, then click Install / Repair and approve the admin prompt. Everything is automatic: WSL2, Ubuntu, the AI engine, and the ~22 GB model download (15–40 min total). If Windows asks to reboot once, the app re-opens by itself afterwards — just click Install again to resume.
  3. Click Start server on the Server tab, wait for the green light (a minute or two), and talk to your AI on the Chat tab.

You also get a Qwen 5090 desktop shortcut, and an OpenAI-compatible API at http://localhost:8000/v1 that works with any AI app (Open WebUI, Continue, Cline, ...) — API key can be anything.

Get started on Linux

The Windows path above builds a WSL2 Ubuntu box, because vLLM only runs on Linux. If your RTX 5090 is already in a Linux machine, none of that applies: there is nothing to download and nothing to install first. The scripts under app/scripts/ are plain bash and run directly, and this is the simpler of the two paths, not a lesser one:

git clone https://github.com/Ark0N/Qwen5090.git
cd Qwen5090
sudo apt-get install -y build-essential      # Triton needs a C compiler
bash app/scripts/setup-linux.sh              # venv + vLLM + model (~20 GB)
bash app/scripts/serve.sh                    # http://localhost:8000/v1

Or, with the NInfer backend installed, one command serves the maintainer's production configuration — full 252,928-token window, MTP-3, shared on the LAN/tailnet, identical to what the Windows box runs:

bash app/scripts/serve-full.sh               # see app/docs/LINUX.md

Then put an agent on top of it. The DeepSeek Harness is the one to reach for — it needs no bridge process and discovers the model and context window by itself:

sudo apt-get install -y nodejs                    # 26.04 ships 22.22.1
bash app/scripts/deepseek-harness.sh install
bash app/scripts/deepseek-harness.sh start        # http://127.0.0.1:3080

Or Claude Code, if that is the client you know:

bash app/scripts/claude-code.sh install && qwen-claude

Want it back after a reboot? bash app/scripts/install-service.sh install writes a systemd user unit (no root needed), and bash app/scripts/deepseek-harness.sh service does the same for the harness.

Want the GUI's status pills? There is no WPF on Linux, but there is a small local web dashboard — model and backend, GPU utilisation, power against the limit, temperature, VRAM and what is holding it, CPU per core, RAM and swap:

bash app/scripts/dashboard.sh                # http://127.0.0.1:8600

Read-only, standard library only, nothing to install.

No launcher, no WSL, and no GUI beyond that dashboard. Verified on Ubuntu 26.04 with an RTX 5090. Full walkthrough — including the 262K-context + MTP configuration that runs at ~139 tok/s — in app/docs/LINUX.md.

What you need

💻 OS Windows 11 (install) or native Linux (install) — both fully supported
🎮 GPU NVIDIA RTX 5090 (other RTX 50-series with ≥24 GB also work)
🔧 Driver NVIDIA 570 or newer (get the latest)
🧠 RAM 16 GB minimum, 32 GB recommended (the installer sizes WSL's share for you)
💾 Disk ~45 GB free (model ~22 GB, Python + CUDA libraries the rest)

Use it as a coding agent

This is what the machine is for. Two agents work against the server, you can have both installed at once, and neither touches the serving path — they are ordinary API clients.

🥇 DeepSeek Harness Claude Code
Where you work a browser tab your terminal
Reaches the server directly — it speaks OpenAI natively through a small bridge
Our benchmark 8 / 12 — best of four 7 / 12
Brings subagents and its own tool set the client you already know
Start it DeepSeek Harness tab → Open harness Claude Code tab → Open Claude Code

Pick the DeepSeek Harness unless you specifically want Claude Code. It won the head-to-head on this model, it is the simpler of the two to run, and there is no bridge process to babysit. We measured four harnesses on the same model and the same tasks; the numbers, the per-agent effort settings and the honest caveats are in Which coding agent is best on your 5090?

The DeepSeek Harness (recommended)

DeepSeek Harness (dsh) is DeepSeek's own open-source agent runtime, and it speaks the OpenAI API natively — so it needs no bridge at all, just a provider route. You work in a browser rather than a terminal, and it brings subagents and its own tool set.

On the 5090 PC it is one button: start the model server, open the app's DeepSeek Harness tab, and click Open harness — it installs Node.js and the harness on first use (each with its own yes/no), starts it, and opens the Web UI in your browser.

DeepSeek Harness tab: Open harness, Install harness, Re-read server and Doctor buttons, with the HARNESS pill green on port 3080

The same thing from a shell — including a machine that is not the 5090:

bash app/scripts/deepseek-harness.sh install
QWEN_URL=http://<5090-ip>:8000 bash app/scripts/deepseek-harness.sh start

That serves its Web UI on http://127.0.0.1:3080. service keeps it running across reboots and share publishes it to your tailnet over HTTPS. Details, and the five settings that decide whether the requests are accepted at all, in app/docs/DEEPSEEK-HARNESS.md.

It follows whatever is serving on port 8000 — vLLM or NInfer — without being told which: config reads that off the server and adjusts the route to match. On NInfer it also probes the real context window, because that backend does not publish one, and offers an off thinking tier that the vLLM path does not have. If your ~/.qwen5090/server.env still carries MAX_SEQS=1 from the vLLM path, raise it to 2 there: the harness runs subagents, and at 1 they queue behind each other.

Expect a capable local assistant rather than a frontier one: well-scoped edits, refactors and file spelunking go fine; long multi-step planning is weaker, and it thinks for a few seconds before each reply (QWEN_EFFORT=medium trades some of that back). Full guide, settings and troubleshooting: app/docs/DEEPSEEK-HARNESS.md.

It has also tuned this very stack. Pointed at a copy of this repo, the harness built app/optimization/ — an autonomous loop that benchmarks and tunes its own settings and the live server's flags on the one GPU they share, with health probes, quiet-window swaps and automatic rollback. Its first findings (a reasoning-effort sweet spot, a serving flag promoted on a 16/16 run, and two impossible configs rejected safely) are written up in app/docs/SELF-OPTIMIZATION.md.

Claude Code

Point Claude Code at this server and it reads and writes your files, runs commands and edits code exactly as it normally does — with no Anthropic account, nothing billed, and nothing leaving your network.

Claude Code speaks the Anthropic API; vLLM serves the OpenAI API and has no /v1/messages endpoint at all. Neither side bends, so a small LiteLLM process sits between them and translates in both directions — streaming, tool calls and token counting included:

claude ──Anthropic /v1/messages──► bridge :4000 ──OpenAI /v1──► vLLM :8000
                                  (LiteLLM)                     (your 5090)

The bridge installs itself on first run and reads /v1/models to configure itself, so it follows whichever checkpoint you are serving — nothing to keep in sync. Claude Code itself installs the same way: the first session you open fetches it (about 30 seconds, no account, no Node.js), or click Install Claude Code on that tab to get it over with first.

On the same PC as the server. Start the server first, then open the app's Claude Code tab and click Open Claude Code — it starts the bridge and opens a session in its own window. Windows env on the same tab is for a Claude Code installed on Windows rather than inside WSL: it copies the variables that one needs to the clipboard.

Claude Code tab: buttons to open a session, start or stop the bridge, install Claude Code, and run the doctor

The same thing from PowerShell, if you prefer:

.\app\claude-code.ps1              # opens Claude Code inside WSL
.\app\claude-code.ps1 -Start       # just the bridge, no session
.\app\claude-code.ps1 -Windows     # prints the env vars for a Windows-native Claude Code

From another machine — a laptop, a Mac, another WSL box — the API has to be reachable off localhost first, so tick Share on network or run .\app\share.ps1 on the 5090 PC. Then, on the machine you want to code from:

QWEN_URL=http://<5090-ip>:8000 bash app/scripts/claude-code.sh install
qwen-claude                        # from any directory, from now on

Over Tailscale, <5090-ip> is the PC's Tailscale IP (tailscale ip -4) or its MagicDNS name — so this works from anywhere, not just your own Wi-Fi. The client machine needs nothing from this repo except app/scripts/claude-code.sh.

install bakes that URL into a qwen-claude command on your PATH; it is optional — bash app/scripts/claude-code.sh run does the same thing without installing anything, and uninstall reverses it. qwen-claude status|stop|doctor manage the bridge, and doctor fires a real end-to-end request when something looks off.

How good is it?

Qwen3.8-27B trades blows with the frontier commercial models on coding and computer-use benchmarks — while being Apache 2.0 and running on hardware you already own:

Benchmark Qwen3.8-27B Claude Opus 4.6 Max
SWE-bench Pro — fixing real bugs in real repos 61.7 53.4
LiveCodeBench v6 — competitive programming 90.3 88.8
Terminal-Bench 2.1 — driving a shell 73.0 78.2
OSWorld-Verified — using a desktop 84.3 72.7
AndroidWorld — using a phone 81.9 62.0

Scores are from the official Qwen model card. Two things worth being straight about:

  • Opus still wins Terminal-Bench. "Challenges the frontier" is the honest claim here, not "beats it at everything".
  • Those numbers are for the full-precision model. This app ships the 4-bit NVFP4 quantisation, which is what makes 27B fit in 32 GB of VRAM at all — it costs some accuracy. Treat the table as the ceiling, not a promise.

Which coding agent works best?

The model is only half of a coding agent. The other half is the harness that drives it, and the harness you pick matters as much as the model. So we ran Terminal-Bench ourselves, on this 4-bit quant, across four different agents pointed at the same server — first at one shared reasoning effort, then swept across three:

Coding agent Best score (Terminal-Bench subset)
DeepSeek Harness 8 / 12
pi 7 / 12
Claude Code 7 / 12
terminus 7 / 12

The winner is the DeepSeek Harness at medium reasoning effort, 8 / 12 — the best result any single agent reached, and it repeats at low effort too. The biggest lesson was that the best reasoning effort differs per agent (the DeepSeek Harness likes medium, terminus wants low, pi and Claude Code want high), so a single "max effort" default leaves accuracy on the table. Almost every difference between agents was fixable plumbing, not the model — and three of the twelve tasks are beyond this 4-bit quant at any setting. Treat a one-task gap as noise: re-running the same configuration moves the score by 1–2. Full per-task numbers, the effort sweep, and the honest caveats: Which coding agent is best on your 5090?

What you get

  • A choice of builds, picked from the Model dropdown on the Setup tab: the standard Qwen3.8-27B, or an uncensored (abliterated) build whose refusal behaviour has been removed — a plain public download, no account. See Uncensored build; you answer for what you generate with it.
  • A faster engine, if you want it. The same Qwen3.8-27B can be served by NInfer instead — a C++/CUDA engine built for the 5090 specifically. Around 1.5x the speed, and a very long document is read in seconds instead of minutes. It compiles itself during setup, which takes a while and happens once. See Go faster with NInfer.
  • The model: Qwen3.8-27B — Alibaba's Apache-2.0, 27B multimodal model (released 2026-08-14) with 262K context and a reasoning dial, in NVIDIA's NVFP4 4-bit format built for your 5090's Blackwell tensor cores. Expect ~80 tokens/s at the default 128K context, or ~49 at the full 262K — see PERFORMANCE.md.
  • Two coding agents, both talking to your own GPU. The DeepSeek Harness (dsh) is DeepSeek's own agent runtime — a browser UI with subagents and its own tool set. It needs no bridge at all, one command points it at whichever engine you are running, and it scored best of the four agents we benchmarked. Or point Claude Code at the server through a small bridge and use the client you already know. Both read and write your files and run commands; nothing is billed and nothing leaves your network. See Use it as a coding agent.
  • A control panel (pure Windows, no Electron): one-button install with live progress, server start/stop with health light, and streaming chat where the model's "thinking" renders dim. Thinking mode and effort (low → xhigh) are toggles, and Share on network makes the API usable from your other devices over Wi-Fi or Tailscale.
  • Logs & diagnostics: every run is logged (%LOCALAPPDATA%\Qwen5090\logs on Windows, ~/.qwen5090/logs in WSL). If anything breaks, click Collect diagnostics — it zips all logs + system info to your Desktop for a one-file bug report.
  • A clean exit: Cleanup / Uninstall on the Setup tab removes everything the app installed — Ubuntu, the Python environment, and the ~22 GB model — freeing 20+ GB. Reinstalling later is one click.
Server tab: the green SERVER pill reads running on port 8000, with startup output ending in Server is READY Chat tab: a question and the model's reply, with its reasoning shown above the answer in dim italic
Server tab — one click, then watch it come up. Chat tab — the model's thinking renders dim above its answer.

Go faster with NInfer

The Model dropdown has an entry called Qwen3.8-27B via NInfer (fastest). It is the same model as Standard — the same weights, the same answers — served by a different engine.

Standard (vLLM) NInfer
Speed ~80 words-ish/second ~120–170
Pasting a very long document minutes, and it gives up past ~139K seconds
Uncensored build available yes no
Setup download and go compiles an engine first (once)

Where in that range you land depends on how long the reply is: a short answer runs ~170, a long one ~120, and a real coding session averaged ~150. NInfer's own published figure is 151–195, which we could not reproduce on a long generation — see NINFER.md.

Tick it, click Install, and that is all — it is remembered, so every later start uses it without touching anything. To go back, pick Standard again.

From a command line:

.\app\install.ps1 -Ninfer     # Windows
bash app/scripts/setup-ninfer.sh   # Linux

Full detail — the other four models it can serve, the settings, and what to do when the build cannot find a CUDA toolkit — is in NINFER.md.

The rest of the Model dropdown

Four entries beyond the three Qwen3.8-27B builds. None of them is the recommended setup, and the tooltip on each says the same thing the app does:

Entry What it is On a 32 GB PC
Qwen3.6-35B-A3B via NInfer mixture-of-experts, 35B total but 3B active per token very fast (~590 tok/s), text only, an older Qwen release
DeepSeek V4-Flash (pruned, 63 GB) V4-Flash 0731 with experts pruned 284B → ~150B, then 2-bit runs, slowly — llama.cpp serves it from system RAM, so single-digit tokens/second, and it wants ~69 GB of RAM+VRAM
DeepSeek V4-Flash (full, 105 GB) the intact 0731 weights at 3-bit will not start — it needs ~112 GB of RAM+VRAM, i.e. a 128 GB machine

The DeepSeek entries exist because V4-Flash is a strong agent model, not because they are comfortable here: 284B parameters do not fit in 32 GB of VRAM at any quantisation, so serve-gguf.ps1 maps the weights from disk and lets Windows page them. The pruned build is also a different model from the one whose published scores you may have read — pruning and 2-bit both cost accuracy. Treat it as an experiment.

Where the big files go (Windows)

The DeepSeek builds are 63 to 105 GB, so serve-gguf.ps1 puts them — and llama.cpp itself — on E: by default, not on C:. Override with -ModelDir, or point QWEN5090_DRIVE at another letter; if E: is missing it falls back to whichever fixed drive has the most room and says so.

The WSL half is different: the venv and the Qwen weights live inside the distro's virtual disk. A fresh install puts that disk on the big drive too (E:\Qwen5090\wsl\, same QWEN5090_DRIVE override; a C:-only PC keeps WSL's default, and install.ps1 -DistroLocation picks any directory you like). For a distro that is already installed on C:, pointing HF_HOME at /mnt/e looks like the fix and is a trap — vLLM maps each weight shard with a private, writable mmap, which is exactly what Windows-drive filesystems cannot do from inside WSL. Move the whole distro instead:

.\app\move-to-drive.ps1 -Drive E:          # show what it would do
.\app\move-to-drive.ps1 -Drive E: -Apply   # export, unregister, re-import

It refuses while a server is running, keeps the export until the new copy has started and answered, and restores the default user — an imported distro otherwise comes back as root, which breaks every script here.

How it works

vLLM (currently the only engine that runs NVFP4) is Linux-only, so the installer sets up WSL2 + Ubuntu 24.04 — Microsoft's built-in Linux layer — completely silently: no Linux prompts, a qwen user is created for you, and your Windows NVIDIA driver powers the GPU inside WSL automatically. The PowerShell scripts hide all of it; localhost:8000 just works.

you ──► Start Qwen 5090.cmd ──► gui.ps1 ──► install.ps1 / run.ps1
                                                 │
                                      WSL2 · Ubuntu 24.04
                                                 │
                                  serve.sh ──► vLLM ──► your RTX 5090
                                                 │
                                   OpenAI API · localhost:8000/v1

What install.ps1 actually does: checks Windows 11 + driver ≥ 570 → raises the GPU watchdog timeout, which needs one restart → enables WSL2 (one reboot max, auto-resumes) → provisions Ubuntu unattended → installs build-essential (vLLM's kernel compiler needs a C compiler at runtime) → creates a Python 3.13 venv with vllm, flashinfer, and the CUTLASS DSL → downloads unsloth/Qwen3.8-27B-NVFP4 (~22 GB, skippable) → desktop shortcut. Re-running is always safe.

For power users

Command line — every button the GUI has, as a script

Elevated PowerShell for install; scripts live in app\:

.\app\install.ps1    # everything the GUI does; add -SkipDownload / -Unattended
.\app\install.ps1 -Ninfer         # the NInfer backend instead: ~1.5x faster, compiles an engine
.\app\install.ps1 -WslMemoryOnly   # only re-size the WSL VM from this PC's RAM
.\app\run.ps1        # serve on http://localhost:8000/v1
.\app\chat.ps1       # terminal chat (second terminal)
.\app\uninstall.ps1  # remove the distro, env, and model (what the Cleanup button runs)

On native Linux (no PowerShell, no WSL — see LINUX.md):

bash app/scripts/setup-linux.sh     # one-time: venv + vLLM + model
bash app/scripts/serve.sh           # serve on http://localhost:8000/v1
bash app/scripts/chat.py            # terminal chat
bash app/scripts/claude-code.sh run # Claude Code against this server
bash app/scripts/patch-mtp.sh apply # opt-in: MTP at the full 262K window
bash app/scripts/setup-ninfer.sh    # opt-in: the NInfer backend, ~1.5x faster
bash app/scripts/install-service.sh install   # start automatically at boot

First time in a PowerShell window? Windows blocks these scripts with "…is not digitally signed" — GitHub's ZIP marks every file as downloaded-from-the-internet. The double-click launcher passes -ExecutionPolicy Bypass so it never sees this; run them by hand and you do. Once per window:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

Or permanently, from the unzipped folder: Get-ChildItem -Recurse | Unblock-File.

Tuning — context, VRAM share, speculative decoding
Knob Default Notes
run.ps1 -Ctx 131072 Context window. 128K is the largest that still holds a higher-precision fp8 KV cache in 32 GB, which keeps MTP on and runs ~80 tok/s. 262144 is the model's native maximum, but above 128K the KV cache switches to 4-bit so it fits, which also turns MTP off (the two together corrupt the output) — so the full window runs at ~49 tok/s. Use 65536 if you are gaming at the same time.
run.ps1 -Port 8000 API port.
run.ps1 -GpuUtil 0.90, or 0.85 above 128K Fraction of VRAM the server may claim. The Windows desktop shares the GPU, and at the full 262K window the 4-bit cache has capacity to spare — so it keeps a little more back for Windows there. Only pass this if you know you need to.
run.ps1 -NoMtp off Disables speculative decoding if it misbehaves.
run.ps1 -PrefixCache on above 128K Reuses the KV of a repeated prompt prefix instead of recomputing it. Above 128K a second request sharing a 32K prefix answered in 0.31 s against 3.80 s cold — worth most to agent tools like Claude Code, which resend the same long system prompt every turn. -PrefixCache:$false turns it off.
run.ps1 -Uncensored off Serves the abliterated build instead (install it first).
run.ps1 -Model unsloth/Qwen3.8-27B-NVFP4 Any Hugging Face repo id or a path inside WSL.
chat.ps1 -NoThink off Direct answers, no reasoning tokens.
chat.ps1 -Effort low|medium|xhigh model default Qwen3.8's reasoning-effort dial. The chat template rejects every other value, high included.
API example — it is just the OpenAI SDK

Recommended sampling: temperature 0.7, top-p 0.8, top-k 20, presence 1.5.

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="local")
resp = client.chat.completions.create(
    model="unsloth/Qwen3.8-27B-NVFP4",
    messages=[{"role": "user", "content": "Explain NVFP4 in one paragraph."}],
    extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(resp.choices[0].message.content)

Tool calling and the qwen3 reasoning parser are enabled on the server. Quick benchmark while it runs (from WSL): bash app/scripts/benchmark.sh

Uncensored build — abliterated, no account, no guardrails

Pick Uncensored (no account) in the Setup tab's Model dropdown, or from PowerShell:

.\app\install.ps1 -Uncensored   # one-time download (~19 GB), no account needed
.\app\run.ps1 -Uncensored       # serve it
.\app\run.ps1                   # back to the standard build

That is sakamakismile/Huihui-Qwen3.8-27B-abliterated-NVFP4huihui-ai's abliterated Qwen3.8-27B re-quantized to NVFP4 with llm-compressor, Apache-2.0, MTP head preserved. It is a public download: no Hugging Face account, no token. At ~19 GB it is smaller than the standard build, so there is more room for KV cache.

⚠️ It has no safety guardrails. It answers what the standard model declines, including things that are illegal or dangerous to act on, and it is no more accurate while doing so — abliteration removes refusals, not mistakes. What you do with the output is on you.

Both builds run entirely on your PC. The author also notes it occasionally drops a closing parenthesis when generating code.

A third entry, Uncensored (sign-in) (orcarouter/Qwen3.8-27B-Uncensored-NVFP4, ~23 GB), is a different abliteration of the same model. It is gated: sign in at Hugging Face, accept the terms on the model page, create a read token at huggingface.co/settings/tokens, and paste it into the HF token box that lights up next to the dropdown. Stored inside WSL, so you do it once.

Any other checkpoint works too: run.ps1 -Model owner/name (add install.ps1 -Model owner/name to download it). Serving flags follow the model id automatically — serve.sh knows which builds take --kv-cache-dtype from the command line versus their own config.json, how many MTP tokens to draft, and which need --trust-remote-code.

Use it from your phone or laptop — LAN and Tailscale

Tick Share on network on the Server tab (one admin prompt per start), or run .\app\run.ps1 -Share. Any device on your Wi-Fi or tailnet can then use http://<this-PC's-IP>:8000/v1 — for Tailscale, use the PC's Tailscale IP (tailscale ip -4) or MagicDNS name. Sharing forwards the port out of WSL and opens Windows Firewall on Private/Domain networks only (Tailscale counts as private; public Wi-Fi stays blocked).

⚠️ The API has no authentication, so only share on networks you trust.

Undo anytime: .\app\share.ps1 -Remove. HTTPS alternative with zero setup: tailscale serve --bg 8000.

Why NVFP4 on a 5090: the ~22 GB weights fit the 32 GB card with room for a 128K context at fp8 — or the full 262K with a 4-bit KV cache, thanks to Qwen3.8's hybrid attention. It runs ~1.5× faster than BF16 on Blackwell's FP4 tensor cores, and Unsloth's dynamic quants keep accuracy close to the original checkpoint.

Repo layout

Start Qwen 5090.cmd        ← double-click this — it's all most people need
README.md                  this file
app/                       everything under the hood:
  gui.ps1                    WPF control panel (install / server / chat)
  install.ps1                one-shot installer (also used headless by the GUI)
  run.ps1                    start the vLLM server (CLI)
  chat.ps1                   terminal chat client (CLI)
  share.ps1                  expose the API to LAN/Tailscale (used by -Share)
  uninstall.ps1              remove everything (distro + model); GUI 'Cleanup' button
  collect-logs.ps1           zip all logs + system state for bug reports
  claude-code.ps1            run Claude Code against this server
  deepseek-harness.ps1       run the DeepSeek Harness against this server
  serve-gguf.ps1             llama.cpp on Windows, for the DeepSeek GGUF builds
  move-to-drive.ps1          relocate an installed WSL distro to a bigger drive
  scripts/                   the Linux side — runs under WSL *and* on native Linux:
    setup-linux.sh             one-time setup on a Linux box (wraps setup-wsl.sh)
    setup-wsl.sh               venv + vLLM + model download (what install.ps1 runs)
    serve.sh                   vLLM with 5090-tuned flags; dispatches to the others
    setup-ninfer.sh            opt-in: build the NInfer engine + fetch its artifact
    serve-ninfer.sh            NInfer, the fast backend (same port, same API)
    serve-full.sh              one command: the production NInfer config, full window
    serve-gguf.sh              llama.cpp, for the DeepSeek GGUF builds
    claude-code.sh             the Claude Code bridge (LiteLLM)
    deepseek-harness.sh        the DeepSeek Harness (dsh): install, route, Web UI
    terminal-bench.sh          run Terminal-Bench 2.1 against this server
    tb_dsh_agent.py            the harness adapter Terminal-Bench drives
    patch-mtp.sh               opt-in vLLM PR #40914 backport: MTP at 262K ctx
    install-service.sh         systemd user unit so the server survives reboot
    dashboard.sh, dashboard.py the Linux status page (model, GPU, CPU, memory)
    fan-curve.sh               drive the chassis fans off GPU temperature
    chat.py, benchmark.sh      clients against the OpenAI endpoint
    lib-*.sh                   shared helpers (build tools, model catalog,
                               NInfer, GPU telemetry, WSL/Linux detection)
  templates/                 chat templates (DeepSeek V4 native DSML, and
                             the older Hermes-style one it replaced)
  optimization/              the harness's autonomous tuning loop (see
                             docs/SELF-OPTIMIZATION.md); state stays local
  docs/                      troubleshooting, performance, Claude Code,
                             DeepSeek Harness, Linux, NInfer
    images/                    control-panel screenshots used by this README
tbench/                    how the harness benchmark was run: the four agent
                           adapters and the raw results (repo only - it is
                           kept out of the download)

Something not working?

Guide What is in it
TROUBLESHOOTING.md Install failures, GPU not found, out of memory, crashes
PERFORMANCE.md Measured throughput, context/speed trade-offs, tuning
CLAUDE-CODE.md The bridge, its settings, and what works versus what does not
DEEPSEEK-HARNESS.md The dsh agent runtime: install, routes, Web UI, headless mode
SELF-OPTIMIZATION.md The autonomous tuning loop: results, caveats, roadmap
NINFER.md The NInfer backend: what it is faster at, knobs, build issues
LINUX.md Native Linux install, systemd, the 262K + MTP path

Still stuck? Click Collect diagnostics in the app — it puts a single ZIP of all logs and system state on your Desktop, which is exactly what an issue report needs.

Credits & license

Tooling in this repo is MIT-licensed. The model weights are licensed separately by their own authors — Qwen3.8-27B is Apache 2.0 from the Qwen team — and the MIT licence covers only the tooling here. Not affiliated with Alibaba, Unsloth, NVIDIA, the vLLM project, or NInfer.

About

Run Qwen3.8-27B (NVFP4 4-bit) locally on an RTX 5090 — one click on Windows 11, one command on Linux. Ships a coding agent, an OpenAI-compatible API, and three serving backends. Private, unmetered, offline.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages