From aeb36fee2f3f945884540117ef9b3f01bf5fb6dd Mon Sep 17 00:00:00 2001 From: Zamil Majdy Date: Sat, 24 Jan 2026 11:23:16 -0600 Subject: [PATCH] fix(backend): merge settings instead of replacing on partial updates When updating graph settings (e.g., toggling HITL safe mode), the backend was replacing ALL settings with defaults instead of merging the update. This caused toggling human_in_the_loop_safe_mode to also reset sensitive_action_safe_mode to its default value (false). Fix: Fetch existing settings, merge with new values using model_dump(exclude_unset=True), then save the merged result. This preserves unchanged settings. --- .../backend/backend/api/features/library/db.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/autogpt_platform/backend/backend/api/features/library/db.py b/autogpt_platform/backend/backend/api/features/library/db.py index 0c775802db..18d535d896 100644 --- a/autogpt_platform/backend/backend/api/features/library/db.py +++ b/autogpt_platform/backend/backend/api/features/library/db.py @@ -583,7 +583,13 @@ async def update_library_agent( ) update_fields["isDeleted"] = is_deleted if settings is not None: - update_fields["settings"] = SafeJson(settings.model_dump()) + existing_agent = await get_library_agent(id=library_agent_id, user_id=user_id) + current_settings_dict = ( + existing_agent.settings.model_dump() if existing_agent.settings else {} + ) + new_settings = settings.model_dump(exclude_unset=True) + merged_settings = {**current_settings_dict, **new_settings} + update_fields["settings"] = SafeJson(merged_settings) try: # If graph_version is provided, update to that specific version