File size: 958 Bytes
3ef5978
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# app.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
import joblib
import os

app = FastAPI()

# Load model once at startup
model = joblib.load("disease_model.pkl")
label_encoder = joblib.load("label_encoder.pkl")
SYMPTOM_KEYWORDS = joblib.load("symptom_keywords.pkl")

class SymptomRequest(BaseModel):
    symptoms: List[str]

class PredictionResponse(BaseModel):
    disease: str
    confidence: float

@app.post("/predict", response_model=PredictionResponse)
def predict(request: SymptomRequest):
    selected_set = set(s.lower() for s in request.symptoms)
    binary_vector = [1 if s in selected_set else 0 for s in SYMPTOM_KEYWORDS]
    
    pred = model.predict([binary_vector])[0]
    probas = model.predict_proba([binary_vector])[0]
    confidence = float(probas.max())
    disease = label_encoder.inverse_transform([pred])[0]
    
    return PredictionResponse(disease=disease, confidence=round(confidence, 3))