matthew.farant commited on
Commit
76d2ccd
·
1 Parent(s): 45d5c03

Merge branch 'development' into staging

Browse files
app/__pycache__/__init__.cpython-312.pyc DELETED
Binary file (144 Bytes)
 
app/__pycache__/assistants.cpython-312.pyc DELETED
Binary file (29.3 kB)
 
app/__pycache__/flows.cpython-312.pyc DELETED
Binary file (18.8 kB)
 
app/__pycache__/main.cpython-312.pyc DELETED
Binary file (34.5 kB)
 
app/__pycache__/user.cpython-312.pyc DELETED
Binary file (36.7 kB)
 
app/__pycache__/utils.cpython-312.pyc DELETED
Binary file (24.7 kB)
 
app/main.py CHANGED
@@ -15,7 +15,7 @@ from openai import OpenAI
15
  import psycopg2
16
  from psycopg2 import sql
17
  import os
18
- from app.utils import get_api_key, get_user_info, print_log, update_user, upload_file_to_s3, get_user, upload_mementos_to_db, get_user_summary, get_user_life_status
19
  from dotenv import load_dotenv
20
  import logging.config
21
  import time
@@ -250,6 +250,45 @@ def ok_endpoint():
250
  logger.info("Health check endpoint called", extra={"endpoint": "/ok"})
251
  return {"message": "ok"}
252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  # endpoint to change user assistant using user.change_to_latest_assistant()
254
  @app.get("/change_assistant")
255
  def change_assistant(user_id: str, api_key: str = Security(get_api_key)):
@@ -269,7 +308,14 @@ def get_user_by_id(user_id: str, api_key: str = Security(get_api_key)):
269
  user = get_user(user_id)
270
  print_log("INFO", "Successfully retrieved user", extra={"user_id": user_id, "endpoint": "/get_user"})
271
  logger.info("Successfully retrieved user", extra={"user_id": user_id, "endpoint": "/get_user"})
272
- return {"user": str(user), "user_messages": user.get_messages(), "assistant": user.conversations.assistants['general'].id}
 
 
 
 
 
 
 
273
  except LookupError:
274
  print_log("ERROR", "User not found", extra={"user_id": user_id, "endpoint": "/get_user"})
275
  logger.error("User not found", extra={"user_id": user_id, "endpoint": "/get_user"})
@@ -392,8 +438,13 @@ def create_user(request: CreateUserItem, api_key: str = Security(get_api_key)):
392
 
393
 
394
  # upload user pickle file to s3 bucket
395
- # filename = f'{user.user_id}.pkl'
396
- upload = update_user(user)
 
 
 
 
 
397
 
398
  if upload == True:
399
  print_log("INFO",f"Successfully created user", extra={"user_id": request.user_id, "endpoint": "/create_user"})
 
15
  import psycopg2
16
  from psycopg2 import sql
17
  import os
18
+ from app.utils import get_api_key, get_user_info, pop_cache, print_log, update_user, upload_file_to_s3, get_user, upload_mementos_to_db, get_user_summary, get_user_life_status
19
  from dotenv import load_dotenv
20
  import logging.config
21
  import time
 
250
  logger.info("Health check endpoint called", extra={"endpoint": "/ok"})
251
  return {"message": "ok"}
252
 
253
+ @app.post("/set_intro_done")
254
+ def set_intro_done(user_id: str, api_key: str = Security(get_api_key)):
255
+ user = get_user(user_id)
256
+ user.set_intro_done()
257
+ logger.info("Intro done", extra={"user_id": user_id, "endpoint": "/set_intro_done"})
258
+ return {"response": "ok"}
259
+
260
+ @app.post("/set_goal")
261
+ def set_goal(user_id: str, goal: str, api_key: str = Security(get_api_key)):
262
+ user = get_user(user_id)
263
+ user.set_goal(goal)
264
+ logger.info(f"Goal set: {goal}", extra={"user_id": user_id, "endpoint": "/set_goal"})
265
+ return {"response": "ok"}
266
+
267
+ @app.post("/do_micro")
268
+ def do_micro(request: ChangeDateItem, day: int, api_key: str = Security(get_api_key)):
269
+ print_log("INFO", "do_micro endpoint")
270
+ logger.info("do_micro endpoint called", extra={"endpoint": "/do_micro"})
271
+
272
+ # get user
273
+ user = get_user(request.user_id)
274
+
275
+ try:
276
+ response = user.do_micro(request.date, day)
277
+ except openai.BadRequestError:
278
+ # Check if there is an active run for the thread id
279
+ recent_run = user.get_recent_run()
280
+ print_log("INFO",f"Recent run: {recent_run}", extra={"user_id": request.user_id, "endpoint": "/chat"})
281
+ logger.info(f"Recent run: {recent_run}", extra={"user_id": request.user_id, "endpoint": "/chat"})
282
+ # If there is an active run, cancel it and resubmit the previous message
283
+ if recent_run:
284
+ user.cancel_run(recent_run)
285
+ response = user.send_message(user.get_recent_message())
286
+
287
+ print_log("INFO",f"Assistant: {response['content']}", extra={"user_id": request.user_id, "endpoint": "/chat"})
288
+ logger.info(f"Assistant: {response['content']}", extra={"user_id": request.user_id, "endpoint": "/chat"})
289
+ return {"response": response}
290
+
291
+
292
  # endpoint to change user assistant using user.change_to_latest_assistant()
293
  @app.get("/change_assistant")
294
  def change_assistant(user_id: str, api_key: str = Security(get_api_key)):
 
308
  user = get_user(user_id)
309
  print_log("INFO", "Successfully retrieved user", extra={"user_id": user_id, "endpoint": "/get_user"})
310
  logger.info("Successfully retrieved user", extra={"user_id": user_id, "endpoint": "/get_user"})
311
+ api_response = {"user": str(user), "user_messages": user.get_messages(), "general_assistant": user.conversations.assistants['general'].id, "intro_assistant": user.conversations.assistants['intro'].id}
312
+
313
+ if user.goal:
314
+ api_response["goal"] = user.goal
315
+ else:
316
+ api_response["goal"] = "Goal is not set yet"
317
+
318
+ return api_response
319
  except LookupError:
320
  print_log("ERROR", "User not found", extra={"user_id": user_id, "endpoint": "/get_user"})
321
  logger.error("User not found", extra={"user_id": user_id, "endpoint": "/get_user"})
 
438
 
439
 
440
  # upload user pickle file to s3 bucket
441
+ filename = f'{user.user_id}.pkl'
442
+ try:
443
+ # value.save_user()
444
+ upload_file_to_s3(filename)
445
+ upload = True
446
+ except:
447
+ upload = False
448
 
449
  if upload == True:
450
  print_log("INFO",f"Successfully created user", extra={"user_id": request.user_id, "endpoint": "/create_user"})
app/utils.py CHANGED
@@ -978,14 +978,21 @@ def download_file_from_s3(filename, bucket):
978
  os.remove(file_path)
979
  return False
980
 
 
 
 
 
 
 
 
 
981
  def update_user(user):
982
  user_id = user.user_id
983
  function_name = update_user.__name__
984
  logger.info(f"Updating user {user_id}", extra={'user_id': user_id, 'endpoint': function_name})
985
- user.save_user()
986
 
987
  # remove from cache, which will also upload the file
988
- user_cache.pop(user_id, None) # Safely remove if exists
989
  logger.info(f"User {user_id} has been removed from the cache", extra={'user_id': user_id, 'endpoint': function_name})
990
 
991
  logger.info(f"User {user.user_id} updated successfully in S3", extra={'user_id': user_id, 'endpoint': function_name})
 
978
  os.remove(file_path)
979
  return False
980
 
981
+ def pop_cache(user_id):
982
+ try:
983
+ user_cache.pop(user_id, None)
984
+ logger.info(f"User {user_id} has been removed from the cache", extra={'user_id': user_id, 'endpoint': 'pop_cache'})
985
+ return True
986
+ except:
987
+ return False
988
+
989
  def update_user(user):
990
  user_id = user.user_id
991
  function_name = update_user.__name__
992
  logger.info(f"Updating user {user_id}", extra={'user_id': user_id, 'endpoint': function_name})
 
993
 
994
  # remove from cache, which will also upload the file
995
+ pop_cache(user_id)
996
  logger.info(f"User {user_id} has been removed from the cache", extra={'user_id': user_id, 'endpoint': function_name})
997
 
998
  logger.info(f"User {user.user_id} updated successfully in S3", extra={'user_id': user_id, 'endpoint': function_name})