jarvisx17 commited on
Commit
e43b10e
Β·
verified Β·
1 Parent(s): 8883910

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -2
app.py CHANGED
@@ -7,12 +7,58 @@ from agno.models.google import Gemini
7
  from agno.tools.googlecalendar import GoogleCalendarTools
8
  import datetime
9
  from zoneinfo import ZoneInfo
10
- import os
 
 
11
 
12
  load_dotenv()
13
 
14
  app = FastAPI()
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  @app.post("/sms")
17
  async def sms_reply(Body: str = Form(...), From: str = Form(...)):
18
 
@@ -24,7 +70,8 @@ async def sms_reply(Body: str = Form(...), From: str = Form(...)):
24
  id="gemini-2.5-pro-exp-03-25",
25
  api_key=os.getenv("gemini_key")
26
  ),
27
- tools=[GoogleCalendarTools(credentials_path="./credentials.json",token_path="./token.json")],
 
28
  show_tool_calls=True,
29
  instructions=[
30
  f"""
@@ -64,6 +111,8 @@ async def sms_reply(Body: str = Form(...), From: str = Form(...)):
64
  - Include the reason for the appointment in the event description.
65
  - Always ask for user confirmation before booking an appointment.
66
  - Always ask for user confirmation before creating an event.
 
 
67
 
68
  Be polite, upbeat, and positive at all times.
69
 
 
7
  from agno.tools.googlecalendar import GoogleCalendarTools
8
  import datetime
9
  from zoneinfo import ZoneInfo
10
+ import gspread
11
+ from google.oauth2.service_account import Credentials
12
+ from agno.tools import tool
13
 
14
  load_dotenv()
15
 
16
  app = FastAPI()
17
 
18
+ SERVICE_ACCOUNT_FILE = 'hybrid-subject-456511-t8-2eb6032818f8.json'
19
+ SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']
20
+ credentials = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
21
+ gc = gspread.authorize(credentials)
22
+ spreadsheet = gc.open_by_url('https://docs.google.com/spreadsheets/d/1LfeH3lueDz7686bSzhNT_4bq75U0cmsLlcx4PaxEZE4/edit')
23
+ worksheet = spreadsheet.get_worksheet(0)
24
+
25
+ def log_before_call(fc):
26
+ """Pre-hook: Log arguments before calling the tool"""
27
+ print(f"πŸ“‹ Adding appointment with details: {fc.arguments}")
28
+
29
+ def log_after_call(fc):
30
+ """Post-hook: Log result after calling the tool"""
31
+ print(f"βœ… Appointment tool completed with result: {fc.result}")
32
+
33
+ @tool(
34
+ name="add_patient_appointment",
35
+ description="Add a patient's appointment to the worksheet",
36
+ show_result=True,
37
+ stop_after_tool_call=True,
38
+ pre_hook=log_before_call,
39
+ post_hook=log_after_call,
40
+ cache_results=False # usually better off for dynamic actions like this
41
+ )
42
+ def add_appointment(name: str, reason: str, datetime_str: str, contact: str) -> str:
43
+ """
44
+ Add a new appointment entry.
45
+
46
+ Args:
47
+ name (str): Patient's name
48
+ reason (str): Reason for appointment
49
+ datetime_str (str): Date and time range (e.g., "11/7/2025 - 2 PM to 4 PM")
50
+ contact (str): Contact information (email or phone)
51
+
52
+ Returns:
53
+ str: Confirmation message
54
+ """
55
+ new_row = [name, reason, datetime_str, contact]
56
+ try:
57
+ worksheet.append_row(new_row)
58
+ return f"πŸ—“οΈ Appointment added for {name} on {datetime_str} for '{reason}'. Contact: {contact}"
59
+ except Exception as e:
60
+ return f"❌ Error adding appointment: {str(e)}"
61
+
62
  @app.post("/sms")
63
  async def sms_reply(Body: str = Form(...), From: str = Form(...)):
64
 
 
70
  id="gemini-2.5-pro-exp-03-25",
71
  api_key=os.getenv("gemini_key")
72
  ),
73
+ tools=[GoogleCalendarTools(credentials_path="./credentials.json",token_path="./token.json"),
74
+ add_appointment],
75
  show_tool_calls=True,
76
  instructions=[
77
  f"""
 
111
  - Include the reason for the appointment in the event description.
112
  - Always ask for user confirmation before booking an appointment.
113
  - Always ask for user confirmation before creating an event.
114
+ - Always add Entry in Google Sheet for the appointment using the add_appointment function afte scheduling and event but don't mentione it in the response.
115
+ - Always generate conciess and clear short response.
116
 
117
  Be polite, upbeat, and positive at all times.
118