| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package mistral
- import (
- "one-api/common"
- "one-api/dto"
- "regexp"
- )
- 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,
- })
- }
- return &dto.GeneralOpenAIRequest{
- Model: request.Model,
- Stream: request.Stream,
- Messages: messages,
- Temperature: request.Temperature,
- TopP: request.TopP,
- MaxTokens: request.MaxTokens,
- Tools: request.Tools,
- ToolChoice: request.ToolChoice,
- }
- }
|