e3c8979e8d
- cmd/fn/doctor.go - cmd/fn/main.go - cpp/apps/primitives_gallery/playground/tables/CMakeLists.txt - cpp/apps/primitives_gallery/playground/tables/data_table.cpp - cpp/apps/primitives_gallery/playground/tables/data_table_logic.cpp - cpp/apps/primitives_gallery/playground/tables/data_table_logic.h - cpp/apps/primitives_gallery/playground/tables/self_test.cpp - cpp/apps/primitives_gallery/playground/tables/tql.cpp - cpp/apps/primitives_gallery/playground/tables/viz.cpp - cpp/apps/primitives_gallery/playground/tables/viz.h - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
"""diffusers_load_lora — carga un adaptador LoRA en un pipeline diffusers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import os
|
|
from typing import Any
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
|
|
from lora_ref import LoraRef
|
|
|
|
|
|
def diffusers_load_lora(pipe: Any, lora: LoraRef) -> Any:
|
|
"""Carga un adaptador LoRA en un pipeline diffusers y ajusta su peso de fusion.
|
|
|
|
Usa pipe.load_lora_weights(lora.path) para cargar los pesos del adaptador.
|
|
Si lora.weight != 1.0, aplica set_adapters(['default'], adapter_weights=[w])
|
|
para escalar la contribucion del LoRA. Modifica el pipe in-place y retorna
|
|
el mismo objeto para composicion.
|
|
|
|
Args:
|
|
pipe: Pipeline diffusers cargado. Debe soportar load_lora_weights
|
|
(StableDiffusionPipeline, StableDiffusionXLPipeline, etc.).
|
|
lora: Referencia al adaptador LoRA. lora.path apunta al archivo
|
|
.safetensors o directorio del adaptador. lora.weight controla
|
|
la intensidad de fusion (1.0 = peso completo, 0.0 = sin efecto).
|
|
|
|
Returns:
|
|
El mismo pipe con el LoRA cargado y el peso de fusion aplicado.
|
|
|
|
Raises:
|
|
ImportError: Si diffusers no esta instalado.
|
|
OSError: Si lora.path no existe o el formato del archivo es invalido.
|
|
"""
|
|
try:
|
|
import diffusers # noqa: F401 — verificar disponibilidad
|
|
except ImportError as exc:
|
|
raise ImportError(
|
|
"diffusers_load_lora requiere diffusers. "
|
|
"Instalar con: pip install diffusers"
|
|
) from exc
|
|
|
|
pipe.load_lora_weights(lora.path)
|
|
|
|
if lora.weight != 1.0:
|
|
# set_adapters acepta lista de nombres y lista de pesos.
|
|
# El nombre "default" es el que diffusers asigna al primer LoRA cargado.
|
|
if hasattr(pipe, "set_adapters"):
|
|
pipe.set_adapters(["default"], adapter_weights=[lora.weight])
|
|
elif hasattr(pipe, "fuse_lora"):
|
|
# Fallback para versiones antiguas de diffusers
|
|
pipe.fuse_lora(lora_scale=lora.weight)
|
|
|
|
return pipe
|