MCPcopy
hub / github.com/vladmandic/sdnext / __init__

Method __init__

modules/prompt_parser_diffusers.py:50–113  ·  view source on GitHub ↗
(self,
                 prompts,
                 negative_prompts,
                 steps,
                 clip_skip,
                 p,
                 prompt_attention=None,
                 prompt_mean_norm=None,
                 diffusers_zeros_prompt_pad=None,
                 te_pooled_embeds=None,
                )

Source from the content-addressed store, hash-verified

48
49class PromptEmbedder:
50 def __init__(self,
51 prompts,
52 negative_prompts,
53 steps,
54 clip_skip,
55 p,
56 prompt_attention=None,
57 prompt_mean_norm=None,
58 diffusers_zeros_prompt_pad=None,
59 te_pooled_embeds=None,
60 ):
61 t0 = time.time()
62 self.prompt_attention_value = prompt_attention or shared.opts.prompt_attention
63 self.prompt_mean_norm = prompt_mean_norm if prompt_mean_norm is not None else shared.opts.prompt_mean_norm
64 self.diffusers_zeros_prompt_pad = diffusers_zeros_prompt_pad if diffusers_zeros_prompt_pad is not None else shared.opts.diffusers_zeros_prompt_pad
65 self.te_pooled_embeds = te_pooled_embeds if te_pooled_embeds is not None else shared.opts.te_pooled_embeds
66 self.prompts = prompts
67 self.negative_prompts = negative_prompts
68 self.batchsize = len(self.prompts)
69 self.attention = last_attention
70 self.allsame = False # dont collapse prompts
71 # self.allsame = self.compare_prompts() # collapses batched prompts to single prompt if possible
72 self.steps = steps
73 self.clip_skip = clip_skip
74 # All embeds are nested lists, outer list batch length, inner schedule length
75 self.prompt_embeds = [[] for _ in range(self.batchsize)]
76 self.positive_pooleds = [[] for _ in range(self.batchsize)]
77 self.negative_prompt_embeds = [[] for _ in range(self.batchsize)]
78 self.negative_pooleds = [[] for _ in range(self.batchsize)]
79 self.prompt_attention_masks = [[] for _ in range(self.batchsize)]
80 self.negative_prompt_attention_masks = [[] for _ in range(self.batchsize)]
81 self.positive_schedule = None
82 self.negative_schedule = None
83 self.scheduled_prompt = False
84 if hasattr(p, 'dummy'):
85 return
86 earlyout = self.checkcache(p)
87 if earlyout:
88 return
89 self.pipe = prepare_model(shared.sd_model)
90 if self.pipe is None:
91 log.error("Prompt encode: cannot find text encoder in model")
92 return
93 seen_prompts = {}
94 # per prompt in batch
95 for batchidx, (prompt, negative_prompt) in enumerate(zip(self.prompts, self.negative_prompts, strict=False)):
96 self.prepare_schedule(prompt, negative_prompt)
97 schedule_key = (
98 tuple(self.positive_schedule) if self.positive_schedule is not None else None,
99 tuple(self.negative_schedule) if self.negative_schedule is not None else None,
100 self.scheduled_prompt,
101 )
102 cache_key = (prompt, negative_prompt, schedule_key)
103 cached_idx = seen_prompts.get(cache_key)
104 if cached_idx is not None:
105 self.clone_embeds(batchidx, cached_idx)
106 continue
107 if self.scheduled_prompt:

Callers

nothing calls this directly

Calls 8

checkcacheMethod · 0.95
prepare_scheduleMethod · 0.95
clone_embedsMethod · 0.95
scheduled_encodeMethod · 0.95
encodeMethod · 0.95
prepare_modelFunction · 0.85
debugFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected