Skip to content

Commit 6b61e19

Browse files
committed
fix: Temporary fixes to chat ID list on the Gradio UI.
1 parent f5b8833 commit 6b61e19

File tree

1 file changed

+62
-40
lines changed

1 file changed

+62
-40
lines changed

src/dqa/web/gradio.py

Lines changed: 62 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,29 @@ def capture_oauth_user(request: gr.Request):
250250
inputs=[bstate_chat_histories],
251251
outputs=[list_task_ids],
252252
)
253-
async def btn_chats_refresh_required(bstate_chat_histories: dict):
254-
if bstate_chat_histories:
255-
yield (list(bstate_chat_histories.keys()))
253+
async def btn_chats_refresh_required(browser_state_chat_histories: list):
254+
# ic(browser_state_chat_histories, type(browser_state_chat_histories))
255+
if browser_state_chat_histories:
256+
# # TODO: Validate that the data in browser state is indeed a list of strings
257+
# ic(browser_state_chat_histories, type(browser_state_chat_histories))
258+
need_to_clear_chat_ids = []
259+
for item in browser_state_chat_histories:
260+
# ic(item, type(item))
261+
if not isinstance(item, str):
262+
need_to_clear_chat_ids.append(item)
263+
logger.warning(
264+
f"Invalid data found in browser state for chat histories. Will remove it.\n{item}"
265+
)
266+
for item_to_clear in need_to_clear_chat_ids:
267+
# ic(item_to_clear, type(item_to_clear))
268+
browser_state_chat_histories.remove(item_to_clear)
269+
# FIXME: The check for list type should not be necessary
270+
yield (
271+
browser_state_chat_histories
272+
if isinstance(browser_state_chat_histories, list)
273+
else []
274+
)
275+
# yield browser_state_chat_histories
256276
else:
257277
yield []
258278

@@ -306,19 +326,19 @@ async def refresh_chat_history_from_agent(
306326
trigger_mode="always_last",
307327
inputs=[
308328
state_selected_chat_id,
309-
bstate_chat_histories,
310329
state_oauth_userid,
311330
],
312-
outputs=[btn_chat_delete, chatbot, bstate_chat_histories],
331+
outputs=[btn_chat_delete, chatbot],
313332
)
314333
async def state_selected_chat_id_changed(
315334
selected_chat_id: str,
316-
chat_histories: dict,
335+
# browser_state_chat_histories: list,
317336
oauth_userid: str | None = None,
318337
):
319338
try:
320-
if not chat_histories:
321-
chat_histories = {}
339+
# if not browser_state_chat_histories:
340+
# browser_state_chat_histories = []
341+
# ic(browser_state_chat_histories, type(browser_state_chat_histories))
322342
if selected_chat_id and selected_chat_id.strip() != "":
323343
yield {
324344
btn_chat_delete: gr.update(interactive=False),
@@ -330,24 +350,23 @@ async def state_selected_chat_id_changed(
330350
refreshed_history = await refresh_chat_history_from_agent(
331351
selected_chat_id, oauth_userid
332352
)
333-
chat_histories[selected_chat_id] = refreshed_history
334-
yield (
335-
gr.update(interactive=True),
336-
gr.update(
337-
value=chat_histories.get(selected_chat_id, []),
353+
yield {
354+
btn_chat_delete: gr.update(interactive=True),
355+
chatbot: gr.update(
356+
value=refreshed_history,
338357
label=f"Chat ID: {selected_chat_id}",
339358
),
340-
chat_histories,
341-
)
359+
# bstate_chat_histories: browser_state_chat_histories,
360+
}
342361
else:
343-
yield (
344-
gr.update(interactive=False),
345-
gr.update(
362+
yield {
363+
btn_chat_delete: gr.update(interactive=False),
364+
chatbot: gr.update(
346365
value=[],
347366
label="Chat history (a new chat will be created if none if selected)",
348367
),
349-
chat_histories,
350-
)
368+
# bstate_chat_histories: browser_state_chat_histories,
369+
}
351370
except Exception as e:
352371
raise gr.Error(e)
353372

@@ -402,15 +421,15 @@ async def delete_remote_chat_history(
402421
outputs=[bstate_chat_histories, state_selected_chat_id],
403422
)
404423
async def btn_chat_delete_clicked(
405-
browser_state_chat_histories: dict,
424+
browser_state_chat_histories: list,
406425
selected_chat_id,
407426
oauth_userid: str | None = None,
408427
):
409428
if selected_chat_id and browser_state_chat_histories:
410429
if selected_chat_id in browser_state_chat_histories:
411430
gr.Info(f"Requested deletion of chat ID: {selected_chat_id}...")
412431
await delete_remote_chat_history(selected_chat_id, oauth_userid)
413-
del browser_state_chat_histories[selected_chat_id]
432+
browser_state_chat_histories.remove(selected_chat_id)
414433
selected_chat_id = None
415434
else:
416435
gr.Warning(
@@ -426,16 +445,18 @@ async def btn_chat_delete_clicked(
426445
outputs=[bstate_chat_histories, state_selected_chat_id, txt_chat_id],
427446
)
428447
async def btn_new_chat_clicked(
429-
new_chat_id: str, browser_state_chat_histories: dict
448+
new_chat_id: str, browser_state_chat_histories: list
430449
):
431450
if not new_chat_id or new_chat_id.strip() == "":
432451
new_chat_id = uuid4().hex
433452
else:
434453
new_chat_id = new_chat_id.strip()
435454
new_chat_id = new_chat_id.replace(" ", "")
436-
if not browser_state_chat_histories:
437-
browser_state_chat_histories = {}
438-
browser_state_chat_histories[new_chat_id] = []
455+
if not browser_state_chat_histories or isinstance(
456+
browser_state_chat_histories, dict
457+
):
458+
browser_state_chat_histories = []
459+
browser_state_chat_histories.append(new_chat_id)
439460
yield browser_state_chat_histories, new_chat_id, None
440461

441462
@gr.on(
@@ -454,21 +475,23 @@ async def btn_new_chat_clicked(
454475
chatbot,
455476
],
456477
)
457-
async def btn_echo_clicked(
478+
async def btn_send_clicked(
458479
user_query: str,
459-
browser_state_chat_histories: dict,
480+
browser_state_chat_histories: list,
460481
state_selected_chat: str,
461482
chat_history: list,
462483
oauth_userid: str | None = None,
463484
):
464485
selected_chat_id = (
465486
state_selected_chat if state_selected_chat else uuid4().hex
466487
)
488+
if not browser_state_chat_histories:
489+
browser_state_chat_histories = []
490+
491+
if selected_chat_id not in browser_state_chat_histories:
492+
browser_state_chat_histories.append(selected_chat_id)
467493
try:
468494
if user_query and user_query.strip() != "":
469-
if not browser_state_chat_histories:
470-
browser_state_chat_histories = {}
471-
472495
temp_user_message = self.convert_mhqa_response_to_chat_messages(
473496
MHQAResponse(
474497
thread_id=selected_chat_id
@@ -563,23 +586,22 @@ async def btn_echo_clicked(
563586
chat_history.extend(new_messages)
564587
last_added_messages = len(new_messages)
565588

566-
browser_state_chat_histories[
567-
selected_chat_id
568-
] = chat_history
569589
yield {
570590
bstate_chat_histories: browser_state_chat_histories,
591+
state_selected_chat_id: selected_chat_id,
571592
chatbot: chat_history,
572593
}
573594
else:
574595
gr.Warning(
575596
f"No input message was provided for chat ID {selected_chat_id}."
576597
)
577-
yield (
578-
None,
579-
browser_state_chat_histories,
580-
selected_chat_id,
581-
chat_history,
582-
)
598+
# ic(browser_state_chat_histories, type(browser_state_chat_histories))
599+
yield {
600+
txt_input: None,
601+
bstate_chat_histories: browser_state_chat_histories,
602+
state_selected_chat_id: selected_chat_id,
603+
chatbot: chat_history,
604+
}
583605
except Exception as e:
584606
yield {
585607
txt_input: user_query,

0 commit comments

Comments
 (0)