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

Function get_weighted_text_embeddings

modules/prompt_parser_diffusers.py:604–754  ·  view source on GitHub ↗
(pipe, prompt: str = "", neg_prompt: str = "", clip_skip: int | None = None, prompt_mean_norm=None, diffusers_zeros_prompt_pad=None, te_pooled_embeds=None)

Source from the content-addressed store, hash-verified

602
603
604def get_weighted_text_embeddings(pipe, prompt: str = "", neg_prompt: str = "", clip_skip: int | None = None, prompt_mean_norm=None, diffusers_zeros_prompt_pad=None, te_pooled_embeds=None):
605 device = devices.device
606 if prompt is None:
607 prompt = ''
608 if neg_prompt is None:
609 neg_prompt = ''
610 SD3 = bool(hasattr(pipe, 'text_encoder_3') and not hasattr(pipe, 'text_encoder_4'))
611 prompt, prompt_2, prompt_3, prompt_4 = split_prompts(pipe, prompt, SD3)
612 neg_prompt, neg_prompt_2, neg_prompt_3, neg_prompt_4 = split_prompts(pipe, neg_prompt, SD3)
613
614 if "Flux" in pipe.__class__.__name__: # clip is only used for the pooled embeds
615 prompt_embeds, pooled_prompt_embeds, _ = pipe.encode_prompt(prompt=prompt, prompt_2=prompt_2, device=device, num_images_per_prompt=1)
616 return prompt_embeds, pooled_prompt_embeds, None, None, None, None # no negative support
617
618 if "Chroma" in pipe.__class__.__name__: # does not use clip and has no pooled embeds
619 prompt_embeds, _, prompt_attention_mask, negative_prompt_embeds, _, negative_prompt_attention_mask = pipe.encode_prompt(prompt=prompt, negative_prompt=neg_prompt, device=device, num_images_per_prompt=1)
620 return prompt_embeds, None, prompt_attention_mask, negative_prompt_embeds, None, negative_prompt_attention_mask
621
622 if "HiDreamImage" in pipe.__class__.__name__: # clip is only used for the pooled embeds
623 prompt_embeds_t5, negative_prompt_embeds_t5, prompt_embeds_llama3, negative_prompt_embeds_llama3, pooled_prompt_embeds, negative_pooled_prompt_embeds = pipe.encode_prompt(
624 prompt=prompt, prompt_2=prompt_2, prompt_3=prompt_3, prompt_4=prompt_4,
625 negative_prompt=neg_prompt, negative_prompt_2=neg_prompt_2, negative_prompt_3=neg_prompt_3, negative_prompt_4=neg_prompt_4,
626 device=device, num_images_per_prompt=1,
627 )
628 prompt_embeds = [prompt_embeds_t5, prompt_embeds_llama3]
629 negative_prompt_embeds = [negative_prompt_embeds_t5, negative_prompt_embeds_llama3]
630 return prompt_embeds, pooled_prompt_embeds, None, negative_prompt_embeds, negative_pooled_prompt_embeds, None
631
632 _zeros_pad = diffusers_zeros_prompt_pad if diffusers_zeros_prompt_pad is not None else shared.opts.diffusers_zeros_prompt_pad
633 _te_pooled = te_pooled_embeds if te_pooled_embeds is not None else shared.opts.te_pooled_embeds
634 if prompt != prompt_2:
635 ps = [get_prompts_with_weights(pipe, p, prompt_mean_norm=prompt_mean_norm) for p in [prompt, prompt_2]]
636 ns = [get_prompts_with_weights(pipe, p, prompt_mean_norm=prompt_mean_norm) for p in [neg_prompt, neg_prompt_2]]
637 else:
638 ps = 2 * [get_prompts_with_weights(pipe, prompt, prompt_mean_norm=prompt_mean_norm)]
639 ns = 2 * [get_prompts_with_weights(pipe, neg_prompt, prompt_mean_norm=prompt_mean_norm)]
640
641 positives, positive_weights = zip(*ps, strict=False)
642 negatives, negative_weights = zip(*ns, strict=False)
643 if hasattr(pipe, "tokenizer_2") and not hasattr(pipe, "tokenizer"):
644 positives.pop(0)
645 positive_weights.pop(0)
646 negatives.pop(0)
647 negative_weights.pop(0)
648
649 embedding_providers = prepare_embedding_providers(pipe, clip_skip)
650 if len(embedding_providers) == 0:
651 log.error("Prompt encode: cannot find text encoder in model")
652 return None, None, None, None, None, None
653 empty_embedding_providers = None
654 if 'StableCascade' in pipe.__class__.__name__:
655 empty_embedding_providers = [embedding_providers[1]]
656 embedding_providers = [embedding_providers[0]]
657
658 prompt_embeds = []
659 negative_prompt_embeds = []
660 pooled_prompt_embeds = []
661 negative_pooled_prompt_embeds = []

Callers 1

encodeMethod · 0.85

Calls 12

split_promptsFunction · 0.85
get_prompts_with_weightsFunction · 0.85
pad_to_same_lengthFunction · 0.85
indexMethod · 0.80
catMethod · 0.80
padMethod · 0.80
debugFunction · 0.50
encode_promptMethod · 0.45
popMethod · 0.45
toMethod · 0.45
_get_t5_prompt_embedsMethod · 0.45

Tested by

no test coverage detected