fix: recover eligible model GPU routes
This commit is contained in:
@@ -86,7 +86,7 @@ class HuggingFaceDiscovery:
|
||||
self._model_last_modified_cache: OrderedDict[str, datetime | None] = OrderedDict()
|
||||
self._model_last_modified_lock = threading.Lock()
|
||||
self._model_page_cache: OrderedDict[
|
||||
tuple[str, int, int], tuple[float, list[dict[str, Any]]]
|
||||
tuple[str, str, int, int], tuple[float, list[dict[str, Any]]]
|
||||
] = OrderedDict()
|
||||
self._model_page_cache_ttl = max(
|
||||
0.0,
|
||||
@@ -108,6 +108,8 @@ class HuggingFaceDiscovery:
|
||||
self._unsupported_task_filters: dict[str, float] = {}
|
||||
self._model_card_cache: OrderedDict[str, dict[str, Any]] = OrderedDict()
|
||||
self._model_card_lock = threading.Lock()
|
||||
self._popular_page_lock = threading.Lock()
|
||||
self._popular_page_cursor = 0
|
||||
|
||||
@staticmethod
|
||||
def _remember_lru(cache: OrderedDict, key: Any, value: Any, limit: int) -> None:
|
||||
@@ -124,6 +126,8 @@ class HuggingFaceDiscovery:
|
||||
min_downloads: int,
|
||||
updated_after=None,
|
||||
read_concurrency: int = 1,
|
||||
sort: str = "last_modified",
|
||||
rotate_pages: bool = False,
|
||||
) -> list[HFModelSummary]:
|
||||
if not pipeline_tags:
|
||||
return []
|
||||
@@ -132,6 +136,17 @@ class HuggingFaceDiscovery:
|
||||
del read_concurrency
|
||||
|
||||
per_tag_limit = limit if len(pipeline_tags) <= 1 else max(10, (limit + len(pipeline_tags) - 1) // len(pipeline_tags))
|
||||
start_page = 1
|
||||
if rotate_pages and sort == "downloads":
|
||||
window_pages = max(1, min(60, (per_tag_limit + 49) // 50))
|
||||
window_count = max(1, 60 // window_pages)
|
||||
with self._popular_page_lock:
|
||||
start_page = 1 + (self._popular_page_cursor % window_count) * window_pages
|
||||
self._popular_page_cursor += 1
|
||||
print(
|
||||
f"[modelscope] popular_window=start_page:{start_page} pages:{window_pages}",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
for pipeline_tag in pipeline_tags:
|
||||
for model in self._query_recent_models(
|
||||
@@ -139,6 +154,8 @@ class HuggingFaceDiscovery:
|
||||
limit=per_tag_limit,
|
||||
min_downloads=min_downloads,
|
||||
updated_after=updated_after,
|
||||
sort=sort,
|
||||
start_page=start_page,
|
||||
):
|
||||
current = deduped.get(model.repo_id)
|
||||
if current is None or (model.last_modified or parse_datetime("1970-01-01")) > (
|
||||
@@ -156,6 +173,8 @@ class HuggingFaceDiscovery:
|
||||
limit: int,
|
||||
min_downloads: int,
|
||||
updated_after=None,
|
||||
sort: str = "last_modified",
|
||||
start_page: int = 1,
|
||||
) -> list[HFModelSummary]:
|
||||
# ModelScope OpenAPI rejects values above 50 with InputParameterError.
|
||||
page_size = min(max(1, limit), 50)
|
||||
@@ -163,8 +182,9 @@ class HuggingFaceDiscovery:
|
||||
task_tag = MODELSCOPE_TASK_TAGS.get(pipeline_tag, pipeline_tag)
|
||||
filter_disabled = self._unsupported_task_filters.get(task_tag, 0.0) > time.monotonic()
|
||||
models: list[HFModelSummary] = []
|
||||
for page_number in range(1, (max_items + page_size - 1) // page_size + 1):
|
||||
cache_key = ("*" if filter_disabled else task_tag, page_number, page_size)
|
||||
page_count = (max_items + page_size - 1) // page_size
|
||||
for page_number in range(start_page, min(61, start_page + page_count)):
|
||||
cache_key = (sort, "*" if filter_disabled else task_tag, page_number, page_size)
|
||||
cached = self._model_page_cache.get(cache_key)
|
||||
if cached is not None and time.monotonic() - cached[0] < self._model_page_cache_ttl:
|
||||
self._model_page_cache.move_to_end(cache_key)
|
||||
@@ -177,7 +197,7 @@ class HuggingFaceDiscovery:
|
||||
query = {
|
||||
"page_number": page_number,
|
||||
"page_size": page_size,
|
||||
"sort": "last_modified",
|
||||
"sort": sort,
|
||||
}
|
||||
if not filter_disabled:
|
||||
query["filter.task"] = task_tag
|
||||
@@ -201,6 +221,8 @@ class HuggingFaceDiscovery:
|
||||
limit=limit,
|
||||
min_downloads=min_downloads,
|
||||
updated_after=updated_after,
|
||||
sort=sort,
|
||||
start_page=start_page,
|
||||
)
|
||||
print(
|
||||
f"[modelscope] list_models_error task={task_tag} page={page_number} "
|
||||
|
||||
Reference in New Issue
Block a user