Instructions to use Ammonix/AmmonixWtE-Writer-9B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Ammonix/AmmonixWtE-Writer-9B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Ammonix/AmmonixWtE-Writer-9B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("Ammonix/AmmonixWtE-Writer-9B") model = AutoModelForMultimodalLM.from_pretrained("Ammonix/AmmonixWtE-Writer-9B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Ammonix/AmmonixWtE-Writer-9B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Ammonix/AmmonixWtE-Writer-9B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Ammonix/AmmonixWtE-Writer-9B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Ammonix/AmmonixWtE-Writer-9B
- SGLang
How to use Ammonix/AmmonixWtE-Writer-9B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Ammonix/AmmonixWtE-Writer-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Ammonix/AmmonixWtE-Writer-9B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Ammonix/AmmonixWtE-Writer-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Ammonix/AmmonixWtE-Writer-9B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use Ammonix/AmmonixWtE-Writer-9B with Docker Model Runner:
docker model run hf.co/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:
| Evaluation | This model | Ornith 1.5 9B (base) |
|---|---|---|
| Sealed cohort, 200 shifts, run once | 178/200 (89.0%), 0 hard-limit violations | 177/200 (88.5%), 0 |
| Stratified crisis benchmark, 570 shifts | 373/570 (65.4%), 6 hard-limit violations | 377/570 (66.1%), 11 |
| Comparison cohort, 200 shifts (the development cohort of this adapter) | 177/200, 1 | 175/200, 2 |
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 4096
The 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
- Downloads last month
- 162