from transformers import pipeline from functools import lru_cache class SummarizerService: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) # Initialize the summarizer only once cls._instance.summarizer = pipeline("summarization", model="google/flan-t5-small") return cls._instance def summarize(self, text, ratio=0.5, min_length=30): # Calculate dynamic max_length based on input length input_length = len(text.split()) max_length = max(int(input_length * ratio), min_length) return self.summarizer( text, max_length=max_length, min_length=min_length, do_sample=False )[0]['summary_text']