feat(models): model config dataclass and architecture registry #18

Closed
opened 2026-02-04 20:22:22 +00:00 by forbes · 0 comments
Owner

Summary

Implement solver/models/config.py with config parsing and an encoder registry pattern.

Components

ModelConfig dataclass

  • Parsed from YAML configs (configs/model/baseline.yaml, configs/model/gat.yaml)
  • Fields: name, architecture, encoder (EncoderConfig), node_features_dim, edge_features_dim, heads (dict of HeadConfig)

HeadConfig dataclass

  • Fields: enabled, hidden_dim, num_classes (optional)

EncoderConfig dataclass

  • Fields: num_layers, hidden_dim, dropout, num_heads (optional), residual (optional)

Registry

  • @register_encoder(name) decorator for registering encoder classes
  • build_model(config: ModelConfig) -> nn.Module factory function that resolves architecture name to encoder class

Files

  • solver/models/config.py
  • tests/models/test_config.py

Acceptance criteria

  • Parses both baseline.yaml and gat.yaml into ModelConfig
  • build_model raises ValueError on unknown architecture
  • Config round-trips correctly (to_dict / from_dict)
  • Passes ruff, mypy, pytest
## Summary Implement `solver/models/config.py` with config parsing and an encoder registry pattern. ## Components ### ModelConfig dataclass - Parsed from YAML configs (`configs/model/baseline.yaml`, `configs/model/gat.yaml`) - Fields: `name`, `architecture`, `encoder` (EncoderConfig), `node_features_dim`, `edge_features_dim`, `heads` (dict of HeadConfig) ### HeadConfig dataclass - Fields: `enabled`, `hidden_dim`, `num_classes` (optional) ### EncoderConfig dataclass - Fields: `num_layers`, `hidden_dim`, `dropout`, `num_heads` (optional), `residual` (optional) ### Registry - `@register_encoder(name)` decorator for registering encoder classes - `build_model(config: ModelConfig) -> nn.Module` factory function that resolves architecture name to encoder class ## Files - `solver/models/config.py` - `tests/models/test_config.py` ## Acceptance criteria - [ ] Parses both `baseline.yaml` and `gat.yaml` into `ModelConfig` - [ ] `build_model` raises `ValueError` on unknown architecture - [ ] Config round-trips correctly (to_dict / from_dict) - [ ] Passes ruff, mypy, pytest
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/solver#18