Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,25 +1,36 @@
|
|
| 1 |
import os
|
| 2 |
-
#
|
| 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 |
-
#
|
| 11 |
-
import
|
| 12 |
-
|
| 13 |
-
return "anonymous-id"
|
| 14 |
-
streamlit.runtime.metrics_util._get_machine_id_v4 = patched_get_machine_id_v4
|
| 15 |
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
import json
|
| 18 |
import time
|
| 19 |
-
import base64
|
| 20 |
import threading
|
| 21 |
-
from
|
| 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":
|
| 91 |
"dismissed": False
|
| 92 |
}
|
| 93 |
|
|
@@ -95,16 +104,10 @@ def check_reminders():
|
|
| 95 |
reminder['notification_sent'] = True
|
| 96 |
save_reminders()
|
| 97 |
|
| 98 |
-
#
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 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":
|
| 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']
|
| 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']
|
| 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']
|
| 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()
|