The production MLInferenceDeps bundle the scorer runs with — the
RunViewMLModelLoader (loads the MJ: ML Models row), the
MJSidecarPredictor (runs /predict against the Python sidecar) and the
LocalArtifactLoader (reads the model bytes back by their MJ: Files row id,
the read-side inverse of MJFilesArtifactStore). Shared by buildScoreRecordSetRunner
(the Score action / Remote Op path) AND the startup work-type registration so a model
trained one way is always scored the same way — one source of truth (CLAUDE.md DRY).
Production follow-up: swap LocalArtifactLoader for a provider GetObject
loader; the id contract (read by File id) is unchanged.
The production MLInferenceDeps bundle the scorer runs with — the RunViewMLModelLoader (loads the
MJ: ML Modelsrow), the MJSidecarPredictor (runs/predictagainst the Python sidecar) and the LocalArtifactLoader (reads the model bytes back by theirMJ: Filesrow id, the read-side inverse ofMJFilesArtifactStore). Shared by buildScoreRecordSetRunner (the Score action / Remote Op path) AND the startup work-type registration so a model trained one way is always scored the same way — one source of truth (CLAUDE.md DRY).Production follow-up: swap
LocalArtifactLoaderfor a providerGetObjectloader; the id contract (read by File id) is unchanged.