From 38067f1ddc3239f63b0787734f6cfa0fe01805a4 Mon Sep 17 00:00:00 2001 From: feitianbubu Date: Wed, 6 Aug 2025 22:58:36 +0800 Subject: [PATCH] feat: enable thinking mode on ali thinking model --- controller/channel-test.go | 2 +- relay/channel/ali/adaptor.go | 12 +++++++++--- relay/common/relay_info.go | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/controller/channel-test.go b/controller/channel-test.go index 3a7c582b..1be36808 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -275,7 +275,7 @@ func testChannel(channel *model.Channel, testModel string) testResult { Quota: quota, Content: "模型测试", UseTimeSeconds: int(consumedTime), - IsStream: false, + IsStream: info.IsStream, Group: info.UsingGroup, Other: other, }) diff --git a/relay/channel/ali/adaptor.go b/relay/channel/ali/adaptor.go index 067fac37..35fe73c2 100644 --- a/relay/channel/ali/adaptor.go +++ b/relay/channel/ali/adaptor.go @@ -3,6 +3,7 @@ package ali import ( "errors" "fmt" + "github.com/gin-gonic/gin" "io" "net/http" "one-api/dto" @@ -11,8 +12,7 @@ import ( relaycommon "one-api/relay/common" "one-api/relay/constant" "one-api/types" - - "github.com/gin-gonic/gin" + "strings" ) type Adaptor struct { @@ -65,7 +65,13 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn if request == nil { return nil, errors.New("request is nil") } - + // docs: https://bailian.console.aliyun.com/?tab=api#/api/?type=model&url=2712216 + // fix: InternalError.Algo.InvalidParameter: The value of the enable_thinking parameter is restricted to True. + if strings.Contains(request.Model, "thinking") { + request.EnableThinking = true + request.Stream = true + info.IsStream = true + } // fix: ali parameter.enable_thinking must be set to false for non-streaming calls if !info.IsStream { request.EnableThinking = false diff --git a/relay/common/relay_info.go b/relay/common/relay_info.go index 266486c4..743070ca 100644 --- a/relay/common/relay_info.go +++ b/relay/common/relay_info.go @@ -225,6 +225,9 @@ func GenRelayInfo(c *gin.Context) *RelayInfo { userId := common.GetContextKeyInt(c, constant.ContextKeyUserId) tokenUnlimited := common.GetContextKeyBool(c, constant.ContextKeyTokenUnlimited) startTime := common.GetContextKeyTime(c, constant.ContextKeyRequestStartTime) + if startTime.IsZero() { + startTime = time.Now() + } // firstResponseTime = time.Now() - 1 second apiType, _ := common.ChannelType2APIType(channelType)