---
name: genconfig_save_json
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: impure
signature: "def genconfig_save_json(cfg: GenerationConfig, path: str) -> str"
description: "Serializa un GenerationConfig a JSON (pydantic model_dump_json o dataclass fallback) y lo escribe en disco. Crea directorios padre si no existen. Retorna el path absoluto del archivo escrito."
tags: [ml, generation, json, io, serialization]
params:
  - name: cfg
    desc: "Instancia de GenerationConfig a serializar. Pydantic o dataclass."
  - name: path
    desc: "Ruta de destino del archivo JSON. Relativa o absoluta."
output: "Path absoluto (str) del archivo JSON escrito en disco."
uses_functions: []
uses_types:
  - generation_config_py_ml
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
tested: true
tests:
  - "save escribe archivo JSON valido en la ruta indicada"
  - "save crea directorios padre si no existen"
  - "json contiene claves en snake_case"
test_file_path: "python/functions/ml/tests/test_genconfig_json_roundtrip.py"
file_path: "python/functions/ml/genconfig_save_json.py"
---

## Ejemplo

```python
from ml.genconfig_save_json import genconfig_save_json
from ml.generation_config import GenerationConfig
from ml.model_ref import ModelRef

cfg = GenerationConfig(
    prompt="a forest at dusk",
    seed=123,
    steps=25,
    cfg_scale=7.5,
    sampler="euler",
    width=512,
    height=512,
    model=ModelRef(name="runwayml/stable-diffusion-v1-5", model_type="sd15"),
)

saved_path = genconfig_save_json(cfg, "/tmp/gen_config.json")
# saved_path == "/tmp/gen_config.json"
```

## Notas

Usa pydantic model_dump_json cuando disponible (JSON canonico con snake_case
interoperable con Go). En entornos sin pydantic usa json.dumps + dataclasses.asdict.
Los directorios padre se crean con os.makedirs(exist_ok=True).
