@@ -146,32 +146,41 @@ runConfigWizard() {
146146
147147 echo
148148
149+ # Provider order: Top 10 most commonly used providers first, then others alphabetically
149150 local providers=(
150- " OpenAI|OPENAI"
151- " Aliyun Dashscope|DASHSCOPE"
152- " Moonshot|MOONSHOT"
151+ # Top 10 commonly used providers (user-specified order)
152+ " Aliyun Dashscope (Qwen)|DASHSCOPE"
153+ " DeepSeek|DEEPSEEK"
154+ " Moonshot (Kimi)|MOONSHOT"
155+ " Zhipu AI|ZHIPUAI"
156+ " Minimax|MINIMAX|configureMinimaxProvider"
153157 " Azure OpenAI|AZURE|configureAzureProvider"
158+ " AWS Bedrock|BEDROCK|configureBedrockProvider"
159+ " Google Vertex AI|VERTEX|configureVertexProvider"
160+ " OpenAI|OPENAI"
161+ " OpenRouter|OPENROUTER"
162+ # Other providers (alphabetically ordered)
163+ " 01.AI (Yi)|YI"
154164 " 360 Zhinao|AI360"
155- # "Github Models|GITHUB"
156- # "Groq|GROQ"
157165 " Baichuan AI|BAICHUAN"
158- " 01.AI|YI"
159- " DeepSeek|DEEPSEEK"
160- " Zhipu AI|ZHIPUAI"
161- " Ollama|OLLAMA|configureOllamaProvider"
162- " Claude|CLAUDE|configureClaudeProvider"
163166 " Baidu AI Cloud|BAIDU"
164- # "Tencent Hunyuan|HUNYUAN"
165- " Stepfun|STEPFUN"
166- " Minimax|MINIMAX|configureMinimaxProvider"
167- # "Cloudflare Workers AI|CLOUDFLARE"
168- # "iFlyTek Spark|SPARK"
169- " Google Gemini|GEMINI"
170- # "DeepL|DEEPL"
171- " Mistral AI|MISTRAL"
167+ " Claude|CLAUDE|configureClaudeProvider"
168+ " Cloudflare Workers AI|CLOUDFLARE|configureCloudflareProvider"
172169 " Cohere|COHERE"
170+ " DeepL|DEEPL|configureDeepLProvider"
171+ " Dify|DIFY|configureDifyProvider"
173172 " Doubao|DOUBAO"
174- # "Coze|COZE"
173+ " Fireworks AI|FIREWORKS"
174+ " Github Models|GITHUB"
175+ " Google Gemini|GEMINI"
176+ " Grok|GROK"
177+ " Groq|GROQ"
178+ " Mistral AI|MISTRAL"
179+ " Ollama|OLLAMA|configureOllamaProvider"
180+ " iFlyTek Spark|SPARK|configureSparkProvider"
181+ " Stepfun|STEPFUN"
182+ " Tencent Hunyuan|HUNYUAN|configureHunyuanProvider"
183+ " Together AI|TOGETHERAI"
175184 )
176185
177186 local selectedIndex=' '
@@ -264,6 +273,93 @@ configureMinimaxProvider() {
264273 LLM_ENVS+=(" MINIMAX_API_KEY" " MINIMAX_GROUP_ID" )
265274}
266275
276+ configureBedrockProvider () {
277+ echo " AWS Bedrock supports two authentication methods:"
278+ echo " 1. AWS Signature V4 (Access Key + Secret Key)"
279+ echo " 2. Bearer Token (API Token)"
280+ read -r -u 3 -p " → Choose authentication method (1 or 2, default: 1): " BEDROCK_AUTH_METHOD
281+ if [ " $BEDROCK_AUTH_METHOD " == " 2" ]; then
282+ read -r -u 3 -p " → Enter AWS Bearer Token: " BEDROCK_API_KEY
283+ LLM_ENVS+=(" BEDROCK_API_KEY" )
284+ else
285+ read -r -u 3 -p " → Enter AWS Access Key: " BEDROCK_ACCESS_KEY
286+ read -r -u 3 -p " → Enter AWS Secret Key: " BEDROCK_SECRET_KEY
287+ LLM_ENVS+=(" BEDROCK_ACCESS_KEY" " BEDROCK_SECRET_KEY" )
288+ fi
289+ read -r -u 3 -p " → Enter AWS Region (e.g., us-east-1): " BEDROCK_REGION
290+ if [ -n " $BEDROCK_REGION " ]; then
291+ BEDROCK_CONFIGURED=" placeholder"
292+ fi
293+ LLM_ENVS+=(" BEDROCK_REGION" )
294+ }
295+
296+ configureVertexProvider () {
297+ echo " Google Vertex AI supports two authentication modes:"
298+ echo " 1. Standard Mode (Service Account JSON Key)"
299+ echo " 2. Express Mode (API Key only)"
300+ read -r -u 3 -p " → Choose authentication mode (1 or 2, default: 1): " VERTEX_AUTH_MODE
301+ if [ " $VERTEX_AUTH_MODE " == " 2" ]; then
302+ read -r -u 3 -p " → Enter Vertex AI API Key: " VERTEX_API_KEY
303+ LLM_ENVS+=(" VERTEX_API_KEY" )
304+ else
305+ echo " → Enter Service Account JSON Key (paste the entire JSON content, then press Enter):"
306+ read -r -u 3 VERTEX_AUTH_KEY
307+ read -r -u 3 -p " → Enter Vertex AI Auth Service Name: " VERTEX_AUTH_SERVICE_NAME
308+ LLM_ENVS+=(" VERTEX_AUTH_KEY" " VERTEX_AUTH_SERVICE_NAME" )
309+ fi
310+ read -r -u 3 -p " → Enter Google Cloud Region (e.g., us-central1): " VERTEX_REGION
311+ read -r -u 3 -p " → Enter Google Cloud Project ID: " VERTEX_PROJECT_ID
312+ if [ -n " $VERTEX_REGION " ] && [ -n " $VERTEX_PROJECT_ID " ]; then
313+ VERTEX_CONFIGURED=" placeholder"
314+ fi
315+ LLM_ENVS+=(" VERTEX_REGION" " VERTEX_PROJECT_ID" )
316+ }
317+
318+ configureCloudflareProvider () {
319+ read -r -u 3 -p " → Enter API Token for Cloudflare Workers AI: " CLOUDFLARE_API_KEY
320+ read -r -u 3 -p " → Enter Cloudflare Account ID: " CLOUDFLARE_ACCOUNT_ID
321+ LLM_ENVS+=(" CLOUDFLARE_API_KEY" " CLOUDFLARE_ACCOUNT_ID" )
322+ }
323+
324+ configureDeepLProvider () {
325+ read -r -u 3 -p " → Enter API Key for DeepL: " DEEPL_API_KEY
326+ read -r -u 3 -p " → Enter target language for DeepL (e.g., EN, ZH, JA): " DEEPL_TARGET_LANG
327+ LLM_ENVS+=(" DEEPL_API_KEY" " DEEPL_TARGET_LANG" )
328+ }
329+
330+ configureDifyProvider () {
331+ read -r -u 3 -p " → Enter API Key for Dify: " DIFY_API_KEY
332+ read -r -u 3 -p " → Enter Dify API URL (leave empty for cloud service): " DIFY_API_URL
333+ echo " Dify application types: Chat, Completion, Agent, Workflow"
334+ read -r -u 3 -p " → Enter Dify bot type (default: Chat): " DIFY_BOT_TYPE
335+ if [ -z " $DIFY_BOT_TYPE " ]; then
336+ DIFY_BOT_TYPE=" Chat"
337+ fi
338+ LLM_ENVS+=(" DIFY_API_KEY" " DIFY_API_URL" " DIFY_BOT_TYPE" )
339+ if [ " $DIFY_BOT_TYPE " == " Workflow" ]; then
340+ read -r -u 3 -p " → Enter Dify input variable name: " DIFY_INPUT_VARIABLE
341+ read -r -u 3 -p " → Enter Dify output variable name: " DIFY_OUTPUT_VARIABLE
342+ LLM_ENVS+=(" DIFY_INPUT_VARIABLE" " DIFY_OUTPUT_VARIABLE" )
343+ fi
344+ }
345+
346+ configureSparkProvider () {
347+ echo " Note: iFlyTek Spark API Key format is APIKey:APISecret"
348+ read -r -u 3 -p " → Enter API Key for iFlyTek Spark: " SPARK_API_KEY
349+ read -r -u 3 -p " → Enter API Secret for iFlyTek Spark: " SPARK_API_SECRET
350+ if [ -n " $SPARK_API_KEY " ] && [ -n " $SPARK_API_SECRET " ]; then
351+ SPARK_API_KEY=" ${SPARK_API_KEY} :${SPARK_API_SECRET} "
352+ SPARK_CONFIGURED=" placeholder"
353+ fi
354+ LLM_ENVS+=(" SPARK_API_KEY" )
355+ }
356+
357+ configureHunyuanProvider () {
358+ read -r -u 3 -p " → Enter Auth ID for Tencent Hunyuan: " HUNYUAN_AUTH_ID
359+ read -r -u 3 -p " → Enter Auth Key for Tencent Hunyuan: " HUNYUAN_AUTH_KEY
360+ LLM_ENVS+=(" HUNYUAN_AUTH_ID" " HUNYUAN_AUTH_KEY" )
361+ }
362+
267363configureStorage () {
268364 if [ -d " $DATA_FOLDER " ]; then
269365 return 0
0 commit comments