From 3bb240d3c152d9e25b22dd01c566e8d96cf57d64 Mon Sep 17 00:00:00 2001 From: pixelpaws Date: Wed, 15 Oct 2025 16:00:23 +0800 Subject: [PATCH] fix(updates): avoid caching failed civitai lookups --- py/services/model_update_service.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/py/services/model_update_service.py b/py/services/model_update_service.py index 11251eed..3973ce85 100644 --- a/py/services/model_update_service.py +++ b/py/services/model_update_service.py @@ -222,6 +222,7 @@ class ModelUpdateService: should_fetch = force_refresh or not existing or self._is_stale(existing, now) # release lock during network request fetched_versions: List[int] | None = None + refresh_succeeded = False if metadata_provider and should_fetch: try: response = await metadata_provider.get_model_versions(model_id) @@ -236,7 +237,11 @@ class ModelUpdateService: exc_info=True, ) else: - fetched_versions = self._extract_version_ids(response) + if response is not None: + extracted = self._extract_version_ids(response) + if extracted is not None: + fetched_versions = extracted + refresh_succeeded = True async with self._lock: existing = self._get_record(model_type, model_id) @@ -256,11 +261,11 @@ class ModelUpdateService: version_ids = ( fetched_versions - if fetched_versions is not None + if refresh_succeeded else (list(existing.version_ids) if existing else []) ) largest = max(version_ids) if version_ids else None - last_checked = now if fetched_versions is not None else ( + last_checked = now if refresh_succeeded else ( existing.last_checked_at if existing else None ) record = ModelUpdateRecord( @@ -315,12 +320,14 @@ class ModelUpdateService: ] return sorted(dict.fromkeys(normalized)) - def _extract_version_ids(self, response) -> List[int]: + def _extract_version_ids(self, response) -> Optional[List[int]]: if not isinstance(response, Mapping): - return [] + return None versions = response.get("modelVersions") - if not isinstance(versions, Iterable): + if versions is None: return [] + if not isinstance(versions, Iterable): + return None normalized = [] for entry in versions: if isinstance(entry, Mapping):