From 5c05608e3ac0aefce8c1eed18c3e205c61f6b6fe Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 13 Aug 2026 15:02:18 -0600 Subject: [PATCH] refac --- backend/open_webui/config.py | 2 +- backend/open_webui/models/config.py | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index e62616ce37..0643575c14 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -39,7 +39,7 @@ from open_webui.utils.json_codec import JSONCodec async def seed_registered_defaults(): await Config.rename_prefix('rag.web', 'web') - await Config.repair_flattened_dict_configs() + await Config.repair_config_rows() await Config.seed_defaults(DEFAULT_CONFIG) diff --git a/backend/open_webui/models/config.py b/backend/open_webui/models/config.py index 011a58d9ee..61b41f37cf 100644 --- a/backend/open_webui/models/config.py +++ b/backend/open_webui/models/config.py @@ -300,14 +300,16 @@ class Config(Base): ) @staticmethod - async def repair_flattened_dict_configs() -> None: - """Reassemble dict config values flattened by the per-key migration.""" + async def repair_config_rows() -> None: + """Repair known legacy config row shapes.""" if not Config.PERSISTENT_ENABLED: return async with get_async_db() as db: repaired_keys: list[str] = [] orphan_keys: list[str] = [] + default_model_keys: list[str] = [] + now = int(time.time()) for config_key, aliases in DICT_CONFIG_KEY_ALIASES.items(): prefixes = (config_key, *aliases) @@ -355,14 +357,26 @@ class Config(Base): if existing: existing.value = repaired - existing.updated_at = int(time.time()) + existing.updated_at = now else: - db.add(Config(key=config_key, value=repaired, updated_at=int(time.time()))) + db.add(Config(key=config_key, value=repaired, updated_at=now)) repaired_keys.append(config_key) if orphan_keys: await db.execute(delete(Config).where(Config.key.in_(orphan_keys))) - if repaired_keys or orphan_keys: + for key in ('ui.default_models', 'ui.default_pinned_models'): + row = await db.get(Config, key) + if not row or not isinstance(row.value, list): + continue + + row.value = ','.join(model_id for model_id in (str(item).strip() for item in row.value) if model_id) + row.updated_at = now + default_model_keys.append(key) + + if repaired_keys or orphan_keys or default_model_keys: await db.commit() - log.info('Repaired flattened dict config rows for %s', ', '.join(repaired_keys)) + if repaired_keys or orphan_keys: + log.info('Repaired flattened dict config rows for %s', ', '.join(repaired_keys)) + if default_model_keys: + log.info('Repaired default model config rows for %s', ', '.join(default_model_keys))