SKYCONTROL command model (S1-2M, free wording)
A 2-million-parameter transformer that turns what an air traffic controller said into the command a simulator can carry out. It is the model inside SKYCONTROL, a browser game where you work ground, tower and approach at San Francisco by voice.
said: "emirates eight six five, come on down to seven thousand"
command: UAE865 Altitude 7000
It runs in the browser on a phone-class CPU: 2 MB download (int8), 0.24 s to load, 110β170 ms per command, no server.
What it does
The game gives the model the aircraft on frequency (callsign, spoken name, phase, altitude, heading) and the transcript of the controller's transmission. The model writes one command line, or SAY AGAIN when it cannot tell what was meant or who it was for.
<ctx>@APP 07
QFA76 qantas 76 ARR APP approach 11000ft h077 07
UAE865 emirates 865 ARR APP approach 9000ft h122 07
UAE880 emirates 880 ARR APP approach 10000ft h347 07<said> qantas 76 reduce speed 180 knots<cmd> -> QFA76 Speed 180
Because the callsigns come from the context, the model resolves "emirates eight six five" or "the Qantas" to the right aircraft. The game also constrains the first tokens to callsigns that are actually on frequency, so it can never invent an aircraft.
Results
Each test set runs through the game's full chain: text clean-up, rules, this model and the game's safety gate. "Sent wrong" means a command went out that the controller did not mean. Held commands ask the player to confirm instead.
| test set | sent right / sent wrong |
|---|---|
| Independent exam: 60 commands in everyday wording, written by a separate author | 51 / 2 |
| Stress exam: 86 commands + 34 non-commands in 12 hard categories | 81 / 3 |
| Casual speech end to end: the exam spoken by four voices, through the game's speech recogniser | 178 / 10 (of 208) |
| Standard phraseology, 190 commands | 181 / 4 |
| Non-commands correctly not sent | 108 of 115 |
Standard-phraseology exact match: 94 % (seen airports), 88 % (unseen airport), 79 % (speech-recogniser transcripts). The int8 export matches fp32 exactly on a 300-line check (web/quant_check.json).
Files
| file | what |
|---|---|
model.safetensors |
fp32 weights (PyTorch) |
model.py |
the architecture, written out in full: Llama-style pre-norm blocks, RoPE, SwiGLU, tied embeddings, KV cache |
bpe.py, tokenizer.json |
the byte-pair tokenizer (1,349 tokens) |
example.py |
runs the examples above |
web/model.json, web/model.bin |
int8 row-wise export the game loads in the browser (format atc-s1-web-1) |
train_config.json |
training settings |
pip install torch safetensors
python example.py
Architecture
| parameters | 2,030,208 |
| layers / width / heads | 4 / 192 / 6 |
| context | 512 tokens |
| vocabulary | 1,349 (BPE trained on ATC text) |
Training
- Data from the simulator. About 205,000 examples from 11 airports (SFO, Heathrow, JFK, LAX, CDG, Dubai, Boston, Hong Kong, Haneda, Delhi, Singapore). The game's rule-based AI controller works real traffic and each instruction it issues becomes an example, in the situation where it was issued. Speech-like noise is added: fillers, repeats, misheard words, callsign swaps. Non-commands are included as
SAY AGAINtargets. - Pre-training from scratch on that data, then GRPO with the simulator as the reward: a command earns reward only if the game accepts it and it does what was meant.
- Free-wording fine-tune. 26,000 game situations, each instruction said the way controllers talk off the book ("come on down to", "give me two one zero"). Mixed with 50,000β60,000 rows of the original data so standard phrasing is not forgotten. Every checkpoint was scored against the shipped model, and one ships only if it sends right more often and sends wrong no more often on every test set.
No real ATC recordings or third-party transcripts were used for training. All of the data is generated by the game.
Limits
- Numbers. Feed it text the way the game's clean-up step leaves it: spoken numbers folded to digits ("heading 300", "180 knots"). Raw digit-by-digit speech ("three zero zero") often gives
SAY AGAIN. - Mistakes. About 1 in 20 everyday-wording commands is still sent wrong. In the game a separate safety gate decides whether to send, confirm or ask again, so use something similar if commands have consequences.
- Phraseology. It learnt the game's command set and mostly FAA/ICAO-style phrasing. Accents and wordings outside that are not covered.
- Not for real-world use. It is a game model, not for operational air traffic control.
Links
- Play: https://openatc.aeon-labs.site
- Training write-up: https://openatc.aeon-labs.site/reports/command-model-free.html