diff --git a/backend/apps/webui/models/chats.py b/backend/apps/webui/models/chats.py index c03abb233..b668d97d7 100644 --- a/backend/apps/webui/models/chats.py +++ b/backend/apps/webui/models/chats.py @@ -244,6 +244,32 @@ class ChatTable: .all() ) return [ChatModel.model_validate(chat) for chat in all_chats] + def get_chat_title_id_list_by_user_id( + self, + user_id: str, + include_archived: bool = False, + skip: int = 0, + limit: int = 50, + ) -> List[ChatTitleIdResponse]: + with get_db() as db: + query = db.query(Chat).filter_by(user_id=user_id) + if not include_archived: + query = query.filter_by(archived=False) + + all_chats = ( + query.order_by(Chat.updated_at.desc()) + # limit cols + .with_entities(Chat.id, Chat.title, Chat.updated_at, Chat.created_at) + .all() + ) + # result has to be destrctured from sqlalchemy `row` and mapped to a dict since the `ChatModel`is not the returned dataclass. + return list(map(lambda row: ChatTitleIdResponse.model_validate({ + "id": row[0], + "title": row[1], + "updated_at": row[2], + "created_at": row[3] + }), all_chats)) + def get_chat_list_by_chat_ids( self, chat_ids: List[str], skip: int = 0, limit: int = 50