From 5e1e3cc796c307a2349e6f1ce131950e5d230168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9D=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=D1=82=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Wed, 7 Oct 2026 10:08:08 +0700 Subject: [PATCH] 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 --- README.md | 2 +- scripts/ai-setup.sh | 23 +++++++++++++---------- tests/test_fixes.sh | 15 +++++++++++++-- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f24bb2a..4f5a1df 100644 --- a/README.md +++ b/README.md @@ -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` diff --git a/scripts/ai-setup.sh b/scripts/ai-setup.sh index e7d9add..da92092 100755 --- a/scripts/ai-setup.sh +++ b/scripts/ai-setup.sh @@ -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" diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index e3a161e..f314bf1 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -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