"""ModelRef — referencia a un modelo de generacion de imagenes.""" from __future__ import annotations from typing import Literal try: from pydantic import BaseModel, ConfigDict class ModelRef(BaseModel): """Referencia a un modelo de generacion de imagenes. Identifica el modelo por nombre (HuggingFace hub o ruta local), tipo de arquitectura y cuantizacion. Serializable a JSON canonico con model_dump() / model_dump_json() para el contrato compartido con Go. Attributes: name: Nombre del modelo en HuggingFace Hub o identificador local. Ejemplo: "stabilityai/stable-diffusion-xl-base-1.0". model_type: Arquitectura del modelo. Uno de los literales definidos. quantization: Precision numerica del checkpoint. Por defecto "fp16". path: Ruta local al checkpoint si ya fue descargado. None si se debe descargar del hub. """ model_config = ConfigDict(frozen=True) name: str model_type: Literal[ "sd15", "sd20", "sdxl", "sd3", "flux_dev", "flux_schnell", "flux_kontext", "qwen_image", "chroma", "z_image", ] quantization: Literal[ "fp32", "fp16", "bf16", "q8_0", "q5_1", "q5_0", "q4_1", "q4_0" ] = "fp16" path: str | None = None except ImportError: from dataclasses import dataclass @dataclass(frozen=True) class ModelRef: # type: ignore[no-redef] """Referencia a un modelo de generacion de imagenes (fallback dataclass). Usar la version pydantic cuando este disponible para validacion y serializacion JSON canonica. Esta version no valida los literales en tiempo de ejecucion. Attributes: name: Nombre del modelo en HuggingFace Hub o ruta local. model_type: Arquitectura del modelo (sd15|sd20|sdxl|sd3|flux_dev|...). quantization: Precision numerica (fp32|fp16|bf16|q8_0|...). Por defecto "fp16". path: Ruta local al checkpoint. None si no esta descargado. """ name: str model_type: str quantization: str = "fp16" path: str | None = None