MeraMK/Drugs_effect-side
0
1# -*- coding: utf-8 -*-2"""Untitled19.ipynb3 4Automatically generated by Colab.5 6Original file is located at7 https://colab.research.google.com/drive/1UK8ex5rmaHlIIRW5bT85IhaeILrFSAe28"""9 10from fastapi import FastAPI, HTTPException11from pydantic import BaseModel12import pandas as pd13import pickle14 15# =============================16# Load model & encoders17# =============================18try:19 with open("Drug_effect.pkl", "rb") as f:20 model = pickle.load(f)21 22 with open("onehot_encoder.pkl", "rb") as f:23 ohe = pickle.load(f)24 25except FileNotFoundError as e:26 raise RuntimeError(f"Missing file: {e}")27 28# =============================29# FastAPI app30# =============================31app = FastAPI(title="Drug Effect Prediction API")32 33# =============================34# Input schema35# =============================36class DrugRequest(BaseModel):37 drug_name: str38 39categorical_features = [40 'drug_name',41 'rx_otc',42 'drug_classes',43 'csa',44 'alcohol',45 'generic_name',46 'medical_condition',47 'activity'48]49 50# =============================51# Encoding function52# =============================53def encode_input(drug_name: str) -> pd.DataFrame:54 full_input_data = {55 'drug_name': drug_name,56 'rx_otc': 'Unknown',57 'drug_classes': 'Unknown',58 'csa': 'N',59 'alcohol': 'Unknown',60 'generic_name': 'Unknown',61 'medical_condition': 'Unknown',62 'activity': 'Unknown'63 }64 input_df = pd.DataFrame([full_input_data])65 encoded_array = ohe.transform(input_df[categorical_features])66 encoded_df = pd.DataFrame(67 encoded_array,68 columns=ohe.get_feature_names_out(categorical_features),69 index=input_df.index70 )71 return encoded_df72 73# =============================74# Routes75# =============================76@app.get("/")77def root():78 return {"message": "API running"}79 80@app.post("/predict")81def predict(request: DrugRequest):82 try:83 df_encoded = encode_input(request.drug_name)84 pred_label = model.predict(df_encoded)[0]85 return {"predicted_pregnancy_category": pred_label}86 except Exception as e:87 raise HTTPException(status_code=500, detail=str(e))88 89# =============================90# Run uvicorn when script is executed91# =============================92if __name__ == "__main__":93 import uvicorn94 uvicorn.run(app, host="0.0.0.0", port=8000)