0.167.24
Fixed
- ResolveContextWindow недетерминирован и не знал моделей 2025+, включая дефолтную Claude ( — P2). Матчинг шёл по map в случайном порядке и выходил на первом совпадении:
gpt-4-32k(32768) случайно резолвился вgpt-4(8192),o1— вo1-mini, в зависимости от порядка обхода конкретного запуска. Таблица не зналаgpt-4.1,gpt-5,o3,o4-mini,claude-3-7-sonnet,claude-sonnet-4-*,gemini-*,glm-*,qwen3— и главное: дефолтная модель Anthropic-провайдераclaude-sonnet-4-20250514не совпадала с ключомclaude-4-sonnetи падала в 128000 вместо 200000. Идентификаторы видаanthropic/claude-...(OpenRouter) не матчились никогда. Фикс: (а) детерминированный матчинг — ключи таблицы предсортированы по убыванию длины (ties — алфавит), побеждает самое длинное конкретное совпадение (exact или префикс с границей-/.— «gpt-45» не матчится как «gpt-4»); (б) нормализация идентификатора — trim + lowercase + срез namespace-префикса до последнего/(слэш внутри имени модели не встречается); (в) таблица дополнена поколениями 2025–2026: Claude 3.7/4.x/4.5 (все 200K), GPT-4.1 (1M), GPT-5 (400K), o3/o3-pro/o4-mini (200K), Gemini 2.0/2.5 (1M), Qwen3 (131K), GLM-4.5/4.6. Сведение двух резолверов к одному источнику истины:resolveContextMaxTokens(бюджет компакции) при отсутствии agent override и provider window теперь идёт в модельную таблицу (а не в плоский дефолт), а UI-индикатор токенов (_tokens_maxвUpdateAgentTokens) переведён сResolveContextWindow(model, providerCW)на тот жеresolveContextMaxTokens(agentObj, provider)— индикатор показывает ровно ту величину, от которой считаются пороги компакции (agent 16K override на 200K-модели больше не рисует «x/200000», компактируя по 16K). Тесты: детерминизм перекрытий (gpt-4-32k/gpt-4,o1/o1-mini/o1-pro,gpt-4o/gpt-4o-mini,o3/o3-mini) ×100 итераций; 2025-модели (дефолтная Claude → 200000,gpt-4.1→ 1047576,gpt-5-mini-...→ 400000,gemini-2.5-pro→ 1M,glm-4.6,qwen3-...,deepseek-v3.1через границу.); namespace-префиксы (anthropic/...,openrouter/anthropic/..., case-insensitive); граница не посреди токена (gpt-45→ дефолт); приоритеты (providerWindow > таблица, agent override > всё) и model-aware fallback вresolveContextMaxTokens; пустая/пробельная/неизвестная модель → дефолт без паники.