Skip to content

XII — Review real experiment Runs in VS Code

Watch the Academy video — 6:22.

Train two decision trees on the UCI Wine dataset, then review their measured results in Apizr for VS Code. The dataset contains 178 real wine samples, 13 chemical measurements and three cultivar classes; it is bundled with scikit-learn. Credit: S. Aeberhard and M. Forina, Wine (1992), CC BY 4.0.

The images show the actual 0.4.6 development extension and locally executed Runs.

1. Prepare the example

Use a checkout of Apizr's 0.4.6 development branch, Python 3.14, uv and the development VSIX. From the repository root, copy the example into a fresh directory:

cp -R examples/tracking/wine-vscode /tmp/apizr-wine
uv venv /tmp/apizr-wine/.venv --python 3.14
uv pip install --python /tmp/apizr-wine/.venv/bin/python \
  '.[notebook]' -r /tmp/apizr-wine/requirements.txt
cd /tmp/apizr-wine
.venv/bin/apizr init .
.venv/bin/python wine_experiments.py

This installs the selected development checkout. The scientific dependencies belong to the example's environment, independently of the extension's managed CLI.

The script exports the dataset to wine.csv, uses the same stratified 70/30 split and seed 42, and executes trees with max_depth=1 and max_depth=3. Each SDK session records the input's content identity, the two parameters and the computed accuracy and macro F1, rounded to four decimal places before logging.

2. Connect the extension

The policy created by init allows source inspection. Add read access to this project's history and select the example's Python environment:

.venv/bin/python - <<'PY'
import json
from pathlib import Path

root = Path.cwd().resolve()
policy = root / ".apizr/operator.json"
document = json.loads(policy.read_text())
document["grants"].append({
    "adapter": "experiments", "operation": "history.read",
    "target": {"kind": "local", "root": str(root)},
    "store": ".apizr/experiments/v1", "permissions": ["experiments.read"],
})
policy.write_text(json.dumps(document, indent=2) + "\n")
(root / ".vscode").mkdir(exist_ok=True)
(root / ".vscode/settings.json").write_text(json.dumps({
    "apizr.engine.mode": "python",
    "apizr.engine.python": str(root / ".venv/bin/python"),
    "apizr.operatorPolicy": str(policy),
}, indent=2) + "\n")
PY
code .

Trust this example folder, then run Apizr: Check engine. Open the Apizr bee, choose Open experiment dashboard, then Refresh history. Opening the view alone does not start an engine or load the store.

Apizr experiment dashboard with measured Wine classification Runs

The captured session contains the two SDK Runs plus a real Jupyter Run from step 5. Run identities and timestamps will differ in your own session.

3. Read a Run

Select a Run's digest in the dashboard. Read its capture mode, max_depth, random_state, accuracy and macro_f1. Open complete JSON preserves the canonical Plan and Run, including input fingerprints and unknown evidence. Open recorded source opens the current source file.

This short GIF sequences captured views of the running extension:

Review measured Runs, source and comparison in the installed extension

In the captured execution:

Capture max_depth Accuracy Macro F1
SDK 1 0.6111 0.4846
SDK 3 0.9630 0.9638
Jupyter 5 0.9630 0.9638

These are observations on one held-out split. Depths 3 and 5 give the same scores here. This comparison does not establish performance on another dataset or approve a deployment.

4. Inspect and compare

Open wine_experiments.py and choose Apizr: Inspect with Apizr. Expand the Inspection view to follow the engine's evidence and source locations. Inspection reads saved source; it does not fit a model. Editing the file marks that evidence outdated until you explicitly inspect the saved file again.

Saved Python inspection beside the Wine experiment source

Choose Compare two Runs, selecting the depth-1 SDK Run as A and the depth-3 SDK Run as B. Read the observed parameter change, the Wine input identity and the metric deltas in the canonical comparison. Reverse A and B to reverse the deltas. Unknown evidence remains unknown.

Canonical comparison showing observed accuracy values and their delta

5. Add a real notebook Run

Open wine_review.ipynb in a Jupyter-capable editor, select the example's .venv kernel and execute its two code cells. The last cell fits the depth-5 tree and logs its measured scores through the same function and history store. Refresh history to see its Jupyter capture mode alongside the SDK Runs.

Apizr does not install or replace a notebook kernel. Its notebook-toolbar inspection action reads the saved notebook without executing any cells. A cell identity and execution count do not describe every value in live kernel memory; continue with the Jupyter tracking lesson for that distinction.

Try it: repeat the depth-5 cell. Confirm that another Run appears with a new identity and execution count. Compare its scores and retained input identity with the previous execution before drawing a conclusion.

Extension settings and limits · Tracking guide · Example source