Download Latest Version BaseRT engine 0.2.4 source code.zip (630.1 kB)
Email in envelope

Get an email when there's a new version of BaseRT

Home / v0.2.3
Name Modified Size InfoDownloads / Week
Parent folder
basert-engine-linux-arm64-cuda-0.2.3.tar.gz 2026-08-19 21.8 MB
basert-engine-linux-arm64-cuda-0.2.3.tar.gz.sha256 2026-08-19 110 Bytes
basert-engine-macos-arm64-0.2.3.tar.gz 2026-08-19 15.4 MB
basert-engine-macos-arm64-0.2.3.tar.gz.sha256 2026-08-19 105 Bytes
BaseRT engine 0.2.3 source code.tar.gz 2026-08-19 524.5 kB
BaseRT engine 0.2.3 source code.zip 2026-08-19 630.1 kB
README.md 2026-08-19 4.8 kB
Totals: 7 Items   38.4 MB 1

BaseRT 0.2.3

Model pulls that finish. basert pull downloads over many connections at once and resumes where it stopped — a 20 GB bundle interrupted at 90% picks up at 90%, including after the process has exited. The 19.8 GB Qwen3.5-35B-A3B Q4 bundle measured 17.6 MiB/s before and 54–84 MiB/s after on the same link, roughly 19 minutes down to 5. A transfer that stalls without closing is cut off and retried instead of hanging, and a short transfer is caught rather than installed. Tool calling is fixed on two fronts as well: Muse Glimmer's dialect is parsed rather than printed, and templates that use is undefined (Qwen 3.8 among them) render instead of silently falling back.

Added

Xet transfers

  • Xet is supported, behind BASERT_HF_XET=1. Its advantage is deduplication across models: chunks shared with something already fetched never cross the wire. It cannot resume, though — an interrupted transfer starts over — so it is not what basert pull reaches for by default.

bash basert pull basecompute/Qwen3.5-35B-A3B # resumable (default) BASERT_HF_XET=1 basert pull basecompute/Qwen3.5-35B-A3B # dedup, no resume

Parallel, resumable downloads

  • Files are fetched over many connections at once, in fixed chunks, instead of through one stream.

  • An interrupted pull resumes where it stopped, per chunk: completion is recorded next to the partial file as each chunk lands and fsynced, so a crash, a ^C, or a link that drops overnight continues from what is on disk, across process restarts. Just re-run the same basert pull.

  • A stalled transfer fails instead of hanging. Connections that stop delivering bytes without closing are now cut off and retried, and a transfer shorter than the size the Hub advertised is reported as an error rather than installed as a truncated model that fails later at load time.

  • Tunable when the defaults do not suit a link:

Variable Default Meaning
BASERT_HF_CONNECTIONS 24 Concurrent range requests
BASERT_HF_CHUNK_MB 16 Bytes per range request
BASERT_HF_READ_TIMEOUT_SECS 60 Stall timeout for a single read
BASERT_HF_MAX_RETRIES 5 Retries per chunk (0 disables)
BASERT_HF_XET unset Use Xet's CAS path for large files (dedup, no resume)

Peak memory is connections × chunk — 384 MB at the defaults, since each worker holds one chunk in flight. Lower either knob on a constrained machine.

Fixed

  • Muse Glimmer's tool calls are parsed, not printed. The model frames a call as a message addressed to the tool:

<|start|>assistant to=fn<|message|><atem:function_calls> <atem:invoke name="fn">…</atem:invoke></atem:function_calls><|eot|>

which matched none of the dialects the parser knew (Gemma-native, ChatML JSON, Qwen XML), so it fell through to content and the raw markup was streamed to the user — the reported symptom was a reply that read <atem:invoke name="bash">. The dialect is now recognized and emitted as a proper tool call.

  • --kquant-passthrough embeddings on non-Glimmer models. Every model but Muse Glimmer handed k-quant embedding lookups the slab parameter struct, whose second field is the vocabulary size where the k-quant kernels expect the row width. Rows were read at the wrong stride, and the output was incoherent — Qwen3-0.6B was the reported case.

  • developer and function roles no longer break the native template. A model's chat template accepts the roles it was written for — Qwen 3.8's takes system, user, assistant, tool and raises on anything else — and a raise drops the whole request into the generic ChatML fallback, quietly costing the model its think prefill and tool-call dialect. developer (which superseded system in the newer OpenAI API, and is what agent clients send) and function (the deprecated spelling of tool) are now resolved before rendering. When a template does reject a role, the warning names the roles the request carried instead of suggesting a re-convert that would not help.

  • Chat templates using is undefined no longer fall back to ChatML. Qwen 3.8's template gates its reasoning-effort block on enable_thinking is undefined, a standard Jinja2 test the bundled template engine did not implement. Rendering threw on every request and the server quietly fell back to generic ChatML — which still looked right for ChatML-shaped models while silently dropping the reasoning-effort system block, the think prefill, and the model's entire tool-call dialect. Tool calling on affected models works again.

Changed

  • Building tools/base-convert now requires Rust 1.85+ (was 1.80).
Source: README.md, updated 2026-08-19