TabICL Models
TabICL is a tabular foundation model: a transformer pretrained on millions of synthetic tables. Workbench supports it as a regression framework, with the same training, deployment, inference, and confidence scoring as every other framework.
TabICL learns in context. Nothing is trained on your data; the model reads your training rows at prediction time and predicts from them in one forward pass. That makes it quick to build and strong on small and medium datasets, and it changes how the model is served (see Endpoints).
Creating a TabICL Model
from workbench.api import FeatureSet, ModelType, ModelFramework
fs = FeatureSet("aqsol_features")
features = ["molwt", "mollogp", "molmr", "heavyatomcount", "numhacceptors", "numhdonors", "tpsa"]
# Regression with uncertainty quantification
model = fs.to_model(
name="sol-tabicl-reg",
model_type=ModelType.UQ_REGRESSOR,
model_framework=ModelFramework.TABICL,
target_column="solubility",
feature_list=features,
description="TabICL regression for solubility",
tags=["tabicl", "solubility"],
)
# Deploy and run inference
endpoint = model.to_endpoint()
endpoint.test_inference()
TabICL reads tabular features, so give it descriptor columns (RDKit, Mordred, or your own), not SMILES. Missing values and categorical columns are handled by TabICL itself.
How a TabICL Model Is Built
| Step | What happens |
|---|---|
| Cross-validation | Fold models produce out-of-fold predictions for the model's metrics and uncertainty calibration. They are not served. |
| Served model | One fit on every training row. The rows are cached inside the model, so a request costs only its own rows. |
| Uncertainty | TabICL's own predictive distribution feeds Workbench's confidence model. |
| Feature importance | SHAP values from TabICL's explainer. |
| Memory probe | The training job measures how much memory the saved model needs to serve. |
A fold model sees 80% of the rows as context, so the cross-fold metrics are a slightly conservative estimate of the served model, which sees all of them.
Hyperparameters
model = fs.to_model(
name="sol-tabicl-pca",
model_type=ModelType.UQ_REGRESSOR,
model_framework=ModelFramework.TABICL,
target_column="solubility",
feature_list=features,
hyperparameters={"pca_components": 4},
)
| Hyperparameter | Default | Description |
|---|---|---|
n_folds |
5 |
Cross-validation folds for out-of-fold metrics (1 = a single train/validation split) |
n_estimators |
8 |
TabICL's internal ensemble: members see different column orders and scalings |
batch_size |
1 |
Ensemble members per forward pass. 1 gives the lowest peak memory; predictions are the same at any value |
pca_components |
None |
Standardize and reduce the features to this many PCA components before TabICL |
shap_sample_size |
100 |
Rows explained for SHAP feature importance (0 disables) |
split_strategy |
"scaffold" |
"scaffold", "butina", or "random" (scaffold and butina need a smiles column) |
butina_cutoff |
0.4 |
Tanimoto distance cutoff for Butina clustering |
seed |
42 |
Random seed |
uq_version |
"v1" |
Confidence model: "v0", "v1", or "v2" |
Feature Count
TabICL is pretrained on tables of up to 100 columns. More features work, and the training log notes when a model is past that range. If accuracy suffers, pca_components reduces them. PCA needs numeric features, so it can't be combined with categorical columns.
Endpoints: Serverless or Real-Time
A TabICL model carries its training rows, so its memory grows with the training set. The training job measures the memory the model needs to serve, and to_endpoint() uses that measurement.
Serverless (the default) works for smaller training sets. When the measured memory is over what a serverless endpoint can give a model, to_endpoint() raises and tells you so, rather than deploying an endpoint that fails to load:
ValueError: sol-tabicl-reg needs 9.17 GB to serve, over the 5.5 GB a serverless
endpoint can give a model. Deploy a real-time endpoint with to_endpoint(serverless=False);
its instance is sized from the measured memory.
Real-time endpoints size their instance from the same measurement:
A real-time instance runs, and bills, around the clock, which is why the switch is yours to make. Pass instance="ml.r7i.xlarge" (or any instance type) to choose one yourself.
As a guide, with 17 features:
| Training rows | Measured memory | Endpoint | 100-row request |
|---|---|---|---|
| 5,000 | 5.25 GB | Serverless | about 9 seconds |
| 10,000 | 9.17 GB | Real-time, ml.r7i.large |
about 4 seconds |
The measured memory is the peak while the model loads, which is well above what it settles to afterwards. An endpoint has to survive that peak.
Confidence and Uncertainty
TabICL predicts a full distribution for each row. Workbench takes the width of that distribution as the model's prediction_std and feeds it to the same confidence model the other frameworks use, so a TabICL endpoint returns the same columns: prediction, prediction_std, confidence, and the calibrated intervals (q_025 … q_975).
See Model Confidence for how the confidence model works.
Feature Importance
SHAP values come from TabICL's own explainer and are stored with the model like any other framework's. The explainer works on raw numeric features, so SHAP is skipped when the model uses pca_components or has categorical columns.
Limits
- Regression only.
ModelType.REGRESSORandModelType.UQ_REGRESSOR. - No sample weights. TabICL has no per-row weights; use
validation_idsto hold rows out of training. - Memory grows with training rows, as described above.
Pretrained Weights
Training resolves the TabICL checkpoint the same way as other foundation weights:
- Local cache —
~/.workbench/foundation/ - Workbench bucket —
s3://$WORKBENCH_BUCKET/foundation-models/tabicl/... - Public origin (Hugging Face) — last resort, logs a warning
Stage the checkpoint in your bucket so training jobs don't depend on the public internet:
python scripts/admin/push_foundation_models.py --model tabicl --file tabicl-regressor-v2-20260212.ckpt
The served model includes the weights, so an endpoint never downloads anything.
Running Locally
TabICL is part of the modeling extra, so a local model needs no AWS account and no SageMaker images:
Examples
Full code listings: examples/models/tabicl_model.py (AWS) and examples/models/tabicl_local.py (local).
Questions?

The SuperCowPowers team is happy to answer any questions you may have about AWS® and Workbench.
- Support: workbench@supercowpowers.com
- Discord: Join us on Discord
- Website: supercowpowers.com
References
- TabICL — github.com/soda-inria/tabicl (BSD-3-Clause, code and weights); arXiv:2502.05564, arXiv:2602.11139