import gradio as gr from transformers import pipeline # Lazy‑load pipelines sentiment = classifier = ner = summarizer = None def get_sentiment(): global sentiment if not sentiment: sentiment = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english") return sentiment def get_classifier(): global classifier if not classifier: classifier = pipeline("text-classification", model="textattack/distilbert-base-uncased-ag-news") return classifier def get_ner(): global ner if not ner: ner = pipeline("ner", model="elastic/distilbert-base-uncased-finetuned-conll03-english", aggregation_strategy="simple") return ner def get_summarizer(): global summarizer if not summarizer: summarizer = pipeline("summarization", model="Curative/t5-summarizer-cnn") return summarizer def process(text, features): result = {} if "Summarization" in features: result["summary"] = get_summarizer()( text, max_length=150, min_length=40, do_sample=False )[0]["summary_text"] if "Sentiment" in features: sent = get_sentiment()(text)[0] result["sentiment"] = {"label": sent["label"], "score": sent["score"]} if "Classification" in features: cls = get_classifier()(text)[0] result["classification"] = {"label": cls["label"], "score": cls["score"]} if "Entities" in features: ents = get_ner()(text) result["entities"] = [ {"word": e["word"], "type": e["entity_group"]} for e in ents ] return result with gr.Blocks() as demo: gr.Markdown("## 🛠️ Multi‑Feature NLP Service") inp = gr.Textbox(lines=6, placeholder="Enter your text here…") feats = gr.CheckboxGroup( ["Summarization","Sentiment","Classification","Entities"], label="Select features to run" ) btn = gr.Button("Run") out = gr.JSON(label="Results") btn.click(process, [inp, feats], out) demo.queue(api_open=True).launch()