Files
ai-setup/EFFORT_MAPPING.md
vitaly f8465580e0 feat: полная изоляция моделей между ai-* и гибридный persistence effort
Раньше все 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>
2026-06-12 07:33:30 +03:00

117 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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»)