@@ -38,14 +38,21 @@ COMMAND_START="start"
3838COMMAND_STOP=" stop"
3939COMMAND_DELETE=" delete"
4040COMMAND_ROUTE=" route"
41- KNOWN_COMMANDS=($COMMAND_START , $COMMAND_STOP , $COMMAND_DELETE , $COMMAND_ROUTE )
41+ COMMAND_CONFIG=" config"
42+ KNOWN_COMMANDS=($COMMAND_START , $COMMAND_STOP , $COMMAND_DELETE , $COMMAND_ROUTE , $COMMAND_CONFIG )
4243
4344# Route subcommands
4445ROUTE_ADD=" add"
4546ROUTE_LIST=" list"
4647ROUTE_REMOVE=" remove"
4748KNOWN_ROUTE_SUBCOMMANDS=($ROUTE_ADD , $ROUTE_LIST , $ROUTE_REMOVE )
4849
50+ # Config subcommands
51+ CONFIG_ADD=" add"
52+ CONFIG_LIST=" list"
53+ CONFIG_REMOVE=" remove"
54+ KNOWN_CONFIG_SUBCOMMANDS=($CONFIG_ADD , $CONFIG_LIST , $CONFIG_REMOVE )
55+
4956cd " $( dirname -- " $0 " ) "
5057ROOT=" $( pwd -P) /higress"
5158SCRIPT_DIR=" $( pwd -P) "
@@ -284,6 +291,15 @@ parseArgs() {
284291 ROUTE_RULE_ID=" $2 "
285292 shift 2
286293 ;;
294+ # Config command options
295+ --provider)
296+ CONFIG_PROVIDER=" $2 "
297+ shift 2
298+ ;;
299+ --key)
300+ CONFIG_KEY=" $2 "
301+ shift 2
302+ ;;
287303 -* | --* )
288304 echo " Unknown option $1 "
289305 exit 1
@@ -322,6 +338,24 @@ parseArgs() {
322338 exit 1
323339 fi
324340 fi
341+
342+ # Parse config subcommand
343+ if [ " $COMMAND " == " $COMMAND_CONFIG " ]; then
344+ if [ ${# POSITIONAL_ARGS[@]} -gt 0 ]; then
345+ CONFIG_SUBCOMMAND=" ${POSITIONAL_ARGS[0]} "
346+ else
347+ CONFIG_SUBCOMMAND=" "
348+ fi
349+ if [ -z " $CONFIG_SUBCOMMAND " ]; then
350+ echo " Config subcommand required: add, list, remove"
351+ exit 1
352+ fi
353+ if [[ ! ${KNOWN_CONFIG_SUBCOMMANDS[@]} =~ " $CONFIG_SUBCOMMAND " ]]; then
354+ echo " Unknown config subcommand: $CONFIG_SUBCOMMAND "
355+ echo " Available: add, list, remove"
356+ exit 1
357+ fi
358+ fi
325359}
326360
327361configure () {
@@ -847,12 +881,18 @@ Commands:
847881 stop Stop the gateway
848882 delete Delete the gateway container
849883 route Manage auto-routing rules (see below)
884+ config Manage API key configuration (see below)
850885
851886Route Subcommands:
852887 route add Add a new routing rule
853888 route list List all routing rules
854889 route remove Remove a routing rule by ID
855890
891+ Config Subcommands:
892+ config add Add or update an API key
893+ config list List all configured API keys
894+ config remove Remove an API key
895+
856896Options:
857897 -h, --help Show this help message
858898
@@ -877,6 +917,10 @@ Route Options (for route add/remove):
877917 --pattern REGEX Custom regex pattern (alternative to --trigger)
878918 --rule-id ID Rule ID to remove (required for remove)
879919
920+ Config Options (for config add/remove):
921+ --provider PROVIDER Provider name (dashscope, deepseek, moonshot, etc.)
922+ --key KEY API key to set (required for add)
923+
880924LLM Provider API Keys:
881925 --dashscope-key KEY Aliyun Dashscope (Qwen) API key
882926 --deepseek-key KEY DeepSeek API key
@@ -931,6 +975,15 @@ Examples:
931975
932976 # Remove a routing rule
933977 ./get-ai-gateway.sh route remove --rule-id 0
978+
979+ # List all configured API keys
980+ ./get-ai-gateway.sh config list
981+
982+ # Add or update an API key
983+ ./get-ai-gateway.sh config add --provider deepseek --key sk-xxx
984+
985+ # Remove an API key
986+ ./get-ai-gateway.sh config remove --provider deepseek
934987'
935988}
936989
@@ -1144,6 +1197,279 @@ delete() {
11441197 fi
11451198}
11461199
1200+ # ============================================================================
1201+ # Config Command Functions
1202+ # ============================================================================
1203+
1204+ # Get provider name from environment variable name
1205+ getProviderName () {
1206+ local env_var=" $1 "
1207+ case " $env_var " in
1208+ DASHSCOPE_API_KEY) echo " Aliyun Dashscope (Qwen)" ;;
1209+ DEEPSEEK_API_KEY) echo " DeepSeek" ;;
1210+ MOONSHOT_API_KEY) echo " Moonshot (Kimi)" ;;
1211+ ZHIPUAI_API_KEY) echo " Zhipu AI" ;;
1212+ OPENAI_API_KEY) echo " OpenAI" ;;
1213+ OPENROUTER_API_KEY) echo " OpenRouter" ;;
1214+ CLAUDE_API_KEY) echo " Claude" ;;
1215+ GEMINI_API_KEY) echo " Google Gemini" ;;
1216+ GROQ_API_KEY) echo " Groq" ;;
1217+ DOUBAO_API_KEY) echo " Doubao" ;;
1218+ BAICHUAN_API_KEY) echo " Baichuan AI" ;;
1219+ YI_API_KEY) echo " 01.AI (Yi)" ;;
1220+ STEPFUN_API_KEY) echo " Stepfun" ;;
1221+ MINIMAX_API_KEY) echo " Minimax" ;;
1222+ COHERE_API_KEY) echo " Cohere" ;;
1223+ MISTRAL_API_KEY) echo " Mistral AI" ;;
1224+ GITHUB_API_KEY) echo " Github Models" ;;
1225+ FIREWORKS_API_KEY) echo " Fireworks AI" ;;
1226+ TOGETHERAI_API_KEY) echo " Together AI" ;;
1227+ GROK_API_KEY) echo " Grok" ;;
1228+ * ) echo " Unknown ($env_var )" ;;
1229+ esac
1230+ }
1231+
1232+ # Get environment variable name from provider shorthand
1233+ getEnvVarName () {
1234+ local provider=" $1 "
1235+ case " $provider " in
1236+ dashscope|qwen) echo " DASHSCOPE_API_KEY" ;;
1237+ deepseek) echo " DEEPSEEK_API_KEY" ;;
1238+ moonshot|kimi) echo " MOONSHOT_API_KEY" ;;
1239+ zhipuai|zhipu) echo " ZHIPUAI_API_KEY" ;;
1240+ openai) echo " OPENAI_API_KEY" ;;
1241+ openrouter) echo " OPENROUTER_API_KEY" ;;
1242+ claude) echo " CLAUDE_API_KEY" ;;
1243+ gemini) echo " GEMINI_API_KEY" ;;
1244+ groq) echo " GROQ_API_KEY" ;;
1245+ doubao) echo " DOUBAO_API_KEY" ;;
1246+ baichuan) echo " BAICHUAN_API_KEY" ;;
1247+ yi) echo " YI_API_KEY" ;;
1248+ stepfun) echo " STEPFUN_API_KEY" ;;
1249+ minimax) echo " MINIMAX_API_KEY" ;;
1250+ cohere) echo " COHERE_API_KEY" ;;
1251+ mistral) echo " MISTRAL_API_KEY" ;;
1252+ github) echo " GITHUB_API_KEY" ;;
1253+ fireworks) echo " FIREWORKS_API_KEY" ;;
1254+ togetherai|together) echo " TOGETHERAI_API_KEY" ;;
1255+ grok) echo " GROK_API_KEY" ;;
1256+ * ) echo " " ;;
1257+ esac
1258+ }
1259+
1260+ # Mask API key for display
1261+ maskApiKey () {
1262+ local key=" $1 "
1263+ if [ -z " $key " ]; then
1264+ echo " <not set>"
1265+ return
1266+ fi
1267+ local len=${# key}
1268+ if [ $len -le 8 ]; then
1269+ echo " ${key: 0: 2} ***"
1270+ else
1271+ echo " ${key: 0: 4} ***${key: -4} "
1272+ fi
1273+ }
1274+
1275+ # Config list: List all configured API keys
1276+ configList () {
1277+ local config_file=" $ROOT /$CONFIG_FILENAME "
1278+
1279+ if [ ! -f " $config_file " ]; then
1280+ echo " Error: Configuration file not found: $config_file "
1281+ echo " Please start the gateway first with: $0 start"
1282+ exit 1
1283+ fi
1284+
1285+ echo " Current LLM Provider API Keys:"
1286+ echo
1287+
1288+ # List of known API key environment variables
1289+ local api_keys=(
1290+ " DASHSCOPE_API_KEY"
1291+ " DEEPSEEK_API_KEY"
1292+ " MOONSHOT_API_KEY"
1293+ " ZHIPUAI_API_KEY"
1294+ " OPENAI_API_KEY"
1295+ " OPENROUTER_API_KEY"
1296+ " CLAUDE_API_KEY"
1297+ " GEMINI_API_KEY"
1298+ " GROQ_API_KEY"
1299+ " DOUBAO_API_KEY"
1300+ " BAICHUAN_API_KEY"
1301+ " YI_API_KEY"
1302+ " STEPFUN_API_KEY"
1303+ " MINIMAX_API_KEY"
1304+ " COHERE_API_KEY"
1305+ " MISTRAL_API_KEY"
1306+ " GITHUB_API_KEY"
1307+ " FIREWORKS_API_KEY"
1308+ " TOGETHERAI_API_KEY"
1309+ " GROK_API_KEY"
1310+ )
1311+
1312+ local found=0
1313+ for env_var in " ${api_keys[@]} " ; do
1314+ local value=$( grep " ^${env_var} =" " $config_file " | cut -d' =' -f2-)
1315+ if [ -n " $value " ]; then
1316+ local provider_name=$( getProviderName " $env_var " )
1317+ local masked=$( maskApiKey " $value " )
1318+ printf " %-25s %s\n" " $provider_name :" " $masked "
1319+ found=1
1320+ fi
1321+ done
1322+
1323+ if [ $found -eq 0 ]; then
1324+ echo " No API keys configured."
1325+ echo
1326+ echo " Add an API key with:"
1327+ echo " $0 config add --provider <provider> --key <api-key>"
1328+ else
1329+ echo
1330+ echo " Update an API key with:"
1331+ echo " $0 config add --provider <provider> --key <new-api-key>"
1332+ echo
1333+ echo " Remove an API key with:"
1334+ echo " $0 config remove --provider <provider>"
1335+ fi
1336+ }
1337+
1338+ # Config add: Add or update an API key
1339+ configAdd () {
1340+ if [ -z " $CONFIG_PROVIDER " ]; then
1341+ echo " Error: --provider is required"
1342+ echo
1343+ echo " Supported providers:"
1344+ echo " dashscope, deepseek, moonshot, zhipuai, openai, openrouter,"
1345+ echo " claude, gemini, groq, doubao, baichuan, yi, stepfun, minimax,"
1346+ echo " cohere, mistral, github, fireworks, togetherai, grok"
1347+ echo
1348+ echo " Usage: $0 config add --provider <provider> --key <api-key>"
1349+ exit 1
1350+ fi
1351+
1352+ if [ -z " $CONFIG_KEY " ]; then
1353+ echo " Error: --key is required"
1354+ echo " Usage: $0 config add --provider <provider> --key <api-key>"
1355+ exit 1
1356+ fi
1357+
1358+ local config_file=" $ROOT /$CONFIG_FILENAME "
1359+
1360+ if [ ! -f " $config_file " ]; then
1361+ echo " Error: Configuration file not found: $config_file "
1362+ echo " Please start the gateway first with: $0 start"
1363+ exit 1
1364+ fi
1365+
1366+ local env_var=$( getEnvVarName " $CONFIG_PROVIDER " )
1367+ if [ -z " $env_var " ]; then
1368+ echo " Error: Unknown provider: $CONFIG_PROVIDER "
1369+ echo
1370+ echo " Supported providers:"
1371+ echo " dashscope, deepseek, moonshot, zhipuai, openai, openrouter,"
1372+ echo " claude, gemini, groq, doubao, baichuan, yi, stepfun, minimax,"
1373+ echo " cohere, mistral, github, fireworks, togetherai, grok"
1374+ exit 1
1375+ fi
1376+
1377+ local provider_name=$( getProviderName " $env_var " )
1378+
1379+ # Check if the key already exists
1380+ if grep -q " ^${env_var} =" " $config_file " ; then
1381+ echo " Updating existing API key for $provider_name ..."
1382+ sedInPlace " /^${env_var} =/c\\ ${env_var} =${CONFIG_KEY} " " $config_file "
1383+ else
1384+ echo " Adding new API key for $provider_name ..."
1385+ echo " ${env_var} =${CONFIG_KEY} " >> " $config_file "
1386+ fi
1387+
1388+ if [ $? -eq 0 ]; then
1389+ echo
1390+ echo " ✅ API key updated successfully!"
1391+ echo
1392+ echo " Provider: $provider_name "
1393+ echo " Key: $( maskApiKey " $CONFIG_KEY " ) "
1394+ echo
1395+ echo " Restart the gateway to apply changes:"
1396+ echo " $0 stop && $0 start"
1397+ else
1398+ echo " Error: Failed to update configuration file"
1399+ exit 1
1400+ fi
1401+ }
1402+
1403+ # Config remove: Remove an API key
1404+ configRemove () {
1405+ if [ -z " $CONFIG_PROVIDER " ]; then
1406+ echo " Error: --provider is required"
1407+ echo " Usage: $0 config remove --provider <provider>"
1408+ exit 1
1409+ fi
1410+
1411+ local config_file=" $ROOT /$CONFIG_FILENAME "
1412+
1413+ if [ ! -f " $config_file " ]; then
1414+ echo " Error: Configuration file not found: $config_file "
1415+ echo " Please start the gateway first with: $0 start"
1416+ exit 1
1417+ fi
1418+
1419+ local env_var=$( getEnvVarName " $CONFIG_PROVIDER " )
1420+ if [ -z " $env_var " ]; then
1421+ echo " Error: Unknown provider: $CONFIG_PROVIDER "
1422+ echo
1423+ echo " Supported providers:"
1424+ echo " dashscope, deepseek, moonshot, zhipuai, openai, openrouter,"
1425+ echo " claude, gemini, groq, doubao, baichuan, yi, stepfun, minimax,"
1426+ echo " cohere, mistral, github, fireworks, togetherai, grok"
1427+ exit 1
1428+ fi
1429+
1430+ local provider_name=$( getProviderName " $env_var " )
1431+
1432+ # Check if the key exists
1433+ if ! grep -q " ^${env_var} =" " $config_file " ; then
1434+ echo " Error: No API key configured for $provider_name "
1435+ echo
1436+ echo " Current configuration:"
1437+ echo " $0 config list"
1438+ exit 1
1439+ fi
1440+
1441+ # Remove the key
1442+ sedInPlace " /^${env_var} =/d" " $config_file "
1443+
1444+ if [ $? -eq 0 ]; then
1445+ echo
1446+ echo " ✅ API key removed successfully!"
1447+ echo
1448+ echo " Provider: $provider_name "
1449+ echo
1450+ echo " Restart the gateway to apply changes:"
1451+ echo " $0 stop && $0 start"
1452+ else
1453+ echo " Error: Failed to update configuration file"
1454+ exit 1
1455+ fi
1456+ }
1457+
1458+ # Config command dispatcher
1459+ config () {
1460+ case " $CONFIG_SUBCOMMAND " in
1461+ " $CONFIG_ADD " )
1462+ configAdd
1463+ ;;
1464+ " $CONFIG_LIST " )
1465+ configList
1466+ ;;
1467+ " $CONFIG_REMOVE " )
1468+ configRemove
1469+ ;;
1470+ esac
1471+ }
1472+
11471473# ============================================================================
11481474# Route Command Functions
11491475# ============================================================================
@@ -1459,4 +1785,7 @@ case $COMMAND in
14591785" $COMMAND_ROUTE " )
14601786 route
14611787 ;;
1788+ " $COMMAND_CONFIG " )
1789+ config
1790+ ;;
14621791esac
0 commit comments