Instructions to use A-M-K/stowlm-reader-v3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use A-M-K/stowlm-reader-v3 with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # if on a CUDA device, also pip install mlx[cuda] # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("A-M-K/stowlm-reader-v3") prompt = "Once upon a time in" text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- MLX LM
How to use A-M-K/stowlm-reader-v3 with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Generate some text mlx_lm.generate --model "A-M-K/stowlm-reader-v3" --prompt "Once upon a time"
- Atomic Chat
StowLM Reader β adopted Muse Glimmer 30B LoRA
| Release identity | Value |
|---|---|
| HF owner | A-M-K |
| HF repository name | stowlm-reader-v3 |
| Author | AMK-bot |
| Public code URL | https://github.com/AMK-bot/StowLM |
| Public code revision | 03a6bfab4429cd4831d6a2f4aede7126960912cc |
| Adapter licence | Apache-2.0 |
| Immutable adapter revision | 2ccfc2817aa9b2a45812feb174eb4fbceffa96b7 |
The adapter is licensed under Apache-2.0. Copyright 2026 AMK-bot. See LICENSE; the applicable base terms remain in effect.
StowLM Reader interprets one English planner sentence and explicit synthetic vessel context as a strict JSON restriction or refusal. It is an MLX LoRA adapter for Meta Muse Glimmer 30B, not a ship planner. Search, deterministic validation and the physical checker are separate software. Use is a synthetic research/hackathon demonstration, with planner review and confirmation; no real company or customer data is included.
In StowLM, an AI pipeline around a ship-planning engine delivered as an app, the Reader is the instruction-reading step: the planner confirms each reading before a separate planning engine (Frontier Engine 0.13.0, the reference engine in the pipeline's engine slot) plans, and the full checker decides. The Reader's output format doesn't depend on which engine fills that slot; only Engine 0.13.0 has been wired in.
Adopted result and limits
The adopted swa-last-5 reader is 118/128 exact (92.19%) on the spent sealed-v3 sentence set. It accepted 1/48 loosening requests. The fair hand-written parser baseline is 90/128, with 1/48 accepted loosenings. The historical Muse Spark reference is 126/128, constrained with the earlier schema mask and not rerun with the updated decoder. It is a reference, not an identical-decoder comparison.
| Arm on the 128 sentence IDs | Exact | Percent | Accepted loosenings |
|---|---|---|---|
| Adopted StowLM Reader, current mask | 118/128 | 92.19% | 1/48 |
Finalized v2 (adapter 8bf00809β¦), same current mask |
120/128 | 93.75% | 2/48 |
| Untrained Glimmer, same current mask | 60/128 | 46.875% | 0/48 |
| Fair hand-written parser | 90/128 | 70.3125% | 1/48 |
| Muse Spark, historical earlier-mask reference | 126/128 | 98.4375% | 0/48 |
| Frozen v3 gate | Recorded requirement | Adopted result |
|---|---|---|
| R1 | At least 90% exact, at least 116/128 | Pass: 118/128 |
| R2 | Zero accepted loosenings, 0/48 | Fail: 1/48 |
| R3 | At most 3 percentage points behind fixed Spark, at least 123/128 | Fail: 6.25 points behind |
| Exact no-regression against finalized v2 | At least v2's exact count on the same current decoder | Fail: 118 versus 120 |
| Loosening no-regression against finalized v2 | No more accepted loosenings | Pass: 1 versus 2 |
The reader did not pass all release gates. The pre-registered adoption rule retained v2. Decision D266 subsequently adopted this reader for safer out-of-scope behavior on lower-weight validation evidence: on 84 out-of-scope validation sentences, v2 made 27 rules (16 naming an existing bay), while this reader made four (one naming an existing bay). This override reduces the sealed headline by two correct sentences; it must not be described as the pre-registered rule passing. On the sealed set it wrongly made a rule from 4 of the 76 sentences it should have refused (v2: 6) (D266).
The selected reader scored 373/400 on the fixed validation selection sample; v2 scored 369/400 on the same path. Those are selection/development figures, not held-out accuracy claims. Generator/family overlap and candidate selection weaken them. Sealed sentences were not rerun or included in this bundle. Exact structured match retains fields other than free-text refusal reason; missing, malformed and truncated outputs score incorrect. Ten of 128 adopted readings were not exact. A complete per-failure taxonomy for the adopted arm is not recorded in the cited aggregate release reports. Release-specific p95 latency and minimum RAM are not recorded.
Decode mask, on 200 validation sentences (not the sealed set): before fine-tuning, the mask overrode the model's first choice in 182 of 200 sentences; after, in 2. Almost all were the output format, not ship facts; none was an illegal bay or tier. Both of the 2 were sentences it should have refused; the mask left a legal rule that was still wrong, which is why a person confirms. Source: experiments/mvp/reader/v3/results-final/mask-study/report-base.json.
A separate 12-sentence timing run (experiments/mvp/pipeline/reader_final/readings/offline-timing.json; network blocked for the process; loaded machine) recorded about 4.1 s a sentence warm median, 6.7 s cold for model load plus the first sentence, and 15.7 GB peak Metal allocation; it isn't a minimum-RAM figure.
Sources: experiments/mvp/reader/v3/results-final/final-adoption-d266.json, results-final/sealed-summary.json, parser/sealed-v3-report.json, the original sealed-v3 Spark report experiments/mvp/reader/v3/sealed/spark-summary.json (0 accepted loosenings of 48), and D266 in the code repository's docs/decisions.md. Repository paths refer to AMK-bot/StowLM; PROVENANCE.md records the original source hashes independently of the public code commit. Clean-laptop live-inference acceptance was not run for this publication bundle.
Release identity
| Item | Recorded identity |
|---|---|
| Selected adapter | swa-last-5 |
| MLX LoRA tensors | adapters.safetensors, 64515304 bytes, SHA256 eff712e18a649804fcbd5b19db27baa709fa60701a2970d1fa58593f731c6f57 |
| Configuration | adapter_config.json, SHA256 1eadecbb712b8452204d938e564a95c9758d900ab6463e7a6ed867f4090749bb |
| Selection receipt | STOPPED.json, SHA256 c2bc92c5ac849445d520ce8ba85501112cf80a503a6a390ea74a53323cac3102 |
| Frozen pipeline manifest v4 | SHA256 acf2f275efa73f45c43709f4a52807dd480390e1497f085cab11d3604265bbec |
| Base source | meta-models/Muse-Glimmer-30B, revision cec94fcfd6512f2cfe708138c32533b346ea4f69 |
| Base format | Text-only MLX, affine 4-bit/group-64; no base weights bundled |
| Prompt | UTF-8 system prompt SHA256 bb8f69fb4a3e4f303d0f425b684de203e7d3f7e23c333efc0893e795be9df29a; tokenizer chat template recorded separately |
| Output schema | stowlm.reader/2; source SHA256 f622a67c90104773839794535722e05f77f6cc029ebb8df9d22bc2948c8d8023 |
All three adapter files are byte-identical copies verified against the v4 manifest. The config retains its producer's historical absolute model path for hash identity; inference supplies the base path explicitly and does not read that config field as a download location. SHA256SUMS covers all bundle files except itself.
Intended use and output
Supported restrictions are close_bay, max_tiers (hold/deck, optionally bay-specific), dg_keep_away and one_port_per_hatch. Refusal codes are ambiguous, unsupported, loosening and not_an_instruction. Supply context derived from the actual synthetic instance: bay IDs, physical tier limits, hatch covers, ports, accommodation and declared dangerous-goods classes.
Illustrative schema output for a context containing bay 1; not a measured model result:
{"schema_version":"stowlm.reader/2","constraint":{"type":"close_bay","bay":1}}
The app uses greedy, schema-masked generation with a 256-token cap, no answer repair and no bay/class remapping. The mask does not read the sentence's expected label. Invalid outputs fail; a model reading must be shown to the planner and confirmed, then instructions and the whole plan checked separately. A physical checker can enforce a misread rule and still miss the language error. Confirmation records an assertion and does not authenticate its author.
This is not validated for real vessel operations, real-radio robustness, Thai reading, or general maritime assistance. It does not establish operational readiness or a move saving from fine-tuning.
Base-model usage policy
The base model's usage policy, section 2, item 4, prohibits using Muse Glimmer as follows. The opening of section 2 and items 1β4 are quoted verbatim:
- Engage in, promote, incite, facilitate, or assist in the planning or development of activities that present a risk of death or bodily harm to individuals, including use of Muse Glimmer related to the following:
- Military, warfare, nuclear industries or applications, espionage, use for materials or activities that are subject to the International Traffic Arms Regulations (ITAR) maintained by the United States Department of State or to the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical Weapons Convention Implementation Act of 1997
- Guns and illegal weapons (including weapon development)
- Illegal drugs and regulated/controlled substances
- Operation of critical infrastructure, transportation technologies, or heavy machinery
This adapter is a synthetic research demonstration and must not be used to plan or operate real vessels.
Meta Model API terms
Part of the training data is Muse Spark output: 1,228 paraphrases generated through the Meta Model API. We read its Terms of Service (https://dev.meta.ai/legal/terms-of-service, last updated 9 October 2026) and Acceptable Use Policy (https://dev.meta.ai/legal/acceptable-use-policy) on 3 November 2026:
- Β§4.1: the customer owns Outputs.
- Β§10.1(ix): no using the Services or Outputs to train, fine-tune or distill a model or product "that competes with Meta's models or services" without Meta's prior written authorization. "Competes" isn't defined. This adapter is a LoRA for Meta's own Muse Glimmer, for one narrow task (stowage instructions into rule objects); we read it as not competing. Meta could read the term more broadly, and we hold no written confirmation.
- The Acceptable Use Policy also lists operation of transportation technologies, and relying on Outputs for safety decisions "without a qualified person reviewing the Outputs". Operational use by anyone, including a firm with its own engine in StowLM's slot, would need terms that permit it, plus class approval. The planner's confirmation and the checker gate are the pipeline's human-review design, not a permission.
Training and selection
The recorded lineage is v1 β v2 β v3 β a mean of the last five v3 saved LoRA factors. V1 used grammar families and Spark paraphrases; v2 continued from v1 with 2,224 training rows and fresh Adam. V3 warm-started the finalized v2 adapter 8bf00809718c48756f61618b479f1651f10a5c64c9c084db7801dbef5fa2ab1e and trained one complete 4,121-row epoch. It resumed after row 1,200 with fresh Adam because the stopped run's optimizer state was lost; this is not uninterrupted optimizer continuation. The final record reports 1,031 updates. The 11,596.473 active seconds cover only the continuation process, excluding its 80.066 seconds of admission wait, not the full inherited lineage. The continuation ran 2 November 2026 00:07:56β03:22:33 UTC; v1's stop is recorded on 31 October.
Recipe: LoRA rank 8, scale 20, dropout 0, last 16 blocks; Adam learning rate 0.00005; seed 199; batch 1, gradient accumulation 4; completion-only loss; 2,048-token cap and gradient checkpointing. See PROVENANCE.md for the differing historical stop-policy records and exact manifests. Training/evaluation hardware is recorded as an Apple M5 Max MacBook Pro, 128 GB unified memory, macOS 26; this is not a minimum-memory requirement.
SELECTION-RULE.md fixed four candidates and a 400-row, eight-stratum, seed-199 validation sample disjoint from the 80-row monitor. Highest exact count wins, with the documented simplicity tie-break. swa-last-5 averages each factor separately at rows 2,800, 3,200, 3,600, 4,000 and 4,121; it is not an average of factor products. Selection weights were frozen before sealed scoring; later adoption was the disclosed D266 override above.
Training contexts and sentences are synthetic with public factual anchors, not company/customer operational records. V3 domain augmentation adds 704 train and 704 validation rows, task-authored rather than new Spark output. The active data-domain split has 4,121 train / 1,476 validation. Training examples, hull offsets, benchmark instances, sealed sentences and labels are not bundled.
Decontamination limits matter: v1 removed eight exact normalized training-sentence matches against an earlier sealed attempt, so exposure to those sentences is disclosed. Its recorded policy did not inspect expected labels. V2 targeted development/family-test errors; original v3 augmentation targeted validation errors. No sealed-driven data-domain deduplication was performed. Recorded Reader lineage does not list RCSPPSuite as a training input; this is not an independent audit of all inherited base pretraining. A separate software benchmark's data are not part of this adapter release. Data/provider rights are not broadened by this card.
Run on an Apple-silicon laptop
Live StowLM Reader on Apple silicon
Use public code revision 03a6bfab4429 (or later) and its locked Python 3.12 environment. Accept the base model's applicable access and usage terms separately. These are source-checked setup commands; this packaging job did not download, convert or run a model.
uv sync --python 3.12 --locked
uv run python -m stowage.data_setup
uv run python experiments/glimmer-bench/convert.py models/glimmer-30b-4bit 4
The existing converter fetches meta-models/Muse-Glimmer-30B revision cec94fcfd6512f2cfe708138c32533b346ea4f69 and applies the recorded text-only sanitizer plus affine 4-bit, group-64 MLX quantization. The historical base has no conversion receipt; rerunning this documented recipe is not a demonstrated byte-identical reproduction. The hull data step is for the full checker, not adapter inference. For an offline hull archive use uv run python -m stowage.data_setup --archive /path/to/kcs_offsets.ZIP.
Download the immutable adapter revision with the locked Hub SDK's snapshot_download API:
uv run python - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="A-M-K/stowlm-reader-v3",
revision="2ccfc2817aa9b2a45812feb174eb4fbceffa96b7",
local_dir="models/stowlm-reader",
allow_patterns=["adapters.safetensors", "adapter_config.json", "STOPPED.json",
"README.md", "NOTICE", "LICENSE", "PROVENANCE.md", "SHA256SUMS", "upstream/*"],
)
PY
(cd models/stowlm-reader && shasum -a 256 -c SHA256SUMS)
The adapter tensor SHA256 must additionally equal eff712e18a649804fcbd5b19db27baa709fa60701a2970d1fa58593f731c6f57. SHA256SUMS verifies the selected published files; it is not a trusted signature. The Hub's local .cache/ metadata is not part of the upload bundle.
uv run python -m app --functional --reader-adapter models/stowlm-reader
Open /planner?live=1 on the printed local URL (the StowLM Functional app). Create a call, then in 3 Β· Instructions type a sentence (or record or upload a WAV for Muse Voice Transcribe, which needs your own Meta Model API key), choose Read with StowLM Reader, review the reading and confirm it before you plan. The app passes the chosen adapter to GlimmerParser, loads the base lazily from models/glimmer-30b-4bit/ at the first reading, and uses the same v3 masked decoder as evaluation. The Reader itself needs no API key. It does not fall back to Muse Spark: without the base or adapter the reader stage shows "unavailable" and why. Confirmation records what was confirmed; it does not authenticate who confirmed. The historical absolute model entry in the byte-identical adapter config is ignored by the MLX adapter loader: the app supplies the base path explicitly.
No GPU, conversion, inference, download or upload ran while making this bundle. The documented conversion command records the intended pinned recipe; the historical converted artifact has no conversion receipt, and its numerical acceptance tolerance was unset. Reproducible base shard bytes and a fresh clean-laptop live run remain unverified. Local base tensor storage is recorded as 15,670,482,954 bytes; disk size is not peak RAM.
Licence and acknowledgements
Adapter licence: Apache-2.0. Copyright 2026 AMK-bot. See the full LICENSE. The cached official base snapshot identifies Apache-2.0; its complete LICENSE, usage policy and model README are retained byte-identical. No upstream NOTICE file was present in that cached snapshot; no claim is made about uninspected remote files. The base-specific licence is not automatically the chosen adapter licence.
Credit Meta Superintelligence Lab for Muse Glimmer 30B, Meta's Muse Spark for inherited paraphrases and the reference comparison, Apple MLX and MLX-LM and their contributors, and Hu et al., LoRA: Low-Rank Adaptation of Large Language Models (2021). These pre-existing works, API services and data sources are not claimed as original StowLM work. No third-party work is relicensed by the adapter's chosen terms.
Quantized
Model tree for A-M-K/stowlm-reader-v3
Base model
meta-models/Muse-Glimmer-30B