price.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package helper
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "one-api/common"
  5. relaycommon "one-api/relay/common"
  6. "one-api/setting"
  7. )
  8. type PriceData struct {
  9. ModelPrice float64
  10. ModelRatio float64
  11. GroupRatio float64
  12. UsePrice bool
  13. ShouldPreConsumedQuota int
  14. }
  15. func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens int, maxTokens int) PriceData {
  16. modelPrice, usePrice := common.GetModelPrice(info.OriginModelName, false)
  17. groupRatio := setting.GetGroupRatio(info.Group)
  18. var preConsumedQuota int
  19. var modelRatio float64
  20. if !usePrice {
  21. preConsumedTokens := common.PreConsumedQuota
  22. if maxTokens != 0 {
  23. preConsumedTokens = promptTokens + maxTokens
  24. }
  25. modelRatio = common.GetModelRatio(info.OriginModelName)
  26. ratio := modelRatio * groupRatio
  27. preConsumedQuota = int(float64(preConsumedTokens) * ratio)
  28. } else {
  29. preConsumedQuota = int(modelPrice * common.QuotaPerUnit * groupRatio)
  30. }
  31. return PriceData{
  32. ModelPrice: modelPrice,
  33. ModelRatio: modelRatio,
  34. GroupRatio: groupRatio,
  35. UsePrice: usePrice,
  36. ShouldPreConsumedQuota: preConsumedQuota,
  37. }
  38. }