import os import gradio as gr import pandas as pd import joblib # Load your model and feature list model = joblib.load("ar_overdue_model.joblib") feature_names = joblib.load("ar_model_features.joblib") def predict(company_code, document_type, amount, due_in_days): # Build the input DataFrame input_dict = { "company_code": company_code, "document_type": document_type, "amount": amount, "due_in_days": due_in_days } input_df = pd.DataFrame([input_dict]) # One-hot encode and align columns input_df = pd.get_dummies(input_df) for col in feature_names: if col not in input_df.columns: input_df[col] = 0 input_df = input_df[feature_names] # Predict proba = model.predict_proba(input_df)[0, 1] pred = model.predict(input_df)[0] return f"Overdue: {bool(pred)} (Probability: {proba:.2f})" # Define the Gradio interface iface = gr.Interface( fn=predict, inputs=[ gr.Dropdown(['CompanyA', 'CompanyB', 'CompanyC'], label="Company Code"), gr.Dropdown(['INV', 'CRN', 'DBN'], label="Document Type"), gr.Number(label="Amount"), gr.Number(label="Due In Days") ], outputs="text", title="AR Overdue Prediction", description="Enter invoice details to predict overdue probability." ) if __name__ == "__main__": # 1) Turn on the async queue so the /api/* routes get mounted iface = iface.queue() # 2) Read the HF Spaces port (default to 7860 locally) port = int(os.environ.get("PORT", 7860)) # 3) Launch on all interfaces iface.launch(server_name="0.0.0.0", server_port=port)