feat(ml): auto-commit con 14 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
---
|
||||
name: sdcpp_python_generate
|
||||
kind: function
|
||||
lang: py
|
||||
domain: ml
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def sdcpp_python_generate(sd: Any, cfg: GenerationConfig) -> ImageGenResult"
|
||||
description: "Genera una imagen con un StableDiffusion (stable-diffusion-cpp-python) usando GenerationConfig como contrato. Mapea sampler, mide duracion y retorna ImageGenResult con meta del backend."
|
||||
tags: [ml, stable-diffusion, sdcpp, inference, backend, generate, txt2img]
|
||||
uses_functions: [sdcpp_python_load_py_ml]
|
||||
uses_types: [generation_config_py_ml, image_gen_result_py_ml]
|
||||
returns: [image_gen_result_py_ml]
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: [stable_diffusion_cpp, PIL]
|
||||
params:
|
||||
- name: sd
|
||||
desc: "Instancia StableDiffusion cargada via sdcpp_python_load. Debe tener metodo generate_image()."
|
||||
- name: cfg
|
||||
desc: "Contrato de parametros de generacion. cfg.sampler debe ser uno de: euler | euler_a | dpm++2m | dpm++2m_v2 | heun | dpm2 | lcm."
|
||||
output: "ImageGenResult con image=PIL.Image (primera del batch), meta con backend/model/sampler/seed/wtype, duration_ms medido, vram_peak_mb=None."
|
||||
tested: true
|
||||
tests:
|
||||
- "generate retorna ImageGenResult valido"
|
||||
- "duration_ms mayor que cero"
|
||||
- "meta backend es sdcpp_python"
|
||||
test_file_path: "python/functions/ml/tests/test_sdcpp_python_backend.py"
|
||||
file_path: "python/functions/ml/sdcpp_python_generate.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
import sys
|
||||
sys.path.insert(0, "python/functions/ml")
|
||||
from model_ref import ModelRef
|
||||
from generation_config import GenerationConfig
|
||||
from sdcpp_python_load import sdcpp_python_load
|
||||
from sdcpp_python_generate import sdcpp_python_generate
|
||||
|
||||
model = ModelRef(
|
||||
name="sd-turbo",
|
||||
model_type="sd15",
|
||||
quantization="fp16",
|
||||
path="/home/lucas/vaults/imagegen_models/diffusers/sd-turbo/sd_turbo.safetensors",
|
||||
)
|
||||
sd = sdcpp_python_load(model)
|
||||
|
||||
cfg = GenerationConfig(
|
||||
prompt="a red cat sitting on a wooden table",
|
||||
seed=42,
|
||||
steps=4,
|
||||
cfg_scale=1.0,
|
||||
sampler="euler_a",
|
||||
width=512,
|
||||
height=512,
|
||||
model=model,
|
||||
)
|
||||
result = sdcpp_python_generate(sd, cfg)
|
||||
result.image.save("/tmp/output.png")
|
||||
print(f"Generado en {result.duration_ms}ms, meta={result.meta}")
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
- El sampler mapping canonico: euler->euler, euler_a->euler_a, dpm++2m->dpmpp2m,
|
||||
dpm++2m_v2->dpmpp2mv2, heun->heun, dpm2->dpm2, lcm->lcm.
|
||||
- API usada: `StableDiffusion.generate_image()` (binding 0.4.7+). Versiones anteriores
|
||||
exponían `txt_to_img()` — actualizar el package si se encuentra ese error.
|
||||
- `vram_peak_mb` siempre None: stable-diffusion-cpp-python no expone medicion de VRAM.
|
||||
- `clip_skip`: -1 le dice al backend que use el valor por defecto del modelo (equivale a
|
||||
no especificarlo). Si cfg.clip_skip es None, se pasa -1.
|
||||
- El campo `wtype` en meta se extrae via `getattr(sd, 'wtype', 'unknown')` ya que el
|
||||
binding no garantiza el atributo en todas las versiones.
|
||||
---
|
||||
Reference in New Issue
Block a user