You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

98 lines
3.1 KiB

  1. package types
  2. import "fmt"
  3. // ClaudeCacheCreation1hMultiplier is the 1-hour cache write price multiplier
  4. // relative to the 5-minute cache write price.
  5. // https://docs.claude.com/en/docs/build-with-claude/prompt-caching#1-hour-cache-duration
  6. const ClaudeCacheCreation1hMultiplier = 6 / 3.75
  7. type GroupRatioInfo struct {
  8. GroupRatio float64
  9. GroupSpecialRatio float64
  10. HasSpecialRatio bool
  11. }
  12. type PricingMode string
  13. const (
  14. PricingModeMatched PricingMode = "matched"
  15. PricingModeFallbackMax PricingMode = "fallback_max"
  16. PricingModeFallbackDefault PricingMode = "fallback_default"
  17. PricingModeLegacy PricingMode = "legacy"
  18. PricingModeRemix PricingMode = "remix"
  19. )
  20. type PricingDecision struct {
  21. Mode PricingMode
  22. BillingMode string
  23. BillingUnit string
  24. PriceUSD float64
  25. TokenUnitPriceUSD float64
  26. Quota int
  27. GroupRatioInfo GroupRatioInfo
  28. Snapshot map[string]any
  29. FreeModel bool
  30. LegacyModelPrice float64
  31. OtherRatios map[string]float64
  32. UsePrice bool
  33. PerCallBilling bool
  34. Finalized bool
  35. }
  36. type PriceData struct {
  37. FreeModel bool
  38. ModelPrice float64
  39. ModelRatio float64
  40. CompletionRatio float64
  41. CacheRatio float64
  42. CacheCreationRatio float64
  43. CacheCreation5mRatio float64
  44. CacheCreation1hRatio float64
  45. ImageRatio float64
  46. AudioRatio float64
  47. AudioCompletionRatio float64
  48. OtherRatios map[string]float64
  49. UsePrice bool
  50. Quota int
  51. QuotaToPreConsume int
  52. GroupRatioInfo GroupRatioInfo
  53. PricingDecision *PricingDecision
  54. }
  55. // ApplyChannelPricingRatios applies channel-level pricing ratios when the
  56. // channel value is non-zero.
  57. func (p *PriceData) ApplyChannelPricingRatios(cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio float64) {
  58. if cacheRatio != 0 {
  59. p.CacheRatio = cacheRatio
  60. }
  61. if cacheCreationRatio != 0 {
  62. p.CacheCreationRatio = cacheCreationRatio
  63. p.CacheCreation5mRatio = cacheCreationRatio
  64. p.CacheCreation1hRatio = cacheCreationRatio * ClaudeCacheCreation1hMultiplier
  65. }
  66. if imageRatio != 0 {
  67. p.ImageRatio = imageRatio
  68. }
  69. if audioRatio != 0 {
  70. p.AudioRatio = audioRatio
  71. }
  72. if audioCompletionRatio != 0 {
  73. p.AudioCompletionRatio = audioCompletionRatio
  74. }
  75. }
  76. func (p *PriceData) AddOtherRatio(key string, ratio float64) {
  77. if p.OtherRatios == nil {
  78. p.OtherRatios = make(map[string]float64)
  79. }
  80. if ratio <= 0 {
  81. return
  82. }
  83. p.OtherRatios[key] = ratio
  84. }
  85. func (p *PriceData) ToSetting() string {
  86. 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)
  87. }