# 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))