Registry Plugin Documentation¶
The Registry Plugin provides model package management for VIPR inference.
It introduces:
a package format (
manifest.yaml+ artifacts)versioned model URIs
local and optional HuggingFace-backed registry backends
a generic model loader (
registry_loader) that dispatches to domain builders
Overview¶
The registry solves a common reliability problem: weights and config files drift apart over time.
With registry packages, inference references one immutable artifact version:
vipr://<backend>/<domain>/<name>@<ref>
Examples:
vipr://local/reflectometry/NR-2layers-basic@v1.1.0
vipr://hf/reflectometry/fxc34ran@v1.0.0
Backend behavior:
local: supports versions and aliases (@production)hf: supports pinned versions only (no aliases)
Backend configuration¶
Local backend:
always enabled
storage root from
VIPR_REGISTRY_DIRdefault storage root:
~/.vipr/registry
HuggingFace backend:
enabled when
VIPR_HF_REPOis set (example:HW-SC/registry)uses HuggingFace cache via
huggingface_hubURI scheme:
vipr://hf/...resolves versions via
index.yaml(version must exist there)fetches snapshots from the repository
mainrevision and selects packages by versioned path<domain>/<name>/<version>/...uses
index.yamlonly to declare which package versions are availableif a requested version is missing, VIPR fails early with
Version not found in index
Example:
export VIPR_HF_REPO=HW-SC/registry
Private HF repositories (authentication):
Public HF repos work without authentication.
Private HF repos require a valid HuggingFace token.
Interactive setup:
hf auth login
Non-interactive/CI setup (example):
export HF_TOKEN=<your-token>
Package contract¶
A package contains:
manifest.yamlartifact files (for example config and weights)
Minimal example (format_version: 1):
format_version: 1
name: NR-2layers-basic
version: v1.1.0
domain: reflectometry
family: reflectorch
description: "Reflectorch baseline model for neutron reflectometry"
model_builder:
handler: reflectorch_builder
parameters:
config_ref: configs/NR-2layers-basic-v1.yaml
weights_ref: saved_models/model_NR-2layers-basic-v1.safetensors
artifacts:
- role: config
path: configs/NR-2layers-basic-v1.yaml
sha256: "<sha256-config>"
- role: weights
path: saved_models/model_NR-2layers-basic-v1.safetensors
format: safetensors
sha256: "<sha256-weights>"
metrics: {}
tags:
source: bundle-command
family: reflectorch
Note:
Bundle commands write no
lineageblock by default.To include absolute source paths for provenance, use
--include-lineageon the domain bundle command.
Optional contract fields can be added to the same manifest:
default_predictor:
handler: reflectorch_predictor
parameters:
calc_pred_curve: true
polish_prediction: true
requires:
preprocess_filters:
- class: vipr_reflectometry.reflectorch.preprocess.interpolation_filter.InterpolationFilter
method: preprocess_interpolate
hook: INFERENCE_PREPROCESS_PRE_FILTER
Mapping to inference YAML:
default_predictor.handler->vipr.inference.prediction.handlerdefault_predictor.parameters-> defaults forvipr.inference.prediction.parametersrequires.preprocess_filters[*]-> required enabled entries invipr.inference.filters[hook]
Loading flow¶
registry_loader performs these steps in order:
Parse
load_model.parameters(model_uri, optionaldevice, optionalbuilder_parameters).Resolve URI via
app.registry.resolve()to a local package directory.Parse
manifest.yamlviaModelPackage.from_dir().Validate artifact presence and SHA-256 checksums.
Validate that
model_builder.handleris registered.Resolve device override (load_model first, then prediction fallback).
Build an in-memory package copy with merged
builder_parameters(manifest on disk is unchanged).Apply predictor contract (
default_predictor).Validate required filters contract (
requires.preprocess_filters).Call the domain builder:
builder.build(package_dir, model_package_for_build).
The object returned by build() is the executable model used by the predictor.
registry_loader parameter overrides¶
You can override builder behavior from inference YAML without editing manifest.yaml:
load_model:
handler: registry_loader
parameters:
model_uri: vipr://hf/reflectometry/fxc34ran@v1.0.0
device: cpu
builder_parameters:
some_extra: value
Notes:
builder_parametersis merged intomodel_builder.parametersin memory.The manifest file in the package is not modified.
Device precedence is:
load_model.parameters.builder_parameters.deviceload_model.parameters.deviceprediction.parameters.device
CLI commands¶
Generic registry commands¶
vipr registry bundle --manifest manifest.yaml --source-dir ./my-package
vipr registry list
vipr registry show vipr://local/my-domain/my-model@v1.0.0
vipr registry promote vipr://local/my-domain/my-model@v1.0.0 production
vipr registry sync
vipr registry sync --domain reflectometry --name mc1-nsf
vipr registry sync prefetches packages from the configured HF backend (VIPR_HF_REPO) into local cache.
Domain convenience commands¶
Domain plugins can add helper commands to generate package layout/manifest.
Reflectometry example:
vipr reflectometry registry bundle-reflectorch --config ... --weights ... --name ... --version ...
vipr reflectometry registry bundle-flow --config ... --weights ... --name ... --version ...
vipr reflectometry registry bundle-panpe --config ... --weights ... --name ... --version ...
Implementation note: the reflectometry controller uses internal Cement handler label
reflectometry_registry with CLI alias registry, so the public command path remains
vipr reflectometry registry ....
Extension model¶
A new domain does not need a custom controller for registry basics.
Required:
implement/register a
ModelBuilderHandlercreate package directory +
manifest.yamlcall generic
vipr registry bundle
Optional:
add domain convenience bundle commands
Current scope¶
Included:
local backend with immutable versions + alias promotion
optional HuggingFace backend (
VIPR_HF_REPO)package integrity/runtime checks
generic
registry_loadermanifest contract checks (
default_predictor,requires.preprocess_filters)HF prefetch command (
vipr registry sync)
Not included yet:
training workflow
HF
push/ alias promotion via CLI (maintainer workflow is still manual)runtime filter-chain injection from package metadata
See also¶
Registry Quickstart: Fe_Pt_DN example — step-by-step walkthrough including local and HF usage.