Chat · Qwen3.8-Flash-Next IQ3_S · Basalt · GeForce RTX 5090 · 30 GB VRAM
published by @dh7 on
m64 m64_dfd55abca230Qwen3.8-Flash-Next on Basalt (RTX 5090), for opencode. A local OpenAI-compatible chat endpoint for Qwen3.8-Flash-Next (IQ3_S pack) on the Basalt engine, with a 384k context (YaRN x1.5), for opencode running on your own machine: opencode and its file access stay there, only the model calls come here. Streams, tool calls, images. About 300 tok/s on one RTX 5090 with 64 GB of RAM. Needs no network.
Lineage
- parent
- none declared
- derived from
- no published capsule shares half its files
- children
- none
Files
5 files- human/
- index.html9.1 KB
- AGENT.md3.1 KB
- capsule.toml1.5 KB
- Dockerfile1.4 KB
- start.shexec1.3 KB
AGENT.md
qwen38-flash-next-basalt-5090
An OpenAI-compatible chat endpoint for Qwen3.8-Flash-Next (the jesdga GSQ-RCO IQ3_S pack) on the Basalt engine, running on one RTX 5090 with a 384k-token context (YaRN x1.5 over the trained 262144). It only provides the model: run opencode (or any OpenAI-compatible client) on your own machine and point it here. Your files and tools stay on your machine; only the model calls come to this capsule.
The model runs locally; the container has no network access (unless the user served it with --allow-external-network or --allow-internal-network, which it does not need).
Routes
All paths are relative to the capsule's URL (e.g. http://<tailnet-ip>:<port>), written
here as {{BASE_URL}}.
| Method | Path | What |
|---|---|---|
| POST | /v1/chat/completions |
OpenAI chat completions, streaming or not |
| GET | /v1/models |
one model: qwen3.8-flash-next-iq3_s-basalt-384k |
| GET | /status |
phase (ready when usable) |
| GET | /agent |
this document plus live status |
| GET | /human/ |
landing page: opencode setup and a quick-test chat |
| GET | /.well-known/opencode |
opencode provider config (opencode auth login {{BASE_URL}}) |
POST /v1/chat/completions
Body: application/json only. Accepted fields: messages (required), tools,
tool_choice, response_format, max_tokens, stream, seed; model, user,
stream_options are accepted and ignored or passed on; n must be 1. Any other field
(e.g. temperature, top_p) is refused with 400 naming the field: sampling comes from
the pack. The model is always this one, whatever model says.
Messages may carry images (image_url parts with data: URLs). Tool calls follow the
OpenAI format. The reply may include reasoning_content (the model's thinking) before
content.
stream: true returns Server-Sent Events (data: {...} chunks, ending with
data: [DONE]).
curl -s {{BASE_URL}}/v1/chat/completions -H 'Content-Type: application/json' \
-d '{"messages":[{"role":"user","content":"Say hi"}],"max_tokens":200}'
curl -N {{BASE_URL}}/v1/chat/completions -H 'Content-Type: application/json' \
-d '{"messages":[{"role":"user","content":"Count to 5"}],"stream":true}'
Timings and concurrency
- Load: about 30 s when the 87 GB pack is in the page cache, a few minutes cold.
- Generation: about 300 tok/s (speculative decoding, 7-token windows).
- One request at a time. Others wait their turn; send them sequentially.
opencode on your machine
Once: opencode auth login {{BASE_URL}}, then run opencode in any folder. opencode
reads this capsule's provider from /.well-known/opencode at every start.
Or on a machine with m64: m64 qwen38-flash-next-basalt-5090 --ui opencode.
Errors
- 503 with a
phasebody: still loading; retry afterRetry-Afterseconds. - 400: a field the endpoint does not accept, or a prompt longer than the context.
Access
On the tailnet (the default bind) there is no token: anyone on the tailnet can use the
endpoint. With a token (--host 0.0.0.0 etc.), send Authorization: Bearer <token>.
capsule.toml
schema = "m64/capsule@1"description = "Qwen3.8-Flash-Next on Basalt (RTX 5090), for opencode. A local OpenAI-compatible chat endpoint for Qwen3.8-Flash-Next (IQ3_S pack) on the Basalt engine, with a 384k context (YaRN x1.5), for opencode running on your own machine: opencode and its file access stay there, only the model calls come here. Streams, tool calls, images. About 300 tok/s on one RTX 5090 with 64 GB of RAM. Needs no network."kinds = ["chat"]authors = ["dh7"]license = "mit"[hardware]platform = "linux-x86_64"gpu = "NVIDIA GeForce RTX 5090"gpu_count = 1vram_gb = 30# The pack's experts (46.8 GiB) sit in system RAM next to what VRAM caches: a 64 GB# machine (which reports ~60.5 GB).ram_gb = 60# CUDA 13; tested on driver 595.driver = ">=580"disk_gb = 90[runtime]sandbox = "container"# No image: the Dockerfile builds Basalt at a pinned commit on nvidia/cuda 13.0.0, pinned by digest.gpu = trueshm_gb = 8internal_port = 9000health = "/health"# ~30 s when the pack is in the page cache; a cold read of 87 GB off disk takes longer.expected_load_seconds = 240# The front rewrites every request's "model" to this; start.sh gives Basalt the same alias.model_name = "qwen3.8-flash-next-iq3_s-basalt-384k"user = "65534:65534"# The Basalt pack is the whole model (weights, tokenizer, chat template, vision, drafter).[[artifacts]]type = "hf"repo = "jesdga/Qwen3.8-Flash-Next-Basalt"revision = "2a6a758dc12f1d027d2d35b8964110df7e80f70b"include = ["LICENSE", "Qwen3.8-FN-GSQ-RCO-IQ3_S.basalt"]mount = "/weights/basalt"