Files
ai-setup/EFFORT_MAPPING.md
Виталий Никитенко 709e144a60 feat(eltex): glm-5.3 via the proxy's raw /anthropic path
Claude Code now talks to the raw /anthropic path of the Eltex proxy,
which forwards requests byte-for-byte to the Z.ai Anthropic endpoint,
the same one ai-glm uses directly:
- images work through Z.ai's server-side analyze_image (Read png ->
  server_tool_use analyze_image -> correct answer, same as ai-glm);
  the regular /v1/messages route converts to the OpenAI endpoint,
  where Z.ai rejects images with 400;
- effort reaches Z.ai: low has no thinking, then medium < high < max;
- prompt cache: ~99% of input is a cache read from the second turn,
  same as ai-glm.
The key check and model pick still use the proxy root /v1/models.

The model is glm-5.3 in every picker slot with [1m] for the 1M
window; the anth-glm-5.3 / zai-glm-5.3 / flash names are gone.
Effort stays max by default via CLI --effort.

Checked on 20.10 on llm-t2.eltex.loc:4000; admins are moving that
config to llm.eltex.loc:4000, which stays the default URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:19:37 +07:00

13 KiB
Raw Blame History

Effort Mapping - соответствие уровней для Claude Code лаунчеров

Как это работает

/effort и AI_EFFORT относятся к лаунчерам, которые запускают Claude Code: ai-claude, ai-deepseek, ai-kimi, ai-glm, ai-mimo, ai-qwen, ai-openrouter, ai-opencode.

Нативные лаунчеры ai-gpt (OpenAI Codex), ai-gemini (Antigravity agy) и ai-cursor (Cursor CLI agent) не используют эту схему. У них свои настройки reasoning внутри соответствующего CLI.

Документ отражает текущую реализацию scripts/ai-setup.sh.

Таблица маппинга

Claude Code /effort Anthropic (ai-claude) DeepSeek V4 (ai-deepseek) Kimi K2.7/K2.6 (ai-kimi) GLM 5.3 (ai-glm) OpenRouter/GPT-5.5 (ai-openrouter) OpenCode Go (ai-opencode)
low нативно low нативно low thinking on нативно low без локального маппинга без локального маппинга
medium нативно medium провайдер поднимает до high thinking on провайдер опускает до low без локального маппинга без локального маппинга
high нативно high нативно high thinking on нативно high без локального маппинга без локального маппинга
xhigh нативно xhigh провайдер поднимает до high thinking on провайдер опускает до high без локального маппинга без локального маппинга
max нативно max нативно max thinking on нативно max без локального маппинга без локального маппинга

Для OpenRouter текущий лаунчер не делает локального преобразования effort и отправляет значение дальше через Claude Code/OpenRouter. Конкретная интерпретация зависит от выбранной модели и backend-а OpenRouter.

Для OpenCode Go лаунчер работает через routatic-proxy, который транслирует Anthropic-запросы в OpenAI/Gemini-формат для OpenCode Go API. Локального маппинга effort нет — thinking budget не транслируется напрямую в OpenCode Go бекенд. Прокси и бекенд-модели выполняют reasoning на своей стороне независимо от уровня effort.

Нативные уровни каждого провайдера

Anthropic (Claude)

low -> medium -> high -> xhigh -> max
  • 5 уровней, полное соответствие с Claude Code.
  • Дефолт ai-claude: xhigh.
  • max - максимальный бюджет thinking для самых сложных задач.

DeepSeek V4

low -> high -> max
  • 3 реальных уровня.
  • low остаётся low — реально снижает thinking бюджет.
  • medium и xhigh фактически поднимаются до high.
  • max остаётся max — максимальный бюджет thinking.
  • Маппинг выполняется на стороне DeepSeek API.
  • Дефолт ai-deepseek: high.

Kimi K2.7/K2.6 (Moonshot AI)

on / off
  • Бинарный режим: thinking либо включен, либо выключен.
  • Все уровни Claude Code effort в текущем лаунчере означают thinking on.
  • Градаций глубины reasoning нет.
  • Дефолт ai-kimi: high.

GLM 5.3 (Zhipu AI)

low -> high -> max
  • 3 реальных уровня, thinking выключить нельзя (thinking.type=disabled тоже даёт reasoning).
  • Anthropic-endpoint Z.ai читает output_config.effort от Claude Code и принимает все 5 уровней (невалидное значение -> HTTP 400 reasoning_effort must be one of: none, minimal, low, medium, high, xhigh, max).
  • medium фактически опускается до low, xhigh - до high.
  • Если effort не передан, Z.ai использует max. Поэтому ai-glm выставляет CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 - иначе Claude Code не считает glm-5.3 effort-capable и параметр не уходит.
  • Маппинг выполняется на стороне Z.ai API, ai-glm локально effort не преобразует.
  • Дефолт ai-glm: xhigh (нативный high у Z.ai), задаётся через CLI --effort при каждом запуске.
  • Официально Z.ai маппинг medium/xhigh не документирует. Он выведен замером 2026-09-25: по 3 запроса на уровень, средний output_tokens на счётной задаче - low ~1.5K, medium ~1.1K, high ~3.4K, xhigh ~2.8K, max ~3.8K. low/medium уверенно короче остальных, а high и max на такой выборке пересекаются по разбросу.

OpenRouter / GPT-5.5

Текущий ai-openrouter работает через Claude Code с ANTHROPIC_BASE_URL=https://openrouter.ai/api и не вызывает локальный effort proxy. Поэтому low/medium/high/xhigh/max не преобразуются в shell-лаунчере.

OpenCode Go (routatic-proxy)

Текущий ai-opencode работает через Claude Code с локальным routatic-proxy (ANTHROPIC_BASE_URL=http://127.0.0.1:3456), который транслирует запросы в OpenCode Go API. Effort не преобразуется локально — thinking budget не имеет прямого эффекта на OpenCode Go бекенд. Дефолт ai-opencode: high.

Xiaomi MiMo V2.6

thinking on (единственный уровень)
  • ai-mimo работает через Claude Code с Anthropic-эндпоинтом Xiaomi (Token Plan региона подписки или api.xiaomimimo.com).
  • Claude Code 2.1.294 отправляет thinking: {type: "adaptive"} и output_config.effort со всеми 5 уровнями и для mimo-v2.6-pro, и для mimo-v2.6-flash, даже без CLAUDE_CODE_ALWAYS_ENABLE_EFFORT (проверено перехватом запроса).
  • MiMo effort игнорирует. В доке Anthropic API MiMo из параметров рассуждения есть только thinking.type (enabled по умолчанию / disabled / adaptive), effort и budget_tokens нет. Невалидные output_config.effort=bogus и thinking.type=bogus дают HTTP 200.
  • Замер 2026-10-13, по 3 запроса на уровень, средний output_tokens. Pro, счётная задача: без effort ~310, low ~340, high ~280, max ~315. Pro, задача на включения-исключения: low ~970, max ~825. Flash на ней же: low ~460, max ~580. Разброс внутри уровня больше разницы между уровнями, тренда нет.
  • Реально переключается только thinking: thinking.type=disabled даёт 4 токена без размышлений и неверные ответы (2 из 3). Claude Code его для MiMo не отправляет.
  • thinking.type=adaptive (его шлёт Claude Code) MiMo отрабатывает так же, как enabled: размышления есть даже на «скажи привет», на задаче на включения-исключения adaptive ~670, enabled ~600 токенов при разбросе 356-1161. CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 в Claude Code 2.1.294 запрос не меняет, да и не нужен.
  • Глубину размышлений ограничивает только max_tokens: ai-mimo выставляет CLAUDE_CODE_MAX_OUTPUT_TOKENS=128000 (потолок Claude Code, MiMo принимает до 131072).
  • Дефолт ai-mimo: max, задаётся через CLI --effort при каждом запуске (как у ai-eltex-qwen). На размышления не влияет, но если Xiaomi начнёт учитывать effort, лаунчер сразу будет на максимуме.

Qwen3.8 (Alibaba Token Plan)

low -> medium -> high -> xhigh -> max (принимаются, у Max тренда нет)
  • ai-qwen работает через Claude Code с Anthropic-эндпоинтом Alibaba Model Studio (token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic).
  • Qwen проверяет output_config.effort: bogus даёт HTTP 400 со списком low, medium, high, xhigh, max. thinking.type=adaptive принимается, размышления есть всегда.
  • Замер 2026-10-20, задача на включения-исключения, output_tokens. qwen3.8-max, по 3 запроса: low 435/513/615, high 363/412/662, max 397/539/657 - разброс больше разницы, тренда нет. qwen3.8-flash, по 2 запроса: low ~430, max ~790.
  • Дефолт ai-qwen: max через CLI --effort при каждом запуске, CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 как страховка.

claude-gpt-effort-proxy.py все еще генерируется как совместимый helper для старого claude-code-proxy backend-а. Если использовать его вручную, он маппит только xhigh -> high, потому что claude-code-proxy принимает low, medium, high, max.

Где выполняется маппинг

Провайдер Кто маппит Файл/компонент
Anthropic Не нужен -
DeepSeek V4 DeepSeek API На стороне сервера
Kimi K2.7/K2.6 Moonshot API На стороне сервера
GLM 5.3 Z.ai API (low,medium→low, high,xhigh→high, max) На стороне сервера
Xiaomi MiMo V2.6 Не маппится: MiMo принимает output_config.effort, но игнорирует его -
Qwen3.8 Alibaba API, значение уходит как есть На стороне сервера
OpenRouter/GPT-5.5 Локального маппинга нет ai-openrouter отправляет значение как есть
OpenCode Go Локального маппинга нет ai-opencode отправляет значение через routatic-proxy
Legacy GPT proxy helper-маппинг xhigh -> high ~/bin/claude-gpt-effort-proxy.py или ~/.local/bin/claude-gpt-effort-proxy.py

Persistence effort между сессиями

Каждый Claude Code лаунчер (ai-claude, ai-deepseek, ai-kimi, ai-glm, ai-mimo, ai-qwen, ai-openrouter, ai-opencode) запоминает свой уровень effort отдельно в settings.json лаунчера.

/effort внутри сессии работает для всех уровней. CLAUDE_CODE_EFFORT_LEVEL не используется.

Форсировать уровень при запуске:

AI_EFFORT=max ai-deepseek    # включить max
AI_EFFORT=high ai-deepseek   # включить high
ai-deepseek                  # без флага - использовать уровень из settings.json

Дефолты: xhigh для ai-claude и ai-glm, max для ai-eltex, ai-eltex-qwen, ai-mimo и ai-qwen, high для остальных Claude Code лаунчеров. ai-glm, ai-eltex, ai-eltex-qwen, ai-mimo и ai-qwen передают уровень через CLI --effort, поэтому каждый запуск стартует на дефолте (или на AI_EFFORT), а /effort внутри сессии действует до её конца.

Рекомендации

  • Для повседневной работы: high или xhigh.
  • max effort имеет реальный эффект у Anthropic, DeepSeek и GLM; у Kimi это всё тот же thinking on.
  • low/medium у Kimi фактически не снижают reasoning; у DeepSeek low и у GLM low/medium дают реальный уровень low и экономят бюджет.
  • У GLM осмысленно выбирать только low, high (или xhigh) и max.
  • ai-eltex (путь прокси /anthropic, 20.10): запрос идёт на Anthropic-эндпоинт Z.ai как есть, effort у glm-5.3 работает: low - без размышлений, дальше medium < high < max. Как и ai-glm, стартует на max через CLI --effort, AI_EFFORT=high ai-eltex работает. У ai-eltex-qwen прокси effort игнорирует, /effort и AI_EFFORT там ни на что не влияют.