fix: wrong thinking labels appear in non-thinking models (#861)
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -23,6 +22,8 @@ import (
|
|||||||
"one-api/relay/constant"
|
"one-api/relay/constant"
|
||||||
"one-api/service"
|
"one-api/service"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Adaptor struct {
|
type Adaptor struct {
|
||||||
@@ -48,6 +49,15 @@ func (a *Adaptor) ConvertClaudeRequest(c *gin.Context, info *relaycommon.RelayIn
|
|||||||
|
|
||||||
func (a *Adaptor) Init(info *relaycommon.RelayInfo) {
|
func (a *Adaptor) Init(info *relaycommon.RelayInfo) {
|
||||||
a.ChannelType = info.ChannelType
|
a.ChannelType = info.ChannelType
|
||||||
|
|
||||||
|
// initialize ThinkingContentInfo when thinking_to_content is enabled
|
||||||
|
if think2Content, ok := info.ChannelSetting[constant2.ChannelSettingThinkingToContent].(bool); ok && think2Content {
|
||||||
|
info.ThinkingContentInfo = relaycommon.ThinkingContentInfo{
|
||||||
|
IsFirstThinkingContent: true,
|
||||||
|
SendLastThinkingContent: false,
|
||||||
|
HasSentThinkingContent: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ func sendStreamData(c *gin.Context, info *relaycommon.RelayInfo, data string, fo
|
|||||||
response.Choices[i].Delta.Reasoning = nil
|
response.Choices[i].Delta.Reasoning = nil
|
||||||
}
|
}
|
||||||
info.ThinkingContentInfo.IsFirstThinkingContent = false
|
info.ThinkingContentInfo.IsFirstThinkingContent = false
|
||||||
|
info.ThinkingContentInfo.HasSentThinkingContent = true
|
||||||
return helper.ObjectData(c, response)
|
return helper.ObjectData(c, response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -76,7 +77,8 @@ func sendStreamData(c *gin.Context, info *relaycommon.RelayInfo, data string, fo
|
|||||||
// Process each choice
|
// Process each choice
|
||||||
for i, choice := range lastStreamResponse.Choices {
|
for i, choice := range lastStreamResponse.Choices {
|
||||||
// Handle transition from thinking to content
|
// Handle transition from thinking to content
|
||||||
if hasContent && !info.ThinkingContentInfo.SendLastThinkingContent {
|
// only send `</think>` tag when previous thinking content has been sent
|
||||||
|
if hasContent && !info.ThinkingContentInfo.SendLastThinkingContent && info.ThinkingContentInfo.HasSentThinkingContent {
|
||||||
response := lastStreamResponse.Copy()
|
response := lastStreamResponse.Copy()
|
||||||
for j := range response.Choices {
|
for j := range response.Choices {
|
||||||
response.Choices[j].Delta.SetContentString("\n</think>\n")
|
response.Choices[j].Delta.SetContentString("\n</think>\n")
|
||||||
@@ -87,7 +89,7 @@ func sendStreamData(c *gin.Context, info *relaycommon.RelayInfo, data string, fo
|
|||||||
helper.ObjectData(c, response)
|
helper.ObjectData(c, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert reasoning content to regular content
|
// Convert reasoning content to regular content if any
|
||||||
if len(choice.Delta.GetReasoningContent()) > 0 {
|
if len(choice.Delta.GetReasoningContent()) > 0 {
|
||||||
lastStreamResponse.Choices[i].Delta.SetContentString(choice.Delta.GetReasoningContent())
|
lastStreamResponse.Choices[i].Delta.SetContentString(choice.Delta.GetReasoningContent())
|
||||||
lastStreamResponse.Choices[i].Delta.ReasoningContent = nil
|
lastStreamResponse.Choices[i].Delta.ReasoningContent = nil
|
||||||
|
|||||||
Reference in New Issue
Block a user