- Verify an endpoint — send one synthetic tile and check the response against the model contract.
- Inspect your environment — capture a diagnostic snapshot for self-diagnosis before you open a ticket.
- Build a support bundle — package diagnostics and logs into a redacted
.tar.gz. - Customize what gets redacted — control the redaction policy on anything you export.
Every artifact below is redacted best-effort, not guaranteed PII-free — see What gets shared before sharing one outside your environment.
Verify an endpoint
Before running a full slide, send one synthetic tile through the endpoint and check the response against the model’s contract:Backbone:
For the
local backend you can point at the directory holding the checkpoint (model_dir= / --model-dir) instead of naming the .pt2 file. Add --json to print the full HealthReport instead, or --mode embedding/--mode prediction to force a specific mode.
The command exits non-zero on any failed check, so it can gate a pipeline before the expensive run starts. Each failure carries its own code and fix — see Error codes:
Read the report
verify_endpoint returns a HealthReport; bioptimus verify --json prints the same object. Every step is a Check, and nothing raises unless you ask it to:
Check carries name, passed, skipped, duration_ms, detail, and — on failure — error_code, remediation, and structured context (for example the observed vs. expected output length).
Verify options
By default
modes="auto" resolves exactly the modes the model exposes — embedding for the plain backbones, prediction for tissue-seg, both for m-optimus, and embedding-only for the huggingface backend. The tile sent is a deterministic gradient-plus-noise image at the model’s declared tile size, so a synthetic request is never mistaken for customer data in a server log.
Inspect your environment
The same environment snapshot that goes into a bundle is available on its own — useful for self-diagnosis before you open a ticket. It never raises: a probe that cannot run degrades to an{"error": ...} entry instead of failing the snapshot.
schema_version and captured_at and gathers:
Each probe is also callable on its own — for a fast CUDA or checkpoint check without the whole snapshot:
Build a support bundle
One command packages a redacted environment snapshot and logs into a.tar.gz — attach this to a support request:
--categories selects what goes in the bundle: diagnostics (environment snapshot and logs, the default) and/or usage (model-request records only, e.g. for a billing question). Repeat the flag or comma-separate to combine them. Add a per-slide status ledger with --workspace, or fold in a running server’s own diagnostics:
The last two are Python-only, since they need a live inference request or in-memory model objects. The bundle finds your log file automatically through
BIOPTIMUS_LOG_FILE and includes its rotations; point it at a different file with --log-file / log_file=. Every option writes a single local .tar.gz; nothing is sent anywhere.
Both the CLI and Python redact by default. For local self-debugging you can keep full paths and identifiers with --no-anonymize (CLI) or anonymize=False (Python) — never share an unredacted bundle outside your environment.
What’s inside the archive
Extract the.tar.gz and inspect it before sending — every bundle is one directory:
manifest.json records whether the bundle was anonymized and the exact file list, so a recipient can confirm what they received. The first three files are always present in a diagnostics bundle; the rest appear only when you request the option that produces them.
A running server exposes the same redacted data directly:
usage.json
On AWS SageMaker, the server itself runs in your own account — its logs land in your CloudWatch, not ours.
bioptimus support-bundle still captures the client-side SDK logs and diagnostics; CloudWatch is the source for server-side logs on that platform.Customize what gets redacted
Redaction is driven by a per-field policy you can inspect and change. Each recognized field takes one of three strategies:
The default policy (
DEFAULT_CONFIG) hashes every recognized identifier and path field. To apply a different policy — for example, redact slide_id outright instead of hashing it — build an AnonymizationConfig and run your own data (a log entry, a manifest, any dict) through the redactor before you share it:
hash_identifier, redact_text (paths, URIs, and slide names in free text), scrub_user_paths (home-directory user names), and anonymize_value / anonymize_mapping (a single keyed value, or a whole nested mapping). See the anonymize reference.

