cheeku2 commited on
Commit
32a5ebc
1 Parent(s): 4c354df

Update app/main.py

Browse files
Files changed (1) hide show
  1. app/main.py +33 -13
app/main.py CHANGED
@@ -25,31 +25,53 @@ session_assistant = ChatPDF()
25
 
26
  logging.basicConfig(level=logging.INFO)
27
  logger = logging.getLogger(__name__)
28
- isBusy = False
 
 
 
 
 
 
 
29
 
30
  @app.middleware("http")
31
  async def resolve_availability(request: Request, call_next):
32
- global isBusy
33
- if isBusy:
34
  return PlainTextResponse("Server is busy", status_code=503)
35
- response = await call_next(request)
36
- return response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
 
39
  def astreamer(generator):
40
- global isBusy
41
  t0 = time.time()
42
  for i in generator:
43
  logger.info(f"Chunk being yielded (time {int((time.time()-t0)*1000)}ms) - {i}")
44
  yield i
45
  logger.info(f"X-Process-Time: {int((time.time()-t0)*1000)}ms")
46
- isBusy = False
47
 
48
 
49
  @app.get("/query")
50
  async def process_input(text: str):
51
- global isBusy
52
- isBusy = True
53
  generator = None
54
  if text and len(text.strip()) > 0:
55
  if session_assistant.pdf_count > 0:
@@ -67,8 +89,7 @@ async def process_input(text: str):
67
 
68
  @app.post("/upload")
69
  def upload(files: list[UploadFile]):
70
- global isBusy
71
- isBusy = True
72
  try:
73
  os.makedirs(files_dir)
74
  for file in files:
@@ -89,8 +110,7 @@ def upload(files: list[UploadFile]):
89
 
90
  @app.get("/clear")
91
  def clear():
92
- global isBusy
93
- isBusy = True
94
  session_assistant.clear()
95
  message = "Your files have been cleared successfully."
96
  generator = re.split(r'(\s)', message)
 
25
 
26
  logging.basicConfig(level=logging.INFO)
27
  logger = logging.getLogger(__name__)
28
+
29
+ class Session:
30
+ isBusy = False # Processing upload or query response
31
+ curUserID = ""
32
+ prevUserID = ""
33
+ lastQueryTimestamp = 0
34
+
35
+ session = Session()
36
 
37
  @app.middleware("http")
38
  async def resolve_availability(request: Request, call_next):
39
+ if session.isBusy:
 
40
  return PlainTextResponse("Server is busy", status_code=503)
41
+
42
+ request_args = dict(request.query_params)
43
+ if not "id" in request_args:
44
+ return PlainTextResponse("Bad request", status_code=400)
45
+
46
+ now = time.time()
47
+ if session.curUserID == request_args["id"]:
48
+ session.lastQueryTimestamp = now
49
+ return await call_next(request)
50
+
51
+ if session.prevUserID == request_args["id"]:
52
+ return PlainTextResponse("Session has expired", status_code=419)
53
+
54
+ if now - session.lastQueryTimestamp >= 300:
55
+ session.lastQueryTimestamp = now
56
+ session.prevUserID = session.curUserID
57
+ session.curUserID = request_args["id"]
58
+ return await call_next(request)
59
+
60
+ return PlainTextResponse("Server is busy", status_code=503)
61
 
62
 
63
  def astreamer(generator):
 
64
  t0 = time.time()
65
  for i in generator:
66
  logger.info(f"Chunk being yielded (time {int((time.time()-t0)*1000)}ms) - {i}")
67
  yield i
68
  logger.info(f"X-Process-Time: {int((time.time()-t0)*1000)}ms")
69
+ session.isBusy = False
70
 
71
 
72
  @app.get("/query")
73
  async def process_input(text: str):
74
+ session.isBusy = True
 
75
  generator = None
76
  if text and len(text.strip()) > 0:
77
  if session_assistant.pdf_count > 0:
 
89
 
90
  @app.post("/upload")
91
  def upload(files: list[UploadFile]):
92
+ session.isBusy = True
 
93
  try:
94
  os.makedirs(files_dir)
95
  for file in files:
 
110
 
111
  @app.get("/clear")
112
  def clear():
113
+ session.isBusy = True
 
114
  session_assistant.clear()
115
  message = "Your files have been cleared successfully."
116
  generator = re.split(r'(\s)', message)