Dinesh310 commited on
Commit
8726aa3
·
verified ·
1 Parent(s): 060657d

Create streamlit_app1.py

Browse files
Files changed (1) hide show
  1. streamlit_app1.py +97 -0
streamlit_app1.py ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os
3
+ from src.rag_engine import ProjectRAGEngine
4
+
5
+ # -------------------------------
6
+ # Page configuration
7
+ # -------------------------------
8
+ st.set_page_config(
9
+ page_title="IIR Project Analyzer",
10
+ layout="wide"
11
+ )
12
+
13
+ st.title("📂 Industrial Project Report Analyzer")
14
+
15
+ # -------------------------------
16
+ # Session persistence
17
+ # -------------------------------
18
+ if "engine" not in st.session_state:
19
+ st.session_state.engine = ProjectRAGEngine()
20
+
21
+ if "processed_files" not in st.session_state:
22
+ st.session_state.processed_files = []
23
+
24
+ if "messages" not in st.session_state:
25
+ st.session_state.messages = []
26
+
27
+ # -------------------------------
28
+ # File upload
29
+ # -------------------------------
30
+ uploaded_files = st.sidebar.file_uploader(
31
+ "Upload Project PDFs",
32
+ type="pdf",
33
+ accept_multiple_files=True
34
+ )
35
+
36
+ if uploaded_files:
37
+ uploaded_names = {f.name for f in uploaded_files}
38
+
39
+ if set(st.session_state.processed_files) != uploaded_names:
40
+ with st.spinner("Analyzing project reports..."):
41
+ temp_dir = "temp"
42
+ os.makedirs(temp_dir, exist_ok=True)
43
+
44
+ paths = []
45
+ for f in uploaded_files:
46
+ path = os.path.join(temp_dir, f.name)
47
+ with open(path, "wb") as out:
48
+ out.write(f.getbuffer())
49
+ paths.append(path)
50
+
51
+ st.session_state.engine.process_documents(paths)
52
+ st.session_state.processed_files = list(uploaded_names)
53
+
54
+ st.success("Reports indexed. Ready for queries.")
55
+
56
+ # -------------------------------
57
+ # Display previous chat messages
58
+ # -------------------------------
59
+ for msg in st.session_state.messages:
60
+ with st.chat_message(msg["role"]):
61
+ st.write(msg["content"])
62
+
63
+ # -------------------------------
64
+ # Chat interface
65
+ # -------------------------------
66
+ query = st.chat_input("Ex: 'Compare the budgets of these projects'")
67
+
68
+ if query:
69
+ # Store user message
70
+ st.session_state.messages.append(
71
+ {"role": "user", "content": query}
72
+ )
73
+
74
+ with st.chat_message("user"):
75
+ st.write(query)
76
+
77
+ with st.chat_message("assistant"):
78
+ answer, sources = st.session_state.engine.get_answer(query)
79
+
80
+ st.markdown("### Response")
81
+ st.write(answer)
82
+
83
+ # Store assistant message
84
+ st.session_state.messages.append(
85
+ {"role": "assistant", "content": answer}
86
+ )
87
+
88
+ if sources:
89
+ with st.expander("📌 Source Attribution & Quotes"):
90
+ for idx, s in enumerate(sources):
91
+ doc_name = os.path.basename(s["metadata"]["source"])
92
+ page_num = s["metadata"]["page"] + 1
93
+
94
+ st.markdown(
95
+ f"**Source {idx + 1}:** {doc_name} (Page {page_num})"
96
+ )
97
+ st.caption(f"\"{s['content'][:300]}...\"")