edits.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package controller
  2. import (
  3. "fmt"
  4. "strconv"
  5. "github.com/gin-gonic/gin"
  6. "github.com/labring/aiproxy/core/model"
  7. "github.com/labring/aiproxy/core/relay/adaptor/openai"
  8. )
  9. func GetImagesEditsRequestPrice(c *gin.Context, mc model.ModelConfig) (model.Price, error) {
  10. size := c.PostForm("size")
  11. quality := c.PostForm("quality")
  12. imageCostPrice, ok := GetImagesOutputPrice(mc, size, quality)
  13. if !ok {
  14. return model.Price{}, fmt.Errorf("invalid image size `%s` or quality `%s`", size, quality)
  15. }
  16. return model.Price{
  17. PerRequestPrice: mc.Price.PerRequestPrice,
  18. InputPrice: mc.Price.InputPrice,
  19. InputPriceUnit: mc.Price.InputPriceUnit,
  20. ImageInputPrice: mc.Price.ImageInputPrice,
  21. ImageInputPriceUnit: mc.Price.ImageInputPriceUnit,
  22. OutputPrice: model.ZeroNullFloat64(imageCostPrice),
  23. OutputPriceUnit: mc.Price.OutputPriceUnit,
  24. }, nil
  25. }
  26. func GetImagesEditsRequestUsage(c *gin.Context, mc model.ModelConfig) (model.Usage, error) {
  27. mutliForms, err := c.MultipartForm()
  28. if err != nil {
  29. return model.Usage{}, err
  30. }
  31. images := int64(len(mutliForms.File["image"]))
  32. prompt := c.PostForm("prompt")
  33. nStr := c.PostForm("n")
  34. n := 1
  35. if nStr != "" {
  36. n, err = strconv.Atoi(nStr)
  37. if err != nil {
  38. return model.Usage{}, err
  39. }
  40. }
  41. return model.Usage{
  42. InputTokens: model.ZeroNullInt64(openai.CountTokenInput(
  43. prompt,
  44. mc.Model,
  45. )),
  46. ImageInputTokens: model.ZeroNullInt64(images),
  47. OutputTokens: model.ZeroNullInt64(n),
  48. }, nil
  49. }