diff --git a/invokeai/app/api/routers/model_manager.py b/invokeai/app/api/routers/model_manager.py index 77971b899d..91848f6c8e 100644 --- a/invokeai/app/api/routers/model_manager.py +++ b/invokeai/app/api/routers/model_manager.py @@ -802,30 +802,39 @@ class StarterModelResponse(BaseModel): starter_bundles: dict[str, list[StarterModel]] +def get_is_installed( + starter_model: StarterModel | StarterModelWithoutDependencies, installed_models: list[AnyModelConfig] +) -> bool: + for model in installed_models: + if model.source == starter_model.source: + return True + if model.name == starter_model.name and model.base == starter_model.base and model.type == starter_model.type: + return True + return False + + @model_manager_router.get("/starter_models", operation_id="get_starter_models", response_model=StarterModelResponse) async def get_starter_models() -> StarterModelResponse: installed_models = ApiDependencies.invoker.services.model_manager.store.search_by_attr() - installed_model_sources = {m.source for m in installed_models} starter_models = deepcopy(STARTER_MODELS) starter_bundles = deepcopy(STARTER_BUNDLES) for model in starter_models: - if model.source in installed_model_sources: - model.is_installed = True + model.is_installed = get_is_installed(model, installed_models) # Remove already-installed dependencies missing_deps: list[StarterModelWithoutDependencies] = [] + for dep in model.dependencies or []: - if dep.source not in installed_model_sources: + if not get_is_installed(dep, installed_models): missing_deps.append(dep) model.dependencies = missing_deps for bundle in starter_bundles.values(): for model in bundle: - if model.source in installed_model_sources: - model.is_installed = True + model.is_installed = get_is_installed(model, installed_models) # Remove already-installed dependencies missing_deps: list[StarterModelWithoutDependencies] = [] for dep in model.dependencies or []: - if dep.source not in installed_model_sources: + if not get_is_installed(dep, installed_models): missing_deps.append(dep) model.dependencies = missing_deps