import subprocess import sys from transformers import T5ForConditionalGeneration, T5Tokenizer import gradio as gr # Install required packages def install(package): subprocess.check_call([sys.executable, "-m", "pip", "install", package]) install('transformers') install('sentencepiece') install('torch') install('gradio') # Translation setup try: install('translate') from translate import Translator translation_available = True except: print("Translation package not available - continuing without translation support") translation_available = False class GOTSummarizer: def __init__(self): self.tokenizer = T5Tokenizer.from_pretrained("t5-small") self.model = T5ForConditionalGeneration.from_pretrained("t5-small") self.translation_available = translation_available def summarize(self, text, max_length=150): inputs = self.tokenizer("summarize: " + text, return_tensors="pt", truncation=True, max_length=512) outputs = self.model.generate( **inputs, max_length=max_length, num_beams=4, early_stopping=True ) return self.tokenizer.decode(outputs[0], skip_special_tokens=True) def translate(self, text, lang='hi'): if not self.translation_available: return "[Translation unavailable] " + text try: translator = Translator(to_lang=lang) # Initialize with target language return translator.translate(text) except Exception as e: print(f"Translation error: {e}") return text # Initialize summarizer summarizer = GOTSummarizer() def process(text, lang='en'): if not text.strip(): return "Please enter text to summarize" summary = summarizer.summarize(text) return summary if lang == 'en' else summarizer.translate(summary, lang) # Create Gradio interface interface = gr.Interface( fn=process, inputs=[ gr.Textbox(label="Game of Thrones Text", lines=10, placeholder="Paste book chapter text here..."), gr.Dropdown( label="Language", choices=['en', 'hi', 'pa', 'ta', 'bn'], value='en' ) ], outputs=gr.Textbox(label="Summary"), title="ASOIAF Chapter Summarizer", description="Summarizes Game of Thrones chapters with optional translation" ) # Launch the interface if __name__ == "__main__": interface.launch()