diff --git a/backend/chainlit/data/sql_alchemy.py b/backend/chainlit/data/sql_alchemy.py index 024eed6141..8ddc550381 100644 --- a/backend/chainlit/data/sql_alchemy.py +++ b/backend/chainlit/data/sql_alchemy.py @@ -1,3 +1,4 @@ +from importlib import metadata import json import ssl import uuid @@ -115,7 +116,15 @@ async def get_user(self, identifier: str) -> Optional[PersistedUser]: result = await self.execute_sql(query=query, parameters=parameters) if result and isinstance(result, list): user_data = result[0] - return PersistedUser(**user_data) + metadata = user_data.get("metadata") or {} + if metadata is not Dict: + metadata = json.loads(metadata) + return PersistedUser( + id=user_data.get("id"), + identifier=user_data.get("identifier"), + createdAt=user_data.get("createdAt"), + metadata=metadata, + ) return None async def create_user(self, user: User) -> Optional[PersistedUser]: diff --git a/backend/chainlit/socket.py b/backend/chainlit/socket.py index f2979e9e21..d1b35dc0b0 100644 --- a/backend/chainlit/socket.py +++ b/backend/chainlit/socket.py @@ -55,6 +55,8 @@ async def resume_thread(session: WebsocketSession): if user_is_author: metadata = thread.get("metadata") or {} + if metadata is not Dict: + metadata = json.loads(metadata) user_sessions[session.id] = metadata.copy() if chat_profile := metadata.get("chat_profile"): session.chat_profile = chat_profile