HAWKEYE / app.py
namanraj's picture
Update app.py
55b5ceb verified
# --- top of file imports (keep your existing imports) ---
import os, sys, traceback, joblib, numpy as np, pandas as pd, gradio as gr
MODEL_PATH = "model4_random_forest.pkl"
# keep your load_model_joblib() implementation unchanged here
# (paste the function you already have)
_model = None # global cache
def get_model():
global _model
if _model is not None:
return _model
try:
_model = load_model_joblib(MODEL_PATH)
print("Model loaded OK. Type:", type(_model), file=sys.stderr)
return _model
except Exception as e:
print("ERROR LOADING MODEL AT RUNTIME:", e, file=sys.stderr)
traceback.print_exc()
_model = None
return None
def predict(step, tx_type, amount, oldbalanceOrg, oldbalanceDest):
try:
model = get_model()
if model is None:
raise RuntimeError("Model unavailable on the server. Check Space logs for load error.")
# ... rest of your predict body unchanged ...
# map type -> tx_mapped
if isinstance(tx_type, str):
tx_str = tx_type.strip().upper()
if tx_str in TYPE_MAP:
tx_mapped = TYPE_MAP[tx_str]
else:
try:
tx_mapped = int(tx_type)
except:
raise ValueError(f"Unknown type: {tx_type}. Expected one of {list(TYPE_MAP.keys())} or integer 0-4.")
else:
tx_mapped = int(tx_type)
df = pd.DataFrame([{
"step": int(step),
"type": int(tx_mapped),
"amount": float(amount),
"oldbalanceOrg": float(oldbalanceOrg),
"oldbalanceDest": float(oldbalanceDest)
}])
X = df[["step","type","amount","oldbalanceOrg","oldbalanceDest"]].values
preds = model.predict(X)
pred0 = preds[0].item() if hasattr(preds[0], "item") else preds[0]
probs = model.predict_proba(X)[0].tolist() if hasattr(model, "predict_proba") else None
return {"prediction": int(pred0), "probabilities": probs}
except Exception as e:
tb = traceback.format_exc()
print("PREDICTION ERROR:", tb, file=sys.stderr)
return {"error": str(e)}