From 58495d2c75f4223a62472c24b7488efd21b9bb8b Mon Sep 17 00:00:00 2001 From: tcpsyn Date: Sat, 21 Mar 2026 02:37:21 -0600 Subject: [PATCH] =?UTF-8?q?Fix=20stale=20model=20detection=20=E2=80=94=20v?= =?UTF-8?q?alidate=20against=20current=20OPENROUTER=5FMODELS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- backend/main.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/main.py b/backend/main.py index e027d88..3765c2a 100644 --- a/backend/main.py +++ b/backend/main.py @@ -6732,13 +6732,15 @@ def _load_checkpoint() -> bool: fresh = Session() saved_pool = data.get("caller_model_pool", []) saved_map = data.get("caller_model_map", {}) - # Detect stale config: if all map values are the same model, use fresh defaults + # Detect stale config: check if saved models are in the current OPENROUTER_MODELS list + from backend.services.llm import OPENROUTER_MODELS + valid_models = set(OPENROUTER_MODELS) saved_map_models = set(saved_map.values()) if saved_map else set() - map_is_stale = len(saved_map_models) <= 1 # all same model or empty - pool_is_stale = len(saved_pool) <= 1 - session.caller_model_pool = saved_pool if not pool_is_stale else fresh.caller_model_pool - session.caller_model_map = saved_map if not map_is_stale else fresh.caller_model_map - session.caller_model_fallback = data.get("caller_model_fallback", fresh.caller_model_fallback) + pool_has_invalid = saved_pool and not all(m in valid_models for m in saved_pool) + map_has_invalid = saved_map_models and not all(m in valid_models for m in saved_map_models) + session.caller_model_pool = saved_pool if saved_pool and not pool_has_invalid else fresh.caller_model_pool + session.caller_model_map = saved_map if saved_map and not map_has_invalid else fresh.caller_model_map + session.caller_model_fallback = fresh.caller_model_fallback if data.get("caller_model_fallback", "") not in valid_models else data["caller_model_fallback"] session.caller_models = data.get("caller_models", {}) session._caller_model_cycle_idx = data.get("caller_model_cycle_idx", 0) for key, snapshot in data.get("caller_bases", {}).items():