[docs]defbuild_model(name:str,task:str,**kwargs:Any)->nn.Module:""" Build a model by name and task. This delegates to registry metadata to keep a consistent interface. """cfg=get_model_config(name)ifcfgisNone:raiseKeyError(f"Model '{name}' is not registered.")task=task.lower()builder=cfg["builder"]defaults:Dict[str,Any]=cfg.get("defaults",{})merged={**defaults,**kwargs,"task":task}returnbuilder(**merged)
[docs]defdefault_builder(name:str,task:str,**kwargs:Any)->nn.Module:""" Generic builder for standard backbones + heads. """task=task.lower()ifname=="mlp":backbone=MLPBackbone(kwargs["in_dim"],hidden_dim=kwargs.get("hidden_dim",256),depth=kwargs.get("depth",2))head=_make_head(task,kwargs)return_combine(backbone,head)ifname=="cnn":backbone=CNNPatchEncoder(kwargs.get("in_channels",3),hidden_dim=kwargs.get("hidden_dim",64))head=_make_head(task,kwargs,backbone_out_dim=kwargs.get("hidden_dim",64))return_combine(backbone,head)ifname=="temporal":backbone=TemporalEncoder(kwargs["in_dim"],hidden_dim=kwargs.get("hidden_dim",128),num_layers=kwargs.get("num_layers",1))head=_make_head(task,kwargs)return_combine(backbone,head)raiseValueError(f"Unknown backbone '{name}'.")