Просмотр исходного кода

feat: add reasoning support for Openrouter requests with "-thinking" suffix

CaIon 7 месяцев назад
Родитель
Сommit
6a80c18189
1 измененных файлов с 18 добавлено и 0 удалено
  1. 18 0
      relay/channel/openai/adaptor.go

+ 18 - 0
relay/channel/openai/adaptor.go

@@ -9,6 +9,7 @@ import (
 	"mime/multipart"
 	"mime/multipart"
 	"net/http"
 	"net/http"
 	"net/textproto"
 	"net/textproto"
+	"one-api/common"
 	"one-api/constant"
 	"one-api/constant"
 	"one-api/dto"
 	"one-api/dto"
 	"one-api/relay/channel"
 	"one-api/relay/channel"
@@ -172,6 +173,23 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn
 		if len(request.Usage) == 0 {
 		if len(request.Usage) == 0 {
 			request.Usage = json.RawMessage(`{"include":true}`)
 			request.Usage = json.RawMessage(`{"include":true}`)
 		}
 		}
+		if strings.HasSuffix(info.UpstreamModelName, "-thinking") {
+			info.UpstreamModelName = strings.TrimSuffix(info.UpstreamModelName, "-thinking")
+			request.Model = info.UpstreamModelName
+			if len(request.Reasoning) == 0 {
+				reasoning := map[string]any{
+					"enabled": true,
+				}
+				if request.ReasoningEffort != "" {
+					reasoning["effort"] = request.ReasoningEffort
+				}
+				marshal, err := common.Marshal(reasoning)
+				if err != nil {
+					return nil, fmt.Errorf("error marshalling reasoning: %w", err)
+				}
+				request.Reasoning = marshal
+			}
+		}
 	}
 	}
 	if strings.HasPrefix(request.Model, "o") {
 	if strings.HasPrefix(request.Model, "o") {
 		if request.MaxCompletionTokens == 0 && request.MaxTokens != 0 {
 		if request.MaxCompletionTokens == 0 && request.MaxTokens != 0 {