Ammonix/AmmonixWtE-Writer-9B
AmmonixWtE-Writer-9B
The frozen local language model of the Ammonix Industrial Control-Room Agent: it writes the action payload after each decision — a bunker assignment, blend ratios and feed rate, a load target, a purchase or sale quantity and limit price. The action itself is chosen before the model is called — this model only writes, it never decides, and every payload must still pass the agent's runtime validator before execution.
This is the writer evaluated in the control-room paper (https://doi.org/10.5281/zenodo.22871228), a LoRA (r=32) trained on 160 payload pairs selected by simulated shift outcomes — no teacher model. The sealed evaluation served the base model with the un-merged adapter; that exact adapter is in adapter/. The repository root carries the same adapter merged into the base weights, for direct serving.
Evaluation
All results are simulated. The released agent with this writer in the language-model seat, against the same agent with the frozen base model:
Success is statistically indistinguishable between the two writers (McNemar p = 1.0 on the sealed cohort, p = 0.69 on the crisis benchmark); the fine-tune reduces simulated hard-limit violations. The traces, reports and a replayable UI of the sealed run ship in the code repository.
Training
- Data: fully synthetic. Every training pair comes from the simulated waste-to-energy plant; no real plant, operator or supplier data was used anywhere in training or evaluation.
- Outcome-selected SFT with no teacher model: for each sampled plant state the action is locked, candidate payloads are checked by the runtime validator and replayed in the simulator under 16 shared rollout seeds; a candidate becomes a training pair only if it avoids hard violations, then improves shift success, then mean outcome score beyond the simulation noise floor, and is confirmed on 16 separate seeds (160 pairs, 32 for each of
route_delivery,set_blend,adjust_load,buy_cover,sell_spot). - QLoRA (nf4), LoRA r=32, alpha 64, 2 epochs (40 optimizer steps), ~48 min on one consumer GPU, then merged into the base weights.
Merged weights and the sealed adapter
The merged weights are close to, not identical with, the sealed configuration: folding the adapter into bf16 weights rounds every summed weight once. On 10 real writer prompts (13,855 tokens) the merged model picks the same next token as base plus adapter at all 10 generation positions and at 97.4% of all positions (largest last-position logit difference 1.03906), and writes the identical greedy payload for 9 of 10 prompts. Use adapter/ on the pinned base when reproducing the paper; use the merged weights when LoRA serving is not available. merge_report.json records the check.
Limitations and out-of-scope use
- Trained and evaluated only on the synthetic plant; it has never seen a real facility, real suppliers, or real operating limits. Its payloads are fitted to one simulated world and five of its actions.
- It is a writer, not a decision-maker and not a safety function: outside the agent's harness (locked action, schema-constrained decoding, runtime validator) its outputs are unchecked. The results are simulated hard-violation performance under runtime constraint enforcement, not evidence of functional safety.
- Not for operating a real facility.
License
Released under the Ammonix Research License (LICENSE.md): research, educational, and evaluation use is free — including evaluation by a commercial organization deciding whether to seek a commercial license. Any commercial use requires a separate license from Ammonix — licensing@ammonix.ai.
Verify your download
Every shard's SHA-256 is pinned in the code repository (runs/manifests/writer_pin.json) and in merge_report.json here — your download should hash identically. The sealed adapter, adapter/adapter_model.safetensors, hashes to a76494a5ffad8887323d49bead723048397e9b86c5c055516945dc16f8edb967.
Use
Serve with vLLM (the agent's configuration: temperature 0, JSON-schema-constrained decoding, thinking disabled, context 4096). The system prompt is harness/prompts/m1_oven_v6_clean.txt in the code repository; the request carries the decided action's JSON schema.
# merged weights
vllm serve Ammonix/AmmonixWtE-Writer-9B --served-model-name Ornith-1.5-9B-wte-r2 \
--max-model-len 4096 --limit-mm-per-prompt '{"image":0,"video":0}' --reasoning-parser qwen3
# the sealed configuration: the pinned base with the adapter as a LoRA module
vllm serve ornith-ai/Ornith-1.5-9B --revision c927ad73b7eb --enable-lora --max-lora-rank 32 \
--lora-modules ornith-wte-r2=<local path of adapter/> --max-model-len 4096The adapter/ folder carries the un-merged LoRA for use on the pinned base (ornith-ai/Ornith-1.5-9B @ c927ad73b7eb).
Disclaimer: research demonstration on a fully synthetic plant world — not for operating a real facility, and no evidence of functional safety.
Cite
See the code repository's CITATION.cff (https://doi.org/10.5281/zenodo.22871228). Commercial licensing: licensing@ammonix.ai
