Раньше все ai-* лаунчеры делили один ~/.claude и общий settings.json, из-за чего кастомная модель (openai/gpt-5.5) из ai-openrouter протекала в пикер ai-claude. Теперь каждый сторонний провайдер изолирован в своём CLAUDE_CONFIG_DIR (~/.config/ai-setup/cfg/<launcher>) - свои settings.json и .claude.json, ноль протечек. ai-claude остаётся на ~/.claude (нативный логин). Пикеры /model приведены к требуемому виду: - ai-deepseek: только DeepSeek V4 Pro (opus) и DeepSeek V4 Flash (haiku), дефолт Pro; через availableModels + ANTHROPIC_DEFAULT_*_MODEL_NAME - ai-kimi: только Kimi K2.6 (opus) - ai-claude: только нативные модели Claude Общие skills и CLAUDE.md шарятся симлинком из ~/.claude. Persistence effort - гибрид: - low/medium/high/xhigh живут нативно в settings.json лаунчера, /effort внутри сессии работает свободно и уровень сохраняется - max нельзя сохранить в settings.json (session-only), поэтому он восстанавливается через CLAUDE_CODE_EFFORT_LEVEL; в такой max-сессии /effort залочен (ограничение Claude Code), выход - AI_EFFORT=<lvl> ai-* Текущий уровень ловит статусбар в ~/.cache/ai-setup/effort_<launcher>. Удалён устаревший effort-save-hook (заменён нативным persistence + гибридом), почищен из ~/.claude/settings.json и осиротевший кэш model_*. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
117 lines
6.3 KiB
Markdown
117 lines
6.3 KiB
Markdown
# Effort Mapping — Соответствие уровней для всех провайдеров
|
||
|
||
## Как это работает
|
||
|
||
Когда вы меняете effort в Claude Code (через `/effort` или `--effort`), значение передаётся
|
||
в API провайдера. Каждый провайдер поддерживает свой набор уровней reasoning effort.
|
||
Если выбранного уровня нет у провайдера — он автоматически маппится на ближайший
|
||
**более высокий** нативный уровень.
|
||
|
||
## Таблица маппинга
|
||
|
||
> Актуально на 30 мая 2026 г.
|
||
|
||
| Claude Code<br>`/effort` | Anthropic<br>(Claude) | GPT-5.5<br>(ChatGPT) | DeepSeek V4 | Kimi K2.6<br>(Moonshot) | Gemini 3.x |
|
||
|:---:|:---:|:---:|:---:|:---:|:---:|
|
||
| `low` | ✅ `low` | ✅ `low` | ⬆ `high` | 🔛 thinking on | ✅ `LOW` |
|
||
| `medium` | ✅ `medium` | ✅ `medium` | ⬆ `high` | 🔛 thinking on | ✅ `MEDIUM` |
|
||
| `high` | ✅ `high` | ✅ `high` | ✅ `high` | 🔛 thinking on | ✅ `HIGH` |
|
||
| `xhigh` | ✅ `xhigh` | ✅ `xhigh` | ⬆ `max` | 🔛 thinking on | ⬆ `HIGH` |
|
||
| `max` | ✅ `max` | ⬆ `xhigh` ¹ | ✅ `max` | 🔛 thinking on | ⬆ `HIGH` |
|
||
|
||
**Обозначения:**
|
||
- ✅ — нативная поддержка (1:1 соответствие)
|
||
- ⬆ — маппинг на ближайший доступный уровень вверх
|
||
- 🔛 — бинарный режим (thinking вкл/выкл, без градаций)
|
||
|
||
¹ GPT-5.5 не имеет уровня `max` — effort-proxy (`claude-gpt-effort-proxy.py`) маппит `max` → `xhigh`
|
||
|
||
## Нативные уровни каждого провайдера
|
||
|
||
### Anthropic (Claude) — эталон
|
||
```
|
||
low → medium → high → xhigh → max
|
||
```
|
||
- 5 уровней, полное соответствие с Claude Code
|
||
- По умолчанию: `xhigh`
|
||
- `max` — максимальный бюджет на thinking, для самых сложных задач
|
||
|
||
### GPT-5.5 (через claude-code-proxy)
|
||
```
|
||
low → medium → high → xhigh
|
||
```
|
||
- 4 основных уровня (также существуют `none` и `minimal`)
|
||
- Нет `max` → маппится в `xhigh`
|
||
- По умолчанию: `medium`
|
||
- Маппинг выполняется effort-proxy на стороне лаунчера
|
||
|
||
### DeepSeek V4
|
||
```
|
||
high → max
|
||
```
|
||
- Всего 2 реальных уровня
|
||
- `low` и `medium` → автоматически поднимаются до `high`
|
||
- `xhigh` → автоматически поднимается до `max`
|
||
- Маппинг выполняется на стороне DeepSeek API
|
||
|
||
### Kimi K2.6 (Moonshot AI)
|
||
```
|
||
on / off
|
||
```
|
||
- Бинарный режим — thinking либо включён, либо выключен
|
||
- Все уровни effort = thinking включён
|
||
- Нет градаций глубины reasoning
|
||
- Маппинг выполняется на стороне Moonshot API
|
||
|
||
### Gemini 3.x (через antigravity-claude-proxy)
|
||
```
|
||
MINIMAL → LOW → MEDIUM → HIGH
|
||
```
|
||
- 4 уровня
|
||
- Нет `xhigh` и `max` → оба маппятся в `HIGH`
|
||
- Pro-модели: по умолчанию `HIGH`
|
||
- Flash-модели: по умолчанию `MEDIUM`
|
||
- Маппинг выполняется на стороне antigravity-claude-proxy
|
||
|
||
## Где выполняется маппинг
|
||
|
||
| Провайдер | Кто маппит | Файл/компонент |
|
||
|:---|:---|:---|
|
||
| Anthropic | Не нужен | — |
|
||
| GPT-5.5 | effort-proxy (наш) | `~/.local/bin/claude-gpt-effort-proxy.py` |
|
||
| DeepSeek V4 | DeepSeek API | На стороне сервера |
|
||
| Kimi K2.6 | Moonshot API | На стороне сервера |
|
||
| Gemini 3.x | antigravity-claude-proxy | npm пакет |
|
||
|
||
## Persistence effort между сессиями
|
||
|
||
Каждый лаунчер (`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`) запоминает свой
|
||
уровень effort отдельно. Логика гибридная:
|
||
|
||
- **`low` / `medium` / `high` / `xhigh`** живут нативно в `settings.json` лаунчера.
|
||
`/effort` внутри сессии работает как обычно, уровень сохраняется между сессиями.
|
||
- **`max`** — единственный, который Claude Code **не сохраняет** в `settings.json`
|
||
(он session-only). Поэтому его восстанавливаем через `CLAUDE_CODE_EFFORT_LEVEL`.
|
||
Текущий уровень (включая `max`) статусбар пишет в `~/.cache/ai-setup/effort_<launcher>`.
|
||
|
||
**Важное следствие (только для `max`):** когда восстановлена `max`-сессия, выставлена
|
||
`CLAUDE_CODE_EFFORT_LEVEL=max`, и `/effort` внутри неё **не сменит** уровень
|
||
(env-переменная — жёсткий override Claude Code). На остальных уровнях `/effort` свободен.
|
||
|
||
**Как выйти из `max` (или форсить любой уровень):** перезапусти лаунчер с `AI_EFFORT`:
|
||
|
||
```bash
|
||
AI_EFFORT=max ai-deepseek # включить и запомнить max
|
||
AI_EFFORT=high ai-deepseek # вернуться на high (выйти из max)
|
||
ai-deepseek # без флага - восстанавливает последний уровень
|
||
```
|
||
|
||
Дефолты при пустом кэше: `xhigh` для `ai-claude`, `high` для остальных.
|
||
|
||
## Рекомендации
|
||
|
||
- **Для повседневной работы:** `high` или `xhigh` — работает одинаково хорошо у всех провайдеров
|
||
- **`max` effort:** имеет реальный эффект только у **Anthropic** и **DeepSeek**. Для GPT маппится в `xhigh`, для Gemini и Kimi — в их максимальный уровень
|
||
- **`low`/`medium`:** у DeepSeek и Kimi фактически не снижают reasoning — DeepSeek поднимет до `high`, Kimi просто включит thinking
|
||
- **Смена уровня:** на `low..xhigh` обычным `/effort`; из `max` — через `AI_EFFORT=<lvl> ai-<launcher>` (в max-сессии `/effort` залочен env-переменной, см. «Persistence effort»)
|