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:"nori-100m", "nori-30m", or "nori-6m". Omitting model= raises
instead of silently selecting a 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, so no installation or GPU is required. Set up your API key in the API key guide. From Python, use thesynthefy client. The same call works in
either place: mode="remote" sends your rows to the
hosted endpoint, while mode="local" runs the model on your machine. The
client never selects a mode automatically.
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
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 it
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 the request dimensions used for metering and billing inside an
OpenAI-compatible usage object: prompt_tokens is the number of context rows,
and completion_tokens is the number of feature columns. The Python client
returns only the predictions list.
The first request after a scale-to-zero idle starts a replica, loads the baked
checkpoint, and warms the model; it can take ~60–90 seconds. Warm requests
return in ~1–2 seconds.
Models
Select a model with themodel parameter. Nori, Nori-30M and Nori-100M run
locally or on the hosted API, and their names work in both the Python client
(SynthefyNoriClient) and the synthefy-nori package (NoriRegressor).
Nori Thinking is hosted-API only.
model=name — what you pass toSynthefyNoriClient(model=…)orNoriRegressor(model=…).- Hosted-API id — the value in the request body’s
modelfield on the raw HTTP endpoint (what the cURL example sends). The client fills it in for you from the friendly name; local inference doesn’t use it. - Availability — Local + API runs on your machine (weights download from Hugging Face on first use) or on the hosted endpoint. API only runs on the hosted endpoint only.
Nori-100M is the largest Nori. Its checkpoint is
Synthefy/Nori-100M (42 layers,
embed_dim 352, 8 heads). Run it locally with
NoriRegressor(model="nori-100m"), which pulls the weights from Hugging Face on
first use, or on the hosted API with model="nori-100m". It carries ~3× the
parameters of Nori-30M, so expect a larger download and more GPU memory per
call — see Large Tables if you run out.Nori Thinking is hosted-API only. It spends extra test-time compute to lift
accuracy, is slower and premium-priced, and has no downloadable checkpoint. Only
the medium budget is available today; both
"nori-30m-thinking" and
"nori-30m-thinking-medium" route to it. Selecting Thinking for local inference
(SynthefyNoriClient(mode="local", …) or
NoriRegressor(model="nori-30m-thinking-medium")) raises an error pointing you
at the hosted API. Use mode="remote".GET /forecasting-api/nori/available-models, and shown per
model in the console.
"nori-6m", "nori-30m", or — for local inference —
"nori-100m". Both the synthefy client and NoriRegressor require
model= and raise a ValueError if you omit it — there is no default, so no
request silently runs on a size you did not choose. In local mode the
selector picks the checkpoint (downloaded from Hugging Face on first use). The
raw Hosted-API slug (e.g. synthefy/nori-30m) is also accepted by the client
and is what the cURL endpoint expects in the model field.
Next steps
Python Client
Auth, retries, DataFrames and text columns, handled for you.
Examples
End-to-end worked examples on real datasets.
Missing Values & Imputation
Pass NaNs straight through, with no pre-filling required.
Explainability
SHAP values, feature interactions, and partial dependence.
Run it in your cloud
Deploy on Amazon SageMaker, or call Nori from Snowflake SQL.
Product page
Learn more about Synthefy Nori (Tabular).