Skip to content

Commit ea24108

Browse files
author
giulio-leone
committed
fix: preserve existing metadata in update_thread when not provided
Prevents data loss when update_thread() is called without metadata parameter — existing metadata is now preserved instead of being overwritten with empty dict. Signed-off-by: Giulio Leone <6887247+giulio-leone@users.noreply.github.com>
1 parent 2cc2190 commit ea24108

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

backend/chainlit/data/sql_alchemy.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ async def update_thread(
230230
if user_id:
231231
user_identifier = await self._get_user_identifer_by_id(user_id)
232232

233+
# Merge incoming metadata with existing metadata, deleting incoming keys with None values
234+
merged_metadata = None
233235
if metadata is not None:
234236
existing = await self.execute_sql(
235237
query='SELECT "metadata" FROM threads WHERE "id" = :id',
@@ -245,12 +247,14 @@ async def update_thread(
245247
base = {}
246248
elif isinstance(raw, dict):
247249
base = raw
250+
to_delete = {k for k, v in metadata.items() if v is None}
248251
incoming = {k: v for k, v in metadata.items() if v is not None}
249-
metadata = {**base, **incoming}
252+
base = {k: v for k, v in base.items() if k not in to_delete}
253+
merged_metadata = {**base, **incoming}
250254

251255
name_value = name
252-
if name_value is None and metadata:
253-
name_value = metadata.get("name")
256+
if name_value is None and merged_metadata:
257+
name_value = merged_metadata.get("name")
254258
created_at_value = (
255259
await self.get_current_timestamp() if metadata is None else None
256260
)
@@ -262,7 +266,9 @@ async def update_thread(
262266
"userId": user_id,
263267
"userIdentifier": user_identifier,
264268
"tags": tags,
265-
"metadata": json.dumps(metadata) if metadata is not None else None,
269+
"metadata": json.dumps(merged_metadata)
270+
if merged_metadata is not None
271+
else None,
266272
}
267273
parameters = {
268274
key: value for key, value in data.items() if value is not None

0 commit comments

Comments
 (0)