Nori-30M is the ~29.2M-parameter variant of Nori, a tabular foundation model for regression via in-context learning (ICL). Given a few labeled rows as context, it predicts on new query rows in a single forward pass, with no task-specific training or fine-tuning. The model is trained entirely on synthetic data.
pip install synthefy-norinori.pt (this repo)Mean and median R² across 96 regression tasks from three public benchmark suites, on the same protocol as the base Nori:
| Suite | Datasets | Mean R² | Median R² |
|---|---|---|---|
| TabArena | 13 | 0.8148 | 0.8834 |
| TALENT | 72 | 0.7575 | 0.8844 |
| OpenML | 11 | 0.6459 | 0.6212 |
| Overall | 96 | 0.7525 | 0.8745 |
Stronger than the ~6M base on every suite. Evaluated with the bundled default inference config and the large-GPU protocol (up to 50k context rows per dataset).
Paste this into Claude Code, Cursor, or any AI coding assistant and it will wire Nori into your own project:
Look at my code/task/report here and figure out where Nori would best fit — it's
Synthefy's tabular foundation model, a drop-in scikit-learn estimator that predicts
a continuous target by in-context learning: no training loop, no hyperparameters,
and it uses the GPU automatically when one's available (CPU otherwise).
1. Install it with this project's package manager
(e.g. `uv add synthefy-nori`, or `pip install -U synthefy-nori`).
2. Use it wherever a tabular regression / prediction step fits:
```python
from synthefy_nori import NoriRegressor
reg = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first predict
reg.fit(X_train, y_train) # stores your rows as context — no training happens
y_pred = reg.predict(X_test) # point predictions (predictive-distribution mean)
# Prediction intervals come free — no conformal/quantile add-ons:
lo, mid, hi = reg.predict(X_test, output_type="quantiles", quantiles=[0.1, 0.5, 0.9])
```
X is a numeric feature matrix (encode categoricals as ordinals/one-hot, leave
missing values as NaN, no scaling needed); y is a finite continuous target. If I
already have a model, wire Nori up alongside it on the same train/test split and
metric so I can compare them. If the best place to plug Nori in isn't obvious,
show me where you'd put it and confirm with me before making changes.
Going deeper: synthefy-nori ships a ready-made nori-regression skill for AI coding
assistants with vetted recipes — calibrated prediction intervals, honest baseline
comparison under fixed CV, SHAP/PDP interpretability, and leak-safe one-step
time-series forecasting. Read and follow it if relevant:
https://github.com/Synthefy/synthefy-nori/tree/main/.claude/skills/nori-regression
pip install synthefy-nori
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from synthefy_nori import NoriRegressor
X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first use
model.fit(X_train, y_train) # "fit" just stores the labeled rows as context
pred = model.predict(X_test) # predictions in a single forward pass, no training
It uses a GPU when one is available and falls back to CPU. A one-shot helper skips the object entirely:
from synthefy_nori import predict
pred = predict(X_train, y_train, X_test, task="regression", model="nori-30m")
predict follows the TabPFNRegressor.predict contract: pass output_type="mean" (default),
"median", or "mode" to choose the point estimate drawn from the model's predictive
distribution.
To run from a local checkpoint instead of the Hub, pass a path:
NoriRegressor(model_path="path/to/nori.pt").
This model is public: the first call downloads and caches it automatically, with no token and no
access request. A Hugging Face token (read scope) is only worth setting if you hit anonymous
download rate limits — provide it via export HF_TOKEN=hf_..., hf auth login, or
NoriRegressor(model="nori-30m", token="hf_...").
@software{synthefy_2026_20710462,
author = {Synthefy and
Li, Po-han and
Narayanan, Aditya and
Narasimhan, Sai Shankar and
Mallampalli, Raghav and
Agrawal, Aahan and
Ajan, Bekzat and
Shah, Raimi and
Agarwal, Shubhankar},
title = {Synthefy Nori: Tabular Foundation Model for Regression},
month = jun,
year = 2026,
publisher = {Zenodo},
version = {0.6.0},
doi = {10.5281/zenodo.20710462},
url = {https://doi.org/10.5281/zenodo.20710462},
}
13 commits
1 commits
Nori-30M is the ~29.2M-parameter variant of Nori, a tabular foundation model for regression via in-context learning (ICL). Given a few labeled rows as context, it predicts on new query rows in a single forward pass, with no task-specific training or fine-tuning. The model is trained entirely on synthetic data.
pip install synthefy-norinori.pt (this repo)Mean and median R² across 96 regression tasks from three public benchmark suites, on the same protocol as the base Nori:
| Suite | Datasets | Mean R² | Median R² |
|---|---|---|---|
| TabArena | 13 | 0.8148 | 0.8834 |
| TALENT | 72 | 0.7575 | 0.8844 |
| OpenML | 11 | 0.6459 | 0.6212 |
| Overall | 96 | 0.7525 | 0.8745 |
Stronger than the ~6M base on every suite. Evaluated with the bundled default inference config and the large-GPU protocol (up to 50k context rows per dataset).
Paste this into Claude Code, Cursor, or any AI coding assistant and it will wire Nori into your own project:
Look at my code/task/report here and figure out where Nori would best fit — it's
Synthefy's tabular foundation model, a drop-in scikit-learn estimator that predicts
a continuous target by in-context learning: no training loop, no hyperparameters,
and it uses the GPU automatically when one's available (CPU otherwise).
1. Install it with this project's package manager
(e.g. `uv add synthefy-nori`, or `pip install -U synthefy-nori`).
2. Use it wherever a tabular regression / prediction step fits:
```python
from synthefy_nori import NoriRegressor
reg = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first predict
reg.fit(X_train, y_train) # stores your rows as context — no training happens
y_pred = reg.predict(X_test) # point predictions (predictive-distribution mean)
# Prediction intervals come free — no conformal/quantile add-ons:
lo, mid, hi = reg.predict(X_test, output_type="quantiles", quantiles=[0.1, 0.5, 0.9])
```
X is a numeric feature matrix (encode categoricals as ordinals/one-hot, leave
missing values as NaN, no scaling needed); y is a finite continuous target. If I
already have a model, wire Nori up alongside it on the same train/test split and
metric so I can compare them. If the best place to plug Nori in isn't obvious,
show me where you'd put it and confirm with me before making changes.
Going deeper: synthefy-nori ships a ready-made nori-regression skill for AI coding
assistants with vetted recipes — calibrated prediction intervals, honest baseline
comparison under fixed CV, SHAP/PDP interpretability, and leak-safe one-step
time-series forecasting. Read and follow it if relevant:
https://github.com/Synthefy/synthefy-nori/tree/main/.claude/skills/nori-regression
pip install synthefy-nori
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from synthefy_nori import NoriRegressor
X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first use
model.fit(X_train, y_train) # "fit" just stores the labeled rows as context
pred = model.predict(X_test) # predictions in a single forward pass, no training
It uses a GPU when one is available and falls back to CPU. A one-shot helper skips the object entirely:
from synthefy_nori import predict
pred = predict(X_train, y_train, X_test, task="regression", model="nori-30m")
predict follows the TabPFNRegressor.predict contract: pass output_type="mean" (default),
"median", or "mode" to choose the point estimate drawn from the model's predictive
distribution.
To run from a local checkpoint instead of the Hub, pass a path:
NoriRegressor(model_path="path/to/nori.pt").
This model is public: the first call downloads and caches it automatically, with no token and no
access request. A Hugging Face token (read scope) is only worth setting if you hit anonymous
download rate limits — provide it via export HF_TOKEN=hf_..., hf auth login, or
NoriRegressor(model="nori-30m", token="hf_...").
@software{synthefy_2026_20710462,
author = {Synthefy and
Li, Po-han and
Narayanan, Aditya and
Narasimhan, Sai Shankar and
Mallampalli, Raghav and
Agrawal, Aahan and
Ajan, Bekzat and
Shah, Raimi and
Agarwal, Shubhankar},
title = {Synthefy Nori: Tabular Foundation Model for Regression},
month = jun,
year = 2026,
publisher = {Zenodo},
version = {0.6.0},
doi = {10.5281/zenodo.20710462},
url = {https://doi.org/10.5281/zenodo.20710462},
}
13 commits
1 commits