image.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package siliconflow
  2. import (
  3. "bytes"
  4. "io"
  5. "net/http"
  6. "github.com/bytedance/sonic"
  7. "github.com/labring/aiproxy/core/common"
  8. "github.com/labring/aiproxy/core/relay/adaptor/openai"
  9. "github.com/labring/aiproxy/core/relay/meta"
  10. )
  11. type ImageRequest struct {
  12. Model string `json:"model"`
  13. Prompt string `json:"prompt"`
  14. NegativePrompt string `json:"negative_prompt"`
  15. ImageSize string `json:"image_size"`
  16. BatchSize int `json:"batch_size"`
  17. Seed int64 `json:"seed"`
  18. NumInferenceSteps int `json:"num_inference_steps"`
  19. GuidanceScale int `json:"guidance_scale"`
  20. PromptEnhancement bool `json:"prompt_enhancement"`
  21. }
  22. func ConvertImageRequest(meta *meta.Meta, request *http.Request) (http.Header, io.Reader, error) {
  23. var reqMap map[string]any
  24. err := common.UnmarshalRequestReusable(request, &reqMap)
  25. if err != nil {
  26. return nil, nil, err
  27. }
  28. meta.Set(openai.MetaResponseFormat, reqMap["response_format"])
  29. reqMap["model"] = meta.ActualModel
  30. reqMap["batch_size"] = reqMap["n"]
  31. delete(reqMap, "n")
  32. if _, ok := reqMap["steps"]; ok {
  33. reqMap["num_inference_steps"] = reqMap["steps"]
  34. delete(reqMap, "steps")
  35. }
  36. if _, ok := reqMap["scale"]; ok {
  37. reqMap["guidance_scale"] = reqMap["scale"]
  38. delete(reqMap, "scale")
  39. }
  40. reqMap["image_size"] = reqMap["size"]
  41. delete(reqMap, "size")
  42. data, err := sonic.Marshal(&reqMap)
  43. if err != nil {
  44. return nil, nil, err
  45. }
  46. return http.Header{}, bytes.NewReader(data), nil
  47. }