pradeep4321 commited on
Commit
3509587
Β·
verified Β·
1 Parent(s): 1db10f3

Update src/app.py

Browse files
Files changed (1) hide show
  1. src/app.py +50 -24
src/app.py CHANGED
@@ -2,6 +2,7 @@ import streamlit as st
2
  import pandas as pd
3
  import numpy as np
4
  import re
 
5
 
6
  from sklearn.feature_extraction.text import TfidfVectorizer
7
  from sentence_transformers import SentenceTransformer
@@ -17,7 +18,7 @@ nltk.download('wordnet', quiet=True)
17
  from nltk.corpus import wordnet
18
 
19
  # ==============================
20
- # AUTHENTICATION
21
  # ==============================
22
  def login():
23
  st.title("πŸ” Login Required")
@@ -26,19 +27,27 @@ def login():
26
  password = st.text_input("Password", type="password")
27
 
28
  if st.button("Login"):
29
- if (
30
- username == st.secrets["USERNAME"] and
31
- password == st.secrets["PASSWORD"]
32
- ):
 
 
33
  st.session_state["authenticated"] = True
34
  st.session_state["user"] = username
35
  st.session_state["login_time"] = pd.Timestamp.now()
 
 
 
36
  st.success("βœ… Login successful")
37
  st.rerun()
38
  else:
 
39
  st.error("❌ Invalid credentials")
40
 
41
- # Session control
 
 
42
  if "authenticated" not in st.session_state:
43
  st.session_state["authenticated"] = False
44
 
@@ -56,6 +65,12 @@ st.title("πŸ” Advanced Multi-Search Product Engine")
56
  st.sidebar.success(f"πŸ‘€ User: {st.session_state['user']}")
57
  st.sidebar.info(f"πŸ•’ Login: {st.session_state['login_time']}")
58
 
 
 
 
 
 
 
59
  # ==============================
60
  # LOAD MODEL
61
  # ==============================
@@ -66,10 +81,30 @@ def load_model():
66
  model = load_model()
67
 
68
  # ==============================
69
- # INIT ACTIVITY LOG
70
  # ==============================
71
- if "activity_log" not in st.session_state:
72
- st.session_state["activity_log"] = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
 
74
  # ==============================
75
  # SEARCH INFO
@@ -102,10 +137,6 @@ except Exception as e:
102
  st.error(f"❌ Error loading file: {e}")
103
  st.stop()
104
 
105
- if df.empty:
106
- st.error("Dataset is empty!")
107
- st.stop()
108
-
109
  # ==============================
110
  # DATA PREVIEW
111
  # ==============================
@@ -158,7 +189,7 @@ def get_synonyms(word):
158
  return synonyms
159
 
160
  # ==============================
161
- # SEARCH FUNCTIONS
162
  # ==============================
163
  def keyword_search(q):
164
  return [(i, 1) for i, p in enumerate(products) if q.lower() in p.lower()]
@@ -292,13 +323,8 @@ if st.button("Search"):
292
  results = func_map[search_type](query)
293
  results = sorted(results, key=lambda x: x[1], reverse=True)[:top_k]
294
 
295
- # βœ… LOG USER ACTIVITY
296
- st.session_state["activity_log"].append({
297
- "User": st.session_state["user"],
298
- "Query": query,
299
- "Search Type": search_type,
300
- "Time": str(pd.Timestamp.now())
301
- })
302
 
303
  indices = [i for i, _ in results]
304
  result_df = df.iloc[indices].copy()
@@ -308,12 +334,12 @@ if st.button("Search"):
308
  st.dataframe(result_df)
309
 
310
  # ==============================
311
- # SHOW ACTIVITY LOG
312
  # ==============================
313
  st.sidebar.subheader("πŸ“Š Activity Log")
314
 
315
- if st.session_state["activity_log"]:
316
- log_df = pd.DataFrame(st.session_state["activity_log"])
317
  st.sidebar.dataframe(log_df.tail(10))
318
  else:
319
  st.sidebar.write("No activity yet")
 
2
  import pandas as pd
3
  import numpy as np
4
  import re
5
+ import os
6
 
7
  from sklearn.feature_extraction.text import TfidfVectorizer
8
  from sentence_transformers import SentenceTransformer
 
18
  from nltk.corpus import wordnet
19
 
20
  # ==============================
21
+ # AUTHENTICATION (HF FIXED)
22
  # ==============================
23
  def login():
24
  st.title("πŸ” Login Required")
 
27
  password = st.text_input("Password", type="password")
28
 
29
  if st.button("Login"):
30
+
31
+ # βœ… HuggingFace secrets via environment
32
+ hf_user = os.environ.get("USERNAME", "admin")
33
+ hf_pass = os.environ.get("PASSWORD", "admin123")
34
+
35
+ if username == hf_user and password == hf_pass:
36
  st.session_state["authenticated"] = True
37
  st.session_state["user"] = username
38
  st.session_state["login_time"] = pd.Timestamp.now()
39
+
40
+ log_activity(username, "Login Success", "-", "-")
41
+
42
  st.success("βœ… Login successful")
43
  st.rerun()
44
  else:
45
+ log_activity(username, "Login Failed", "-", "-")
46
  st.error("❌ Invalid credentials")
47
 
48
+ # ==============================
49
+ # SESSION CONTROL
50
+ # ==============================
51
  if "authenticated" not in st.session_state:
52
  st.session_state["authenticated"] = False
53
 
 
65
  st.sidebar.success(f"πŸ‘€ User: {st.session_state['user']}")
66
  st.sidebar.info(f"πŸ•’ Login: {st.session_state['login_time']}")
67
 
68
+ # Logout button
69
+ if st.sidebar.button("πŸšͺ Logout"):
70
+ log_activity(st.session_state["user"], "Logout", "-", "-")
71
+ st.session_state.clear()
72
+ st.rerun()
73
+
74
  # ==============================
75
  # LOAD MODEL
76
  # ==============================
 
81
  model = load_model()
82
 
83
  # ==============================
84
+ # LOGGING FUNCTION (CSV SAVE)
85
  # ==============================
86
+ LOG_FILE = "user_activity_log.csv"
87
+
88
+ def log_activity(user, action, query, search_type):
89
+ log_entry = {
90
+ "User": user,
91
+ "Action": action,
92
+ "Query": query,
93
+ "Search_Type": search_type,
94
+ "Time": str(pd.Timestamp.now())
95
+ }
96
+
97
+ try:
98
+ if os.path.exists(LOG_FILE):
99
+ df_log = pd.read_csv(LOG_FILE)
100
+ df_log = pd.concat([df_log, pd.DataFrame([log_entry])], ignore_index=True)
101
+ else:
102
+ df_log = pd.DataFrame([log_entry])
103
+
104
+ df_log.to_csv(LOG_FILE, index=False)
105
+
106
+ except Exception as e:
107
+ st.warning(f"Logging failed: {e}")
108
 
109
  # ==============================
110
  # SEARCH INFO
 
137
  st.error(f"❌ Error loading file: {e}")
138
  st.stop()
139
 
 
 
 
 
140
  # ==============================
141
  # DATA PREVIEW
142
  # ==============================
 
189
  return synonyms
190
 
191
  # ==============================
192
+ # SEARCH FUNCTIONS (UNCHANGED)
193
  # ==============================
194
  def keyword_search(q):
195
  return [(i, 1) for i, p in enumerate(products) if q.lower() in p.lower()]
 
323
  results = func_map[search_type](query)
324
  results = sorted(results, key=lambda x: x[1], reverse=True)[:top_k]
325
 
326
+ # βœ… LOG SEARCH
327
+ log_activity(st.session_state["user"], "Search", query, search_type)
 
 
 
 
 
328
 
329
  indices = [i for i, _ in results]
330
  result_df = df.iloc[indices].copy()
 
334
  st.dataframe(result_df)
335
 
336
  # ==============================
337
+ # SHOW LOGS
338
  # ==============================
339
  st.sidebar.subheader("πŸ“Š Activity Log")
340
 
341
+ if os.path.exists(LOG_FILE):
342
+ log_df = pd.read_csv(LOG_FILE)
343
  st.sidebar.dataframe(log_df.tail(10))
344
  else:
345
  st.sidebar.write("No activity yet")