1414from open_webui .internal .db import get_async_session
1515from open_webui .models .access_grants import AccessGrants
1616from open_webui .models .config import Config
17+ from open_webui .models .chat_messages import ChatMessages
1718from open_webui .models .chats import (
1819 AggregateChatStats ,
1920 ChatBody ,
5758}
5859
5960
61+ async def add_active_state_to_chat_list (
62+ request : Request , chat_list : list [ChatTitleIdResponse ]
63+ ) -> list [ChatTitleIdResponse ]:
64+ for chat in chat_list :
65+ chat .active = False
66+ if not await has_active_tasks (request .app .state .redis , chat .id ):
67+ continue
68+
69+ chat .active = await ChatMessages .has_unfinished_assistant_by_chat_id (chat .id )
70+
71+ return chat_list
72+
73+
6074class ChatConfigForm (BaseModel ):
6175 ENABLE_CONTEXT_COMPACTION : bool
6276 CONTEXT_COMPACTION_TOKEN_THRESHOLD : int
@@ -137,6 +151,7 @@ async def require_chat_import_permission(request: Request, user, db: AsyncSessio
137151@router .get ('/' , response_model = list [ChatTitleIdResponse ])
138152@router .get ('/list' , response_model = list [ChatTitleIdResponse ])
139153async def get_session_user_chat_list (
154+ request : Request ,
140155 user = Depends (get_verified_user ),
141156 page : int | None = None ,
142157 include_pinned : bool | None = False ,
@@ -148,7 +163,7 @@ async def get_session_user_chat_list(
148163 limit = 60
149164 skip = (page - 1 ) * limit
150165
151- return await Chats .get_chat_title_id_list_by_user_id (
166+ chats = await Chats .get_chat_title_id_list_by_user_id (
152167 user .id ,
153168 include_folders = include_folders ,
154169 include_pinned = include_pinned ,
@@ -157,12 +172,13 @@ async def get_session_user_chat_list(
157172 db = db ,
158173 )
159174 else :
160- return await Chats .get_chat_title_id_list_by_user_id (
175+ chats = await Chats .get_chat_title_id_list_by_user_id (
161176 user .id ,
162177 include_folders = include_folders ,
163178 include_pinned = include_pinned ,
164179 db = db ,
165180 )
181+ return await add_active_state_to_chat_list (request , chats )
166182 except Exception as e :
167183 log .exception (e )
168184 raise HTTPException (status_code = status .HTTP_400_BAD_REQUEST , detail = ERROR_MESSAGES .DEFAULT ())
@@ -605,6 +621,7 @@ async def delete_all_user_chats(
605621
606622@router .get ('/list/user/{user_id}' , response_model = list [ChatTitleIdResponse ])
607623async def get_user_chat_list_by_user_id (
624+ request : Request ,
608625 user_id : str ,
609626 page : int | None = None ,
610627 query : str | None = None ,
@@ -629,9 +646,10 @@ async def get_user_chat_list_by_user_id(
629646 if direction :
630647 filter ['direction' ] = direction
631648
632- return await Chats .get_chat_list_by_user_id (
649+ chats = await Chats .get_chat_list_by_user_id (
633650 user_id , include_archived = True , filter = filter , skip = skip , limit = limit , db = db
634651 )
652+ return await add_active_state_to_chat_list (request , chats )
635653
636654
637655############################
@@ -738,6 +756,7 @@ async def set_chat_config(form_data: ChatConfigForm, user=Depends(get_admin_user
738756
739757@router .get ('/search' , response_model = list [ChatTitleIdResponse ])
740758async def search_user_chats (
759+ request : Request ,
741760 text : str ,
742761 page : int | None = None ,
743762 user = Depends (get_verified_user ),
@@ -763,7 +782,7 @@ async def search_user_chats(
763782 log .debug (f'deleting tag: { tag_id } ' )
764783 await Tags .delete_tag_by_name_and_user_id (tag_id , user .id , db = db )
765784
766- return chat_list
785+ return await add_active_state_to_chat_list ( request , chat_list )
767786
768787
769788############################
@@ -786,8 +805,9 @@ async def get_chats_by_folder_id(
786805 ]
787806
788807
789- @router .get ('/folder/{folder_id}/list' )
808+ @router .get ('/folder/{folder_id}/list' , response_model = list [ ChatTitleIdResponse ] )
790809async def get_chat_list_by_folder_id (
810+ request : Request ,
791811 folder_id : str ,
792812 page : int | None = 1 ,
793813 user = Depends (get_verified_user ),
@@ -798,10 +818,7 @@ async def get_chat_list_by_folder_id(
798818 skip = (page - 1 ) * limit
799819
800820 chats = await Chats .get_chats_by_folder_id_and_user_id (folder_id , user .id , skip = skip , limit = limit , db = db )
801- return [
802- {'title' : chat .title , 'id' : chat .id , 'updated_at' : chat .updated_at , 'last_read_at' : chat .last_read_at }
803- for chat in chats
804- ]
821+ return await add_active_state_to_chat_list (request , chats )
805822
806823 except Exception as e :
807824 log .exception (e )
@@ -814,8 +831,11 @@ async def get_chat_list_by_folder_id(
814831
815832
816833@router .get ('/pinned' , response_model = list [ChatTitleIdResponse ])
817- async def get_user_pinned_chats (user = Depends (get_verified_user ), db : AsyncSession = Depends (get_async_session )):
818- return await Chats .get_pinned_chats_by_user_id (user .id , db = db )
834+ async def get_user_pinned_chats (
835+ request : Request , user = Depends (get_verified_user ), db : AsyncSession = Depends (get_async_session )
836+ ):
837+ chats = await Chats .get_pinned_chats_by_user_id (user .id , db = db )
838+ return await add_active_state_to_chat_list (request , chats )
819839
820840
821841############################
@@ -908,6 +928,7 @@ async def get_all_user_chats_in_db(user=Depends(get_admin_user), db: AsyncSessio
908928
909929@router .get ('/archived' , response_model = list [ChatTitleIdResponse ])
910930async def get_archived_session_user_chat_list (
931+ request : Request ,
911932 page : int | None = None ,
912933 query : str | None = None ,
913934 order_by : str | None = None ,
@@ -929,13 +950,14 @@ async def get_archived_session_user_chat_list(
929950 if direction :
930951 filter ['direction' ] = direction
931952
932- return await Chats .get_archived_chat_list_by_user_id (
953+ chats = await Chats .get_archived_chat_list_by_user_id (
933954 user .id ,
934955 filter = filter ,
935956 skip = skip ,
936957 limit = limit ,
937958 db = db ,
938959 )
960+ return await add_active_state_to_chat_list (request , chats )
939961
940962
941963############################
@@ -1103,6 +1125,7 @@ class TagFilterForm(TagForm):
11031125
11041126@router .post ('/tags' , response_model = list [ChatTitleIdResponse ])
11051127async def get_user_chat_list_by_tag_name (
1128+ request : Request ,
11061129 form_data : TagFilterForm ,
11071130 user = Depends (get_verified_user ),
11081131 db : AsyncSession = Depends (get_async_session ),
@@ -1113,7 +1136,7 @@ async def get_user_chat_list_by_tag_name(
11131136 if len (chats ) == 0 :
11141137 await Tags .delete_tag_by_name_and_user_id (form_data .name , user .id , db = db )
11151138
1116- return chats
1139+ return await add_active_state_to_chat_list ( request , chats )
11171140
11181141
11191142############################
0 commit comments