🐛 fix: function call error (#190)
This commit is contained in:
parent
68e5cf1183
commit
c04dfc735f
@ -150,7 +150,7 @@ func convertFromChatOpenai(request *types.ChatCompletionRequest) *BaiduChatReque
|
|||||||
if message.Role == types.ChatMessageRoleSystem {
|
if message.Role == types.ChatMessageRoleSystem {
|
||||||
baiduChatRequest.System = message.StringContent()
|
baiduChatRequest.System = message.StringContent()
|
||||||
continue
|
continue
|
||||||
} else if message.Role == types.ChatMessageRoleFunction || message.Role == types.ChatMessageRoleTool {
|
} else if message.ToolCalls != nil {
|
||||||
baiduChatRequest.Messages = append(baiduChatRequest.Messages, BaiduMessage{
|
baiduChatRequest.Messages = append(baiduChatRequest.Messages, BaiduMessage{
|
||||||
Role: types.ChatMessageRoleAssistant,
|
Role: types.ChatMessageRoleAssistant,
|
||||||
FunctionCall: &types.ChatCompletionToolCallsFunction{
|
FunctionCall: &types.ChatCompletionToolCallsFunction{
|
||||||
@ -158,6 +158,7 @@ func convertFromChatOpenai(request *types.ChatCompletionRequest) *BaiduChatReque
|
|||||||
Arguments: "{}",
|
Arguments: "{}",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
} else if message.Role == types.ChatMessageRoleFunction || message.Role == types.ChatMessageRoleTool {
|
||||||
baiduChatRequest.Messages = append(baiduChatRequest.Messages, BaiduMessage{
|
baiduChatRequest.Messages = append(baiduChatRequest.Messages, BaiduMessage{
|
||||||
Role: types.ChatMessageRoleUser,
|
Role: types.ChatMessageRoleUser,
|
||||||
Content: "这是函数调用返回的内容,请回答之前的问题:\n" + message.StringContent(),
|
Content: "这是函数调用返回的内容,请回答之前的问题:\n" + message.StringContent(),
|
||||||
|
@ -133,25 +133,34 @@ func (g *GeminiChatResponse) GetResponseText() string {
|
|||||||
|
|
||||||
func OpenAIToGeminiChatContent(openaiContents []types.ChatCompletionMessage) ([]GeminiChatContent, *types.OpenAIErrorWithStatusCode) {
|
func OpenAIToGeminiChatContent(openaiContents []types.ChatCompletionMessage) ([]GeminiChatContent, *types.OpenAIErrorWithStatusCode) {
|
||||||
contents := make([]GeminiChatContent, 0)
|
contents := make([]GeminiChatContent, 0)
|
||||||
|
useToolName := ""
|
||||||
for _, openaiContent := range openaiContents {
|
for _, openaiContent := range openaiContents {
|
||||||
content := GeminiChatContent{
|
content := GeminiChatContent{
|
||||||
Role: ConvertRole(openaiContent.Role),
|
Role: ConvertRole(openaiContent.Role),
|
||||||
Parts: make([]GeminiPart, 0),
|
Parts: make([]GeminiPart, 0),
|
||||||
}
|
}
|
||||||
content.Role = ConvertRole(openaiContent.Role)
|
content.Role = ConvertRole(openaiContent.Role)
|
||||||
|
if openaiContent.ToolCalls != nil || openaiContent.FunctionCall != nil {
|
||||||
if openaiContent.ToolCalls != nil {
|
if openaiContent.ToolCalls != nil {
|
||||||
|
useToolName = openaiContent.ToolCalls[0].Function.Name
|
||||||
|
} else {
|
||||||
|
useToolName = openaiContent.FunctionCall.Name
|
||||||
|
}
|
||||||
content = GeminiChatContent{
|
content = GeminiChatContent{
|
||||||
Role: "model",
|
Role: "model",
|
||||||
Parts: []GeminiPart{
|
Parts: []GeminiPart{
|
||||||
{
|
{
|
||||||
FunctionCall: &GeminiFunctionCall{
|
FunctionCall: &GeminiFunctionCall{
|
||||||
Name: openaiContent.ToolCalls[0].Function.Name,
|
Name: useToolName,
|
||||||
Args: map[string]interface{}{},
|
Args: map[string]interface{}{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else if openaiContent.Role == types.ChatMessageRoleFunction || openaiContent.Role == types.ChatMessageRoleTool {
|
} else if openaiContent.Role == types.ChatMessageRoleFunction || openaiContent.Role == types.ChatMessageRoleTool {
|
||||||
|
if openaiContent.Name == nil {
|
||||||
|
openaiContent.Name = &useToolName
|
||||||
|
}
|
||||||
content = GeminiChatContent{
|
content = GeminiChatContent{
|
||||||
Role: "function",
|
Role: "function",
|
||||||
Parts: []GeminiPart{
|
Parts: []GeminiPart{
|
||||||
|
@ -145,7 +145,12 @@ func convertFromChatOpenai(request *types.ChatCompletionRequest) *MiniMaxChatReq
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果role为function, 则需要在前面一条记录添加function_call,如果没有消息,则添加一个message
|
// 如果role为function, 则需要在前面一条记录添加function_call,如果没有消息,则添加一个message
|
||||||
if message.Role == types.ChatMessageRoleFunction || message.Role == types.ChatMessageRoleTool {
|
if message.ToolCalls != nil {
|
||||||
|
miniMessage.FunctionCall = &types.ChatCompletionToolCallsFunction{
|
||||||
|
Name: message.ToolCalls[0].Function.Name,
|
||||||
|
Arguments: message.ToolCalls[0].Function.Arguments,
|
||||||
|
}
|
||||||
|
} else if message.Role == types.ChatMessageRoleFunction {
|
||||||
if len(messges) == 0 {
|
if len(messges) == 0 {
|
||||||
messges = append(messges, MiniMaxChatMessage{
|
messges = append(messges, MiniMaxChatMessage{
|
||||||
SenderType: "USER",
|
SenderType: "USER",
|
||||||
@ -187,7 +192,6 @@ func convertFromChatOpenai(request *types.ChatCompletionRequest) *MiniMaxChatReq
|
|||||||
miniRequest.Functions = append(miniRequest.Functions, &tool.Function)
|
miniRequest.Functions = append(miniRequest.Functions, &tool.Function)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return miniRequest
|
return miniRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package xunfei
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"one-api/common"
|
"one-api/common"
|
||||||
@ -75,7 +76,21 @@ func (p *XunfeiProvider) getChatRequest(request *types.ChatCompletionRequest) (*
|
|||||||
func (p *XunfeiProvider) convertFromChatOpenai(request *types.ChatCompletionRequest) *XunfeiChatRequest {
|
func (p *XunfeiProvider) convertFromChatOpenai(request *types.ChatCompletionRequest) *XunfeiChatRequest {
|
||||||
messages := make([]XunfeiMessage, 0, len(request.Messages))
|
messages := make([]XunfeiMessage, 0, len(request.Messages))
|
||||||
for _, message := range request.Messages {
|
for _, message := range request.Messages {
|
||||||
if message.Role == types.ChatMessageRoleFunction || message.Role == types.ChatMessageRoleTool {
|
if message.FunctionCall != nil || message.ToolCalls != nil {
|
||||||
|
useToolName := ""
|
||||||
|
useToolArgs := ""
|
||||||
|
if message.ToolCalls != nil {
|
||||||
|
useToolName = message.ToolCalls[0].Function.Name
|
||||||
|
useToolArgs = message.ToolCalls[0].Function.Arguments
|
||||||
|
} else {
|
||||||
|
useToolName = message.FunctionCall.Name
|
||||||
|
useToolArgs = message.FunctionCall.Arguments
|
||||||
|
}
|
||||||
|
messages = append(messages, XunfeiMessage{
|
||||||
|
Role: message.Role,
|
||||||
|
Content: fmt.Sprintf("使用工具:%s,参数:%s", useToolName, useToolArgs),
|
||||||
|
})
|
||||||
|
} else if message.Role == types.ChatMessageRoleFunction || message.Role == types.ChatMessageRoleTool {
|
||||||
messages = append(messages, XunfeiMessage{
|
messages = append(messages, XunfeiMessage{
|
||||||
Role: types.ChatMessageRoleUser,
|
Role: types.ChatMessageRoleUser,
|
||||||
Content: "这是函数调用返回的内容,请回答之前的问题:\n" + message.StringContent(),
|
Content: "这是函数调用返回的内容,请回答之前的问题:\n" + message.StringContent(),
|
||||||
|
@ -105,8 +105,11 @@ func (p *ZhipuProvider) convertToChatOpenai(response *ZhipuResponse, request *ty
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *ZhipuProvider) convertFromChatOpenai(request *types.ChatCompletionRequest) *ZhipuRequest {
|
func (p *ZhipuProvider) convertFromChatOpenai(request *types.ChatCompletionRequest) *ZhipuRequest {
|
||||||
for i := range request.Messages {
|
for i, _ := range request.Messages {
|
||||||
request.Messages[i].Role = convertRole(request.Messages[i].Role)
|
request.Messages[i].Role = convertRole(request.Messages[i].Role)
|
||||||
|
if request.Messages[i].FunctionCall != nil {
|
||||||
|
request.Messages[i].FuncToToolCalls()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zhipuRequest := &ZhipuRequest{
|
zhipuRequest := &ZhipuRequest{
|
||||||
@ -167,7 +170,6 @@ func (p *ZhipuProvider) convertFromChatOpenai(request *types.ChatCompletionReque
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.pluginHandle(zhipuRequest)
|
p.pluginHandle(zhipuRequest)
|
||||||
|
|
||||||
return zhipuRequest
|
return zhipuRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +111,21 @@ func (m ChatCompletionMessage) ParseContent() []ChatMessagePart {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *ChatCompletionMessage) FuncToToolCalls() {
|
||||||
|
if m.ToolCalls != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if m.FunctionCall != nil {
|
||||||
|
m.ToolCalls = []*ChatCompletionToolCalls{
|
||||||
|
{
|
||||||
|
Type: ChatMessageRoleFunction,
|
||||||
|
Function: m.FunctionCall,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
m.FunctionCall = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type ChatMessageImageURL struct {
|
type ChatMessageImageURL struct {
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
Detail string `json:"detail,omitempty"`
|
Detail string `json:"detail,omitempty"`
|
||||||
|
Loading…
Reference in New Issue
Block a user