From 974729426deabb6a7b0e276b980829da5f00b9da Mon Sep 17 00:00:00 2001 From: JustSong Date: Sun, 9 Feb 2025 18:50:51 +0800 Subject: [PATCH] feat: refactor Xunfei API version handling and update model list --- relay/adaptor/xunfei/constants.go | 14 ++--- relay/adaptor/xunfei/domain.go | 97 +++++++++++++++++++++++++++++++ relay/adaptor/xunfei/main.go | 46 +-------------- 3 files changed, 104 insertions(+), 53 deletions(-) create mode 100644 relay/adaptor/xunfei/domain.go diff --git a/relay/adaptor/xunfei/constants.go b/relay/adaptor/xunfei/constants.go index 5b82ac29..e19c1849 100644 --- a/relay/adaptor/xunfei/constants.go +++ b/relay/adaptor/xunfei/constants.go @@ -1,12 +1,10 @@ package xunfei var ModelList = []string{ - "SparkDesk", - "SparkDesk-v1.1", - "SparkDesk-v2.1", - "SparkDesk-v3.1", - "SparkDesk-v3.1-128K", - "SparkDesk-v3.5", - "SparkDesk-v3.5-32K", - "SparkDesk-v4.0", + "Spark-Lite", + "Spark-Pro", + "Spark-Pro-128K", + "Spark-Max", + "Spark-Max-32K", + "Spark-4.0-Ultra", } diff --git a/relay/adaptor/xunfei/domain.go b/relay/adaptor/xunfei/domain.go new file mode 100644 index 00000000..fd961baa --- /dev/null +++ b/relay/adaptor/xunfei/domain.go @@ -0,0 +1,97 @@ +package xunfei + +import ( + "fmt" + "strings" +) + +// https://www.xfyun.cn/doc/spark/Web.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E + +//Spark4.0 Ultra 请求地址,对应的domain参数为4.0Ultra: +// +//wss://spark-api.xf-yun.com/v4.0/chat +//Spark Max-32K请求地址,对应的domain参数为max-32k +// +//wss://spark-api.xf-yun.com/chat/max-32k +//Spark Max请求地址,对应的domain参数为generalv3.5 +// +//wss://spark-api.xf-yun.com/v3.5/chat +//Spark Pro-128K请求地址,对应的domain参数为pro-128k: +// +// wss://spark-api.xf-yun.com/chat/pro-128k +//Spark Pro请求地址,对应的domain参数为generalv3: +// +//wss://spark-api.xf-yun.com/v3.1/chat +//Spark Lite请求地址,对应的domain参数为lite: +// +//wss://spark-api.xf-yun.com/v1.1/chat + +// Lite、Pro、Pro-128K、Max、Max-32K和4.0 Ultra + +func parseAPIVersionByModelName(modelName string) string { + apiVersion := modelName2APIVersion(modelName) + if apiVersion != "" { + return apiVersion + } + + index := strings.IndexAny(modelName, "-") + if index != -1 { + return modelName[index+1:] + } + return "" +} + +func modelName2APIVersion(modelName string) string { + switch modelName { + case "Spark-Lite": + return "v1.1" + case "Spark-Pro": + return "v3.1" + case "Spark-Pro-128K": + return "v3.1-128K" + case "Spark-Max": + return "v3.5" + case "Spark-Max-32K": + return "v3.5-32K" + case "Spark-4.0-Ultra": + return "v4.0" + } + return "" +} + +// https://www.xfyun.cn/doc/spark/Web.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E +func apiVersion2domain(apiVersion string) string { + switch apiVersion { + case "v1.1": + return "lite" + case "v2.1": + return "generalv2" + case "v3.1": + return "generalv3" + case "v3.1-128K": + return "pro-128k" + case "v3.5": + return "generalv3.5" + case "v3.5-32K": + return "max-32k" + case "v4.0": + return "4.0Ultra" + } + return "general" + apiVersion +} + +func getXunfeiAuthUrl(apiVersion string, apiKey string, apiSecret string) (string, string) { + var authUrl string + domain := apiVersion2domain(apiVersion) + switch apiVersion { + case "v3.1-128K": + authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/chat/pro-128k"), apiKey, apiSecret) + break + case "v3.5-32K": + authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/chat/max-32k"), apiKey, apiSecret) + break + default: + authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/%s/chat", apiVersion), apiKey, apiSecret) + } + return domain, authUrl +} diff --git a/relay/adaptor/xunfei/main.go b/relay/adaptor/xunfei/main.go index 3984ba5a..9a8aef15 100644 --- a/relay/adaptor/xunfei/main.go +++ b/relay/adaptor/xunfei/main.go @@ -15,6 +15,7 @@ import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" + "github.com/songquanpeng/one-api/common" "github.com/songquanpeng/one-api/common/helper" "github.com/songquanpeng/one-api/common/logger" @@ -270,48 +271,3 @@ func xunfeiMakeRequest(textRequest model.GeneralOpenAIRequest, domain, authUrl, return dataChan, stopChan, nil } - -func parseAPIVersionByModelName(modelName string) string { - index := strings.IndexAny(modelName, "-") - if index != -1 { - return modelName[index+1:] - } - return "" -} - -// https://www.xfyun.cn/doc/spark/Web.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E -func apiVersion2domain(apiVersion string) string { - switch apiVersion { - case "v1.1": - return "lite" - case "v2.1": - return "generalv2" - case "v3.1": - return "generalv3" - case "v3.1-128K": - return "pro-128k" - case "v3.5": - return "generalv3.5" - case "v3.5-32K": - return "max-32k" - case "v4.0": - return "4.0Ultra" - } - return "general" + apiVersion -} - -func getXunfeiAuthUrl(apiVersion string, apiKey string, apiSecret string) (string, string) { - var authUrl string - domain := apiVersion2domain(apiVersion) - switch apiVersion { - case "v3.1-128K": - authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/chat/pro-128k"), apiKey, apiSecret) - break - case "v3.5-32K": - authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/chat/max-32k"), apiKey, apiSecret) - break - default: - authUrl = buildXunfeiAuthUrl(fmt.Sprintf("wss://spark-api.xf-yun.com/%s/chat", apiVersion), apiKey, apiSecret) - } - return domain, authUrl -}