|
- package types
-
- import "fmt"
-
- // ClaudeCacheCreation1hMultiplier is the 1-hour cache write price multiplier
- // relative to the 5-minute cache write price.
- // https://docs.claude.com/en/docs/build-with-claude/prompt-caching#1-hour-cache-duration
- const ClaudeCacheCreation1hMultiplier = 6 / 3.75
-
- type GroupRatioInfo struct {
- GroupRatio float64
- GroupSpecialRatio float64
- HasSpecialRatio bool
- }
-
- type PricingMode string
-
- const (
- PricingModeMatched PricingMode = "matched"
- PricingModeFallbackMax PricingMode = "fallback_max"
- PricingModeFallbackDefault PricingMode = "fallback_default"
- PricingModeLegacy PricingMode = "legacy"
- PricingModeRemix PricingMode = "remix"
- )
-
- type PricingDecision struct {
- Mode PricingMode
- BillingMode string
- BillingUnit string
- PriceUSD float64
- TokenUnitPriceUSD float64
- Quota int
- GroupRatioInfo GroupRatioInfo
- Snapshot map[string]any
- FreeModel bool
- LegacyModelPrice float64
- OtherRatios map[string]float64
- UsePrice bool
- PerCallBilling bool
- Finalized bool
- }
-
- type PriceData struct {
- FreeModel bool
- ModelPrice float64
- ModelRatio float64
- CompletionRatio float64
- CacheRatio float64
- CacheCreationRatio float64
- CacheCreation5mRatio float64
- CacheCreation1hRatio float64
- ImageRatio float64
- AudioRatio float64
- AudioCompletionRatio float64
- OtherRatios map[string]float64
- UsePrice bool
- Quota int
- QuotaToPreConsume int
- GroupRatioInfo GroupRatioInfo
- PricingDecision *PricingDecision
- }
-
- // ApplyChannelPricingRatios applies channel-level pricing ratios when the
- // channel value is non-zero.
- func (p *PriceData) ApplyChannelPricingRatios(cacheRatio, cacheCreationRatio, imageRatio, audioRatio, audioCompletionRatio float64) {
- if cacheRatio != 0 {
- p.CacheRatio = cacheRatio
- }
- if cacheCreationRatio != 0 {
- p.CacheCreationRatio = cacheCreationRatio
- p.CacheCreation5mRatio = cacheCreationRatio
- p.CacheCreation1hRatio = cacheCreationRatio * ClaudeCacheCreation1hMultiplier
- }
- if imageRatio != 0 {
- p.ImageRatio = imageRatio
- }
- if audioRatio != 0 {
- p.AudioRatio = audioRatio
- }
- if audioCompletionRatio != 0 {
- p.AudioCompletionRatio = audioCompletionRatio
- }
- }
-
- func (p *PriceData) AddOtherRatio(key string, ratio float64) {
- if p.OtherRatios == nil {
- p.OtherRatios = make(map[string]float64)
- }
- if ratio <= 0 {
- return
- }
- p.OtherRatios[key] = ratio
- }
-
- func (p *PriceData) ToSetting() string {
- 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)
- }
|