From 4917a6ce59f3c7279676cbcef7316809f945b342 Mon Sep 17 00:00:00 2001 From: johnlanni Date: Wed, 28 Jan 2026 23:43:56 +0800 Subject: [PATCH 1/2] feat: sync all AI providers from ai-proxy plugin - Add all providers supported by higress ai-proxy plugin - Reorder providers with commonly used ones at top: 1. Qwen (Dashscope) 2. DeepSeek 3. Moonshot (Kimi) 4. Zhipu AI 5. Minimax 6. Azure OpenAI 7. AWS Bedrock 8. Google Vertex AI 9. OpenAI 10. OpenRouter - Add new providers: - AWS Bedrock (with AK/SK and Bearer Token auth) - Google Vertex AI (with Service Account and Express Mode) - OpenRouter - Cloudflare Workers AI - DeepL (translation) - Dify (workflow platform) - iFlyTek Spark - Tencent Hunyuan - Together AI - Fireworks AI - Github Models - Grok - Groq - Add custom configuration functions for complex providers --- all-in-one/get-ai-gateway.sh | 134 ++++++++++++++++++++++++++++++----- 1 file changed, 115 insertions(+), 19 deletions(-) diff --git a/all-in-one/get-ai-gateway.sh b/all-in-one/get-ai-gateway.sh index 5784375..da087f1 100755 --- a/all-in-one/get-ai-gateway.sh +++ b/all-in-one/get-ai-gateway.sh @@ -146,32 +146,41 @@ runConfigWizard() { echo + # Provider order: Top 10 most commonly used providers first, then others alphabetically local providers=( - "OpenAI|OPENAI" - "Aliyun Dashscope|DASHSCOPE" - "Moonshot|MOONSHOT" + # Top 10 commonly used providers (user-specified order) + "Aliyun Dashscope (Qwen)|DASHSCOPE" + "DeepSeek|DEEPSEEK" + "Moonshot (Kimi)|MOONSHOT" + "Zhipu AI|ZHIPUAI" + "Minimax|MINIMAX|configureMinimaxProvider" "Azure OpenAI|AZURE|configureAzureProvider" + "AWS Bedrock|BEDROCK|configureBedrockProvider" + "Google Vertex AI|VERTEX|configureVertexProvider" + "OpenAI|OPENAI" + "OpenRouter|OPENROUTER" + # Other providers (alphabetically ordered) + "01.AI (Yi)|YI" "360 Zhinao|AI360" - # "Github Models|GITHUB" - # "Groq|GROQ" "Baichuan AI|BAICHUAN" - "01.AI|YI" - "DeepSeek|DEEPSEEK" - "Zhipu AI|ZHIPUAI" - "Ollama|OLLAMA|configureOllamaProvider" - "Claude|CLAUDE|configureClaudeProvider" "Baidu AI Cloud|BAIDU" - # "Tencent Hunyuan|HUNYUAN" - "Stepfun|STEPFUN" - "Minimax|MINIMAX|configureMinimaxProvider" - # "Cloudflare Workers AI|CLOUDFLARE" - # "iFlyTek Spark|SPARK" - "Google Gemini|GEMINI" - # "DeepL|DEEPL" - "Mistral AI|MISTRAL" + "Claude|CLAUDE|configureClaudeProvider" + "Cloudflare Workers AI|CLOUDFLARE|configureCloudflareProvider" "Cohere|COHERE" + "DeepL|DEEPL|configureDeepLProvider" + "Dify|DIFY|configureDifyProvider" "Doubao|DOUBAO" - # "Coze|COZE" + "Fireworks AI|FIREWORKS" + "Github Models|GITHUB" + "Google Gemini|GEMINI" + "Grok|GROK" + "Groq|GROQ" + "Mistral AI|MISTRAL" + "Ollama|OLLAMA|configureOllamaProvider" + "iFlyTek Spark|SPARK|configureSparkProvider" + "Stepfun|STEPFUN" + "Tencent Hunyuan|HUNYUAN|configureHunyuanProvider" + "Together AI|TOGETHERAI" ) local selectedIndex='' @@ -264,6 +273,93 @@ configureMinimaxProvider() { LLM_ENVS+=("MINIMAX_API_KEY" "MINIMAX_GROUP_ID") } +configureBedrockProvider() { + echo "AWS Bedrock supports two authentication methods:" + echo " 1. AWS Signature V4 (Access Key + Secret Key)" + echo " 2. Bearer Token (API Token)" + read -r -u 3 -p "→ Choose authentication method (1 or 2, default: 1): " BEDROCK_AUTH_METHOD + if [ "$BEDROCK_AUTH_METHOD" == "2" ]; then + read -r -u 3 -p "→ Enter AWS Bearer Token: " BEDROCK_API_KEY + LLM_ENVS+=("BEDROCK_API_KEY") + else + read -r -u 3 -p "→ Enter AWS Access Key: " BEDROCK_ACCESS_KEY + read -r -u 3 -p "→ Enter AWS Secret Key: " BEDROCK_SECRET_KEY + LLM_ENVS+=("BEDROCK_ACCESS_KEY" "BEDROCK_SECRET_KEY") + fi + read -r -u 3 -p "→ Enter AWS Region (e.g., us-east-1): " BEDROCK_REGION + if [ -n "$BEDROCK_REGION" ]; then + BEDROCK_CONFIGURED="placeholder" + fi + LLM_ENVS+=("BEDROCK_REGION") +} + +configureVertexProvider() { + echo "Google Vertex AI supports two authentication modes:" + echo " 1. Standard Mode (Service Account JSON Key)" + echo " 2. Express Mode (API Key only)" + read -r -u 3 -p "→ Choose authentication mode (1 or 2, default: 1): " VERTEX_AUTH_MODE + if [ "$VERTEX_AUTH_MODE" == "2" ]; then + read -r -u 3 -p "→ Enter Vertex AI API Key: " VERTEX_API_KEY + LLM_ENVS+=("VERTEX_API_KEY") + else + echo "→ Enter Service Account JSON Key (paste the entire JSON content, then press Enter):" + read -r -u 3 VERTEX_AUTH_KEY + read -r -u 3 -p "→ Enter Vertex AI Auth Service Name: " VERTEX_AUTH_SERVICE_NAME + LLM_ENVS+=("VERTEX_AUTH_KEY" "VERTEX_AUTH_SERVICE_NAME") + fi + read -r -u 3 -p "→ Enter Google Cloud Region (e.g., us-central1): " VERTEX_REGION + read -r -u 3 -p "→ Enter Google Cloud Project ID: " VERTEX_PROJECT_ID + if [ -n "$VERTEX_REGION" ] && [ -n "$VERTEX_PROJECT_ID" ]; then + VERTEX_CONFIGURED="placeholder" + fi + LLM_ENVS+=("VERTEX_REGION" "VERTEX_PROJECT_ID") +} + +configureCloudflareProvider() { + read -r -u 3 -p "→ Enter API Token for Cloudflare Workers AI: " CLOUDFLARE_API_KEY + read -r -u 3 -p "→ Enter Cloudflare Account ID: " CLOUDFLARE_ACCOUNT_ID + LLM_ENVS+=("CLOUDFLARE_API_KEY" "CLOUDFLARE_ACCOUNT_ID") +} + +configureDeepLProvider() { + read -r -u 3 -p "→ Enter API Key for DeepL: " DEEPL_API_KEY + read -r -u 3 -p "→ Enter target language for DeepL (e.g., EN, ZH, JA): " DEEPL_TARGET_LANG + LLM_ENVS+=("DEEPL_API_KEY" "DEEPL_TARGET_LANG") +} + +configureDifyProvider() { + read -r -u 3 -p "→ Enter API Key for Dify: " DIFY_API_KEY + read -r -u 3 -p "→ Enter Dify API URL (leave empty for cloud service): " DIFY_API_URL + echo "Dify application types: Chat, Completion, Agent, Workflow" + read -r -u 3 -p "→ Enter Dify bot type (default: Chat): " DIFY_BOT_TYPE + if [ -z "$DIFY_BOT_TYPE" ]; then + DIFY_BOT_TYPE="Chat" + fi + LLM_ENVS+=("DIFY_API_KEY" "DIFY_API_URL" "DIFY_BOT_TYPE") + if [ "$DIFY_BOT_TYPE" == "Workflow" ]; then + read -r -u 3 -p "→ Enter Dify input variable name: " DIFY_INPUT_VARIABLE + read -r -u 3 -p "→ Enter Dify output variable name: " DIFY_OUTPUT_VARIABLE + LLM_ENVS+=("DIFY_INPUT_VARIABLE" "DIFY_OUTPUT_VARIABLE") + fi +} + +configureSparkProvider() { + echo "Note: iFlyTek Spark API Key format is APIKey:APISecret" + read -r -u 3 -p "→ Enter API Key for iFlyTek Spark: " SPARK_API_KEY + read -r -u 3 -p "→ Enter API Secret for iFlyTek Spark: " SPARK_API_SECRET + if [ -n "$SPARK_API_KEY" ] && [ -n "$SPARK_API_SECRET" ]; then + SPARK_API_KEY="${SPARK_API_KEY}:${SPARK_API_SECRET}" + SPARK_CONFIGURED="placeholder" + fi + LLM_ENVS+=("SPARK_API_KEY") +} + +configureHunyuanProvider() { + read -r -u 3 -p "→ Enter Auth ID for Tencent Hunyuan: " HUNYUAN_AUTH_ID + read -r -u 3 -p "→ Enter Auth Key for Tencent Hunyuan: " HUNYUAN_AUTH_KEY + LLM_ENVS+=("HUNYUAN_AUTH_ID" "HUNYUAN_AUTH_KEY") +} + configureStorage() { if [ -d "$DATA_FOLDER" ]; then return 0 From 24d25e47b8516de9da627f915791d3dedfaf6c81 Mon Sep 17 00:00:00 2001 From: johnlanni Date: Thu, 29 Jan 2026 00:02:59 +0800 Subject: [PATCH 2/2] fix: address cursor bot review feedback 1. Fix Hunyuan provider never showing as configured - Add HUNYUAN_CONFIGURED placeholder when credentials provided 2. Fix configured status ignoring missing credentials - Bedrock: Check access key/secret or bearer token before marking configured - Vertex: Check auth key and service name before marking configured - Add similar checks for Cloudflare and DeepL providers 3. Fix multi-line JSON input issue for Vertex - Change from direct JSON paste to file path input - Read and compact JSON file content to single line --- all-in-one/get-ai-gateway.sh | 46 +++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/all-in-one/get-ai-gateway.sh b/all-in-one/get-ai-gateway.sh index da087f1..99ec287 100755 --- a/all-in-one/get-ai-gateway.sh +++ b/all-in-one/get-ai-gateway.sh @@ -281,14 +281,18 @@ configureBedrockProvider() { if [ "$BEDROCK_AUTH_METHOD" == "2" ]; then read -r -u 3 -p "→ Enter AWS Bearer Token: " BEDROCK_API_KEY LLM_ENVS+=("BEDROCK_API_KEY") + read -r -u 3 -p "→ Enter AWS Region (e.g., us-east-1): " BEDROCK_REGION + if [ -n "$BEDROCK_API_KEY" ] && [ -n "$BEDROCK_REGION" ]; then + BEDROCK_CONFIGURED="placeholder" + fi else read -r -u 3 -p "→ Enter AWS Access Key: " BEDROCK_ACCESS_KEY read -r -u 3 -p "→ Enter AWS Secret Key: " BEDROCK_SECRET_KEY LLM_ENVS+=("BEDROCK_ACCESS_KEY" "BEDROCK_SECRET_KEY") - fi - read -r -u 3 -p "→ Enter AWS Region (e.g., us-east-1): " BEDROCK_REGION - if [ -n "$BEDROCK_REGION" ]; then - BEDROCK_CONFIGURED="placeholder" + read -r -u 3 -p "→ Enter AWS Region (e.g., us-east-1): " BEDROCK_REGION + if [ -n "$BEDROCK_ACCESS_KEY" ] && [ -n "$BEDROCK_SECRET_KEY" ] && [ -n "$BEDROCK_REGION" ]; then + BEDROCK_CONFIGURED="placeholder" + fi fi LLM_ENVS+=("BEDROCK_REGION") } @@ -301,16 +305,27 @@ configureVertexProvider() { if [ "$VERTEX_AUTH_MODE" == "2" ]; then read -r -u 3 -p "→ Enter Vertex AI API Key: " VERTEX_API_KEY LLM_ENVS+=("VERTEX_API_KEY") + read -r -u 3 -p "→ Enter Google Cloud Region (e.g., us-central1): " VERTEX_REGION + read -r -u 3 -p "→ Enter Google Cloud Project ID: " VERTEX_PROJECT_ID + if [ -n "$VERTEX_API_KEY" ] && [ -n "$VERTEX_REGION" ] && [ -n "$VERTEX_PROJECT_ID" ]; then + VERTEX_CONFIGURED="placeholder" + fi else - echo "→ Enter Service Account JSON Key (paste the entire JSON content, then press Enter):" - read -r -u 3 VERTEX_AUTH_KEY + read -r -u 3 -p "→ Enter path to Service Account JSON Key file: " VERTEX_AUTH_KEY_FILE + if [ -n "$VERTEX_AUTH_KEY_FILE" ] && [ -f "$VERTEX_AUTH_KEY_FILE" ]; then + # Read JSON file and compact it to a single line + VERTEX_AUTH_KEY=$(cat "$VERTEX_AUTH_KEY_FILE" | tr -d '\n' | tr -s ' ') + else + echo "Warning: File not found or not specified. Please configure manually later." + VERTEX_AUTH_KEY="" + fi read -r -u 3 -p "→ Enter Vertex AI Auth Service Name: " VERTEX_AUTH_SERVICE_NAME LLM_ENVS+=("VERTEX_AUTH_KEY" "VERTEX_AUTH_SERVICE_NAME") - fi - read -r -u 3 -p "→ Enter Google Cloud Region (e.g., us-central1): " VERTEX_REGION - read -r -u 3 -p "→ Enter Google Cloud Project ID: " VERTEX_PROJECT_ID - if [ -n "$VERTEX_REGION" ] && [ -n "$VERTEX_PROJECT_ID" ]; then - VERTEX_CONFIGURED="placeholder" + read -r -u 3 -p "→ Enter Google Cloud Region (e.g., us-central1): " VERTEX_REGION + read -r -u 3 -p "→ Enter Google Cloud Project ID: " VERTEX_PROJECT_ID + if [ -n "$VERTEX_AUTH_KEY" ] && [ -n "$VERTEX_AUTH_SERVICE_NAME" ] && [ -n "$VERTEX_REGION" ] && [ -n "$VERTEX_PROJECT_ID" ]; then + VERTEX_CONFIGURED="placeholder" + fi fi LLM_ENVS+=("VERTEX_REGION" "VERTEX_PROJECT_ID") } @@ -318,12 +333,18 @@ configureVertexProvider() { configureCloudflareProvider() { read -r -u 3 -p "→ Enter API Token for Cloudflare Workers AI: " CLOUDFLARE_API_KEY read -r -u 3 -p "→ Enter Cloudflare Account ID: " CLOUDFLARE_ACCOUNT_ID + if [ -n "$CLOUDFLARE_API_KEY" ] && [ -n "$CLOUDFLARE_ACCOUNT_ID" ]; then + CLOUDFLARE_CONFIGURED="placeholder" + fi LLM_ENVS+=("CLOUDFLARE_API_KEY" "CLOUDFLARE_ACCOUNT_ID") } configureDeepLProvider() { read -r -u 3 -p "→ Enter API Key for DeepL: " DEEPL_API_KEY read -r -u 3 -p "→ Enter target language for DeepL (e.g., EN, ZH, JA): " DEEPL_TARGET_LANG + if [ -n "$DEEPL_API_KEY" ] && [ -n "$DEEPL_TARGET_LANG" ]; then + DEEPL_CONFIGURED="placeholder" + fi LLM_ENVS+=("DEEPL_API_KEY" "DEEPL_TARGET_LANG") } @@ -357,6 +378,9 @@ configureSparkProvider() { configureHunyuanProvider() { read -r -u 3 -p "→ Enter Auth ID for Tencent Hunyuan: " HUNYUAN_AUTH_ID read -r -u 3 -p "→ Enter Auth Key for Tencent Hunyuan: " HUNYUAN_AUTH_KEY + if [ -n "$HUNYUAN_AUTH_ID" ] && [ -n "$HUNYUAN_AUTH_KEY" ]; then + HUNYUAN_CONFIGURED="placeholder" + fi LLM_ENVS+=("HUNYUAN_AUTH_ID" "HUNYUAN_AUTH_KEY") }