import streamlit as st import requests API_URL = "https://lokiiparihar-superkart-api.hf.space/predict" # use the working API st.set_page_config(page_title="Superkart Sales Prediction", layout="centered") st.title("Sales Prediction App") st.write("This tool predicts Superkart sales. Enter the required information below.") # Model Choice model_choice = st.selectbox( "Select Model", options=["dt", "xgb"], format_func=lambda x: { "dt": "Decision Tree", "xgb": "XGBoost", "rf": "Random Forest", "lr": "Linear Regression", }.get(x, x), ) # Inputs (set defaults so the API call has valid values) col1, col2 = st.columns(2) with col1: product_weight = st.number_input("Product Weight", min_value=0.0, value=12.5, step=0.1) sugar = st.selectbox("Sugar Content", [0, 1, 2], index=0) area = st.number_input("Allocated Area", min_value=0.0, value=0.08, step=0.01) product_type = st.number_input("Product Type Code", min_value=0, value=0, step=1) with col2: mrp = st.number_input("Product MRP", min_value=0.0, value=249.99, step=1.0) store_size = st.selectbox("Store Size Code", [0, 1, 2], index=1) city = st.selectbox("City Type Code", [0, 1, 2], index=0) store_type = st.number_input("Store Type Code", min_value=0, value=1, step=1) store_age = st.number_input("Store Age", min_value=0, value=15, step=1) # Build payload EXACTLY as your working notebook request expects sample = { "Product_Weight": float(product_weight), "Product_Sugar_Content": float(sugar), "Product_Allocated_Area": float(area), "Product_Type": int(product_type), "Product_MRP": float(mrp), "Store_Size": int(store_size), "Store_Location_City_Type": int(city), "Store_Type": int(store_type), "Store_Age": int(store_age), "model": model_choice, } st.subheader("Payload being sent") st.json(sample) if st.button("Predict", type="primary"): try: headers = {"Content-Type": "application/json"} with st.spinner("Calling prediction API..."): response = requests.post(API_URL, json=sample, headers=headers, timeout=30) st.write("Status Code:", response.status_code) # Show raw response for debugging st.write("Raw Response:") st.code(response.text) if response.headers.get("content-type", "").startswith("application/json"): result = response.json() st.write("Parsed JSON:") st.json(result) # Try common keys (your API might return a different one) pred_key = next((k for k in ["Prediction", "prediction", "pred", "result", "output"] if k in result), None) if pred_key: st.success(f"Prediction: {result[pred_key]}") else: st.info("Prediction key not found. See JSON above.") else: st.error("API did not return JSON. See raw response above.") except requests.exceptions.RequestException as e: st.error(f"Request failed: {e}") # IMPORTANT: # Streamlit apps do NOT use app.run(). Remove any Flask-related code. # if __name__ == '__main__': # app.run(debug=True)