docling-project/docling · warning · SystemExit

No plotable data found in {args.input_file}

Error message

No plotable data found in {args.input_file}

What it means

SystemExit raised by main() in perfs/plot_memory_metrics.py when no resolved metrics file produced any plottable series. load_points() only appends a run when it contains at least one 'loaded' memory event (total_pages non-empty); if every metrics file is empty, lacks loaded events, or holds no memory data, loaded_runs stays empty and the script exits.

Source

Thrown at perfs/plot_memory_metrics.py:133

        raise SystemExit(f"Input file does not exist: {args.input_file}")

    try:
        import matplotlib.pyplot as plt
    except ImportError as exc:
        raise SystemExit(
            "Plotting requires matplotlib. Install it in the environment first."
        ) from exc

    loaded_runs = []
    for label, metrics_file in _resolve_metrics_files(args.input_file):
        if not metrics_file.is_file():
            raise SystemExit(f"Metrics file does not exist: {metrics_file}")
        total_pages, loaded_metrics = load_points(metrics_file)
        if total_pages:
            loaded_runs.append((label, total_pages, loaded_metrics))

    if not loaded_runs:
        raise SystemExit(f"No plotable data found in {args.input_file}")

    fig, ax = plt.subplots(1, 1, figsize=(12, 6))

    for label, total_pages, loaded_metrics in loaded_runs:
        point_count = min(
            [len(total_pages)] + [len(values) for values in loaded_metrics.values()]
        )
        x_values = total_pages[:point_count]

        for key in MEMORY_KEYS:
            series = loaded_metrics[key][:point_count]
            if all(value != value for value in series):
                continue
            metric_label = key.replace("_mb", "").upper()
            ax.plot(
                x_values,
                series,
                label=f"{label} {metric_label}",

View on GitHub (pinned to 61d76f1ff3)

Solutions

  1. Inspect one metrics file to confirm 'loaded' events with memory payloads exist: 'grep loaded metrics.jsonl'.
  2. Re-run the benchmark to completion for at least one configuration so loaded-phase memory events are recorded.
  3. If event names changed across script versions, regenerate metrics with the current iterate_pdf_pages.py rather than plotting old artifacts.

Example fix

# before
$ head metrics.jsonl   # empty or only {"event": "start", ...}
$ python perfs/plot_memory_metrics.py summary.json
# SystemExit: No plotable data found in summary.json

# after: rerun a successful benchmark first
$ python perfs/iterate_pdf_pages.py --input-dir ./pdfs --metrics-file metrics.jsonl --report-file summary.json
$ python perfs/plot_memory_metrics.py summary.json
Defensive patterns

Strategy: validation

Validate before calling

def has_loaded_events(metrics_path: str) -> bool:
    with open(metrics_path, encoding="utf-8") as fh:
        for line in fh:
            if '"loaded"' in line and "memory_loaded_mb" in line:
                return True
    return False

if not any(has_loaded_events(p) for p in metrics_paths):
    raise SystemExit("no loaded-phase memory events; rerun benchmark to completion")

Prevention

When it happens

Trigger: Metrics files that contain only non-loaded events (e.g. conversion crashed before the 'loaded' phase), empty .jsonl files from aborted runs, or event schemas missing the 'memory_loaded_mb' payload — every run filters out, leaving nothing to plot.

Common situations: Plotting after benchmark runs that all failed early (OOM kills, backend crashes before page loading completed); plotting per-page metrics files produced by a different script version with changed event names; empty artifacts from a job that was cancelled immediately.

Related errors


AI-assisted analysis of docling-project/docling@61d76f1ff3 (2026-08-14). Data as JSON: /api/errors/59c89a47a4af68d0. Report an issue: GitHub.