* fix(scraper): coerce list-valued expert counts; a failed estimate cannot abort a scrape
The weekly run on 2dd0628 crashed two minutes in:
TypeError: can only concatenate list (not "int") to list
baidu/ERNIE-4.5-VL-28B-A3B-PT declares moe_num_experts as a per-modality
list ([64, 64]). The shared expert-key helper from #1055 started reading
that key; list * int is silently a list, so the failure surfaced a line
later in estimate_params_from_arch. The previous run missed it only
because the quantized-only gate (removed in #1063) skipped the estimator
for that repo. Left alone the list would also have reached the catalog's
integer num_experts field and failed the embedded Rust parse.
- _config_num_experts / _config_active_experts return the first positive
int, taking the head of a list.
- correct_packed_param_count catches an estimator failure, logs it and
keeps the reported count: one odd config.json must not discard a
6,000-model scrape.
* fix(scraper): per-model discovery boundary with a mass-failure ceiling
Review follow-up on #1064: a null text_config raises AttributeError, which
the estimator guard did not catch, and discovery had no per-model boundary
at all. One malformed repo is now logged and skipped (its retained entry
stands). Skips are counted: more than 25 means the builder is broken, and
the run fails rather than shipping a quietly thinned catalog.
---------
Co-authored-by: Alex Jones <axjns@example.com>