fix anth-glm-5.3-5
This commit is contained in:
@@ -1731,6 +1731,28 @@ _eltex_check_key() {
|
|||||||
_handle_openai_api_response "Eltex LLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Лимит team-подписки исчерпан - обратись к админам"
|
_handle_openai_api_response "Eltex LLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Лимит team-подписки исчерпан - обратись к админам"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# _eltex_pick_default_model: модель по умолчанию из _CLAUDE_TEST_BODY (последний ответ
|
||||||
|
# /v1/models). Печатает имя модели в stdout. Список не распарсился (429/сетевая ошибка/
|
||||||
|
# 5xx) - anth-glm-5.3-5 наугад, как раньше. Распарсился, но anth-glm-5.3-5 в нём нет -
|
||||||
|
# ошибка в stderr и возврат 1: ключу недоступна модель, дефолтный запуск невозможен.
|
||||||
|
_eltex_pick_default_model() {
|
||||||
|
local avail
|
||||||
|
if ! avail=$(echo "$_CLAUDE_TEST_BODY" | python3 -c '
|
||||||
|
import sys, json
|
||||||
|
print(" ".join(m["id"] for m in json.load(sys.stdin)["data"]))' 2>/dev/null); then
|
||||||
|
echo "anth-glm-5.3-5"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
case " $avail " in
|
||||||
|
*" anth-glm-5.3-5 "*) echo "anth-glm-5.3-5" ;;
|
||||||
|
*)
|
||||||
|
echo -e "\033[0;31m[МОДЕЛЬ]\033[0m Ключу недоступна модель anth-glm-5.3-5. Прокси отдаёт: ${avail:-(пусто)}" >&2
|
||||||
|
echo " Напиши админам про доступ к anth-glm-5.3-5 или задай модель явно: ELTEX_MODEL=<имя> ai-eltex" >&2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
if [ -n "$api_key" ]; then
|
if [ -n "$api_key" ]; then
|
||||||
echo -n "Проверка сохранённого Eltex ключа... "
|
echo -n "Проверка сохранённого Eltex ключа... "
|
||||||
_eltex_check_key "$api_key"
|
_eltex_check_key "$api_key"
|
||||||
@@ -1744,6 +1766,13 @@ if [ -n "$api_key" ]; then
|
|||||||
read -r _ans; case "${_ans:-N}" in [Yy]*) ;; *) exit 1 ;; esac
|
read -r _ans; case "${_ans:-N}" in [Yy]*) ;; *) exit 1 ;; esac
|
||||||
elif [ $ret -ne 0 ]; then
|
elif [ $ret -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
|
elif [ -z "${ELTEX_MODEL:-}" ] && ! model=$(_eltex_pick_default_model); then
|
||||||
|
# Ключ валиден, но anth-glm-5.3-5 недоступна (не та группа доступа) - авто-логаут,
|
||||||
|
# как при 401: такой ключ не годится для дефолтного запуска, сразу просим новый.
|
||||||
|
echo " Сохранённый ключ удалён (авто-логаут)."
|
||||||
|
rm -f "$key_file"
|
||||||
|
api_key=""
|
||||||
|
reauth=1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1761,6 +1790,10 @@ if [ -z "$api_key" ]; then
|
|||||||
_eltex_check_key "$api_key"
|
_eltex_check_key "$api_key"
|
||||||
ret=$_API_RET
|
ret=$_API_RET
|
||||||
if [ $ret -eq 0 ] || [ $ret -eq 429 ]; then
|
if [ $ret -eq 0 ] || [ $ret -eq 429 ]; then
|
||||||
|
if [ -z "${ELTEX_MODEL:-}" ] && ! model=$(_eltex_pick_default_model); then
|
||||||
|
echo "Ключ НЕ сохранён."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
mkdir -p "$(dirname "$key_file")"
|
mkdir -p "$(dirname "$key_file")"
|
||||||
echo "$api_key" > "$key_file"
|
echo "$api_key" > "$key_file"
|
||||||
chmod 600 "$key_file"
|
chmod 600 "$key_file"
|
||||||
@@ -1775,29 +1808,14 @@ if [ -z "$api_key" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Модель: ELTEX_MODEL, иначе anth-glm-5.3 - деплойменты на Anthropic-эндпоинте Z.ai:
|
# Модель: ELTEX_MODEL, иначе anth-glm-5.3-5 - деплойменты на Anthropic-эндпоинте Z.ai:
|
||||||
# всегда настоящая glm-5.3 и картинки через серверный analyze_image.
|
# всегда настоящая glm-5.3 и картинки через серверный analyze_image.
|
||||||
# Первую модель из /v1/models НЕ берём: там бывают не те модели (zai-glm-5.3 с автороутером
|
# Первую модель из /v1/models НЕ берём: там бывают не те модели (zai-glm-5.3 с автороутером
|
||||||
# во flash) и имена групп доступа (ZAI-Test-Group), которые не запустить. Если у ключа
|
# во flash) и имена групп доступа (ZAI-Test-Group), которые не запустить. Если у ключа
|
||||||
# нет anth-glm-5.3 - выходим с понятной ошибкой вместо 400/403 внутри Claude Code.
|
# нет anth-glm-5.3-5 - авто-логаут выше (свежевведённый такой ключ не сохраняется),
|
||||||
model="${ELTEX_MODEL:-}"
|
# вместо 400/403 внутри Claude Code. ${model:-anth-glm-5.3-5} - 429/сетевая ошибка, когда список
|
||||||
if [ -z "$model" ]; then
|
# моделей не получили.
|
||||||
if avail=$(echo "$_CLAUDE_TEST_BODY" | python3 -c '
|
model="${ELTEX_MODEL:-${model:-anth-glm-5.3-5}}"
|
||||||
import sys, json
|
|
||||||
print(" ".join(m["id"] for m in json.load(sys.stdin)["data"]))' 2>/dev/null); then
|
|
||||||
case " $avail " in
|
|
||||||
*" anth-glm-5.3 "*) model="anth-glm-5.3" ;;
|
|
||||||
*)
|
|
||||||
echo -e "\033[0;31m[МОДЕЛЬ]\033[0m Ключу недоступна модель anth-glm-5.3. Прокси отдаёт: ${avail:-(пусто)}"
|
|
||||||
echo " Напиши админам про доступ к anth-glm-5.3 или задай модель явно: ELTEX_MODEL=<имя> ai-eltex"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
# Список моделей не получили (ошибка сервера) - пробуем модель по умолчанию
|
|
||||||
model="anth-glm-5.3"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "Модель: $model"
|
echo "Модель: $model"
|
||||||
|
|
||||||
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
|
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
|
||||||
@@ -1809,7 +1827,7 @@ export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/eltex"
|
|||||||
# незаданный слот показал бы чужой Claude.
|
# незаданный слот показал бы чужой Claude.
|
||||||
# Effort как у ai-glm: старт на max через CLI --effort (перебивает effortLevel из
|
# Effort как у ai-glm: старт на max через CLI --effort (перебивает effortLevel из
|
||||||
# settings.json; AI_EFFORT=max в settings Claude Code не принимает и шлёт high), /effort
|
# settings.json; AI_EFFORT=max в settings Claude Code не принимает и шлёт high), /effort
|
||||||
# в сессии работает. С 09.10 прокси пропускает output_config.effort для anth-glm-5.3:
|
# в сессии работает. С 09.10 прокси пропускает output_config.effort для anth-glm-5.3-5:
|
||||||
# low/medium/high/max = 68/83/~4-6K/~4-5K выходных токенов (Z.ai: low,medium->low;
|
# low/medium/high/max = 68/83/~4-6K/~4-5K выходных токенов (Z.ai: low,medium->low;
|
||||||
# high,xhigh->high; max). CLAUDE_CODE_ALWAYS_ENABLE_EFFORT - страховка, как в ai-glm.
|
# high,xhigh->high; max). CLAUDE_CODE_ALWAYS_ENABLE_EFFORT - страховка, как в ai-glm.
|
||||||
# Имена-алиасы claude-* на прокси НЕ используем: claude-3-5-sonnet Claude Code считает
|
# Имена-алиасы claude-* на прокси НЕ используем: claude-3-5-sonnet Claude Code считает
|
||||||
|
|||||||
@@ -124,17 +124,69 @@ test_eltex_claude_launcher() {
|
|||||||
# ── ai-eltex: модель берётся из /v1/models ключа ──────────────────────────
|
# ── ai-eltex: модель берётся из /v1/models ключа ──────────────────────────
|
||||||
test_eltex_model_from_key() {
|
test_eltex_model_from_key() {
|
||||||
if echo "$ELTEX_SECTION" | grep -q '/v1/models' \
|
if echo "$ELTEX_SECTION" | grep -q '/v1/models' \
|
||||||
&& echo "$ELTEX_SECTION" | grep -q 'model="${ELTEX_MODEL:-}"' \
|
&& echo "$ELTEX_SECTION" | grep -Fq 'model="${ELTEX_MODEL:-${model:-anth-glm-5.3-5}}"' \
|
||||||
&& echo "$ELTEX_SECTION" | grep -q '\*" anth-glm-5.3 "\*) model="anth-glm-5.3"' \
|
&& echo "$ELTEX_SECTION" | grep -Fq '*" anth-glm-5.3-5 "*) echo "anth-glm-5.3-5"' \
|
||||||
&& ! echo "$ELTEX_SECTION" | grep -q 'ids\[0\]' \
|
&& ! echo "$ELTEX_SECTION" | grep -q 'ids\[0\]' \
|
||||||
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_OPUS_MODEL="$model"' \
|
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_OPUS_MODEL="$model"' \
|
||||||
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_HAIKU_MODEL="$model"'; then
|
&& echo "$ELTEX_SECTION" | grep -q 'ANTHROPIC_DEFAULT_HAIKU_MODEL="$model"'; then
|
||||||
ok "ai-eltex: uses anth-glm-5.3, never the first /v1/models entry (ELTEX_MODEL overrides)"
|
ok "ai-eltex: uses anth-glm-5.3-5, never the first /v1/models entry (ELTEX_MODEL overrides)"
|
||||||
else
|
else
|
||||||
fail "ai-eltex: must use anth-glm-5.3 (not the first /v1/models entry), ELTEX_MODEL overrides"
|
fail "ai-eltex: must use anth-glm-5.3-5 (not the first /v1/models entry), ELTEX_MODEL overrides"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ── ai-eltex: нет anth-glm-5.3-5 у ключа -> авто-логаут, свежий ключ не сохраняется ──
|
||||||
|
test_eltex_autologout_on_missing_model() {
|
||||||
|
local tmp ok_run=1 rc=0 out
|
||||||
|
tmp=$(mktemp -d)
|
||||||
|
mkdir -p "$tmp/bin" "$tmp/mock" "$tmp/home/.config/ai-setup"
|
||||||
|
echo "$HELPERS_SECTION" | HELPERS_FILE="$tmp/bin/ai-api-helpers.sh" bash
|
||||||
|
echo "$ELTEX_SECTION" | BIN_DIR="$tmp/bin" bash
|
||||||
|
# Прокси отвечает 200, но anth-glm-5.3-5 в списке моделей ключа нет
|
||||||
|
cat > "$tmp/mock/curl" <<'CURLEOF'
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
if [[ "$*" == *"/v1/models"* ]]; then
|
||||||
|
printf '%s\n%s' "$MODELS_BODY" "200"
|
||||||
|
else
|
||||||
|
printf '%s\n%s' '{"ok":true}' "200"
|
||||||
|
fi
|
||||||
|
CURLEOF
|
||||||
|
printf '#!/usr/bin/env bash\nexit 0\n' > "$tmp/mock/claude"
|
||||||
|
chmod +x "$tmp/mock/curl" "$tmp/mock/claude"
|
||||||
|
# Сохранённый ключ: авто-логаут (файл удалён), новый ключ не вводим -> выход 1
|
||||||
|
echo sk-old > "$tmp/home/.config/ai-setup/eltex_key"
|
||||||
|
out=$(printf 'n\n' | HOME="$tmp/home" PATH="$tmp/mock:$PATH" \
|
||||||
|
MODELS_BODY='{"data":[{"id":"zai-glm-5.3-flash-2"},{"id":"ZAI-Test-Group"}]}' \
|
||||||
|
bash "$tmp/bin/ai-eltex" 2>&1) || rc=$?
|
||||||
|
[ "$rc" -eq 1 ] || ok_run=0
|
||||||
|
echo "$out" | grep -q 'Ключу недоступна модель anth-glm-5.3-5' || ok_run=0
|
||||||
|
echo "$out" | grep -q 'авто-логаут' || ok_run=0
|
||||||
|
[ ! -f "$tmp/home/.config/ai-setup/eltex_key" ] || ok_run=0
|
||||||
|
# Свежий ключ без anth-glm-5.3-5 не сохраняется вовсе
|
||||||
|
rc=0
|
||||||
|
out=$(printf 'sk-new\n' | HOME="$tmp/home" PATH="$tmp/mock:$PATH" \
|
||||||
|
MODELS_BODY='{"data":[{"id":"zai-glm-5.3-flash-2"}]}' \
|
||||||
|
bash "$tmp/bin/ai-eltex" 2>&1) || rc=$?
|
||||||
|
[ "$rc" -eq 1 ] || ok_run=0
|
||||||
|
echo "$out" | grep -q 'Ключ НЕ сохранён' || ok_run=0
|
||||||
|
[ ! -f "$tmp/home/.config/ai-setup/eltex_key" ] || ok_run=0
|
||||||
|
# ELTEX_MODEL перебивает проверку: ключ живёт, запуск идёт
|
||||||
|
echo sk-keep > "$tmp/home/.config/ai-setup/eltex_key"
|
||||||
|
rc=0
|
||||||
|
out=$(HOME="$tmp/home" PATH="$tmp/mock:$PATH" \
|
||||||
|
MODELS_BODY='{"data":[{"id":"zai-glm-5.3-flash-2"}]}' \
|
||||||
|
ELTEX_MODEL=anth-glm-5.3-2 bash "$tmp/bin/ai-eltex" 2>&1) || rc=$?
|
||||||
|
[ "$rc" -eq 0 ] || ok_run=0
|
||||||
|
echo "$out" | grep -q 'Модель: anth-glm-5.3-2' || ok_run=0
|
||||||
|
[ "$(cat "$tmp/home/.config/ai-setup/eltex_key")" = "sk-keep" ] || ok_run=0
|
||||||
|
if [ "$ok_run" -eq 1 ]; then
|
||||||
|
ok "ai-eltex: missing anth-glm-5.3-5 auto-logouts saved key, fresh key not saved, ELTEX_MODEL bypasses"
|
||||||
|
else
|
||||||
|
fail "ai-eltex: missing anth-glm-5.3-5 must auto-logout (saved key removed, fresh key not saved, ELTEX_MODEL bypass)"
|
||||||
|
fi
|
||||||
|
rm -rf "$tmp"
|
||||||
|
}
|
||||||
|
|
||||||
# ── ai-eltex: без ENABLE_TOOL_SEARCH (на anthropic-пути GLM теряет Read/Bash) ──
|
# ── ai-eltex: без ENABLE_TOOL_SEARCH (на anthropic-пути GLM теряет Read/Bash) ──
|
||||||
test_eltex_no_tool_search() {
|
test_eltex_no_tool_search() {
|
||||||
if echo "$ELTEX_SECTION" | grep -q '^ENABLE_TOOL_SEARCH='; then
|
if echo "$ELTEX_SECTION" | grep -q '^ENABLE_TOOL_SEARCH='; then
|
||||||
@@ -553,6 +605,7 @@ test_glm_official_api
|
|||||||
test_glm_default_effort
|
test_glm_default_effort
|
||||||
test_eltex_claude_launcher
|
test_eltex_claude_launcher
|
||||||
test_eltex_model_from_key
|
test_eltex_model_from_key
|
||||||
|
test_eltex_autologout_on_missing_model
|
||||||
test_eltex_no_tool_search
|
test_eltex_no_tool_search
|
||||||
test_eltex_context_window
|
test_eltex_context_window
|
||||||
test_eltex_logout_command
|
test_eltex_logout_command
|
||||||
|
|||||||
Reference in New Issue
Block a user