relay-zhipu_v4.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package zhipu_4v
  2. import (
  3. "strings"
  4. "github.com/QuantumNous/new-api/dto"
  5. )
  6. func requestOpenAI2Zhipu(request dto.GeneralOpenAIRequest) *dto.GeneralOpenAIRequest {
  7. messages := make([]dto.Message, 0, len(request.Messages))
  8. for _, message := range request.Messages {
  9. if !message.IsStringContent() {
  10. mediaMessages := message.ParseContent()
  11. for j, mediaMessage := range mediaMessages {
  12. if mediaMessage.Type == dto.ContentTypeImageURL {
  13. imageUrl := mediaMessage.GetImageMedia()
  14. // check if base64
  15. if strings.HasPrefix(imageUrl.Url, "data:image/") {
  16. // 去除base64数据的URL前缀(如果有)
  17. if idx := strings.Index(imageUrl.Url, ","); idx != -1 {
  18. imageUrl.Url = imageUrl.Url[idx+1:]
  19. }
  20. }
  21. mediaMessage.ImageUrl = imageUrl
  22. mediaMessages[j] = mediaMessage
  23. }
  24. }
  25. message.SetMediaContent(mediaMessages)
  26. }
  27. messages = append(messages, dto.Message{
  28. Role: message.Role,
  29. Content: message.Content,
  30. ToolCalls: message.ToolCalls,
  31. ToolCallId: message.ToolCallId,
  32. })
  33. }
  34. str, ok := request.Stop.(string)
  35. var Stop []string
  36. if ok {
  37. Stop = []string{str}
  38. } else {
  39. Stop, _ = request.Stop.([]string)
  40. }
  41. out := &dto.GeneralOpenAIRequest{
  42. Model: request.Model,
  43. Stream: request.Stream,
  44. Messages: messages,
  45. Temperature: request.Temperature,
  46. TopP: request.TopP,
  47. Stop: Stop,
  48. Tools: request.Tools,
  49. ToolChoice: request.ToolChoice,
  50. THINKING: request.THINKING,
  51. }
  52. if request.MaxTokens != nil || request.MaxCompletionTokens != nil {
  53. maxTokens := request.GetMaxTokens()
  54. out.MaxTokens = &maxTokens
  55. }
  56. return out
  57. }