feat(mimo): add ai-mimo launcher for Xiaomi MiMo V2.6 Pro
ai-mimo runs Claude Code through Xiaomi's Anthropic-compatible API (Token Plan or pay-as-you-go). The key's endpoint is found by probing token-plan-sgp, token-plan-ams and api.xiaomimimo.com (a key only works in its own region) and is saved to mimo_base_url; MIMO_BASE_URL overrides. Unreachable endpoints are skipped, token-plan-cn is left out of the probe since it times out from our network, and a 402 on the pay-as-you-go endpoint explains that a tp- Token Plan key is needed. Always the smartest model: mimo-v2.6-pro in every slot and for subagents, --model opus and --effort max on each start, 128000 output tokens (Claude Code's ceiling), real 1M context window. Measured on 13.10: MiMo ignores output_config.effort (even "bogus" is accepted, no length trend from low to max) and treats thinking adaptive like enabled, so reasoning is always on; EFFORT_MAPPING.md records this. /logout-mimo is registered as a command and handled by the logout hook (removes mimo_key and mimo_base_url). setup.sh status, statusline brand color, README, QUICK_START and AGENTS.md list the new launcher. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
## Как это работает
|
||||
|
||||
`/effort` и `AI_EFFORT` относятся к лаунчерам, которые запускают Claude Code:
|
||||
`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-openrouter`, `ai-opencode`.
|
||||
`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-mimo`, `ai-openrouter`, `ai-opencode`.
|
||||
|
||||
Нативные лаунчеры `ai-gpt` (OpenAI Codex), `ai-gemini` (Antigravity `agy`) и `ai-cursor`
|
||||
(Cursor CLI `agent`) не используют эту схему. У них свои настройки reasoning внутри
|
||||
@@ -99,6 +99,35 @@ low -> high -> max
|
||||
Effort не преобразуется локально — thinking budget не имеет прямого эффекта на OpenCode Go бекенд.
|
||||
Дефолт `ai-opencode`: `high`.
|
||||
|
||||
### Xiaomi MiMo V2.6
|
||||
|
||||
```text
|
||||
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, лаунчер сразу будет на максимуме.
|
||||
|
||||
`claude-gpt-effort-proxy.py` все еще генерируется как совместимый helper для старого
|
||||
`claude-code-proxy` backend-а. Если использовать его вручную, он маппит только
|
||||
`xhigh` -> `high`, потому что `claude-code-proxy` принимает `low`, `medium`, `high`, `max`.
|
||||
@@ -111,13 +140,14 @@ Effort не преобразуется локально — thinking budget не
|
||||
| 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`, но игнорирует его | - |
|
||||
| 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-openrouter`, `ai-opencode`)
|
||||
Каждый Claude Code лаунчер (`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-mimo`, `ai-openrouter`, `ai-opencode`)
|
||||
запоминает свой уровень effort отдельно в `settings.json` лаунчера.
|
||||
|
||||
`/effort` внутри сессии работает для всех уровней. `CLAUDE_CODE_EFFORT_LEVEL` не используется.
|
||||
@@ -130,8 +160,8 @@ AI_EFFORT=high ai-deepseek # включить high
|
||||
ai-deepseek # без флага - использовать уровень из settings.json
|
||||
```
|
||||
|
||||
Дефолты: `max` для `ai-glm`, `ai-eltex` и `ai-eltex-qwen`, `xhigh` для `ai-claude`, `high` для
|
||||
остальных Claude Code лаунчеров. `ai-glm`, `ai-eltex` и `ai-eltex-qwen` передают уровень через CLI
|
||||
Дефолты: `max` для `ai-glm`, `ai-eltex`, `ai-eltex-qwen` и `ai-mimo`, `xhigh` для `ai-claude`, `high` для
|
||||
остальных Claude Code лаунчеров. `ai-glm`, `ai-eltex`, `ai-eltex-qwen` и `ai-mimo` передают уровень через CLI
|
||||
`--effort`, поэтому каждый запуск стартует на `max` (или на `AI_EFFORT`), а `/effort` внутри сессии
|
||||
действует до её конца.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user