import json import gradio as gr from textblob import TextBlob def call_model(text: str, model_type: str = "textblob"): """ Return raw sentiment analysis output from selected model. """ if model_type == "textblob": blob = TextBlob(text) return blob.sentiment # returns namedtuple(polarity, subjectivity) elif model_type == "transformer": # Placeholder for future integration return {"label": "POSITIVE", "score": 0.98} else: raise ValueError(f"Unsupported model type: {model_type}") def sentiment_analysis(text: str) -> str: """ Analyze the sentiment of the given text. Args: text (str): The text to analyze Returns: str: A JSON string containing polarity, subjectivity, and assessment """ sentiment = call_model(text, model_type="textblob") # Handle TextBlob response (namedtuple) if isinstance(sentiment, tuple): # Simple check for TextBlob style polarity = round(sentiment.polarity, 2) subjectivity = round(sentiment.subjectivity, 2) assessment = ( "positive" if polarity > 0 else "negative" if polarity < 0 else "neutral" ) result = { "polarity": polarity, "subjectivity": subjectivity, "assessment": assessment } else: # Future: handle ML-based sentiment output result = sentiment return json.dumps(result) # Create the Gradio interface demo = gr.Interface( fn=sentiment_analysis, inputs=gr.Textbox(placeholder="Enter text to analyze..."), outputs=gr.Textbox(), # Changed from gr.JSON() to gr.Textbox() title="Text Sentiment Analysis", description="Analyze the sentiment of text using TextBlob" ) # Launch the interface and MCP server if __name__ == "__main__": demo.launch(mcp_server=True)