Navya-Sree commited on
Commit
4385c9f
Β·
verified Β·
1 Parent(s): 24befec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -35
app.py CHANGED
@@ -1,25 +1,36 @@
1
  import os
2
- # Fix Hugging Face Spaces permissions - Comprehensive solution
3
  os.environ['STREAMLIT_GLOBAL_METRICS'] = '0'
4
  os.environ['STREAMLIT_SERVER_ENABLE_STATIC_SERVE'] = '1'
5
  os.environ['STREAMLIT_GLOBAL_DEVELOPMENT_MODE'] = '0'
6
- os.environ['STREAMLIT_GLOBAL_CONFIG_DIR'] = '/tmp' # Redirect config directory
7
- os.environ['STREAMLIT_GLOBAL_DATA_DIR'] = '/tmp' # Redirect data directory
8
- os.environ['HOME'] = '/tmp' # Redirect home directory
9
 
10
- # Prevent Streamlit from writing to protected directories
11
- import streamlit.runtime.metrics_util
12
- def patched_get_machine_id_v4():
13
- return "anonymous-id"
14
- streamlit.runtime.metrics_util._get_machine_id_v4 = patched_get_machine_id_v4
15
 
16
- import streamlit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  import json
18
  import time
19
- import base64
20
  import threading
21
- from datetime import datetime, timedelta
22
- from utils import text_to_speech, speech_to_text, generate_ai_response, get_weather_forecast
23
  from streamlit_mic_recorder import mic_recorder
24
 
25
  # Create data directories
@@ -37,8 +48,6 @@ def init_session():
37
  st.session_state.ai_enabled = True
38
  if "weather_enabled" not in st.session_state:
39
  st.session_state.weather_enabled = True
40
- if "voice_notes" not in st.session_state:
41
- st.session_state.voice_notes = {}
42
  if "notifications" not in st.session_state:
43
  st.session_state.notifications = []
44
 
@@ -78,8 +87,8 @@ def check_reminders():
78
  for reminder in st.session_state.reminders:
79
  if not reminder.get('completed') and not reminder.get('notification_sent'):
80
  try:
81
- due_time = datetime.strptime(reminder['due_time'], "%H:%M:%S.%f").time() if '.' in reminder['due_time'] else datetime.strptime(reminder['due_time'], "%H:%M:%S").time()
82
  due_date = datetime.strptime(reminder['due_date'], "%Y-%m-%d").date()
 
83
 
84
  if due_date == now.date() and due_time.hour == now.hour and due_time.minute == now.minute:
85
  # Create notification
@@ -87,7 +96,7 @@ def check_reminders():
87
  "id": int(time.time() * 1000),
88
  "reminder_id": reminder['id'],
89
  "title": reminder['title'],
90
- "time": str(now),
91
  "dismissed": False
92
  }
93
 
@@ -95,16 +104,10 @@ def check_reminders():
95
  reminder['notification_sent'] = True
96
  save_reminders()
97
 
98
- # Play notification
99
- if reminder.get('voice_note') and os.path.exists(reminder['voice_note']):
100
- threading.Thread(target=play_voice_note, args=(reminder['voice_note'],)).start()
101
- else:
102
- threading.Thread(
103
- target=lambda: st.toast(f"πŸ”” Reminder: {reminder['title']}"),
104
- daemon=True
105
- ).start()
106
- except Exception as e:
107
- print(f"Notification error: {e}")
108
  time.sleep(60) # Check every minute
109
 
110
  # Start notification thread
@@ -161,7 +164,7 @@ def main():
161
  "title": title,
162
  "description": description,
163
  "due_date": str(due_date),
164
- "due_time": str(due_time),
165
  "priority": priority,
166
  "created_at": str(datetime.now()),
167
  "completed": False,
@@ -182,7 +185,6 @@ def main():
182
  st.session_state.reminders.append(new_reminder)
183
  save_reminders()
184
  st.success("Reminder created successfully!")
185
- st.experimental_rerun()
186
 
187
  # Main interface
188
  st.title("⏰ AI-Powered Reminder System")
@@ -204,14 +206,13 @@ def main():
204
  with st.expander("πŸ”” Active Notifications", expanded=True):
205
  for notification in st.session_state.notifications[:]:
206
  if not notification.get('dismissed', False):
207
- st.warning(f"{notification['title']} - {notification['time'][11:16]}")
208
  if st.button("Dismiss", key=f"dismiss_{notification['id']}"):
209
  notification['dismissed'] = True
210
  # Update the original reminder
211
  for reminder in st.session_state.reminders:
212
  if reminder['id'] == notification['reminder_id']:
213
  reminder['notification_sent'] = False
214
- st.experimental_rerun()
215
 
216
  # Calendar view
217
  with st.expander("πŸ“… Calendar View", expanded=True):
@@ -241,7 +242,7 @@ def main():
241
 
242
  with cols[1]:
243
  st.subheader(r["title"])
244
- st.caption(f"⏰ {r['due_time'][:5]} | {r['priority']} priority")
245
 
246
  if r.get("description"):
247
  st.write(r["description"])
@@ -281,7 +282,7 @@ def main():
281
  with st.container(border=True):
282
  cols = st.columns([3, 1])
283
  cols[0].subheader(r["title"])
284
- cols[0].caption(f"πŸ“… {r['due_date']} at {r['due_time'][:5]} ({days_text}) | {r['priority']} priority")
285
 
286
  if r.get("description"):
287
  cols[0].write(r["description"])
@@ -289,7 +290,6 @@ def main():
289
  with cols[1]:
290
  if st.button("Complete", key=f"complete_{r['id']}"):
291
  complete_reminder(r['id'])
292
- st.experimental_rerun()
293
 
294
  # Helper functions
295
  def update_completion(reminder_id):
@@ -310,7 +310,6 @@ def complete_reminder(reminder_id):
310
  def delete_reminder(reminder_id):
311
  st.session_state.reminders = [r for r in st.session_state.reminders if r["id"] != reminder_id]
312
  save_reminders()
313
- st.experimental_rerun()
314
 
315
  if __name__ == "__main__":
316
  main()
 
1
  import os
2
+ # Nuclear solution: Disable Streamlit metrics completely
3
  os.environ['STREAMLIT_GLOBAL_METRICS'] = '0'
4
  os.environ['STREAMLIT_SERVER_ENABLE_STATIC_SERVE'] = '1'
5
  os.environ['STREAMLIT_GLOBAL_DEVELOPMENT_MODE'] = '0'
6
+ os.environ['STREAMLIT_GLOBAL_CONFIG_DIR'] = '/tmp'
7
+ os.environ['STREAMLIT_GLOBAL_DATA_DIR'] = '/tmp'
8
+ os.environ['HOME'] = '/tmp'
9
 
10
+ # Monkey-patch Streamlit internals to disable metrics
11
+ import sys
12
+ import types
 
 
13
 
14
+ # Create a dummy metrics module
15
+ dummy_metrics = types.ModuleType('dummy_metrics')
16
+ dummy_metrics.gather_metrics = lambda: None
17
+ sys.modules['streamlit.runtime.metrics_util'] = dummy_metrics
18
+
19
+ # Create a dummy installation module
20
+ dummy_install = types.ModuleType('dummy_install')
21
+ dummy_install.Installation = type('Installation', (), {
22
+ 'instance': classmethod(lambda cls: cls()),
23
+ 'installation_id_v4': 'anonymous-id'
24
+ })
25
+ sys.modules['streamlit.runtime.installation'] = dummy_install
26
+
27
+ # Now import Streamlit
28
+ import streamlit as st
29
+ from datetime import datetime, timedelta
30
  import json
31
  import time
 
32
  import threading
33
+ from utils import generate_ai_response, get_weather_forecast
 
34
  from streamlit_mic_recorder import mic_recorder
35
 
36
  # Create data directories
 
48
  st.session_state.ai_enabled = True
49
  if "weather_enabled" not in st.session_state:
50
  st.session_state.weather_enabled = True
 
 
51
  if "notifications" not in st.session_state:
52
  st.session_state.notifications = []
53
 
 
87
  for reminder in st.session_state.reminders:
88
  if not reminder.get('completed') and not reminder.get('notification_sent'):
89
  try:
 
90
  due_date = datetime.strptime(reminder['due_date'], "%Y-%m-%d").date()
91
+ due_time = datetime.strptime(reminder['due_time'], "%H:%M:%S").time()
92
 
93
  if due_date == now.date() and due_time.hour == now.hour and due_time.minute == now.minute:
94
  # Create notification
 
96
  "id": int(time.time() * 1000),
97
  "reminder_id": reminder['id'],
98
  "title": reminder['title'],
99
+ "time": now.strftime("%H:%M"),
100
  "dismissed": False
101
  }
102
 
 
104
  reminder['notification_sent'] = True
105
  save_reminders()
106
 
107
+ # Show toast notification
108
+ st.toast(f"πŸ”” Reminder: {reminder['title']}", icon="⏰")
109
+ except Exception:
110
+ pass
 
 
 
 
 
 
111
  time.sleep(60) # Check every minute
112
 
113
  # Start notification thread
 
164
  "title": title,
165
  "description": description,
166
  "due_date": str(due_date),
167
+ "due_time": due_time.strftime("%H:%M:%S"),
168
  "priority": priority,
169
  "created_at": str(datetime.now()),
170
  "completed": False,
 
185
  st.session_state.reminders.append(new_reminder)
186
  save_reminders()
187
  st.success("Reminder created successfully!")
 
188
 
189
  # Main interface
190
  st.title("⏰ AI-Powered Reminder System")
 
206
  with st.expander("πŸ”” Active Notifications", expanded=True):
207
  for notification in st.session_state.notifications[:]:
208
  if not notification.get('dismissed', False):
209
+ st.warning(f"{notification['title']} - {notification['time']}")
210
  if st.button("Dismiss", key=f"dismiss_{notification['id']}"):
211
  notification['dismissed'] = True
212
  # Update the original reminder
213
  for reminder in st.session_state.reminders:
214
  if reminder['id'] == notification['reminder_id']:
215
  reminder['notification_sent'] = False
 
216
 
217
  # Calendar view
218
  with st.expander("πŸ“… Calendar View", expanded=True):
 
242
 
243
  with cols[1]:
244
  st.subheader(r["title"])
245
+ st.caption(f"⏰ {r['due_time']} | {r['priority']} priority")
246
 
247
  if r.get("description"):
248
  st.write(r["description"])
 
282
  with st.container(border=True):
283
  cols = st.columns([3, 1])
284
  cols[0].subheader(r["title"])
285
+ cols[0].caption(f"πŸ“… {r['due_date']} at {r['due_time']} ({days_text}) | {r['priority']} priority")
286
 
287
  if r.get("description"):
288
  cols[0].write(r["description"])
 
290
  with cols[1]:
291
  if st.button("Complete", key=f"complete_{r['id']}"):
292
  complete_reminder(r['id'])
 
293
 
294
  # Helper functions
295
  def update_completion(reminder_id):
 
310
  def delete_reminder(reminder_id):
311
  st.session_state.reminders = [r for r in st.session_state.reminders if r["id"] != reminder_id]
312
  save_reminders()
 
313
 
314
  if __name__ == "__main__":
315
  main()