fix: deploy uses wrong env vars and kimi model sent to Z.ai API
Root cause of "kimi-k2.5 is not a valid model ID" error:
1. deploy-hostinger.yml set PICOCLAW_PROVIDERS_ZHIPU_API_KEY which
was never read (broken {{.Name}} env tags). Changed to
PICOCLAW_ZAI_API_KEY which loadProviderEnvVars() reads correctly.
2. deploy-hostinger.yml set provider to "zhipu" instead of "zai".
3. When kimi model names (kimi-k2.5) were routed to Z.ai due to
missing Moonshot key, the incompatible model name was sent as-is.
Now swaps to "glm-4.7" when kimi models fallback to Z.ai.
4. full-deploy.sh: added "zai" provider case with glm-4.7 default,
updated zhipu ENV_KEY_NAME to ZAI_API_KEY.
https://claude.ai/code/session_01MYemTMPtHrcgidWs8UdjcG
This commit is contained in:
parent
9ca165451e
commit
16db87983b
3 changed files with 23 additions and 17 deletions
12
.github/workflows/deploy-hostinger.yml
vendored
12
.github/workflows/deploy-hostinger.yml
vendored
|
|
@ -106,14 +106,14 @@ jobs:
|
||||||
echo "WARNING: PICOCLAW_TELEGRAM_BOT_TOKEN secret is empty - Telegram will not start"
|
echo "WARNING: PICOCLAW_TELEGRAM_BOT_TOKEN secret is empty - Telegram will not start"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Z.AI (Zhipu GLM) API Key
|
# Z.AI API Key
|
||||||
ZAI_KEY="${{ secrets.PICOCLAW_ZAI_API_KEY }}"
|
ZAI_KEY="${{ secrets.PICOCLAW_ZAI_API_KEY }}"
|
||||||
if [ -n "\$ZAI_KEY" ]; then
|
if [ -n "\$ZAI_KEY" ]; then
|
||||||
set_env_var "PICOCLAW_PROVIDERS_ZHIPU_API_KEY" "\$ZAI_KEY"
|
set_env_var "PICOCLAW_ZAI_API_KEY" "\$ZAI_KEY"
|
||||||
set_env_var "PICOCLAW_PROVIDERS_ZHIPU_API_BASE" "https://api.z.ai/api/paas/v4"
|
set_env_var "PICOCLAW_ZAI_API_BASE" "https://api.z.ai/api/paas/v4"
|
||||||
set_env_var "PICOCLAW_AGENTS_DEFAULTS_PROVIDER" "zhipu"
|
set_env_var "PICOCLAW_AGENTS_DEFAULTS_PROVIDER" "zai"
|
||||||
set_env_var "PICOCLAW_AGENTS_DEFAULTS_MODEL" "glm-4.7"
|
set_env_var "PICOCLAW_AGENTS_DEFAULTS_MODEL" "glm-4.7"
|
||||||
echo "Z.AI/Zhipu: API key and default model configured"
|
echo "Z.ai: API key and default model configured"
|
||||||
else
|
else
|
||||||
echo "WARNING: PICOCLAW_ZAI_API_KEY secret is empty"
|
echo "WARNING: PICOCLAW_ZAI_API_KEY secret is empty"
|
||||||
fi
|
fi
|
||||||
|
|
@ -133,7 +133,7 @@ jobs:
|
||||||
echo "Config file exists: \$(test -f "\$CONFIG_FILE" && echo YES || echo NO)"
|
echo "Config file exists: \$(test -f "\$CONFIG_FILE" && echo YES || echo NO)"
|
||||||
echo "Telegram enabled: \$(grep -c 'PICOCLAW_CHANNELS_TELEGRAM_ENABLED=true' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
echo "Telegram enabled: \$(grep -c 'PICOCLAW_CHANNELS_TELEGRAM_ENABLED=true' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
||||||
echo "Telegram token set: \$(grep -c 'PICOCLAW_CHANNELS_TELEGRAM_TOKEN=' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
echo "Telegram token set: \$(grep -c 'PICOCLAW_CHANNELS_TELEGRAM_TOKEN=' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
||||||
echo "Z.AI key set: \$(grep -c 'PICOCLAW_PROVIDERS_ZHIPU_API_KEY=' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
echo "Z.AI key set: \$(grep -c 'PICOCLAW_ZAI_API_KEY=' "\$ENV_FILE" 2>/dev/null || echo 0)"
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -434,7 +434,7 @@ if [ "${SKIP_CONFIG}" = false ]; then
|
||||||
openai) DEFAULT_MODEL="gpt-4o" ;;
|
openai) DEFAULT_MODEL="gpt-4o" ;;
|
||||||
openrouter) DEFAULT_MODEL="anthropic/claude-sonnet-4" ;;
|
openrouter) DEFAULT_MODEL="anthropic/claude-sonnet-4" ;;
|
||||||
gemini) DEFAULT_MODEL="gemini-2.0-flash" ;;
|
gemini) DEFAULT_MODEL="gemini-2.0-flash" ;;
|
||||||
zhipu) DEFAULT_MODEL="glm-4" ;;
|
zai|zhipu) DEFAULT_MODEL="glm-4.7" ;;
|
||||||
groq) DEFAULT_MODEL="llama-3.3-70b-versatile" ;;
|
groq) DEFAULT_MODEL="llama-3.3-70b-versatile" ;;
|
||||||
ollama) DEFAULT_MODEL="llama3.2" ;;
|
ollama) DEFAULT_MODEL="llama3.2" ;;
|
||||||
*) DEFAULT_MODEL="claude-sonnet-4-20250514" ;;
|
*) DEFAULT_MODEL="claude-sonnet-4-20250514" ;;
|
||||||
|
|
@ -446,7 +446,7 @@ if [ "${SKIP_CONFIG}" = false ]; then
|
||||||
openai) ENV_KEY_NAME="OPENAI_API_KEY" ;;
|
openai) ENV_KEY_NAME="OPENAI_API_KEY" ;;
|
||||||
openrouter) ENV_KEY_NAME="OPENROUTER_API_KEY" ;;
|
openrouter) ENV_KEY_NAME="OPENROUTER_API_KEY" ;;
|
||||||
gemini) ENV_KEY_NAME="GEMINI_API_KEY" ;;
|
gemini) ENV_KEY_NAME="GEMINI_API_KEY" ;;
|
||||||
zhipu) ENV_KEY_NAME="ZHIPU_API_KEY" ;;
|
zai|zhipu) ENV_KEY_NAME="ZAI_API_KEY" ;;
|
||||||
groq) ENV_KEY_NAME="GROQ_API_KEY" ;;
|
groq) ENV_KEY_NAME="GROQ_API_KEY" ;;
|
||||||
ollama) ENV_KEY_NAME="" ;;
|
ollama) ENV_KEY_NAME="" ;;
|
||||||
*) ENV_KEY_NAME="${LLM_PROVIDER^^}_API_KEY" ;;
|
*) ENV_KEY_NAME="${LLM_PROVIDER^^}_API_KEY" ;;
|
||||||
|
|
|
||||||
|
|
@ -335,6 +335,10 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) {
|
||||||
if apiBase == "" {
|
if apiBase == "" {
|
||||||
apiBase = "https://api.z.ai/api/paas/v4"
|
apiBase = "https://api.z.ai/api/paas/v4"
|
||||||
}
|
}
|
||||||
|
// Swap incompatible kimi model names when routing to Z.ai
|
||||||
|
if strings.Contains(lowerModel, "kimi") || strings.Contains(lowerModel, "moonshot") {
|
||||||
|
model = "glm-4.7"
|
||||||
|
}
|
||||||
} else if cfg.Providers.Moonshot.APIKey != "" {
|
} else if cfg.Providers.Moonshot.APIKey != "" {
|
||||||
apiKey = cfg.Providers.Moonshot.APIKey
|
apiKey = cfg.Providers.Moonshot.APIKey
|
||||||
apiBase = cfg.Providers.Moonshot.APIBase
|
apiBase = cfg.Providers.Moonshot.APIBase
|
||||||
|
|
@ -367,21 +371,23 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
case (strings.Contains(lowerModel, "kimi") || strings.Contains(lowerModel, "moonshot") || strings.HasPrefix(model, "moonshot/")):
|
case (strings.Contains(lowerModel, "kimi") || strings.Contains(lowerModel, "moonshot") || strings.HasPrefix(model, "moonshot/")):
|
||||||
// Kimi/Moonshot models: prefer Zai, fallback to legacy Moonshot config
|
// Kimi/Moonshot models: prefer legacy Moonshot config, fallback to Zai with model swap
|
||||||
if cfg.Providers.Zai.APIKey != "" {
|
if cfg.Providers.Moonshot.APIKey != "" {
|
||||||
apiKey = cfg.Providers.Zai.APIKey
|
|
||||||
apiBase = cfg.Providers.Zai.APIBase
|
|
||||||
proxy = cfg.Providers.Zai.Proxy
|
|
||||||
if apiBase == "" {
|
|
||||||
apiBase = "https://api.z.ai/api/paas/v4"
|
|
||||||
}
|
|
||||||
} else if cfg.Providers.Moonshot.APIKey != "" {
|
|
||||||
apiKey = cfg.Providers.Moonshot.APIKey
|
apiKey = cfg.Providers.Moonshot.APIKey
|
||||||
apiBase = cfg.Providers.Moonshot.APIBase
|
apiBase = cfg.Providers.Moonshot.APIBase
|
||||||
proxy = cfg.Providers.Moonshot.Proxy
|
proxy = cfg.Providers.Moonshot.Proxy
|
||||||
if apiBase == "" {
|
if apiBase == "" {
|
||||||
apiBase = "https://api.moonshot.cn/v1"
|
apiBase = "https://api.moonshot.cn/v1"
|
||||||
}
|
}
|
||||||
|
} else if cfg.Providers.Zai.APIKey != "" {
|
||||||
|
// Kimi model names are not valid on Z.ai - use default GLM model
|
||||||
|
apiKey = cfg.Providers.Zai.APIKey
|
||||||
|
apiBase = cfg.Providers.Zai.APIBase
|
||||||
|
proxy = cfg.Providers.Zai.Proxy
|
||||||
|
model = "glm-4.7"
|
||||||
|
if apiBase == "" {
|
||||||
|
apiBase = "https://api.z.ai/api/paas/v4"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case strings.HasPrefix(model, "openrouter/") || strings.HasPrefix(model, "anthropic/") || strings.HasPrefix(model, "openai/") || strings.HasPrefix(model, "meta-llama/") || strings.HasPrefix(model, "deepseek/") || strings.HasPrefix(model, "google/"):
|
case strings.HasPrefix(model, "openrouter/") || strings.HasPrefix(model, "anthropic/") || strings.HasPrefix(model, "openai/") || strings.HasPrefix(model, "meta-llama/") || strings.HasPrefix(model, "deepseek/") || strings.HasPrefix(model, "google/"):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue