(pipe, prompt: str = "", neg_prompt: str = "", clip_skip: int | None = None, prompt_mean_norm=None, diffusers_zeros_prompt_pad=None, te_pooled_embeds=None)
| 602 | |
| 603 | |
| 604 | def 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 = [] |
no test coverage detected