The manual of expert mode — the phases interface, where you build one network yourself. One model walked through its whole life — build it, feed it, train it, audit it, question it, package it. Each phase states what it has and what it still needs, so you always know where the model stands.
This is the manual of expert mode, not of the Studio’s main path. The main path is the study: you frame the problem and several engines compete on your data (it is told in the Studio tour). Expert mode is the other way of working: you describe one model in a sentence, upload a CSV or start from a template, and the core builds that one network, phase by phase. Nothing in it makes engines compete. To turn it on, press Turn on expert mode on the Studio’s home screen; it stays on until you turn it off. It opens in the phases interface, the Classic interface link in the top bar takes you across whenever you want it, and both talk to the same core. If you need to ask for one by address, /fases and /clasica are the canonical forms, and ?fases and ?clasica work too — they are permanent aliases, not a transition. The screenshots below were taken before the study existed: they show the three doors and the right-hand column; today, above them, there are also the study block and the “Expert mode on” bar.
Every screenshot on this page comes from a real session, driven from the first screen to the last. Nothing here is a mock-up.
The model being walked through was built from a single sentence — Predict whether a shipment will arrive late from the distance in kilometres, the weight in kilos and the number of stops — and trained on 200 rows that the core generated for it. Generated rows carry no real relationship, so the training numbers you will see are chance level. They are here to show what each phase reports, not to claim a result. Feed it a CSV with a real relationship in it and the screens are the same; only the numbers change.
With expert mode on, the first screen asks for one thing: what the model has to do. There are three ways to answer, and the column on the right states up front what the core will do with your answer — read the data and infer types, propose an architecture with its rationale and its alternative, and validate the result on every change so that whoever audits sees the same object as whoever creates.
Under the three doors, Projects lists everything already built: its state and the metric that matters for its kind of model, where its data came from, and how long ago it was touched. The × on the right removes one.
The catalogue states its own promise at the top: Start from a ready-made example. You will see what it does and what it does not before creating anything. Each card carries what the example predicts, its category and difficulty, whether it downloads anything from the internet, and a See what it does button. The Santander rain example carries a red line of its own — its data does not allow commercial use — on the card, not buried in a licence you meet later.
Build model stays dim while there is nothing to build. As soon as the box has text it lights up.
While the core works, the button becomes Building… and a Cancel appears beside it. A build you can stop is a build you can afford to try.
When the build finishes the screen changes shape. The name of the model moves into the top bar next to a WIRED TO THE CORE badge, with Save, a link back to the Classic interface, the language switch and Settings on the right. The status line at the bottom reports three things at once: whether the core is connected, which LLM provider is configured, and whether the IR — the object every check runs against — is valid.
The rail on the left is the model's own state, and it is readable from inside any phase. Each entry carries a one-line summary of itself: Model · 64 → 32 → 1 · 2,369 parameters · 3 warnings, Data · 200 rows, Training · completed, Audit · 6 checks · 1 warning. A phase with nothing to report shows only its number and its name. A tick means done; an exclamation mark means done with something to read. Collapse at the bottom folds the rail away.
The first phase holds the architecture the core proposed for your sentence or your columns, and the rail keeps its summary in view from everywhere else: the widths of the layers, the number of trainable parameters, and how many warnings the build raised.
The numbers are checkable, which is the point of printing them. This model takes the three fields the sentence named — distance, weight and number of stops — into a 64 → 32 → 1 dense network: 3×64+64, then 64×32+32, then 32×1+1. That is exactly the 2,369 parameters the rail reports.
Nothing trains without rows, and the phase says so plainly: This model has no data yet. Two routes out, and both end the same way — whatever arrives is validated against this model before being accepted.
Once there are rows, the phase turns into a reading of them — and it is careful about which part of that reading is authoritative:
When an LLM provider is configured, the panel declares it rather than letting you assume: the line above the file states that the core used its LLM provider to propose the domain rules for this data.
Before you press anything, the phase tells you what pressing it will give you: the current epoch, the loss and accuracy curves, the core log, and the comparison with earlier runs. Then one button.
When the run ends, everything it produced is on one screen:
METRIC lines, epoch by epoch, exactly as it wrote them.stdlib · cpu.Audit is not a summary of the training. It is the set of checks the core runs against the model itself, and the header states the rules it plays by: deterministic, and re-run on every change to the IR — so the verdict cannot go stale behind your back.
Six checks are listed by name with their result: parser, verifier_agent, safety_agent, typecheck, python_compiler and backend_contract. Where a check has something to add it adds it under its own name — the type check prints what it typed: the network, its interpretability level marked reduced, and the reason on the same line, that it is a dense neural network with hidden layers.
Below them, kept deliberately separate, sit the pipeline stages with no control attached: the parts of the build that nothing can pass or fail, listed with whatever they did report. In this run, the generator's reason for choosing a dense architecture, and the training verifier's caveat that the CSV was validated but no dataset manifest was provided for hashes and splits. They are printed with the reason they carry no verdict, instead of disappearing under a green tick.
Every input is a slider, and under every slider is the domain the model expects — this one takes a distance from 1 to 5,000, a weight from 1 to 1,000 and 0 to 50 stops. You cannot quietly ask the model about a case it was never built for, because the range it was built for is written where you set the value.
Press Run model and the right-hand column fills — with the answer, and with everything you need to know how much of it to believe:
The last phase packages the model, and it starts by admitting it has not done so yet: There is no package yet. Three formats, each described by what it really is rather than by a label:
.onnx — a single model file (large models come out as a .zip with model.onnx and its weights apart). Runs on any platform with an ONNX Runtime..zip — an ONNX Runtime Web bundle, for browsers and Node.js..zip — self-contained: the ONNX model, the manifests and the script that serves it.The text above the list names the one that stands on its own: the self-contained bundle is the only one that opens and predicts without you writing anything. It carries the model in ONNX, a predict.py that loads it and validates the schema, the manifest with its hashes, and the card with its metrics and its limits. Build the package produces it.