Run locally
Install the Python package and run inference on your own machine or server.
Call the API
Send a request to our hosted endpoint. No setup, no GPU required.
Local
Install the open-source package:model="nori-30m" for the larger variant (see Models).
Your first prediction
NoriRegressor is a scikit-learn–style estimator: fit stores your labeled rows as context (there is no training step) and predict returns one value per query row in a single forward pass.
With a DataFrame
Prediction intervals
Nori returns a full predictive distribution, so you get uncertainty for free — passoutput_type="quantiles":
Handle missing values
You don’t need to fill in missing values beforehand — the model handles them natively.API
The hosted API runs the same model on our infrastructure — no installation or GPU required. Set up your API key in the API key guide. Install the client:Make a request
Send your labeled rows (X_train, y_train) and the rows you want to predict (X_test) in a single call:
Bearer scheme).
Request body
| Field | Required | Description |
|---|---|---|
model | Required | The model slug — synthefy/nori (base) or synthefy/nori-30m. Routes the request to the model — omitting it returns a 400. |
task | Optional | "regression" or "reg"; defaults to "regression". This is a regression-only deployment. |
X_train | Required | Context feature matrix, n_context × n_features (array of arrays of numbers). |
y_train | Required | Context targets, aligned 1:1 with X_train rows (array of numbers). |
X_test | Required | Query feature matrix, n_query × n_features (array of arrays of numbers). |
null/NaN cells are allowed in X_train and X_test and are imputed server-side.
Request size limit
The limit applies to the whole request, i.e. all ofX_train, y_train, and X_test together. Since size grows with rows × features, you only approach 100 MB with very large inputs (on the order of millions of values).
If you hit the limit, send fewer example rows, use fewer features, or split X_test into smaller batches. You can reuse the same X_train/y_train across those calls.
Response
The client returns one value per row inX_test as a plain list:
200 (values illustrative):
predictions — one value per X_test row, in order. The response also includes a usage block (token counts) for API compatibility; it isn’t meaningful for a tabular model, so you can ignore it. (The Python client returns just the predictions list.)
The first request after a scale-to-zero idle triggers a checkpoint download and warmup and can take ~60–90 seconds. Warm requests return in ~1–2 seconds.
Models
Nori comes in two sizes. Select one with themodel parameter — a friendly name works everywhere (client and package, local and remote):
| Model | Params | model= name | API slug | Notes |
|---|---|---|---|---|
| Nori | ~6M | "nori" / "nori-6m" | synthefy/nori | General-purpose tabular in-context regression. The default. |
| Nori-30M | ~29M | "nori-30m" | synthefy/nori-30m | Larger scaling-law variant. |
model defaults to the ~6M base ("nori"). In local mode the selector now picks the checkpoint too (downloaded from Hugging Face on first use). The raw API slug (e.g. synthefy/nori) is also accepted by the client, and it’s what the cURL endpoint expects in the model field.
Resources
API key
Set up your API key to call the hosted Nori API.
Product page
Learn more about Synthefy Nori (Tabular).
GitHub
Source code for training, inference, and evaluation.
Hugging Face
Pretrained model weights.