File size: 4,061 Bytes
bfde63f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import os
import sys
import json
import gradio as gr

# Ensure project root is in sys.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
if PROJECT_ROOT not in sys.path:
    sys.path.insert(0, PROJECT_ROOT)

from ml.inference.unified_inference import inference_service

LIVE_API_KEY = os.getenv("MODEL_API_KEY", "c360_live_key_9f8a2b7c4e1d")

def predict_gradio(
    customer_id, name, recency_days, frequency_purchases, monetary_total_spend,
    website_visits_30d, product_views_30d, cart_additions_30d, cart_abandonments_30d,
    support_tickets_30d, engagement_change_pct, preferred_channel, preferred_category,
    api_key_input
):
    # Verify API Key
    if api_key_input != LIVE_API_KEY:
        return {"error": "Unauthorized: Invalid API Key. Please provide the correct X-API-Key."}

    cust_dict = {
        "customer_id": customer_id or "C1001",
        "name": name or "Sample Customer",
        "recency_days": int(recency_days),
        "frequency_purchases": int(frequency_purchases),
        "monetary_total_spend": float(monetary_total_spend),
        "website_visits_30d": int(website_visits_30d),
        "product_views_30d": int(product_views_30d),
        "cart_additions_30d": int(cart_additions_30d),
        "cart_abandonments_30d": int(cart_abandonments_30d),
        "email_opens_30d": 5,
        "email_clicks_30d": 2,
        "support_tickets_30d": int(support_tickets_30d),
        "engagement_change_pct": float(engagement_change_pct),
        "preferred_channel": preferred_channel,
        "preferred_category": preferred_category
    }

    res = inference_service.predict_customer_decision(cust_dict)
    return res

# Build Gradio UI
with gr.Blocks(title="Customer360 AI -- Live Model Decision Studio") as demo:
    gr.Markdown("# 🧠 Customer360 AI -- Live Model Decision Studio")
    gr.Markdown("Real-time Churn Prediction, Purchase Propensity, Customer Lifetime Value & Next Best Action Engine.")
    
    with gr.Row():
        with gr.Column():
            api_key_input = gr.Textbox(label="Live API Key", value="c360_live_key_9f8a2b7c4e1d", type="password")
            customer_id = gr.Textbox(label="Customer ID", value="C1024")
            name = gr.Textbox(label="Customer Name", value="Ananya Sharma")
            recency_days = gr.Number(label="Days Inactive (Recency)", value=74)
            frequency_purchases = gr.Number(label="Total Purchases", value=12)
            monetary_total_spend = gr.Number(label="Lifetime Spend (INR)", value=45000)
            website_visits_30d = gr.Number(label="30-Day Website Visits", value=3)
            product_views_30d = gr.Number(label="30-Day Product Views", value=5)
            cart_additions_30d = gr.Number(label="30-Day Cart Additions", value=3)
            cart_abandonments_30d = gr.Number(label="30-Day Cart Abandonments", value=2)
            support_tickets_30d = gr.Number(label="30-Day Support Tickets", value=3)
            engagement_change_pct = gr.Number(label="Engagement Trend %", value=-65.0)
            preferred_channel = gr.Dropdown(label="Preferred Channel", choices=["WhatsApp", "Email", "Push", "SMS"], value="WhatsApp")
            preferred_category = gr.Dropdown(label="Preferred Category", choices=["Electronics", "Fashion", "Home & Kitchen", "Beauty & Care", "Sports & Fitness"], value="Electronics")
            
            btn = gr.Button("🚀 Run Live ML Inference", variant="primary")

        with gr.Column():
            output_json = gr.JSON(label="ML Prediction & Next Best Action Result")

    btn.click(
        fn=predict_gradio,
        inputs=[
            customer_id, name, recency_days, frequency_purchases, monetary_total_spend,
            website_visits_30d, product_views_30d, cart_additions_30d, cart_abandonments_30d,
            support_tickets_30d, engagement_change_pct, preferred_channel, preferred_category,
            api_key_input
        ],
        outputs=output_json
    )

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=int(os.environ.get("PORT", 7860)))