jake2004 commited on
Commit
0c80d4f
Β·
verified Β·
1 Parent(s): 61d2dee

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -0
app.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import openpyxl
4
+ import faiss
5
+ import spacy
6
+ from sentence_transformers import SentenceTransformer
7
+
8
+ # βœ… Load NLP Model
9
+ nlp = spacy.load("en_core_web_sm")
10
+
11
+ # βœ… Streamlit UI
12
+ st.set_page_config(page_title="AI-Powered Timetable", layout="wide")
13
+ st.markdown("<h1 style='text-align: center; color: #4CAF50;'>πŸ“… AI-Powered Timetable</h1>", unsafe_allow_html=True)
14
+
15
+ # βœ… File Upload Section
16
+ st.sidebar.markdown("## πŸ“‚ Upload Your Timetable Files")
17
+ uploaded_timetable = st.sidebar.file_uploader("Upload Timetable (Excel)", type=["xlsx"])
18
+
19
+ # βœ… Load Timetable Data
20
+ def load_timetable(file):
21
+ if not file:
22
+ return None
23
+ df = pd.read_excel(file)
24
+ return df
25
+
26
+ timetable_df = load_timetable(uploaded_timetable)
27
+
28
+ # βœ… Extract Timetable as Text Data
29
+ if timetable_df is not None:
30
+ timetable_texts = timetable_df.astype(str).apply(lambda x: " | ".join(x), axis=1).tolist()
31
+ else:
32
+ timetable_texts = []
33
+
34
+ # βœ… Initialize Embeddings
35
+ embedder = SentenceTransformer("all-MiniLM-L6-v2")
36
+ if timetable_texts:
37
+ embeddings = embedder.encode(timetable_texts, convert_to_tensor=True).cpu().numpy()
38
+ dimension = embeddings.shape[1] # FIXED: Ensure valid shape
39
+ index = faiss.IndexFlatL2(dimension)
40
+ index.add(embeddings)
41
+
42
+ # βœ… Retrieve Relevant Texts
43
+ def retrieve_timetable_data(query, top_k=2):
44
+ query_embedding = embedder.encode([query], convert_to_tensor=True).cpu().numpy()
45
+ distances, indices = index.search(query_embedding, top_k)
46
+
47
+ retrieved_texts = [timetable_texts[idx] for idx in indices[0] if idx < len(timetable_texts)]
48
+ return "\n".join(retrieved_texts)
49
+
50
+ # βœ… NLP-Based Response System
51
+ def generate_response(query):
52
+ doc = nlp(query.lower())
53
+
54
+ if "who" in query:
55
+ return "Searching for faculty information..."
56
+ elif "when" in query:
57
+ return "Retrieving schedule details..."
58
+ elif "where" in query:
59
+ return "Locating classrooms..."
60
+
61
+ return "Let me check the timetable."
62
+
63
+ # βœ… AI Query Section
64
+ st.markdown("## πŸ€– Ask AI About Your Timetable")
65
+ user_query = st.text_input("Type your question here")
66
+
67
+ if st.button("Ask AI"):
68
+ retrieved_info = retrieve_timetable_data(user_query)
69
+ response = generate_response(user_query)
70
+ st.write(f"πŸ“ **Retrieved Timetable Data:**\n{retrieved_info}")
71
+ st.write(f"πŸ€– **AI Suggests:** {response}")
72
+
73
+ # βœ… Display Uploaded Timetable
74
+ if timetable_df is not None:
75
+ st.markdown("## πŸ“œ Uploaded Timetable")
76
+ st.dataframe(timetable_df)