CoolFace
Apppublic

mmagani/lead_scoring_api

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py65 linesDownload Raw Back to root
1from fastapi import FastAPI, HTTPException2from pydantic import BaseModel3import pickle4import pandas as pd5import numpy as np6import logging7import uvicorn8 9app = FastAPI()10 11# Configure logging12logging.basicConfig(level=logging.INFO)13logger = logging.getLogger(__name__)14 15# Load trained model safely16try:17    model = pickle.load(open("top_tag_model.pkl", "rb"))18    logger.info("✅ Model loaded successfully.")19except FileNotFoundError:20    model = None21    logger.error("❌ Model not found or not loaded.")22 23# Define request model for validation24class PredictionRequest(BaseModel):25    deal_owner: int26    company_name: int27    stage: int28    closed_won_count: int29 30@app.get("/")  # Basic health-check route31async def root():32    return {"message": "API is running"}33 34@app.get("/logs")  # Prevent 404 errors for logs endpoint35async def get_logs():36    return {"message": "Logging data not available"}37 38@app.post("/predict")39async def predict(request: PredictionRequest):40    try:41        logger.info(f"🔄 Received request data: {request.dict()}")42 43        # Convert request data into Pandas DataFrame44        df = pd.DataFrame([request.dict()])45 46        if not model:47            raise HTTPException(status_code=500, detail="Model not found or not loaded")48 49        # Get probabilities for all tags50        probabilities = model.predict_proba(df)51 52        # Extract top 5 tags with highest probabilities53        top_5_indices = np.argsort(probabilities[0])[-5:][::-1]  # Sort in descending order54        top_5_tags = [{"tag_index": int(idx), "probability": float(probabilities[0][idx])} for idx in top_5_indices]55 56        logger.info(f"✅ Top 5 tags predicted: {top_5_tags}")57        return {"top_5_tags": top_5_tags}58 59    except Exception as e:60        logger.error(f"❌ Prediction error: {e}")61        raise HTTPException(status_code=500, detail=str(e))62 63# Run FastAPI server when executed directly64if __name__ == "__main__":65    uvicorn.run(app, host="0.0.0.0", port=7860)