fix(eltex): default to anth-glm-5.3, drop forced ENABLE_TOOL_SEARCH

Admins moved the pilot to anth-glm-5.3: proxy deployments on the Z.ai
Anthropic endpoint. Checked on all 6 pilot keys: 48/48 requests served
by glm-5.3 (no flash), images recognised via Z.ai analyze_image in
Claude Code 8/8. zai-glm-5.3 goes through an auto-router that swaps in
glm-5.3-flash, so ai-eltex now prefers anth-glm-5.3 when the key has it
(ELTEX_MODEL still overrides).

ENABLE_TOOL_SEARCH is no longer forced: on the anthropic path GLM
searched for Read/Bash via ToolSearch and decided they were missing.

Effort still has no effect: Claude Code sends output_config.effort, but
LiteLLM drops it (direct Z.ai low/max = 81/3712 output tokens, via the
proxy ~3-5K at any level).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Виталий Никитенко
2026-10-07 10:08:08 +07:00
parent 083a614940
commit 5e1e3cc796
3 changed files with 27 additions and 13 deletions

View File

@@ -161,7 +161,7 @@ bash tests/test_network.sh # полные тесты
- `ai-deepseek` - Claude Code через DeepSeek API
- `ai-kimi` - Claude Code через официальный Kimi Code API (`api.kimi.com/coding`)
- `ai-glm` - Claude Code через Zhipu AI GLM 5.3 API (`api.z.ai/api/anthropic`)
- `ai-eltex` - Claude Code через корпоративный LLM-прокси Eltex (`http://llm.eltex.loc:4000`, LiteLLM, team-подписка GLM). Ключ выдают админы ([дока](https://intdocs.eltex.loc/pages/viewpage.action?pageId=262329878)), модель берётся из списка разрешённых ключу; переопределение: `ELTEX_MODEL`, `ELTEX_BASE_URL`
- `ai-eltex` - Claude Code через корпоративный LLM-прокси Eltex (`http://llm.eltex.loc:4000`, LiteLLM, team-подписка GLM). Ключ выдают админы ([дока](https://intdocs.eltex.loc/pages/viewpage.action?pageId=262329878)), по умолчанию модель `anth-glm-5.3` (Anthropic-эндпоинт Z.ai: настоящая GLM 5.3 и картинки), если она есть у ключа, иначе первая из разрешённых ключу; переопределение: `ELTEX_MODEL`, `ELTEX_BASE_URL`
- `ai-openrouter` - Claude Code через OpenRouter (GPT-5.5, Grok, Qwen, GLM 5.2 и др.)
- `ai-opencode` - Claude Code через OpenCode Go + routatic-proxy (DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)
- `ai-gemini` - нативный Antigravity CLI `agy`

View File

@@ -1770,16 +1770,19 @@ if [ -z "$api_key" ]; then
fi
fi
# Модель: ELTEX_MODEL, иначе первая из разрешённых ключу (у разных ключей разные модели,
# например zai-glm-5.3 или Eltex-Coder-Senior из доки).
# Модель: ELTEX_MODEL, иначе anth-glm-5.3, если она есть у ключа, иначе первая из
# разрешённых ключу (у других ключей другие модели, например Eltex-Coder-Senior из доки).
# anth-glm-5.3 - деплойменты на Anthropic-эндпоинте Z.ai: всегда настоящая glm-5.3 и
# картинки через серверный analyze_image. zai-glm-5.3 - OpenAI-эндпоинт с автороутером,
# который подменяет модель на glm-5.3-flash.
model="${ELTEX_MODEL:-}"
if [ -z "$model" ]; then
model=$(echo "$_CLAUDE_TEST_BODY" | python3 -c '
import sys, json
ids = [m["id"] for m in json.load(sys.stdin).get("data", [])]
print(ids[0] if ids else "")' 2>/dev/null)
print("anth-glm-5.3" if "anth-glm-5.3" in ids else (ids[0] if ids else ""))' 2>/dev/null)
fi
model="${model:-zai-glm-5.3}"
model="${model:-anth-glm-5.3}"
echo "Модель: $model"
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
@@ -1789,12 +1792,13 @@ export AI_LAUNCHER=eltex
export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/eltex"
# Пикер: все три слота = модель ключа. availableModels НЕ задаём (он схлопывает пикер);
# незаданный слот показал бы чужой Claude.
# Прокси сам транслирует запросы в OpenAI-формат и игнорирует effort/thinking (GLM
# думает всегда), поэтому CLAUDE_CODE_ALWAYS_ENABLE_EFFORT не нужен, а /effort ни на что
# не влияет.
# Effort: Claude Code шлёт output_config.effort и без CLAUDE_CODE_ALWAYS_ENABLE_EFFORT,
# но LiteLLM прокси его вырезает, поэтому /effort пока ни на что не влияет (07.10:
# напрямую в Z.ai low/max = 81/3712 выходных токенов, через прокси ~3-5K на любом уровне).
# Env из доки админов: API_TIMEOUT_MS (прокси бывает медленным), автокомпакт на 200K.
# ENABLE_TOOL_SEARCH: со сторонним ANTHROPIC_BASE_URL Claude Code отключает отложенную
# загрузку MCP-тулов; эндпоинт llm2 tool_reference поддерживает (комментарии к доке).
# ENABLE_TOOL_SEARCH НЕ включаем: на anthropic-деплойментах прокси (Z.ai /api/anthropic)
# GLM с ним путается - ищет Read/Bash через ToolSearch и решает, что их нет. Цена -
# схемы встроенных тулов в каждом запросе (~+11K входных токенов).
_setup_isolated_config eltex opus high ''
_apply_effort eltex high
ANTHROPIC_BASE_URL="$eltex_base_url" \
@@ -1813,7 +1817,6 @@ CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 \
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
API_TIMEOUT_MS=600000 \
ENABLE_TOOL_SEARCH=true \
claude --dangerously-skip-permissions --system-prompt-file "$_PROMPT_FILE" "$@"
ELTEXEOF
chmod +x "$BIN_DIR/ai-eltex"

View File

@@ -123,11 +123,21 @@ test_eltex_claude_launcher() {
test_eltex_model_from_key() {
if echo "$ELTEX_SECTION" | grep -q '/v1/models' \
&& echo "$ELTEX_SECTION" | grep -q 'model="${ELTEX_MODEL:-}"' \
&& echo "$ELTEX_SECTION" | grep -q '"anth-glm-5.3" if "anth-glm-5.3" in ids' \
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_OPUS_MODEL="$model"' \
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_HAIKU_MODEL="$model"'; then
ok "ai-eltex: model resolved from the key's /v1/models (ELTEX_MODEL overrides)"
ok "ai-eltex: prefers anth-glm-5.3 from the key's /v1/models (ELTEX_MODEL overrides)"
else
fail "ai-eltex: model must come from /v1/models or ELTEX_MODEL"
fail "ai-eltex: must prefer anth-glm-5.3 from /v1/models, ELTEX_MODEL overrides"
fi
}
# ── ai-eltex: без ENABLE_TOOL_SEARCH (на anthropic-пути GLM теряет Read/Bash) ──
test_eltex_no_tool_search() {
if echo "$ELTEX_SECTION" | grep -q '^ENABLE_TOOL_SEARCH='; then
fail "ai-eltex: must not force ENABLE_TOOL_SEARCH (GLM loses core tools on anthropic path)"
else
ok "ai-eltex: ENABLE_TOOL_SEARCH not forced"
fi
}
@@ -356,6 +366,7 @@ test_glm_official_api
test_glm_default_effort
test_eltex_claude_launcher
test_eltex_model_from_key
test_eltex_no_tool_search
test_logout_eltex
test_gemini_native_launcher
test_cursor_native_launcher