Explorar o código

pref: support amazon nova

huanghejian hai 5 meses
pai
achega
e3bc40f11b
Modificáronse 3 ficheiros con 33 adicións e 6 borrados
  1. 26 6
      relay/channel/aws/constants.go
  2. 1 0
      relay/channel/aws/dto.go
  3. 6 0
      relay/channel/aws/relay-aws.go

+ 26 - 6
relay/channel/aws/constants.go

@@ -17,10 +17,10 @@ var awsModelIDMap = map[string]string{
 	"claude-opus-4-20250514":     "anthropic.claude-opus-4-20250514-v1:0",
 	"claude-opus-4-1-20250805":   "anthropic.claude-opus-4-1-20250805-v1:0",
 	// Nova models
-	"amazon.nova-micro-v1:0":   "us.amazon.nova-micro-v1:0",
-	"amazon.nova-lite-v1:0":    "us.amazon.nova-lite-v1:0",
-	"amazon.nova-pro-v1:0":     "us.amazon.nova-pro-v1:0",
-	"amazon.nova-premier-v1:0": "us.amazon.nova-premier-v1:0",
+	"nova-micro-v1:0":   "amazon.nova-micro-v1:0",
+	"nova-lite-v1:0":    "amazon.nova-lite-v1:0",
+	"nova-pro-v1:0":     "amazon.nova-pro-v1:0",
+	"nova-premier-v1:0": "amazon.nova-premier-v1:0",
 }
 
 var awsModelCanCrossRegionMap = map[string]map[string]bool{
@@ -65,7 +65,27 @@ var awsModelCanCrossRegionMap = map[string]map[string]bool{
 	"anthropic.claude-opus-4-1-20250805-v1:0": {
 		"us": true,
 	},
-}
+	// Nova models - all support three major regions
+	"amazon.nova-micro-v1:0": {
+		"us":   true,
+		"eu":   true,
+		"apac": true,
+	},
+	"amazon.nova-lite-v1:0": {
+		"us":   true,
+		"eu":   true,
+		"apac": true,
+	},
+	"amazon.nova-pro-v1:0": {
+		"us":   true,
+		"eu":   true,
+		"apac": true,
+	},
+	"amazon.nova-premier-v1:0": {
+		"us":   true,
+		"eu":   true,
+		"apac": true,
+	}}
 
 var awsRegionCrossModelPrefixMap = map[string]string{
 	"us": "us",
@@ -77,5 +97,5 @@ var ChannelName = "aws"
 
 // 判断是否为Nova模型
 func isNovaModel(modelId string) bool {
-	return strings.HasPrefix(modelId, "amazon.nova-")
+	return strings.HasPrefix(modelId, "nova-")
 }

+ 1 - 0
relay/channel/aws/dto.go

@@ -76,6 +76,7 @@ func convertToNovaRequest(req *dto.GeneralOpenAIRequest) *NovaRequest {
 
 	// 设置推理配置
 	if req.MaxTokens != 0 || (req.Temperature != nil && *req.Temperature != 0) || req.TopP != 0 {
+		novaReq.InferenceConfig = &NovaInferenceConfig{}
 		if req.MaxTokens != 0 {
 			novaReq.InferenceConfig.MaxTokens = int(req.MaxTokens)
 		}

+ 6 - 0
relay/channel/aws/relay-aws.go

@@ -97,6 +97,12 @@ func awsHandler(c *gin.Context, info *relaycommon.RelayInfo, requestMode int) (*
 	// 检查是否为Nova模型
 	isNova, _ := c.Get("is_nova_model")
 	if isNova == true {
+		// Nova模型也支持跨区域
+		awsRegionPrefix := awsRegionPrefix(awsCli.Options().Region)
+		canCrossRegion := awsModelCanCrossRegion(awsModelId, awsRegionPrefix)
+		if canCrossRegion {
+			awsModelId = awsModelCrossRegion(awsModelId, awsRegionPrefix)
+		}
 		return handleNovaRequest(c, awsCli, info, awsModelId)
 	}