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.
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.
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
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.
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.
Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.
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
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- 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
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
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
manifest PASS R1 PASS training PASS R3 PASS
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).
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
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.
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.
Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.
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
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- 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
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
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 approvalmanifest PASS R1 PASS training PASS R3 PASS
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.
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
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.
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.
Copy them as they are into an empty directory, next to the recipe. They are all you need: the commands above generate the rest.
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
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- 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
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.
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
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}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_RUNThe 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.
That the package is intact and holds what it says (manifest PASS), and that it predicts from raw values with no MatrixAI installed.
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.
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.