feat(attention): generation context

A module-level context tells attention consumers what is running: the
component role (transformer, text encoder, vae), the index of the
denoiser forward about to run, the pass length, and the model. It is
opened and closed around process_images, reset per denoising pass beside
the callback setup, and advanced by both step sources: the classic
callback passes the completed step plus one, the modular pre-forward
hook counts forwards. Roles come from the existing text encoder and vae
hijacks and the modular phase hooks. The step also lives in a device
scalar updated in place, so a compiled reader keeps its graph across
steps.
This commit is contained in:
CalamitousFelicitousness
2026-08-22 22:16:26 +01:00
parent 9d1d7c839a
commit 4509b145cd
9 changed files with 176 additions and 17 deletions
+2
View File
@@ -4,6 +4,7 @@ import torch
import numpy as np
from modules import shared, devices, processing_correction, timer, prompt_parser_diffusers
from modules.logger import log
from modules.attention import context as attention_context
p = None
@@ -87,6 +88,7 @@ def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | No
if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0:
shared.state.sampling_steps = pipe.num_timesteps
shared.state.step()
attention_context.tick(step + 1)
if shared.state.interrupted or shared.state.skipped:
raise AssertionError('Interrupted...')
if latents is None or p is None: