Three models you can redo

You do not have to take our word for it. Each case ships the rule its data was generated from, the training contract, the digests of everything, the package that predicts with no MatrixAI installed, and the verification report as it comes out.

And the third one does not come out clean. That is exactly why it is here: it trains on real observations, and there is no recipe that regenerates those, so only ONE of the four stages reaches a verdict: two come back INCOMPARABLE and the fourth never runs — and the report says so instead of keeping quiet.

How to read each case

Each one shows five things: the RECIPE (the rule that decides the data), the FILES in full —the model and its contract—, the exact COMMANDS, what COMES OUT when you run them, and the REPORT from `matrixai verify`, which regenerates the dataset, retrains the model and contrasts the published metrics. Below that: what the report proves, and what it does not.

What you need

Python 3.10 or newer and `pip install "matrixai-core[export]"`. Nothing else: no account, no LLM key, no GPU. The three cases run on a laptop.

Celsius to Kelvin

A regression whose answer you check with a subtraction.

dataset 5827acf2b2b6058d · recipe 7f332dbb7aa59ebf · 300 rows · seeds dataset 20260825 / split 42 / init 42

What it shows

The whole cycle with the four verification stages in PASS. This is the case that admits no argument: if the package returns 273.15 for 0 °C it works, and if it returned anything else you would see it without knowing any machine learning. ON YOUR MACHINE the fourth stage will say INCOMPARABLE and the command will exit with code 3, and that is the CORRECT answer: the tolerance was measured in the environment of the package and yours is a different one, so a difference there would prove nothing. The first three do come back PASS.

The recipe
predicted_kelvin = 1*celsius + 273.15

The recipe is the data, not decoration: the rows are generated from it, it ships inside the package as `data_recipe.txt`, and `verify` uses it to REGENERATE the dataset and compare its digest.

The files, in full

Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.

kelvin.mxai
PROJECT CelsiusToKelvin

VECTOR Reading[1]
  celsius: Scalar[-50, 150]
END

PARAM W1 Vector[1]
END

PARAM b1 Scalar
END

FUNCTION PredictedKelvinModel
  predicted_kelvin: Scalar = linear(W1 * Reading + b1)
END

GRAPH
  Reading -> PredictedKelvinModel
END
kelvin.mxtrain
MODEL kelvin.mxai

DATASET KelvinData
  SOURCE csv("datos/celsiustokelvin-synthetic-train.csv")
  INPUT Reading FROM COLUMNS [celsius]
  TARGET predicted_kelvin: Scalar[200, 450]
  SPLIT train=0.8 validation=0.2 seed=42
  BATCH size=8
END

LOSS KelvinLoss
  TYPE mse
  PREDICTION predicted_kelvin
  TARGET predicted_kelvin
END

OPTIMIZER KelvinOptimizer
  TYPE sgd
  LEARNING_RATE 0.5
  UPDATE W1, b1
END

RUN
  EPOCHS 200
END
Download the artefacts
  • paquete.zip — THE WHOLE PACKAGE: model.onnx + predict.py + inference_spec.json + reproduce.json. It predicts with `pip install onnxruntime` and nothing else
  • kelvin.mxai — the model
  • kelvin.mxtrain — the training contract
  • receta.txt — the data recipe
  • entrada.json — the example input (0 °C); the other two are entrada_100.json and entrada_-40.json
  • reproduce.json — the package manifest, to compare digests
  • salida.txt — the literal output of the five steps
Commands
matrixai generate-dataset kelvin.mxai --training kelvin.mxtrain \
  --rows 300 --seed 20260825 --mode coherent --recipe receta.txt -o datos
matrixai train kelvin.mxai --training kelvin.mxtrain --output runs/v1 \
  --recipe receta.txt --dataset-manifest datos/celsiustokelvin-synthetic-manifest.json
matrixai export-bundle kelvin.mxai --params runs/v1/params.best.json \
  --outdir paquete --training kelvin.mxtrain --data-recipe receta.txt --from-run runs/v1
cd paquete && python3 predict.py --input ../entrada.json
cd .. && matrixai verify paquete.zip --retrain
What comes out
R2: 1.000000
MAE: 6.50521e-17
Equivalence PASS: max_abs_diff=3.57e-08

  0 °C   -> 273.15000146627426
  100 °C -> 373.1500029563904
  -40 °C -> 233.15000236034393
The verification
manifest  PASS
R1        PASS
training  PASS
R3        PASS
What this proves

That the package you download holds that model and no other (manifest), that the dataset regenerates from the recipe with the same digest (R1), that retraining it here completes (training), and that the published metrics come out again (R3).

What it does NOT prove

That the model is good for anything beyond converting degrees. It is a control case: it exists so you can check the machinery, not to solve a problem.

Readmission risk (synthetic)

A classification with its TRIPOD+AI record written by the command.

dataset 1cefbf74e237efda · recipe 90376b2c20ee3bd8 · 400 rows · seeds dataset 20260825 / split 42 / init 42

What it shows

Everything the previous one shows, plus the document a journal asks for to publish a clinical prediction model — written from what the run recorded, and saying which boxes it CANNOT fill.

The recipe
alto: edad > 75 OR reingreso_previo > 0.5
DEFAULT: bajo

The data is SYNTHETIC and the record says so in its first line. A model trained this way is not clinically validated, and publishing the case without that sentence would be the problem, not the solution.

The files, in full

Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.

modelo.mxai
PROJECT ClassifierProject

VECTOR Input[4]
  edad: Scalar[18, 100]
  dias_ingresado: Scalar[0, 60]
  num_diagnosticos: Scalar[0, 15]
  reingreso_previo: Scalar[0, 1]
END

NETWORK Classifier
  INPUT Input
  LAYER Dense units=32 activation=relu
  LAYER Dense units=16 activation=relu
  LAYER Dense units=2 activation=softmax
  OUTPUT predicted_class: ProbabilityMap[alto, bajo]
END

GRAPH
  Input -> Classifier
END

AUDIT
  EXPLAIN Input -> Classifier
END
modelo.mxtrain
MODEL modelo.mxai

DATASET Reingreso
  SOURCE csv("datos/classifierproject-synthetic-train.csv")
  INPUT Input FROM COLUMNS [edad, dias_ingresado, num_diagnosticos, reingreso_previo]
  TARGET predicted_class: Label[alto, bajo]
  SPLIT train=0.8 validation=0.2 seed=42
  BATCH size=16
END

LOSS Perdida
  TYPE cross_entropy
  PREDICTION Classifier
  TARGET predicted_class
END

OPTIMIZER Optimizador
  TYPE sgd
  LEARNING_RATE 0.05
  UPDATE Classifier.*
END

RUN
  EPOCHS 60
END
Download the artefacts
  • paquete.zip — THE WHOLE PACKAGE: model.onnx + predict.py + inference_spec.json + reproduce.json. It predicts with `pip install onnxruntime` and nothing else
  • modelo.mxai — the model
  • modelo.mxtrain — the training contract
  • receta.txt — the data recipe
  • entrada.json — the example input (age 92); the other one is entrada_joven.json
  • ficha_tripod.en.md — the FULL TRIPOD+AI record in English, produced by the command (ficha_tripod.md is the Spanish one)
  • reproduce.json — the package manifest
  • salida.txt — the literal output of the six steps
Commands
matrixai generate-dataset modelo.mxai --training modelo.mxtrain \
  --rows 400 --seed 20260825 --mode coherent --recipe receta.txt -o datos
matrixai train modelo.mxai --training modelo.mxtrain --output runs/v1 \
  --recipe receta.txt --dataset-manifest datos/classifierproject-synthetic-manifest.json
matrixai export-bundle modelo.mxai --params runs/v1/params.best.json \
  --outdir paquete --training modelo.mxtrain --data-recipe receta.txt --from-run runs/v1
matrixai verify paquete.zip --retrain
matrixai report paquete --tripod --locale en -o ficha_tripod.en.md
What comes out
Accuracy: 0.968750

  age 92, prior readmission 0.9 -> {"alto": 1.0,    "bajo": 9.9e-11}
  age 25, no prior readmission  -> {"alto": 0.0002, "bajo": 0.9998}

# TRIPOD+AI record
> WARNING: the training data is SYNTHETIC…
- Predictors: edad (18–100), dias_ingresado (0–60),
  num_diagnosticos (0–15), reingreso_previo (0–1)
## What this record CANNOT fill in
- Missing data · Calibration · Subgroup fairness
- Funding · Conflicts · Ethical approval
The verification
manifest  PASS
R1        PASS
training  PASS
R3        PASS
What this proves

The first three stages in PASS, like the previous one — and the fourth will say INCOMPARABLE on your machine, for the same reason: a different environment, a different tolerance. And that predictions are made from RAW values — 92 years, not 0.9 — because the package carries the same normalization it was trained with.

What it does NOT prove

Nothing clinical. The data comes from a two-line rule written by a person: it is there to show the circuit, not to decide about anybody.

Will it rain tomorrow? (real data)

The case that CANNOT be fully proven — which is why it is here.

dataset b0bb8777559188aa · 2,189 rows · no recipe · seeds split 42 / init 42

What it shows

2,189 days of real weather observations. There is no recipe to regenerate that data, so `verify` leaves two stages INCOMPARABLE and says so in the package’s own words. This is what sets this product apart: what was not checked is stated.

The recipe

There is no recipe here and none was invented. Inventing one so the four stages would go green would have been exactly the lie these pages claim to avoid.

The files, in full

Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.

lluvia.mxai
PROJECT LluviaManana

VECTOR Parte[6]
  temp_max: Scalar[0, 45]
  humidity: Scalar[30, 100]
  pressure: Scalar[980, 1040]
  pressure_delta: Scalar[-20, 20]
  cloud_cover: Scalar[0, 100]
  precip_hours: Scalar[0, 24]
END

NETWORK Pronostico
  INPUT Parte
  LAYER Dense units=16 activation=relu
  LAYER Dense units=2 activation=softmax
  OUTPUT llueve_manana: ProbabilityMap[no, si]
END

GRAPH
  Parte -> Pronostico
END
lluvia.mxtrain
MODEL lluvia.mxai

DATASET Observaciones
  SOURCE csv("datos/lluvia_nombrada.csv")
  INPUT Parte FROM COLUMNS [temp_max, humidity, pressure, pressure_delta, cloud_cover, precip_hours]
  TARGET llueve_manana: Label[no, si]
  SPLIT train=0.8 validation=0.2 seed=42
  BATCH size=32
END

LOSS Perdida
  TYPE cross_entropy
  PREDICTION Pronostico
  TARGET llueve_manana
END

OPTIMIZER Optimizador
  TYPE sgd
  LEARNING_RATE 0.1
  UPDATE Pronostico.*
END

RUN
  EPOCHS 40
END
Download the artefacts
  • paquete.zip — THE WHOLE PACKAGE: model.onnx + predict.py + inference_spec.json + reproduce.json. It predicts with `pip install onnxruntime` and nothing else
  • lluvia.mxai — the model
  • lluvia.mxtrain — the training contract
  • lluvia_nombrada.csv — the 2,189 REAL days, with the classes named
  • dia.json — the humid example day; the dry one is dia_seco.json
  • reproduce.json — the package manifest
  • salida.txt — the literal output of the five steps
Where the data comes from

Daily observations from Open-Meteo (open-meteo.com), ERA5 reanalysis. Its API is free for non-commercial use and its data derives from ERA5 (Copernicus/ECMWF), published under CC BY 4.0. The CSV you download here is a selection of columns plus a derived label —«will it rain tomorrow»— computed by us; it is not the original data.

Commands
matrixai train lluvia.mxai --training lluvia.mxtrain --output runs/v1
matrixai export-bundle lluvia.mxai --params runs/v1/params.best.json \
  --outdir paquete --training lluvia.mxtrain --from-run runs/v1
cd paquete && python3 predict.py --input ../dia.json
matrixai verify paquete.zip --retrain
What comes out
Accuracy: 0.762557   (2,189 real days)

  humid day, pressure falling -> {"si": 0.943, "no": 0.057}
  dry day, high pressure      -> {"si": 0.260, "no": 0.740}
The verification
manifest  PASS
R1        INCOMPARABLE — «this model has no data recipe, so its dataset
          cannot be regenerated and compared; why there is none is not
          recorded in the package; the dataset generation seed is unknown»
training  INCOMPARABLE — the dataset could not be regenerated, so there is
          nothing to train on
R3        NOT_RUN

The reason is in English because it is what the PACKAGE wrote about itself, and here it is quoted rather than translated: those bytes are covered by its own digest, and translating them would put words in its mouth.

What this proves

That the package is intact and holds what it says (manifest PASS), and that it predicts from raw values with no MatrixAI installed.

What it does NOT prove

That its data is what it claims, because the data does not travel. A 76.3% on data that cannot be regenerated is a claim you have to take on trust; the report writes that down instead of hiding it behind a PASS.

If something does not come out the same

The seeds and digests are published above, and each case ships its own `reproduce.json`: if your dataset comes out with a different digest, something changed and it is worth knowing what. Compare your `matrixai verify` against the `salida.txt` you can download here — a case that does not reproduce is more useful than one that does.

Where to next
How the proof works: receipts, verify and TRIPOD+AIWhat all this is for: the EU AI Act

Measured on 25 August 2026 by running the three scripts end to end. The figures on this page are the literal output of those commands.