File size: 3,115 Bytes
cdccea3
 
c38dc45
cdccea3
 
 
 
 
 
c38dc45
cdccea3
c38dc45
 
 
 
cdccea3
c38dc45
 
cdccea3
 
 
 
 
 
 
 
 
 
 
 
 
c38dc45
cdccea3
 
 
 
 
 
 
c38dc45
cdccea3
 
 
 
 
 
 
 
c38dc45
 
 
 
 
cdccea3
 
c38dc45
 
 
cdccea3
 
c38dc45
 
cdccea3
c38dc45
cdccea3
 
 
 
c38dc45
cdccea3
 
 
c38dc45
cdccea3
 
 
 
 
 
c38dc45
cdccea3
 
c38dc45
cdccea3
 
c38dc45
 
 
cdccea3
c38dc45
 
cdccea3
 
c38dc45
cdccea3
 
 
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
87
88
89
90
91
92
93
94
95
96
97
98
# app.py

import os
import streamlit as st
import pandas as pd
import requests
from simple_salesforce import Salesforce

# -----------------------------
# CONFIG β€” Use env vars or hardcode for testing
# -----------------------------
SF_USERNAME = os.getenv("SF_USERNAME", "[email protected]")
SF_PASSWORD = os.getenv("SF_PASSWORD", "Vedavathi@04")
SF_SECURITY_TOKEN = os.getenv("SF_SECURITY_TOKEN", "jqe4His8AcuFJucZz5NBHfGU")
SF_DOMAIN = os.getenv("SF_DOMAIN", "login")  # use "test" for sandbox

HF_API_URL = os.getenv("HF_API_URL", "https://api-inference.huggingface.co/models/your-model")
HF_API_TOKEN = os.getenv("HF_API_TOKEN", "hf_your_token")

# -----------------------------
# Connect to Salesforce
# -----------------------------
def connect_salesforce():
    return Salesforce(username=SF_USERNAME, password=SF_PASSWORD, security_token=SF_SECURITY_TOKEN, domain=SF_DOMAIN)

# -----------------------------
# Fetch Smart Pole Data
# -----------------------------
def fetch_pole_data(sf):
    query = """
    SELECT Name, Solar_Generation__c, Wind_Generation__c, Tilt__c, Vibration__c, Camera_Status__c 
    FROM Vedavathi_Smart_Pole__c
    LIMIT 50
    """
    records = sf.query_all(query)['records']
    df = pd.DataFrame(records).drop(columns=['attributes'])
    return df

# -----------------------------
# Predict with Hugging Face
# -----------------------------
def predict_with_huggingface(df):
    headers = {"Authorization": f"Bearer {HF_API_TOKEN}"}
    predictions = []

    for _, row in df.iterrows():
        payload = {
            "inputs": {
                "solar": row.get("Solar_Generation__c", 0),
                "wind": row.get("Wind_Generation__c", 0),
                "tilt": row.get("Tilt__c", 0),
                "vibration": row.get("Vibration__c", 0),
                "camera": row.get("Camera_Status__c", "Online")
            }
        }
        try:
            response = requests.post(HF_API_URL, headers=headers, json=payload, timeout=10)
            response.raise_for_status()
            result = response.json()
            label = result[0]['label'] if isinstance(result, list) else result.get("label", "Unknown")
        except Exception as e:
            label = f"Error: {e}"
        predictions.append(label)

    df["Predicted Alert Level"] = predictions
    return df

# -----------------------------
# Streamlit App
# -----------------------------
def main():
    st.set_page_config(layout="wide")
    st.title("πŸ“‘ Vedavathi Smart Pole Anomaly Detection")

    try:
        sf = connect_salesforce()
        df = fetch_pole_data(sf)

        if df.empty:
            st.warning("No records found in Salesforce.")
            return

        st.subheader("πŸ“‹ Raw Pole Data")
        st.dataframe(df)

        st.subheader("πŸ€– AI Predictions via Hugging Face")
        df_pred = predict_with_huggingface(df)
        st.success("βœ… Predictions completed")

        st.subheader("πŸ“Š Final Table with Alerts")
        st.dataframe(df_pred)

    except Exception as e:
        st.error(f"❌ Error: {e}")

if __name__ == "__main__":
    main()