Skip to content

Discovery Decorators

All decorators live in nexuml.core.discovery.

Decorator Required object Python use Registry kind
@layer(name, version="1") LayerDefinition subclass LayerSpec(component=Definition(...)) layer
@data_source(name, version="1") DataSourceDefinition subclass DataSpec(source=Definition(...)) data_source
@eval_algorithm(name, version="1") EvalAlgorithmDefinition subclass EvalAlgorithmSpec(algorithm=Definition(...)) eval_algorithm
@loader_backend(name, version="1") LoaderBackendDefinition subclass LoaderSpec(backend=Definition(...)) loader_backend
@scenario(name) Callable returning ScenarioSpec CLI scenario lookup separate scenario registry

Component decorators validate the role immediately and attach explicit kind, name, and version metadata. Concrete definition fields are ordinary Pydantic fields and are visible through model_json_schema().

from nexuml.core.components import DataSourceDefinition
from nexuml.core.discovery import data_source


@data_source("my_dataset", version="1")
class MyDataset(DataSourceDefinition):
    root: str

    def build(self):
        return _MyDatasetRuntime(root=self.root)

Python imports and constructs MyDataset(root="/data"). At a serialization boundary, the registry lowers it to:

type: my_dataset
version: '1'
params:
  root: /data

No concrete module path is persisted. Restoration performs an exact kind/name/version lookup followed by Pydantic validation.

Discovery scans built-ins, installed nexuml.libraries entry points, and configured local roots on each CLI run. Duplicate identities within the same (kind, name, version) fail registration; failures are collected without stopping unrelated modules.

See Also