Seefs 2 недель назад
Родитель
Сommit
48efa1ddb9
3 измененных файлов с 45 добавлено и 26 удалено
  1. 2 12
      relay/channel/claude/relay-claude.go
  2. 41 0
      relay/reasonmap/reasonmap.go
  3. 2 14
      service/convert.go

+ 2 - 12
relay/channel/claude/relay-claude.go

@@ -14,6 +14,7 @@ import (
 	"github.com/QuantumNous/new-api/relay/channel/openrouter"
 	relaycommon "github.com/QuantumNous/new-api/relay/common"
 	"github.com/QuantumNous/new-api/relay/helper"
+	"github.com/QuantumNous/new-api/relay/reasonmap"
 	"github.com/QuantumNous/new-api/service"
 	"github.com/QuantumNous/new-api/setting/model_setting"
 	"github.com/QuantumNous/new-api/types"
@@ -28,18 +29,7 @@ const (
 )
 
 func stopReasonClaude2OpenAI(reason string) string {
-	switch reason {
-	case "stop_sequence":
-		return "stop"
-	case "end_turn":
-		return "stop"
-	case "max_tokens":
-		return "length"
-	case "tool_use":
-		return "tool_calls"
-	default:
-		return reason
-	}
+	return reasonmap.ClaudeStopReasonToOpenAIFinishReason(reason)
 }
 
 func maybeMarkClaudeRefusal(c *gin.Context, stopReason string) {

+ 41 - 0
relay/reasonmap/reasonmap.go

@@ -0,0 +1,41 @@
+package reasonmap
+
+import (
+	"strings"
+
+	"github.com/QuantumNous/new-api/constant"
+)
+
+func ClaudeStopReasonToOpenAIFinishReason(stopReason string) string {
+	switch strings.ToLower(stopReason) {
+	case "stop_sequence":
+		return "stop"
+	case "end_turn":
+		return "stop"
+	case "max_tokens":
+		return "length"
+	case "tool_use":
+		return "tool_calls"
+	case "refusal":
+		return constant.FinishReasonContentFilter
+	default:
+		return stopReason
+	}
+}
+
+func OpenAIFinishReasonToClaudeStopReason(finishReason string) string {
+	switch strings.ToLower(finishReason) {
+	case "stop":
+		return "end_turn"
+	case "stop_sequence":
+		return "stop_sequence"
+	case "length", "max_tokens":
+		return "max_tokens"
+	case constant.FinishReasonContentFilter:
+		return "refusal"
+	case "tool_calls":
+		return "tool_use"
+	default:
+		return finishReason
+	}
+}

+ 2 - 14
service/convert.go

@@ -10,6 +10,7 @@ import (
 	"github.com/QuantumNous/new-api/dto"
 	"github.com/QuantumNous/new-api/relay/channel/openrouter"
 	relaycommon "github.com/QuantumNous/new-api/relay/common"
+	"github.com/QuantumNous/new-api/relay/reasonmap"
 )
 
 func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error) {
@@ -540,20 +541,7 @@ func ResponseOpenAI2Claude(openAIResponse *dto.OpenAITextResponse, info *relayco
 }
 
 func stopReasonOpenAI2Claude(reason string) string {
-	switch reason {
-	case "stop":
-		return "end_turn"
-	case "stop_sequence":
-		return "stop_sequence"
-	case "length":
-		fallthrough
-	case "max_tokens":
-		return "max_tokens"
-	case "tool_calls":
-		return "tool_use"
-	default:
-		return reason
-	}
+	return reasonmap.OpenAIFinishReasonToClaudeStopReason(reason)
 }
 
 func toJSONString(v interface{}) string {