Skip to main content

LizyML Widget

PyPI Python License: MIT

Interactive Jupyter widget for LizyML — fit, tune, and run inference on machine learning models without writing code.

Features

  • Data Tab — Load a DataFrame, select target, configure columns and cross-validation
  • Config Tab — Edit LightGBM hyperparameters, configure tuning search space
  • Results Tab — View scores, Plotly plots, feature importance, and inference results
  • Config Import/Export — Save and load configurations as YAML
  • Python API — Programmatic access to all widget functionality

Requirements

  • Python >= 3.10
  • Jupyter Notebook, JupyterLab, Google Colab, or VS Code Notebooks
  • lizyml >= 0.9.0, < 0.10 (auto-resolved by the [lizyml] extras)

Installation

# Recommended: installs a compatible lizyml automatically
pip install "lizyml-widget[lizyml]"

The [lizyml] extras pin lizyml[plots,tuning,calibration,explain]>=0.9.0,<0.10 so pip / uv / poetry always select a backend version that matches the widget's expected contract.

If you manage lizyml separately, install the widget without extras and pin lizyml yourself:

pip install lizyml-widget
pip install "lizyml[plots,tuning,calibration,explain]>=0.9.0,<0.10"

Widget's LizyMLAdapter validates the installed lizyml version at import time and raises a clear ImportError if the backend is out of range.

Version compatibility

LizyML Widget is tightly coupled to the lizyml ML contract (types, BackendAdapter protocol, tune/fit result shapes), so each minor version of the widget targets a specific lizyml range:

lizyml-widget lizyml Highlights
0.8.x >=0.9.0,<0.10 Re-tune (round progress, boundary expansion, tuning history, w.retune() API)
0.7.x >=0.7.0,<0.9 Calibration / Search Space default refresh
0.6.x / 0.5.x >=0.5.0,<0.7 Learning curve metric filter, CV strategy metadata

See docs/VERSION_COMPAT.md for the full matrix, troubleshooting, and upgrade guidance.

Quick Start

import pandas as pd
from lizyml_widget import LizyWidget

df = pd.read_csv("train.csv")
w = LizyWidget()
w.load(df, target="price")
w  # display widget in notebook cell

Programmatic Usage

w = LizyWidget()
w.load(df, target="y").fit()

summary = w.get_fit_summary()
print(summary.metrics)

w.save_model("./model")
w.save_config("config.yaml")

Re-tune (Study Resume + Boundary Expansion)

When the initial Tune run hits a search-space boundary or you simply want more trials, call w.retune() to resume the existing Optuna study in place. The widget reuses the backend model so no history is lost.

w = LizyWidget()
w.load(df, target="y")

# 1. Initial tune (e.g. 50 trials)
w.tune()

# 2. Resume with 30 more trials and let the backend widen boundaries
#    if the best trial lands on an edge.
w.retune(n_trials=30, expand_boundary=True, boundary_threshold=0.05)

summary = w.get_tune_summary()
for r in summary.rounds:
    print(f"Round {r['round']}: {r['n_trials']} trials, "
          f"best={r['best_score_after']}, expanded={r['expanded_dims']}")

The Results tab shows a Re-tune (resume) button inside the Best Params accordion after the initial Tune completes — clicking it runs the same resume flow from the UI, and the round-aware progress bar, Score History chart, and Boundary Expansion panel update in place.

Requires lizyml >= 0.9.0 (auto-resolved by lizyml-widget[lizyml]).

Version

import lizyml_widget
print(lizyml_widget.__version__)

Tutorials

Notebook Task Dataset
Regression Regression California Housing (sklearn)
Binary Classification Binary Breast Cancer Wisconsin (sklearn)
Multiclass Classification Multiclass Wine (sklearn)

Supported Environments

  • Jupyter Notebook
  • JupyterLab
  • Google Colab
  • VS Code Notebooks

Powered by anywidget for cross-environment compatibility.

Execution strategy on Linux + libgomp

On Linux hosts where lightgbm is dynamically linked against GCC's libgomp (the common apt / pip distribution), Fit and Tune jobs run in a fresh subprocess by default. This avoids a libgomp pool-affinity bug that makes worker-thread training ~30x slower than main-thread training (and multi-trial Tune compounds to 20–50x). See issue #147.

The trade-off is a fixed startup cost on every Fit/Tune call:

Path Typical wall-clock (5000 rows × 30 cols)
in-process Fit (LZW_FORCE_THREAD=1) ~0.7 s
subprocess startup + lightgbm import (overhead) ~0.8–1.2 s
subprocess Fit (default) ~1.6–2.0 s

For interactive Notebook workflows where you fit small datasets repeatedly and the libgomp affinity bug does not manifest in your environment (e.g. fresh kernel, single Fit per session), set the opt-out env var:

export LZW_FORCE_THREAD=1

Tune still benefits from subprocess execution — leave the default in place when running multi-trial hyperparameter searches.

Development

# Python
uv sync --all-extras    # installs dev + lizyml dependencies
uv run pytest
uv run ruff check .
uv run mypy src/lizyml_widget/

# TypeScript
cd js
pnpm install
pnpm dev               # watch build
pnpm build             # production build
pnpm lint
pnpm test              # vitest run
pnpm test:coverage     # vitest run --coverage (CI gate at 75% statements / 70% branches)

Test coverage targets

  • Python (pytest): 80% line coverage — enforced in CI via --cov-fail-under=80.
  • TypeScript (vitest): 75% statements / lines, 70% branches, 50% functions — enforced via thresholds in js/vitest.config.ts.
  • E2E (Playwright + JupyterLab): suite under tests/e2e/; CI prints the test count so additions/removals are visible in PR diffs.

Stable Notebook Launch

If VS Code gets stuck reconnecting to an old kernel, prefer launching Jupyter with workspace-local runtime files instead of the default global runtime directory:

./scripts/jupyter-reset.sh
./scripts/jupyter-lab.sh

This keeps runtime/config state under the repository and makes stale kernel/server state easier to clear than relying on Reload Window alone.

License

MIT

Metadata

Release files for lizyml-widget 0.10.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 lizyml-widget 0.10.1
File Size Uploaded
lizyml_widget-0.10.1.tar.gz 762.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lizyml-widget 0.10.1
File Interpreter ABI Platform
lizyml_widget-0.10.1-py3-none-any.whl Python 3 none any Details

Total release size: 877.6 kB

Release files / lizyml_widget-0.10.1.tar.gz

Download URL lizyml_widget-0.10.1.tar.gz
Size 762.7 kB
Tags Source
SHA-256 checksum
How to use checksums
324b56b4a64f4b49657074724272a90a6eeea15ab2ad33d4fc58105952c5e721
BLAKE2b-256 checksum
How to use checksums
392b1b4a5ada830ed4833954b0bc98b89e51a8f1e0348c7725051c1f9915c21d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.

Transparency log

Release files / lizyml_widget-0.10.1-py3-none-any.whl

Download URL lizyml_widget-0.10.1-py3-none-any.whl
Size 114.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e54ab16f2c41d11e8c64b36c8a879e1a26e3c9c1484dc75716d70429fe866560
BLAKE2b-256 checksum
How to use checksums
785e18aad880e614b02cf866e3853c43f29b2ab070628705f29843c7cd74724f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.1 This release

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.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