mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-07-21 15:10:30 +00:00
b5d382a3bb
Codex + Opus both independently caught a CORE gap in the first cut: the bounded /api/models rebuild runs on a detached 'models-catalog-rebuild' daemon thread that inherits neither the request-profile thread-local (#798) nor os.environ. So on a non-default profile the worker probed the DEFAULT profile's credentials and, when the 4s budget was exceeded, published the rebuilt catalog to the DEFAULT profile's disk cache (cross-contamination) — exactly the slow path a non-default cold rebuild takes. Fix: - profile_scope_for_detached_worker(profile_name): sets the request-profile TLS AND applies the profile .env on the worker thread, restoring both on exit (no-op for default). Distinct from profile_env_for_active_request (which reads the current thread's TLS and must not clear it). - get_available_models() captures the active profile on the request thread and wraps the rebuild worker body (probe + over-budget publish + disk save + fingerprint) in that scope; the legacy synchronous rebuild applies the profile env on the foreground. /api/models route no longer wraps (the work moved into get_available_models so ALL callers — chat/start, resolution — are fixed). - 2 new regression tests incl. the worker-thread before/inside/after assertion. Empirically verified: a fresh worker thread resolved models_cache.json/default WITHOUT the scope (the bug) and models_cache.work.json + the work .env + the work auth.json WITH it. Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>