feat(glm): default effort xhigh instead of max

Z.ai maps xhigh to native high, so this trims the thinking budget for
everyday ai-glm launches; AI_EFFORT=max still forces the old behavior.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
Виталий Никитенко
2026-10-16 06:51:52 +03:00
parent e6fe58eb37
commit ef187a1b48
3 changed files with 12 additions and 11 deletions

View File

@@ -80,7 +80,7 @@ low -> high -> max
`CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1` - иначе Claude Code не считает `glm-5.3` effort-capable `CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1` - иначе Claude Code не считает `glm-5.3` effort-capable
и параметр не уходит. и параметр не уходит.
- Маппинг выполняется на стороне Z.ai API, `ai-glm` локально effort не преобразует. - Маппинг выполняется на стороне Z.ai API, `ai-glm` локально effort не преобразует.
- Дефолт `ai-glm`: `max`, задаётся через CLI `--effort` при каждом запуске. - Дефолт `ai-glm`: `xhigh` (нативный `high` у Z.ai), задаётся через CLI `--effort` при каждом запуске.
- Официально Z.ai маппинг `medium`/`xhigh` не документирует. Он выведен замером 2026-09-25: - Официально Z.ai маппинг `medium`/`xhigh` не документирует. Он выведен замером 2026-09-25:
по 3 запроса на уровень, средний `output_tokens` на счётной задаче - `low` ~1.5K, по 3 запроса на уровень, средний `output_tokens` на счётной задаче - `low` ~1.5K,
`medium` ~1.1K, `high` ~3.4K, `xhigh` ~2.8K, `max` ~3.8K. `low`/`medium` уверенно короче `medium` ~1.1K, `high` ~3.4K, `xhigh` ~2.8K, `max` ~3.8K. `low`/`medium` уверенно короче
@@ -160,9 +160,9 @@ AI_EFFORT=high ai-deepseek # включить high
ai-deepseek # без флага - использовать уровень из settings.json ai-deepseek # без флага - использовать уровень из settings.json
``` ```
Дефолты: `max` для `ai-glm`, `ai-eltex`, `ai-eltex-qwen` и `ai-mimo`, `xhigh` для `ai-claude`, `high` для Дефолты: `xhigh` для `ai-claude` и `ai-glm`, `max` для `ai-eltex`, `ai-eltex-qwen` и `ai-mimo`, `high` для
остальных Claude Code лаунчеров. `ai-glm`, `ai-eltex`, `ai-eltex-qwen` и `ai-mimo` передают уровень через CLI остальных Claude Code лаунчеров. `ai-glm`, `ai-eltex`, `ai-eltex-qwen` и `ai-mimo` передают уровень через CLI
`--effort`, поэтому каждый запуск стартует на `max` (или на `AI_EFFORT`), а `/effort` внутри сессии `--effort`, поэтому каждый запуск стартует на дефолте (или на `AI_EFFORT`), а `/effort` внутри сессии
действует до её конца. действует до её конца.
## Рекомендации ## Рекомендации

View File

@@ -1650,13 +1650,14 @@ export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/glm"
# opus+sonnet+haiku = glm-5.3. Окно контекста у всех слотов задаёт env # opus+sonnet+haiku = glm-5.3. Окно контекста у всех слотов задаёт env
# CLAUDE_CODE_MAX_CONTEXT_TOKENS ниже — суффикс [1m] больше не нужен. # CLAUDE_CODE_MAX_CONTEXT_TOKENS ниже — суффикс [1m] больше не нужен.
_setup_isolated_config glm opus xhigh '' _setup_isolated_config glm opus xhigh ''
# ai-glm стартует на /effort max через CLI --effort (перебивает effortLevel из # ai-glm стартует на /effort xhigh через CLI --effort (перебивает effortLevel из
# settings.json при каждом запуске). Z.ai сворачивает 5 уровней Claude Code в 3 # settings.json при каждом запуске). Z.ai сворачивает 5 уровней Claude Code в 3
# нативных GLM 5.3: low,medium→low; high,xhigh→high; max→max (см. EFFORT_MAPPING.md). # нативных GLM 5.3: low,medium→low; high,xhigh→high; max→max (см. EFFORT_MAPPING.md),
# то есть xhigh = нативный high.
# CLAUDE_CODE_ALWAYS_ENABLE_EFFORT заставляет Claude Code отправлять effort в API # CLAUDE_CODE_ALWAYS_ENABLE_EFFORT заставляет Claude Code отправлять effort в API
# для GLM (иначе glm-5.3 не распознан как effort-capable и параметр не уходит, # для GLM (иначе glm-5.3 не распознан как effort-capable и параметр не уходит,
# а Z.ai по умолчанию берёт max). # а Z.ai по умолчанию берёт max).
# /effort внутри сессии работает; ручной override запуска: AI_EFFORT=high ai-glm. # /effort внутри сессии работает; ручной override запуска: AI_EFFORT=max ai-glm.
# CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000: по умолчанию Claude Code просит у glm-5.3 # CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000: по умолчанию Claude Code просит у glm-5.3
# max_tokens=32000 (размышления + ответ), на трудных задачах GLM в них не укладывается # max_tokens=32000 (размышления + ответ), на трудных задачах GLM в них не укладывается
# и ответ обрывается. Z.ai принимает и 128000. # и ответ обрывается. Z.ai принимает и 128000.
@@ -1684,7 +1685,7 @@ CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 \
CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 \ CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 \
CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 \ CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
claude --dangerously-skip-permissions --effort "${AI_EFFORT:-max}" --system-prompt-file "$_PROMPT_FILE" "$@" claude --dangerously-skip-permissions --effort "${AI_EFFORT:-xhigh}" --system-prompt-file "$_PROMPT_FILE" "$@"
GLMEOF GLMEOF
chmod +x "$BIN_DIR/ai-glm" chmod +x "$BIN_DIR/ai-glm"

View File

@@ -342,14 +342,14 @@ test_logout_mimo() {
rm -rf "$tmp_home" rm -rf "$tmp_home"
} }
# ── ai-glm: default effort is max (still overridable via AI_EFFORT) ─────── # ── ai-glm: default effort is xhigh (still overridable via AI_EFFORT) ──────
test_glm_default_effort() { test_glm_default_effort() {
if echo "$GLM_SECTION" | grep -q -- '--effort "${AI_EFFORT:-max}"' \ if echo "$GLM_SECTION" | grep -q -- '--effort "${AI_EFFORT:-xhigh}"' \
&& echo "$GLM_SECTION" | grep -q '^CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000' \ && echo "$GLM_SECTION" | grep -q '^CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000' \
&& echo "$GLM_SECTION" | grep -q 'CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1'; then && echo "$GLM_SECTION" | grep -q 'CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1'; then
ok "ai-glm: starts with --effort max by default, effort sent to Z.ai, 64000 output tokens" ok "ai-glm: starts with --effort xhigh by default, effort sent to Z.ai, 64000 output tokens"
else else
fail "ai-glm: must start with --effort \"\${AI_EFFORT:-max}\", CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 and MAX_OUTPUT_TOKENS=64000" fail "ai-glm: must start with --effort \"\${AI_EFFORT:-xhigh}\", CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 and MAX_OUTPUT_TOKENS=64000"
fi fi
} }