motif64

Chat · Qwen3.8-Flash-Next IQ3_S · Basalt · GeForce RTX 5090 · 30 GB VRAM

published by @dh7 on

m64 m64_dfd55abca230
Download .tar.gz

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.

Lineage

parent
none declared
derived from
no published capsule shares half its files
children
none

Files

5 files

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 phase body: still loading; retry after Retry-After seconds.
  • 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"