CoolFace
Apppublic

fgonon/stackoverflow_tagpredict

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
api.py50 linesDownload Raw Back to root
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