From 55e8fe1e18eb1b8089536d82a082c11d5cf877c6 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 8 Oct 2025 16:54:57 +1100 Subject: [PATCH] fix(db): migration 23 fall back to unknown model when config change fails --- .../migrations/migration_23.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_23.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_23.py index 7d8238d7ce..8c4245002d 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_23.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_23.py @@ -1,5 +1,6 @@ import json import sqlite3 +from copy import deepcopy from logging import Logger from typing import Any @@ -8,7 +9,14 @@ from pydantic import ValidationError from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration from invokeai.backend.model_manager.configs.factory import AnyModelConfig, AnyModelConfigValidator -from invokeai.backend.model_manager.taxonomy import BaseModelType, FluxVariantType, ModelType, SchedulerPredictionType +from invokeai.backend.model_manager.configs.unknown import Unknown_Config +from invokeai.backend.model_manager.taxonomy import ( + BaseModelType, + FluxVariantType, + ModelFormat, + ModelType, + SchedulerPredictionType, +) class Migration23Callback: @@ -100,7 +108,21 @@ class Migration23Callback: # as independent of any specific base model architecture. config_dict["base"] = BaseModelType.Any.value - migrated_config = AnyModelConfigValidator.validate_python(config_dict) + try: + migrated_config = AnyModelConfigValidator.validate_python(config_dict) + except ValidationError as e: + self._logger.error("Failed to validate migrated config, attempting to save as unknown model: %s", e) + cloned_config_dict = deepcopy(config_dict) + cloned_config_dict.pop("base", None) + cloned_config_dict.pop("type", None) + cloned_config_dict.pop("format", None) + + migrated_config = Unknown_Config( + **cloned_config_dict, + base=BaseModelType.Unknown, + type=ModelType.Unknown, + format=ModelFormat.Unknown, + ) return migrated_config