- Give cached_fetch_api_models the same stale-while-revalidate tier as cached_provider_model_ids: TTL-expired entries within the 7d window are served instantly while a background refresh rewrites the cache — without this, every /model open an hour into the session re-blocked on the live probe (#72762's stall class, deferred). - Generalize _spawn_swr_refresh(cache_key, refresh_fn) so non-slug custom:<base_url> keys reuse the same inflight-dedupe scaffolding; slug behavior unchanged (default refresh_fn preserved). - Convert the missed sibling site: acp_adapter/server.py _named_custom_provider_catalogs() live-probed every custom_providers row's /v1/models per ACP catalog build. - Extract _cache_entry_valid() (the fp/models predicate existed 4x) and validate 'at' is numeric so hand-edited/corrupt cache JSON degrades to a live fetch instead of raising through the picker's blanket except. - Flatten the dead api_mode conditional (fetch_api_models declares api_mode=None; branch was behaviorally inert). - Tests: 4 new guards (stale-serve, stale-window cutoff, generalized SWR write-through, corrupt-at degradation) — stale-serve and corrupt-at mutation-checked; 2 existing tests updated for the new behavior. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| __main__.py | ||
| auth.py | ||
| edit_approval.py | ||
| entry.py | ||
| events.py | ||
| permissions.py | ||
| provenance.py | ||
| server.py | ||
| session.py | ||
| tools.py | ||