ujwal55's picture
Removed abs func
bcc7224
import gradio as gr
from datetime import datetime
import pytz
# In-session reminder list
reminders = [] # Format: {'time': datetime, 'message': str, 'tz': str}
# Add a reminder
def add_reminder(time_str, message, timezone):
try:
user_tz = pytz.timezone(timezone)
naive_dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M")
aware_dt = user_tz.localize(naive_dt)
now_utc = datetime.now(pytz.utc)
if aware_dt.astimezone(pytz.utc) < now_utc:
return "β›” Time is in the past. Please enter a future time."
reminders.append({'time': aware_dt, 'message': message, 'tz': timezone})
reminders.sort(key=lambda x: x['time'].astimezone(pytz.utc))
return f"βœ… Reminder added for {aware_dt.strftime('%Y-%m-%d %H:%M %Z')}"
except Exception as e:
return f"❌ Error: {str(e)}"
# List reminders
def list_reminders():
if not reminders:
return "πŸ“­ No reminders yet."
now = datetime.now(pytz.utc)
result = []
for r in reminders:
local_time = r['time'].astimezone(pytz.timezone(r['tz']))
time_left = r['time'].astimezone(pytz.utc) - now
mins = int(time_left.total_seconds() / 60)
result.append(f"πŸ•’ {local_time.strftime('%Y-%m-%d %H:%M %Z')} β†’ {r['message']} ({mins} min left)")
return "\n".join(result)
# Check next due reminder
def check_next():
now = datetime.now(pytz.utc)
for r in reminders:
if (r['time'].astimezone(pytz.utc) - now).total_seconds() < 60:
local_time = r['time'].astimezone(pytz.timezone(r['tz']))
return f"πŸ”” Due now: {r['message']} ({local_time.strftime('%H:%M %Z')})"
return "βœ… Nothing due right now."
# Delete reminder
def delete_reminder(time_str, timezone):
try:
user_tz = pytz.timezone(timezone)
target_time = user_tz.localize(datetime.strptime(time_str, "%Y-%m-%d %H:%M"))
global reminders
original_len = len(reminders)
reminders = [r for r in reminders if not (
r['time'].astimezone(pytz.utc) == target_time.astimezone(pytz.utc)
)]
if len(reminders) < original_len:
return f"πŸ—‘οΈ Reminder at {time_str} ({timezone}) deleted."
return "⚠️ No matching reminder found."
except Exception as e:
return f"❌ Error: {str(e)}"
# Common timezone choices
timezone_choices = ["UTC", "Asia/Kolkata", "America/New_York", "Europe/London", "Asia/Tokyo"]
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## ⏰ Stateful Reminder Agent with Timezone Support")
with gr.Tab("βž• Add Reminder"):
time_in = gr.Textbox(label="Time (YYYY-MM-DD HH:MM)", placeholder="2025-06-07 09:00")
msg_in = gr.Textbox(label="Reminder Message", placeholder="Doctor appointment")
tz_in = gr.Dropdown(label="Timezone", choices=timezone_choices, value="UTC")
out_add = gr.Textbox(label="Status")
gr.Button("Add Reminder").click(fn=add_reminder, inputs=[time_in, msg_in, tz_in], outputs=out_add)
with gr.Tab("πŸ“‹ View All Reminders"):
out_list = gr.Textbox(label="Reminders", lines=10)
gr.Button("List Reminders").click(fn=list_reminders, outputs=out_list)
with gr.Tab("πŸ”” Check What’s Due"):
out_next = gr.Textbox(label="Next Reminder")
gr.Button("What's Next?").click(fn=check_next, outputs=out_next)
with gr.Tab("πŸ—‘οΈ Delete Reminder"):
del_time = gr.Textbox(label="Time to Delete (YYYY-MM-DD HH:MM)")
del_tz = gr.Dropdown(label="Timezone of Reminder", choices=timezone_choices, value="UTC")
out_del = gr.Textbox(label="Status")
gr.Button("Delete").click(fn=delete_reminder, inputs=[del_time, del_tz], outputs=out_del)
demo.launch()