Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

69 linhas
2.4 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. }
  29. // ApplyChannelPricingRatios 将渠道定价的扩展比率应用到 PriceData(非零值覆盖)
  30. // cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio
  31. func (p *PriceData) ApplyChannelPricingRatios(cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio float64) {
  32. if cacheRatio != 0 {
  33. p.CacheRatio = cacheRatio
  34. }
  35. if cacheCreationRatio != 0 {
  36. p.CacheCreationRatio = cacheCreationRatio
  37. p.CacheCreation5mRatio = cacheCreationRatio
  38. p.CacheCreation1hRatio = cacheCreationRatio * ClaudeCacheCreation1hMultiplier
  39. }
  40. if imageRatio != 0 {
  41. p.ImageRatio = imageRatio
  42. }
  43. if audioRatio != 0 {
  44. p.AudioRatio = audioRatio
  45. }
  46. if audioCompletionRatio != 0 {
  47. p.AudioCompletionRatio = audioCompletionRatio
  48. }
  49. }
  50. func (p *PriceData) AddOtherRatio(key string, ratio float64) {
  51. if p.OtherRatios == nil {
  52. p.OtherRatios = make(map[string]float64)
  53. }
  54. if ratio <= 0 {
  55. return
  56. }
  57. p.OtherRatios[key] = ratio
  58. }
  59. func (p *PriceData) ToSetting() string {
  60. 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", 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)
  61. }