fgonon/stackoverflow_tagpredict
0
1from fastapi import FastAPI, UploadFile, File, HTTPException2from pydantic import BaseModel3import pandas as pd4import io5from inference import predictor6 7app = FastAPI(title="Stack Overflow Tag Predictor API")8 9class PredictionRequest(BaseModel):10 title: str11 12@app.get("/")13def read_root():14 return {"status": "ok", "message": "Stack Overflow Tag Predictor API is running"}15 16@app.post("/predict")17def predict_title(request: PredictionRequest):18 if not request.title:19 raise HTTPException(status_code=400, detail="Title cannot be empty")20 21 predictions = predictor.predict(request.title, top_k=5)22 return {"title": request.title, "predictions": predictions}23 24@app.post("/batch")25async def predict_batch(file: UploadFile = File(...)):26 if not file.filename.endswith('.csv'):27 raise HTTPException(status_code=400, detail="File must be a CSV")28 29 content = await file.read()30 try:31 df = pd.read_csv(io.BytesIO(content))32 except Exception:33 raise HTTPException(status_code=400, detail="Invalid CSV file")34 35 if 'title' not in df.columns:36 raise HTTPException(status_code=400, detail="CSV must contain a 'title' column")37 38 results = []39 for _, row in df.iterrows():40 title = str(row['title'])41 if title.strip():42 preds = predictor.predict(title, top_k=5)43 results.append({44 "title": title,45 "predictions": preds46 })47 48 return {"batch_results": results}49 50 