Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

70 строки
2.5 KiB

  1. package types
  2. import "fmt"
  3. // ClaudeCacheCreation1hMultiplier 1小时缓存写入价格相对于5分钟的比例
  4. // https://docs.claude.com/en/docs/build-with-claude/prompt-caching#1-hour-cache-duration
  5. const ClaudeCacheCreation1hMultiplier = 6 / 3.75
  6. type GroupRatioInfo struct {
  7. GroupRatio float64
  8. GroupSpecialRatio float64
  9. HasSpecialRatio bool
  10. }
  11. type PriceData struct {
  12. FreeModel bool
  13. ModelPrice float64
  14. ModelRatio float64
  15. CompletionRatio float64
  16. CacheRatio float64
  17. CacheCreationRatio float64
  18. CacheCreation5mRatio float64
  19. CacheCreation1hRatio float64
  20. ImageRatio float64
  21. AudioRatio float64
  22. AudioCompletionRatio float64
  23. OtherRatios map[string]float64
  24. UsePrice bool
  25. Quota int // 按次计费的最终额度(MJ / Task)
  26. QuotaToPreConsume int // 按量计费的预消耗额度
  27. GroupRatioInfo GroupRatioInfo
  28. UserChannelRatio float64 // 用户-模型-渠道倍率(默认 1.0)
  29. }
  30. // ApplyChannelPricingRatios 将渠道定价的扩展比率应用到 PriceData(非零值覆盖)
  31. // cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio
  32. func (p *PriceData) ApplyChannelPricingRatios(cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio float64) {
  33. if cacheRatio != 0 {
  34. p.CacheRatio = cacheRatio
  35. }
  36. if cacheCreationRatio != 0 {
  37. p.CacheCreationRatio = cacheCreationRatio
  38. p.CacheCreation5mRatio = cacheCreationRatio
  39. p.CacheCreation1hRatio = cacheCreationRatio * ClaudeCacheCreation1hMultiplier
  40. }
  41. if imageRatio != 0 {
  42. p.ImageRatio = imageRatio
  43. }
  44. if audioRatio != 0 {
  45. p.AudioRatio = audioRatio
  46. }
  47. if audioCompletionRatio != 0 {
  48. p.AudioCompletionRatio = audioCompletionRatio
  49. }
  50. }
  51. func (p *PriceData) AddOtherRatio(key string, ratio float64) {
  52. if p.OtherRatios == nil {
  53. p.OtherRatios = make(map[string]float64)
  54. }
  55. if ratio <= 0 {
  56. return
  57. }
  58. p.OtherRatios[key] = ratio
  59. }
  60. func (p *PriceData) ToSetting() string {
  61. return fmt.Sprintf("ModelPrice: %f, ModelRatio: %f, CompletionRatio: %f, CacheRatio: %f, GroupRatio: %f, UsePrice: %t, CacheCreationRatio: %f, CacheCreation5mRatio: %f, CacheCreation1hRatio: %f, QuotaToPreConsume: %d, ImageRatio: %f, AudioRatio: %f, AudioCompletionRatio: %f, UserChannelRatio: %f", p.ModelPrice, p.ModelRatio, p.CompletionRatio, p.CacheRatio, p.GroupRatioInfo.GroupRatio, p.UsePrice, p.CacheCreationRatio, p.CacheCreation5mRatio, p.CacheCreation1hRatio, p.QuotaToPreConsume, p.ImageRatio, p.AudioRatio, p.AudioCompletionRatio, p.UserChannelRatio)
  62. }