bhagwandas commited on
Commit
5ea6795
Β·
verified Β·
1 Parent(s): 7650802

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py - FactoryRAG: Q&A over Sensor Logs (Streamlit + Hugging Face)
2
+
3
+ import streamlit as st
4
+ import pandas as pd
5
+ import numpy as np
6
+ from sentence_transformers import SentenceTransformer
7
+ from transformers import pipeline
8
+
9
+ # Set page config
10
+ st.set_page_config(page_title="FactoryRAG - Sensor Logs", layout="wide")
11
+ st.title("🏭 FactoryRAG: Human-Centric AI for Sensor Log Analysis")
12
+
13
+ # Load models
14
+ EMBED_MODEL = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
15
+ GEN_MODEL = pipeline('text2text-generation', model='google/flan-t5-base')
16
+
17
+ # Load CSV sensor log file
18
+ @st.cache_data
19
+ def load_logs():
20
+ df = pd.read_csv("01-04T184148_000_mode1.csv")
21
+ return df
22
+
23
+ # Convert log rows to natural language chunks
24
+ def convert_to_chunks(df):
25
+ chunks = []
26
+ for idx, row in df.iterrows():
27
+ sentence = f"Log entry {idx}: " + ", ".join([f"{col}: {row[col]:.2f}" for col in df.columns])
28
+ chunks.append(sentence)
29
+ return chunks
30
+
31
+ # Load and embed logs
32
+ df = load_logs()
33
+ st.write("πŸ“Š Sensor Data Snapshot:", df.head())
34
+
35
+ if 'chunks' not in st.session_state:
36
+ st.session_state.chunks = convert_to_chunks(df)
37
+ st.session_state.embeddings = EMBED_MODEL.encode(st.session_state.chunks)
38
+
39
+ # Ask a question
40
+ query = st.text_input("πŸ” Ask something about the sensor logs:")
41
+
42
+ if query:
43
+ query_vec = EMBED_MODEL.encode([query])[0]
44
+ scores = np.dot(st.session_state.embeddings, query_vec)
45
+ top_idxs = np.argsort(scores)[-3:][::-1]
46
+ context = "\n".join([st.session_state.chunks[i] for i in top_idxs])
47
+
48
+ prompt = f"Answer based on the following logs:\n{context}\n\nQuestion: {query}"
49
+ response = GEN_MODEL(prompt, max_length=256)[0]['generated_text']
50
+
51
+ st.subheader("πŸ€– FactoryGPT Answer")
52
+ st.write(response)
53
+
54
+ st.markdown("### πŸ§‘β€πŸ­ Human Feedback")
55
+ st.radio("Is this answer acceptable?", ["Approve", "Correct", "Escalate"], horizontal=True)
56
+
57
+ with st.expander("πŸ“„ Retrieved Log Context"):
58
+ st.code(context)
59
+
60
+ elif len(df) == 0:
61
+ st.warning("⚠️ No data loaded. Please check your CSV file.")