Skip to main content

Welt Python SDK

From a DataFrame to a prediction. Use familiar Classifier and Regressor estimators backed by durable predictors in your private Welt workspace. Install welt-client, import welt. Python 3.11–3.13.

Start here · Guides · Reference · Models and limits

Install

python -m pip install "welt-client[parquet]==0.8.0"

Run welt login and approve your workspace in the browser. This saves a private, origin-bound credential for later Python sessions. In a notebook, connect once:

from welt import Client

with Client() as client:
    client.connect()

Open its printed verification link on your own computer if Python is remote. Python connection stays in this process; use save=True explicitly to persist it. Constructors never open a browser. Explicit keys and WELT_API_KEY still work and have precedence over connected/saved credentials. Connection guide.

Learn with real data

Download Iris from our research inventory, look at the table, split train/test, fit a classifier, predict unseen rows, and measure the result:

from pathlib import Path
from tempfile import mkdtemp
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from welt import Client, Classifier

# 1. Get a real table from Welt's research inventory.
dataset_id = "asset-d839644b6de36fc5cafdda18c5daeca3"
version = "d839644b6de36fc5cafdda18c5daeca3284a5ce8bb6169aff2fcb3fbb4a12021"
path = Path(mkdtemp(prefix="welt-iris-")) / "iris.parquet"
with Client() as client:
    info = client.research_dataset(dataset_id)
    print("Dataset:", info["name"], "— License:", info["license"])
    for notice in info["license_notices"]:
        print(notice)
    client.download_research_dataset(dataset_id, path, version=version)
data = pd.read_parquet(path)
target = "__target__#0"  # The target recorded in this research snapshot.

# 2. Look at the rows before modelling.
print(data.head())
print("Rows and columns:", data.shape)
data.info()
print(data[target].value_counts())

# 3. Set aside test rows before fitting; never train on their answers.
train, test = train_test_split(
    data, test_size=0.2, random_state=9, stratify=data[target])
query = test.drop(columns=target)
y_test = test[target]
print("Training rows:", len(train), "— Test rows:", len(test))

# 4. Create a model and train it on the training table.
model = Classifier(model="tabicl-v2", random_state=9)
model.fit(train, target=target)

# 5. Predict the held-out rows, without passing their target column.
predictions = model.predict(query)
print(pd.DataFrame({"actual": y_test.to_numpy(), "predicted": predictions}).head())

# 6. Compare predictions with the answers we kept aside.
print("Test accuracy:", accuracy_score(y_test, predictions))
print(classification_report(y_test, predictions, zero_division=0))
print("Keep this predictor ID:", model.predictor_id_)

Accuracy and per-class precision/recall/F1 describe your held-out run, not a promised benchmark score. Start explains each step and teaches numeric predictions with real Yacht data. fit uploads only your training rows; your workspace retains the resulting dataset and predictor for reuse.

Research metadata and one-step loading

Keep the catalogue detail (licence, schema and column descriptions, provenance) beside a download with metadata=True, or load a table directly with the research extra (pip install "welt-client[research]"):

with Client() as client:
    saved = client.download_research_dataset(
        dataset_id, path.with_name("iris-2.parquet"), version=version, metadata=True)
    # saved.path, saved.metadata_path ("iris-2.parquet.metadata.json"), saved.metadata
    data, meta = client.load_research_dataset(dataset_id, version=version, metadata=True)
print(meta.name, meta.column_descriptions)

Without metadata=True the download still returns the path, unchanged. The pinned Iris version keeps working if a newer (restored-header) version becomes current: the SDK downloads any version listed in the detail's previous_content. load_research_dataset removes its private temporary file; for notice-bearing ZIP content it warns that meta.license_text/meta.attribution_text apply. See Research datasets.

SDK 0.7 adds explicit DataFrame target convenience and hosted credential guidance while preserving fit(X, y), sync/async resources, durable jobs, research downloads and native causal objects. Available hosted tasks and workers follow the service catalogue. Bounded TabICLv2, Kumo Medium, TabDPT1.3 and Mitra-v2 classification and regression previews are separately qualified: 500 training rows, 20 features, 100 query rows, and 10 classes for classification. Other tasks need separate qualification. File reads load into memory. Held resumable CSV and large batch APIs are excluded.

A local wait timeout leaves server work running. Reconnect by its job ID rather than fitting again; recovery describes typed failures, authentication, cancellation and retry behavior. Probabilities are not calibrated coverage. ArrowFM, CDFM and AVICI discovery preserve native graph and score semantics; causal conversion is restricted to declared native DAGs and the separately approved Ergodic co-release artifact. Public Ergodic distribution and the complete all-model catalogue remain gated.

Examples and development

Runnable script · Jupyter notebooks · Research datasets · Contributing

uv sync --frozen
uv run --frozen pytest -q
uv build

Offline tests patch HTTP transport outside user examples; they neither contact the hosted service nor measure foundation-model quality. Notebook sources have cleared outputs; clean-wheel execution and bounded authorized live acceptance are separate evidence. CI requires no private backend, credentials or checkpoints.

Apache 2.0: see LICENSE. Model weights and hosted service are separate from this SDK licence.

Metadata

Release files for welt-client 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for welt-client 0.9.1
File Size Uploaded
welt_client-0.9.1.tar.gz 170.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for welt-client 0.9.1
File Interpreter ABI Platform
welt_client-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 203.2 kB

Release files / welt_client-0.9.1.tar.gz

Download URL welt_client-0.9.1.tar.gz
Size 170.0 kB
Tags Source
SHA-256 checksum
How to use checksums
28ee3caecbe01dfdd504cfe6ea69bc5ea6d1bc4da8c9a83f9380c0a865e2d783
BLAKE2b-256 checksum
How to use checksums
3814146771ecd1bab9f883c2fd2c37f3c1d515ff08cd639bb0e19c2f83784164
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.8

Release files / welt_client-0.9.1-py3-none-any.whl

Download URL welt_client-0.9.1-py3-none-any.whl
Size 33.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
09dc08fe0e5e6c99b4dcbda9849aa0340eae34948f3029cdd8c0b8fbdd3da8ef
BLAKE2b-256 checksum
How to use checksums
24bf96c720952cda24b252e93cab745b88c31f6dc1fedbd7baffa4ecb632e03d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.8

Release history Release notifications | RSS feed

0.13.1

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.10.1

2 release files

0.10.0

2 release files

This release

0.9.1 This release

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page