28 lines
890 B
Python
28 lines
890 B
Python
from __future__ import annotations
|
|
|
|
from transformers import CLIPTextModel, CLIPTokenizer
|
|
|
|
from ..domain.model import Conditioning
|
|
from ..domain.repositories._text_encoder_repository import TextEncoderRepository
|
|
|
|
|
|
class ClipTextEncodeUsecase:
|
|
def __init__(self, text_encoder_repo: TextEncoderRepository) -> None:
|
|
self.text_encoder_repo = text_encoder_repo
|
|
|
|
def execute(
|
|
self,
|
|
tokenizer: CLIPTokenizer,
|
|
text_encoder: CLIPTextModel,
|
|
path: str,
|
|
text: str,
|
|
) -> Conditioning:
|
|
if not text.strip():
|
|
raise ValueError("Text input is empty or whitespace only.")
|
|
|
|
embeddings = self.text_encoder_repo.encode(tokenizer, text_encoder, text)
|
|
if embeddings is None:
|
|
raise RuntimeError("Failed to generate embeddings.")
|
|
|
|
return Conditioning(conditioning=embeddings, path=path, prompt=text)
|