fix(glm): default effort xhigh, document real GLM 5.3 effort mapping
Z.ai Anthropic endpoint reads output_config.effort and accepts all 5 Claude Code levels, but GLM 5.3 has only low/high/max natively: medium -> low, xhigh -> high (measured, not documented by Z.ai). ai-glm now starts on xhigh instead of max. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,11 +15,11 @@
|
||||
|
||||
| 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 | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||
| `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||
| `high` | нативно `high` | нативно `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||
| `xhigh` | нативно `xhigh` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||
| `max` | нативно `max` | нативно `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||
| `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. Конкретная интерпретация зависит от выбранной
|
||||
@@ -69,12 +69,22 @@ on / off
|
||||
### GLM 5.3 (Zhipu AI)
|
||||
|
||||
```text
|
||||
high / max
|
||||
low -> high -> max
|
||||
```
|
||||
|
||||
- Маппинг выполняется на стороне Zhipu AI API.
|
||||
- Текущий `ai-glm` не делает локального преобразования effort.
|
||||
- Дефолт `ai-glm`: `high`.
|
||||
- 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` у GLM), задаётся через 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
|
||||
|
||||
@@ -100,7 +110,7 @@ Effort не преобразуется локально — thinking budget не
|
||||
| Anthropic | Не нужен | - |
|
||||
| DeepSeek V4 | DeepSeek API | На стороне сервера |
|
||||
| Kimi K2.7/K2.6 | Moonshot API | На стороне сервера |
|
||||
| GLM 5.3 | Zhipu AI API | На стороне сервера |
|
||||
| GLM 5.3 | Z.ai API (`low,medium→low`, `high,xhigh→high`, `max`) | На стороне сервера |
|
||||
| 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` |
|
||||
@@ -120,10 +130,13 @@ AI_EFFORT=high ai-deepseek # включить high
|
||||
ai-deepseek # без флага - использовать уровень из settings.json
|
||||
```
|
||||
|
||||
Дефолты: `xhigh` для `ai-claude`, `high` для остальных Claude Code лаунчеров.
|
||||
Дефолты: `xhigh` для `ai-claude` и `ai-glm`, `high` для остальных Claude Code лаунчеров.
|
||||
`ai-glm` передаёт уровень через CLI `--effort`, поэтому каждый запуск стартует на `xhigh`
|
||||
(или на `AI_EFFORT`), а `/effort` внутри сессии действует до её конца.
|
||||
|
||||
## Рекомендации
|
||||
|
||||
- Для повседневной работы: `high` или `xhigh`.
|
||||
- `max` effort имеет реальный эффект у Anthropic и DeepSeek; у Kimi и GLM это всё тот же thinking on / маппинг на стороне сервера.
|
||||
- `low`/`medium` у Kimi и GLM фактически не снижают reasoning; у DeepSeek `low` теперь даёт реальный уровень `low` и экономит бюджет.
|
||||
- `max` effort имеет реальный эффект у Anthropic, DeepSeek и GLM; у Kimi это всё тот же thinking on.
|
||||
- `low`/`medium` у Kimi фактически не снижают reasoning; у DeepSeek `low` и у GLM `low`/`medium` дают реальный уровень `low` и экономят бюджет.
|
||||
- У GLM осмысленно выбирать только `low`, `high` (или `xhigh`) и `max`.
|
||||
|
||||
Reference in New Issue
Block a user