Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Tabular foundation models

These models do in-context classification or regression: you give them a small labeled support set (training rows) and a set of query rows to predict, and they run a single zero-shot forward pass — no fine-tuning, no training loop.

Four of the five (Mitra, TabDPT, TabICL, TabPFN-3) share one request format:

{
  "x_support": [[0.1, 1.2], [0.9, -0.3], [-1.1, 0.4]],
  "y_support": [0, 1, 1],
  "x_query": [[0.2, 0.9], [-0.8, 0.1]],
  "n_classes": 2
}

n_classes is only used for classification (ignored — may be omitted — for regression). Classification responses look like:

{"task": "classification", "probabilities": [[0.83, 0.17], [0.21, 0.79]]}

Regression responses:

{"task": "regression", "predictions": [1.53, 0.22]}

TabFM uses a different shape — see its own section below.

Each row below is the original model, not a reimplementation — zsfm convert downloads the exact published weights and this workspace’s inference code is verified bit-exact against the original PyTorch implementation. Links go to the original HuggingFace weights, the original authors’ source repo, and the paper.

Bold licenses restrict use to research/internal evaluation — see Licensing before relying on TabPFN-3 or TabFM for anything else.

Mitra

Paper: Mitra: Mixed Synthetic Priors for Enhancing Tabular Foundation Models.

zsfm mitra convert --model autogluon/mitra-classifier --task classification
zsfm mitra convert --model autogluon/mitra-regressor --task regression

zsfm mitra infer --gguf gguf/mitra-classification-f32.gguf --task classification < request.json
zsfm mitra infer --gguf gguf/mitra-regression-f32.gguf --task regression < request.json

--task on infer must match which checkpoint you loaded — the GGUF doesn’t self-describe which head it has. Zero-shot only (no fine-tuning path), no random-mirror augmentations (both scope decisions made deliberately to keep the port a single deterministic forward pass).

TabDPT

Paper: TabDPT: Scaling Tabular Foundation Models on Real Data.

zsfm tabdpt convert
zsfm tabdpt infer --gguf gguf/tabdpt-f32.gguf --task classification < request.json
zsfm tabdpt infer --gguf gguf/tabdpt-f32.gguf --task regression < request.json

One checkpoint serves both tasks — --task on infer just picks which output head to read. Single forward pass, no class-permutation ensembling.

TabICL

Papers: TabICL, TabICLv2.

zsfm convert --repo jingang/TabICL --file classifier-v2 --format ckpt -o gguf/tabicl-v2-f32.gguf
zsfm tabicl infer --gguf gguf/tabicl-v2-f32.gguf < request.json

Classification only, n_classes must be ≤ 10 (the >10-class mixed-radix/hierarchical path from the original model isn’t implemented). No dedicated convert subcommand — see the generic converter. The jingang/TabICL repo publishes 4 classifier checkpoints; classifier-v2 picks the one this port was verified against.

TabPFN-3

Paper: TabPFN-3: Technical Report.

zsfm convert --repo Prior-Labs/tabpfn_3 --file classifier-v3_default --format ckpt -o gguf/tabpfn-v3-f32.gguf
zsfm tabpfn infer --gguf gguf/tabpfn-v3-f32.gguf < request.json

Classification only (the regression bar-distribution head isn’t implemented). No dedicated convert subcommand. The repo publishes several checkpoint variants; classifier-v3_default is the one this port was verified against.

Licensed under tabpfn-3-license-v1.0non-commercial: research, testing, and internal benchmarking are explicitly fine, but the model, its derivatives, and its outputs can’t be used for any commercial or production purpose. See Licensing.

TabFM

Source: Google Research blog post.

TabFM’s request shape is a single combined table rather than separate support/query arrays:

zsfm tabfm convert   # classification by default; --task regression for the other variant

cat > request.json <<'EOF'
{
  "x": [[0.1, 1.2], [0.9, -0.3], [-1.1, 0.4], [0.2, 0.9]],
  "y": [0, 1, 1, 0],
  "train_size": 3
}
EOF
zsfm tabfm infer --gguf gguf/tabfm-classification-f16.gguf < request.json

x is [rows][columns], y is one label per row (any finite placeholder value at query-row positions is fine — it’s ignored), train_size is how many leading rows are the training set. Optional fields: cat_mask (marks categorical columns, default all-false) and d (actual unpadded feature count, default = number of columns).

TabFM also has a second, heavier command, ensemble-predict, that reproduces the full sklearn-wrapper pipeline (feature scaling, categorical encoding, n_estimators-member ensembling, calibration) bit-compatible with the original TabFMClassifier/TabFMRegressor’s default RNG — see zsfm tabfm ensemble-predict --help for its (considerably larger) request shape.

Licensed under the TabFM Non-Commercial License v1.0 — testing, evaluation, and internal benchmarking are fine; any commercial or production use (including client deliverables or revenue-generating decisions) requires a separate license from Google. See Licensing.