@@ -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