Skip to content

samsja/pydantic_config

Repository files navigation

Pydantic Config

A drop-in replacement for tyro.cli with TOML/YAML/JSON config file support.

# Instead of:
from tyro import cli

# Use:
from pydantic_config import cli

Built on top of tyro for type-safe CLI parsing and Pydantic for validation.

Install

pip install git+https://github.com/samsja/pydantic_config

For TOML support (recommended):

pip install "pydantic_config[toml] @ git+https://github.com/samsja/pydantic_config"

Quick Start

from pydantic_config import cli, BaseConfig

class TrainConfig(BaseConfig):
    lr: float = 1e-4
    batch_size: int = 32

class ModelConfig(BaseConfig):
    hidden_size: int = 256
    num_layers: int = 4

class Config(BaseConfig):
    train: TrainConfig = TrainConfig()
    model: ModelConfig = ModelConfig()
    hello: int

if __name__ == "__main__":
    config = cli(Config)

Help output

python train.py --help

Help output

Missing required argument

python train.py

Missing required argument

Config file validation error

python train.py --train @ train_config.toml

Config validation error

Config file not found

python train.py @ nonexistent.toml

Config file not found

Config Files

Load config from TOML/YAML/JSON files using the @ syntax:

# Load config file
python train.py @ config.toml

# Override values from CLI
python train.py @ config.toml --train.lr 0.001

# Load nested configs from separate files
python train.py --model @ model.toml --train @ train.toml

Example config.toml:

[train]
lr = 0.0003
batch_size = 64

[model]
hidden_size = 512

CLI arguments always override config file values.

Development

uv sync --extra all
uv run pytest

About

Manage ML configuration with pydantic

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages