Spaces:
Running on L40S
Running on L40S
| # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
| # SPDX-License-Identifier: OpenMDW-1.1 | |
| """Export config defaults and schemas.""" | |
| from cosmos_framework.inference.common.init import init_script | |
| init_script(default_env={"COSMOS_TRAINING": "0"}) | |
| import argparse | |
| import json | |
| import pathlib | |
| import textwrap | |
| import typing | |
| import pydantic | |
| import yaml | |
| from cosmos_framework.inference.args import OmniSampleOverrides, OmniSetupOverrides | |
| MODELS: list[tuple[type[pydantic.BaseModel], dict[str, typing.Any]]] = [ | |
| (OmniSetupOverrides, {}), | |
| (OmniSampleOverrides, {}), | |
| ] | |
| def _nested_model_cls(field: pydantic.fields.FieldInfo) -> type[pydantic.BaseModel] | None: | |
| """Return the BaseModel subclass backing *field*, if any.""" | |
| ann = field.annotation | |
| if isinstance(ann, type) and issubclass(ann, pydantic.BaseModel): | |
| return ann | |
| for arg in typing.get_args(ann): | |
| if isinstance(arg, type) and issubclass(arg, pydantic.BaseModel): | |
| return arg | |
| return None | |
| def _commented_yaml(model_cls: type, data: dict) -> str: | |
| lines: list[str] = [] | |
| for name, field in sorted(model_cls.model_fields.items()): | |
| if name not in data: | |
| continue | |
| if field.description: | |
| for dl in field.description.strip().splitlines(): | |
| s = dl.strip() | |
| lines.append(f"# {s}" if s else "#") | |
| value = data[name] | |
| nested = _nested_model_cls(field) | |
| if nested and isinstance(value, dict): | |
| lines.append(f"{name}:") | |
| lines.append(textwrap.indent(_commented_yaml(nested, value).rstrip("\n"), " ")) | |
| else: | |
| lines.append(yaml.dump({name: value}, default_flow_style=False, sort_keys=False).rstrip()) | |
| return "\n".join(lines) + "\n" | |
| def export_schemas(output_dir: pathlib.Path) -> None: | |
| output_dir.mkdir(parents=True, exist_ok=True) | |
| for cls, defaults in MODELS: | |
| data = cls.model_construct(**defaults).model_dump(mode="json") | |
| (output_dir / f"{cls.__name__}.yaml").write_text(_commented_yaml(cls, data)) | |
| (output_dir / f"{cls.__name__}.schema.json").write_text(json.dumps(cls.model_json_schema(), indent=2) + "\n") | |
| print(f"Saved {cls.__name__} -> {output_dir}") | |
| def main(): | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("-o", "--output", type=pathlib.Path, default="schemas", help="Output directory") | |
| args = parser.parse_args() | |
| export_schemas(args.output.absolute()) | |
| if __name__ == "__main__": | |
| main() | |