sentiment-api / app.py
szoya's picture
Update app.py
638154a verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import pipeline
from typing import List
# NEW MODEL: Detects 7 Emotions (Joy, Anger, Disgust, Fear, Sadness, Surprise, Neutral)
sentiment_pipeline = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", top_k=1)
app = FastAPI()
class TextInput(BaseModel):
sentences: List[str]
@app.get("/")
def home():
return {"message": "7-Emotion Analysis API is running"}
@app.post("/analyze")
def analyze(data: TextInput):
try:
# Analyze the list of sentences
results = sentiment_pipeline(data.sentences, truncation=True, max_length=512)
processed_results = []
for res_list in results:
# The pipeline returns a list of scores, we take the top one
top_result = res_list[0]
label = top_result['label'] # e.g., 'joy', 'anger', 'neutral'
score = top_result['score']
# --- CALCULATE POLARITY FOR GAUGE ---
# We map the 7 emotions to a -1 to 1 scale so your Gauge still works.
if label == 'joy':
polarity = score # Positive
elif label in ['anger', 'disgust', 'fear', 'sadness']:
polarity = -score # Negative
else:
polarity = 0.0 # Neutral or Surprise (Surprise is usually neutral context)
processed_results.append({
"label": label, # This will send "anger", "joy", etc. to your Table
"confidence": score,
"polarity": polarity # This drives the Gauge
})
return {"results": processed_results}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)