Instructions to use fabsssss/qwen3-coder-30b-a3b-space with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use fabsssss/qwen3-coder-30b-a3b-space 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("fabsssss/qwen3-coder-30b-a3b-space") 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 fabsssss/qwen3-coder-30b-a3b-space with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Generate some text mlx_lm.generate --model "fabsssss/qwen3-coder-30b-a3b-space" --prompt "Once upon a time"
qwen3-coder-30b-a3b-space (SSAO)
A fine-tune of Qwen3-Coder-30B-A3B (8-bit MLX) that writes valid RDF Turtle using the Space Situational Awareness Ontology (SSAO) for space objects, and that judges proposed catalogue-to-ontology alignments with instance evidence.
To our knowledge this is the first openly published language model targeting a space-domain ontology. Built by Tesseract Academy.
Why this exists
The base model already knows a great deal about orbits. What it cannot do is
use a specific ontology's actual vocabulary: asked for SSAO Turtle, it invents
plausible camelCase terms (ssao:SpaceObject, ssao:launchDate,
ssao:OrbitalElements) that do not exist in SSAO, at a measured rate of
13.8 invented terms per output, and it declares no prefixes, so nothing it
emits parses. Those outputs look right and are unusable.
This matters beyond tidiness. The companion study (full write-up, repository) measured that SSAO declares exactly one disjointness axiom, so 351 of its 353 classes can never participate in a provable contradiction: a reasoner will accept almost any wrong classification silently. A model that invents terms in a domain whose ontology cannot reject them is a quiet corruption engine. Hence a model trained to stay inside the real vocabulary, and an evaluation that counts hallucinated terms as the headline metric.
Results (held-out test set, n=99, greedy decoding)
| Metric | Base | This model |
|---|---|---|
| Turtle parse rate | 0.0% | 98.6% |
Term conformance (every ssao: term real) |
0.0% | 97.2% |
| Hallucinated terms per output | 13.81 | 0.06 |
| Namespace fidelity | 33.3% | 100% |
| Primary class accuracy | 36.1% | 100% |
| Orbit regime accuracy | 0.0% | 80.6% |
| Term lookup / alignment judgement / regime naming | 0.0% | 73.9% |
| Refusal rate on unanswerable questions | 75% | 100% |
Validator and metrics: scripts/spaceval.py.
Term conformance and the hallucination count are computed against the
authoritative term set extracted from the ontology itself (554 terms), so they
are membership facts rather than judgements.
What it does
Five task families, all learned from data derived from a real catalogue:
- Catalogue record to Turtle. Prose or field-list description of a space object, in; SSAO-typed Turtle with correct prefixes, out.
- Term lookup. "Which SSAO class denotes a spent launch stage?" ->
ssao:Rocket_Body_Debris, with SSAO's own definition. - Alignment judgement. A proposed correspondence between a catalogue vocabulary and SSAO, in; accept or refuse with the argument and the instance-level witness count, out. We are not aware of another public dataset or model covering this task.
- Orbit regime classification from orbital elements, with the threshold cited.
- Refusal on questions the catalogue cannot answer (fragmentation versus mission-related debris, manoeuvre intent, mass from a size class).
Usage
This repository ships the LoRA adapter (282 MB) rather than a 30 GB fused copy of the base model: it is the same weights, a much smaller download, and it keeps the base model's own updates available to you. Load the base with the adapter applied:
from mlx_lm import load, generate
model, tokenizer = load(
"mlx-community/Qwen3-Coder-30B-A3B-Instruct-8bit",
adapter_path="adapters", # from this repo
)
messages = [
{"role": "system", "content":
"You are a space-domain knowledge engineer. You express facts about space "
"objects as RDF Turtle using the Space Situational Awareness Ontology "
"(SSAO), namespace <https://purl.org/space-ontology/> bound to prefix "
"ssao:. You use only terms that exist in SSAO. When the catalogue cannot "
"determine something, you say so instead of guessing."},
{"role": "user", "content":
'Express this catalogue record as SSAO Turtle.\n\nCatalogue entry 25544: '
'"ISS (ZARYA)", a payload; registered to ISS; launched 1998-11-20; status '
'operational; elements: period 92.8, inclination 51.6, apogee 420, perigee 412.'},
]
prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
print(generate(model, tokenizer, prompt=prompt, max_tokens=400))
To bake the adapter into a standalone model (dequantise, merge and requantise per layer), one command:
python -m mlx_lm fuse \
--model mlx-community/Qwen3-Coder-30B-A3B-Instruct-8bit \
--adapter-path adapters --save-path fused_model
Training
QLoRA over the 8-bit MLX base with mlx_lm.lora: 700 iterations, batch size 2,
sequence length 1400, learning rate 1e-4, 8 layers, on an M3 Max.
Validation loss 2.496 to 0.141. Roughly 15 minutes of training; the data
took considerably longer than the fit.
Data
fabsssss/ssao-space-instruct:
1,245 examples (1,072 train / 74 validation / 99 test), built
correct-by-construction rather than authored. Every Turtle target is
generated from a real CelesTrak SATCAT record (snapshot 2026-07-29, hash-pinned)
by applying a published, argued SATCAT-to-SSAO alignment, so the ontology terms
are correct by derivation. A fail-closed vocabulary gate refuses to write
the dataset if any ssao: term in any target is absent from the ontology.
That gate exists because it caught us: the first version of the builder invented
hasOrbit and hasInclination, which SSAO does not define (it uses has_Orbit,
has_Orbital_Inclination). Without the gate we would have trained the model to
hallucinate fluently, which is precisely the failure the project studies.
Limitations, stated plainly
- The domain's canonical error survives at a low rate. Of 14 regime errors, 3 are geostationary orbits labelled geosynchronous. Note the direction: every geostationary orbit is geosynchronous, so the model loses precision rather than asserting a falsehood. Two errors (highly elliptical labelled medium Earth orbit) are genuine mistakes.
- Residual hallucinations are near-misses, not inventions from nothing:
Has_COSPAR_number(capitalisation),has_Country_of_Orbital_Inclination(two real property names spliced),has_Resident_Space_Object(a class used as a property),Extended_Mission(plausible, absent). One occurrence each across 72 outputs. Downstream systems should still run a closed-world vocabulary check; this model reduces the error rate by roughly 250x, it does not eliminate it. - It will volunteer fields you did not give it. In a smoke test on the ISS
with no COSPAR number in the prompt, the model emitted
ssao:has_COSPAR_number "1998-067A", which is correct, recalled from pretraining. For a famous object that is helpful; for an obscure one the same behaviour can fabricate a designator that the vocabulary gate cannot catch, because the term is real and only the value is invented. Validate literal values against your own catalogue, not just the ontology terms. - Property coverage is narrow. Training used the handful of SSAO properties the catalogue can populate honestly (COSPAR number, country of origin, launch date, orbit, inclination, period, perigee, apogee). SSAO defines 150 properties; most are untrained.
- One catalogue, one ontology. No claim transfers to DISCOS, to other space ontologies, or to text-heavy sources such as launch announcements.
- The alignment-judgement task is trained on our own argued crosswalk. It reproduces that curation, including its confidences. It is a reviewable position, not ground truth.
- Space operations are safety-relevant. Nothing here is validated for operational use; treat output as a draft for human and machine checking.
Attribution
- SATCAT data courtesy of CelesTrak (T.S. Kelso).
- The Space Situational Awareness Ontology is by Robert J. Rovetto; the
copy used is the one vendored by the NASA
mission-vizproject. Rovetto's satellite-database work proposed SSAO as a reference ontology for catalogue sources; this model is one execution of that idea. - Base model: Qwen3-Coder-30B-A3B (Apache 2.0), 8-bit MLX conversion by mlx-community.
Citation
@misc{rovai2026ssaollm,
author = {Rovai, Fabio},
title = {qwen3-coder-30b-a3b-space: a language model for the Space
Situational Awareness Ontology},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/fabsssss/qwen3-coder-30b-a3b-space}}
}
Quantized
Model tree for fabsssss/qwen3-coder-30b-a3b-space
Base model
Qwen/Qwen3-Coder-30B-A3B-Instruct