1.5.4

Fixed (#396)

  • Встроенный реестр capabilities: запись glm-5 с modalities ["text","image"] через longest-prefix-матчинг ошибочно давала image-модальность всей семье glm-5.x (#396, инцидент на проде 2026-08-30: запрос агентом №1 с инлайн-изображением падал 400 messages.content.type is invalid, allowed values: ['text'] на итерации 0 — ход умирал с сырой ошибкой до первого ответа модели). По официальным докам z.ai вся mainline-линейка GLM text-only (glm-4.5/4.6/4.7/5/5-turbo/5.1/5.2/5.3), мультимодальны только VLM-модели: glm-5.3-flash (единственный мультимодальный GLM-5), glm-4.5v, glm-4.6v, glm-5v-turbo. Реестр приведён к официальным данным: точные записи всех версий с окнами/max-output (glm-5.3 и 5.3-flash — 1M/128K; glm-4.6+ — 200K; glm-4.5 — 128K/96K), добавлены glm-4.7, glm-4.7-flash, glm-5-turbo, VLM-ветка. glm-4.8 не существует (доки 404, линейка 4.7→5) — запись не добавлялась: неизвестные модели и так консервативно text-only.
  • Сверка реестра по официальным докам вендоров (полная таблица с источниками — в комментарии #396): добавлены семьи с прода — qwen3.5/qwen3.5-plus, qwen3.6/qwen3.6-plus, qwen3-vl (нативно мультимодальны, 256K/1M), deepseek-v4 (1M/384K, text-only), deepseek-v3.1/v3.2 (128K), minimax-m2.7 (204 800, text), minimax-m3 (1M, text+image). Исправлены устаревшие значения: deepseek-r1/v3 128000 → 65536 (официальные 64K эпохи V3/R1), glm-4.5 → 131072 + max out 98304, glm-4.6 200000 → 204800 + max out 131072, gpt-4/gpt-4-32k modalities → ["text"] (базовый GPT-4 не имел vision через API — ошибочный «умеет» даёт тот же 400 на картинках), gpt-3.5-turbo known_since → 2023-03, gemini-2.5-flash max out 65535 → 65536. Mistral сознательно не менялся (алиасы дрейфуют между поколениями — для актуальных алиасов инструмент per-model DB override), gpt-5 оставлен 400000 (поле семантически total context: 272K input + 128K output).
  • Эффект без правок кода: гейт supportsImageInput (#388) больше не встраивает картинки в запросы text-only GLM (ход деградирует в текстовый ответ вместо 400), бейджи каталога моделей (#392) и supports_vision_effective в API показывают корректный вердикт. На проде донастройка не нужна (supports_vision = NULL → авто по реестру).

Review (#396)

  • ocr review — находки и решения см. в комментарии. Проверки: go test ./... -count=1, golangci-lint run ./internal/providers/... ./internal/agent/... (0), go vet — зелёные; фронт не менялся. Golden-тест реестра (TestCapabilitiesRegistry_GoldenNoLoss) пополнен 19 новыми ключами; TestEffectiveSupportsImage — GLM-регрессия (mainline → false, VLM → true); TestSupportsImageInput — авто-кейс glm-5.3 → text-only (инцидент), glm-5.3-flash → vision через собственную запись.