mirror of
				https://github.com/songquanpeng/one-api.git
				synced 2025-11-04 07:43:41 +08:00 
			
		
		
		
	feat: refactor Xunfei API version handling and update model list
This commit is contained in:
		@@ -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",
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								relay/adaptor/xunfei/domain.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								relay/adaptor/xunfei/domain.go
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user