george114's picture
Create app.py
5cd870e verified
# app_nlp.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import Dict
from transformers import pipeline
APP_VERSION = "1.0.0"
app = FastAPI(
title="Class 8 - NLP Model Serving (Sentiment)",
version=APP_VERSION,
description="Serve a small pretrained NLP model via FastAPI."
)
# A small, commonly used sentiment model:
# (It will download on first run.)
SENTIMENT_MODEL_NAME = "distilbert-base-uncased-finetuned-sst-2-english"
# Load once at startup (good pattern)
nlp = pipeline("sentiment-analysis", model=SENTIMENT_MODEL_NAME)
class TextRequest(BaseModel):
text: str = Field(..., min_length=1, max_length=1000, description="Input text to analyze")
class NLPResponse(BaseModel):
ok: bool
model_version: str
model_name: str
result: Dict[str, float | str]
@app.get("/health")
def health():
return {"status": "ok", "model_loaded": True, "model_name": SENTIMENT_MODEL_NAME}
@app.post("/v1/predict", response_model=NLPResponse)
def predict(payload: TextRequest):
try:
out = nlp(payload.text)[0] # {'label': 'POSITIVE', 'score': ...}
return NLPResponse(
ok=True,
model_version=APP_VERSION,
model_name=SENTIMENT_MODEL_NAME,
result={"label": out["label"], "score": float(out["score"])}
)
except Exception:
raise HTTPException(status_code=500, detail="NLP inference failed")