| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package mistral
- import (
- "regexp"
- "github.com/QuantumNous/new-api/common"
- "github.com/QuantumNous/new-api/dto"
- )
- var mistralToolCallIdRegexp = regexp.MustCompile("^[a-zA-Z0-9]{9}$")
- func requestOpenAI2Mistral(request *dto.GeneralOpenAIRequest) *dto.GeneralOpenAIRequest {
- messages := make([]dto.Message, 0, len(request.Messages))
- idMap := make(map[string]string)
- for _, message := range request.Messages {
- // 1. tool_calls.id
- toolCalls := message.ParseToolCalls()
- if toolCalls != nil {
- for i := range toolCalls {
- if !mistralToolCallIdRegexp.MatchString(toolCalls[i].ID) {
- if newId, ok := idMap[toolCalls[i].ID]; ok {
- toolCalls[i].ID = newId
- } else {
- newId, err := common.GenerateRandomCharsKey(9)
- if err == nil {
- idMap[toolCalls[i].ID] = newId
- toolCalls[i].ID = newId
- }
- }
- }
- }
- message.SetToolCalls(toolCalls)
- }
- // 2. tool_call_id
- if message.ToolCallId != "" {
- if newId, ok := idMap[message.ToolCallId]; ok {
- message.ToolCallId = newId
- } else {
- if !mistralToolCallIdRegexp.MatchString(message.ToolCallId) {
- newId, err := common.GenerateRandomCharsKey(9)
- if err == nil {
- idMap[message.ToolCallId] = newId
- message.ToolCallId = newId
- }
- }
- }
- }
- mediaMessages := message.ParseContent()
- if message.Role == "assistant" && message.ToolCalls != nil && message.Content == "" {
- mediaMessages = []dto.MediaContent{}
- }
- for j, mediaMessage := range mediaMessages {
- if mediaMessage.Type == dto.ContentTypeImageURL {
- imageUrl := mediaMessage.GetImageMedia()
- mediaMessage.ImageUrl = imageUrl.Url
- mediaMessages[j] = mediaMessage
- }
- }
- message.SetMediaContent(mediaMessages)
- messages = append(messages, dto.Message{
- Role: message.Role,
- Content: message.Content,
- ToolCalls: message.ToolCalls,
- ToolCallId: message.ToolCallId,
- })
- }
- out := &dto.GeneralOpenAIRequest{
- Model: request.Model,
- Stream: request.Stream,
- Messages: messages,
- Temperature: request.Temperature,
- TopP: request.TopP,
- Tools: request.Tools,
- ToolChoice: request.ToolChoice,
- }
- if request.MaxTokens != nil || request.MaxCompletionTokens != nil {
- maxTokens := request.GetMaxTokens()
- out.MaxTokens = &maxTokens
- }
- return out
- }
|