SDK 0.13.1Python 3.11–3.13
From a DataFrame
to a prediction.
Upload a table to your private Welt workspace, fit a qualified model and predict from Python. The same SDK reopens predictors and runs native causal discovery.
Set up in three steps
Full walkthroughInstall
Setup guideuv pip install 'welt-client[parquet]'
pip install 'welt-client[parquet]'
Connect
Connection guidefrom welt import Client
Client().connect()
Approve the code, workspace and permissions in your browser. Running remotely? Open the printed link on your own computer. Access stays in this Python process.
welt login
Approve in your browser. The CLI saves access privately for this API origin. Run Python on the same computer.
import os
from getpass import getpass
os.environ["WELT_API_KEY"] = getpass("Welt API key: ")
Use your own read/write key from Workspace → API keys. The key stays in this Python process environment; it is never saved in code.
Train, predict, evaluate
Full walkthroughLoad Iris below: 150 rows, four features, classes 0–2. The target column is target. Before downloading or fitting, open Workspace → Billing and check your credits and spending limits.
from welt import Client
data = Client().load_research_dataset(
"asset-d839644b6de36fc5cafdda18c5daeca3"
)
target = "target"
data.head()
| Row | sepal-length | sepal-width | petal-length | petal-width | target |
|---|---|---|---|---|---|
| 0 | 4.6 | 3.6 | 1.0 | 0.2 | 0 |
| 1 | 4.3 | 3.0 | 1.1 | 0.1 | 0 |
| 2 | 5.0 | 3.2 | 1.2 | 0.2 | 0 |
| 3 | 5.8 | 4.0 | 1.2 | 0.2 | 0 |
| 4 | 4.4 | 3.0 | 1.3 | 0.2 | 0 |
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from welt import Classifier
train, test = train_test_split(
data, test_size=0.2, random_state=9, stratify=data[target]
)
X_train, y_train = train.drop(columns=target), train[target]
X_test, y_test = test.drop(columns=target), test[target]
model = Classifier(model="tabicl-v2", random_state=9)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print("accuracy:", accuracy_score(y_test, predictions))
print(classification_report(y_test, predictions, zero_division=0))
precision recall f1-score support
0 1.00 1.00 1.00 10
1 1.00 1.00 1.00 10
2 1.00 1.00 1.00 10
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30Earlier recorded Iris run · TabICL v2 · seed 9 · 120 training / 30 held-out rows. This report is one observed result, not a promised score. Fit uploads the training table; prediction runs remotely.
For your own table, replace target with your target column.
What do you want to do?
Available models
Models and limits| Model | Task | Context (rows × columns) | Prediction rows per call | Classes |
|---|---|---|---|---|
Kumo Tabular Medium kumo-medium | Classification | 8,000 × 20, 4,000 × 40, 2,000 × 80 | up to 100 | up to 10 |
Kumo Tabular Medium kumo-medium | Regression | 8,000 × 20, 4,000 × 40, 2,000 × 80 | up to 100 | — |
Mitra-v2 mitra-v2 | Classification | 4,000 × 20, 2,000 × 40, 500 × 80 | up to 100 | up to 10 |
Mitra-v2 mitra-v2 | Regression | 4,000 × 20, 2,000 × 40, 500 × 80 | up to 100 | — |
TabICLv2 tabicl-v2 | Classification | 8,000 × 20, 4,000 × 40, 2,000 × 80 | up to 100 | up to 10 |
TabICLv2 tabicl-v2 | Regression | 8,000 × 20, 4,000 × 40, 2,000 × 80 | up to 100 | — |
TabDPT 1.3 tabdpt-1.3 | Classification | 500 × 20 | up to 100 | up to 10 |
TabDPT 1.3 tabdpt-1.3 | Regression | 500 × 20 | up to 100 | — |
AVICI avici | Causal discovery | 1,000 × 20, 500 × 40 | — | — |
CDFM cdfm | Causal discovery | 8,000 × 20, 4,000 × 40, 2,000 × 80 | — | — |
Arrow / ArrowFM arrow | Causal discovery | 8,000 × 20, 4,000 × 40, 2,000 × 80 | — | — |
Public catalogue snapshot from 2026-10-15. Context is the training table the model conditions on, or the whole table for causal discovery. It fits when its rows and columns are both within one listed shape, so wider tables take fewer rows. Supervised columns count features without the target; causal discovery counts every variable. Causal discovery needs at least 2 rows and 2 variables. Batch prediction handles larger prediction sets. The live catalogue is authoritative: Client().models() reports current limits and readiness.