Inline comments automatically become help text in v3:
v2:
python
class Config(ParamsProto): """ Training configuration. Args: lr: Learning rate for optimizer batch_size: Size of training batches """ lr = 0.001 batch_size = 32
v3:
python
@protoclass Params: """Training configuration.""" lr: float = 0.001 # Learning rate for optimizer batch_size: int = 32 # Size of training batches
Step 4: Update Prefixed Configs
The prefix system is much simpler in v3:
v2:
python
from params_proto import Proto@Proto(prefix="Model")class ModelConfig: name = "resnet50" pretrained = True@Proto(prefix="Training")class TrainingConfig: lr = 0.001 epochs = 100
class ModelConfig(ParamsProto): name = "resnet50"class Config(ParamsProto): model = ModelConfig() lr = 0.001
v3:
python
@proto.prefixclass Model: name: str = "resnet50"@protoclass Params: lr: float = 0.001# Access as Model.name from CLI or code
Common Patterns
Pattern 1: ML Training Script
v2:
python
class Args(ParamsProto): model = "resnet50" lr = 0.001 epochs = 100Args.parse_args()def train(): model = load_model(Args.model) optimizer = Adam(lr=Args.lr) for epoch in range(Args.epochs): # ...
v3:
python
@proto.clidef train( model: str = "resnet50", lr: float = 0.001, epochs: int = 100,): """Train a model.""" model_obj = load_model(model) optimizer = Adam(lr=lr) for epoch in range(epochs): # ...if __name__ == "__main__": train()
Pattern 2: Experiment Sweeps
v2:
python
from params_proto.hyper import Sweepwith Sweep(Args) as sweep: Args.lr = [0.001, 0.01, 0.1] Args.batch_size = [32, 64, 128]for config in sweep: train()
v3:
python
for lr in [0.001, 0.01, 0.1]: for batch_size in [32, 64, 128]: with proto.bind(lr=lr, batch_size=batch_size): train()
Breaking Changes
1. No More parse_args()
v2 required calling Args.parse_args(). v3 handles this automatically with @proto.cli.
2. Type Hints Required
All parameters must have type annotations in v3.
3. Different Import Path
python
# v2from params_proto import ParamsProto, Proto, Flag# v3from params_proto import proto