feat: enhance Claude to OpenAI request conversion with additional relay info support
This commit is contained in:
@@ -36,7 +36,7 @@ func (a *Adaptor) ConvertClaudeRequest(c *gin.Context, info *relaycommon.RelayIn
|
|||||||
if !strings.Contains(request.Model, "claude") {
|
if !strings.Contains(request.Model, "claude") {
|
||||||
return nil, fmt.Errorf("you are using openai channel type with path /v1/messages, only claude model supported convert, but got %s", request.Model)
|
return nil, fmt.Errorf("you are using openai channel type with path /v1/messages, only claude model supported convert, but got %s", request.Model)
|
||||||
}
|
}
|
||||||
aiRequest, err := service.ClaudeToOpenAIRequest(*request)
|
aiRequest, err := service.ClaudeToOpenAIRequest(*request, info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ import (
|
|||||||
"one-api/common"
|
"one-api/common"
|
||||||
"one-api/dto"
|
"one-api/dto"
|
||||||
relaycommon "one-api/relay/common"
|
relaycommon "one-api/relay/common"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest) (*dto.GeneralOpenAIRequest, error) {
|
func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error) {
|
||||||
openAIRequest := dto.GeneralOpenAIRequest{
|
openAIRequest := dto.GeneralOpenAIRequest{
|
||||||
Model: claudeRequest.Model,
|
Model: claudeRequest.Model,
|
||||||
MaxTokens: claudeRequest.MaxTokens,
|
MaxTokens: claudeRequest.MaxTokens,
|
||||||
@@ -17,6 +18,13 @@ func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest) (*dto.GeneralOpenAIR
|
|||||||
Stream: claudeRequest.Stream,
|
Stream: claudeRequest.Stream,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if claudeRequest.Thinking != nil {
|
||||||
|
if strings.HasSuffix(info.OriginModelName, "-thinking") &&
|
||||||
|
!strings.HasSuffix(claudeRequest.Model, "-thinking") {
|
||||||
|
openAIRequest.Model = openAIRequest.Model + "-thinking"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Convert stop sequences
|
// Convert stop sequences
|
||||||
if len(claudeRequest.StopSequences) == 1 {
|
if len(claudeRequest.StopSequences) == 1 {
|
||||||
openAIRequest.Stop = claudeRequest.StopSequences[0]
|
openAIRequest.Stop = claudeRequest.StopSequences[0]
|
||||||
@@ -300,8 +308,10 @@ func StreamResponseOpenAI2Claude(openAIResponse *dto.ChatCompletionsStreamRespon
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if info.ClaudeConvertInfo.LastMessagesType != relaycommon.LastMessageTypeText {
|
if info.ClaudeConvertInfo.LastMessagesType != relaycommon.LastMessageTypeText {
|
||||||
claudeResponses = append(claudeResponses, generateStopBlock(info.ClaudeConvertInfo.Index))
|
if info.LastMessagesType == relaycommon.LastMessageTypeThinking || info.LastMessagesType == relaycommon.LastMessageTypeTools {
|
||||||
info.ClaudeConvertInfo.Index++
|
claudeResponses = append(claudeResponses, generateStopBlock(info.ClaudeConvertInfo.Index))
|
||||||
|
info.ClaudeConvertInfo.Index++
|
||||||
|
}
|
||||||
claudeResponses = append(claudeResponses, &dto.ClaudeResponse{
|
claudeResponses = append(claudeResponses, &dto.ClaudeResponse{
|
||||||
Index: &info.ClaudeConvertInfo.Index,
|
Index: &info.ClaudeConvertInfo.Index,
|
||||||
Type: "content_block_start",
|
Type: "content_block_start",
|
||||||
|
|||||||
Reference in New Issue
Block a user