package types import "fmt" type GroupRatioInfo struct { GroupRatio float64 GroupSpecialRatio float64 HasSpecialRatio 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 VideoRatio float64 VideoCompletionRatio float64 // VideoOutputTokens is the estimated token count for the generated video, // computed by the video task pricing path as duration*W*H*fps/1024. // 0 means the request is not a video token-billed call. VideoOutputTokens int // VideoInputTextTokens is the rough token count of the prompt accompanying // the video request (used by the video token-billing branch only). VideoInputTextTokens int OtherRatios map[string]float64 UsePrice bool // ChannelPriceDiscount 非 nil 时,表示渠道成本折扣(百分数,100=不乘),用于日志展示 ChannelPriceDiscount *float64 Quota int // 按次计费的最终额度(MJ / Task) QuotaToPreConsume int // 按量计费的预消耗额度 GroupRatioInfo GroupRatioInfo // 新计费公式所需字段 // CostDiscountPercent 成本折扣率百分数(price_discount_percent),如 90 表示 90%,默认 100 CostDiscountPercent float64 // MarkupDiscountPercent 加价折扣率百分数(markup_discount_rate),如 5 表示 5%,默认 0 MarkupDiscountPercent float64 // GlobalModelRatio 全局模型输入倍率(不含渠道/分组覆盖),用于新计费公式加价部分 GlobalModelRatio float64 // GlobalModelPrice 全局模型固定价格(USD,不含渠道/分组覆盖),用于固定价新计费公式 GlobalModelPrice float64 // GlobalCompletionRatio 全局模型输出倍率,用于输出侧加价计算 // 新公式输出加价部分 = globalMr × GlobalCompletionRatio × markupRate% GlobalCompletionRatio float64 // GlobalCacheRatio 全局缓存读取倍率,用于缓存读取侧加价计算 // 新公式缓存读取加价部分 = globalMr × GlobalCacheRatio × markupRate% GlobalCacheRatio float64 // GlobalCreateCacheRatio 全局缓存创建倍率,用于缓存写入侧加价计算 // 新公式缓存创建加价部分 = globalMr × GlobalCreateCacheRatio × markupRate% GlobalCreateCacheRatio float64 } 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 { if p == nil { return "PriceData: " } chdStr := "unset" if p.ChannelPriceDiscount != nil { chdStr = fmt.Sprintf("%f", *p.ChannelPriceDiscount) } 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, VideoRatio: %f, VideoCompletionRatio: %f, ChannelPriceDiscount(%%): %s", 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.VideoRatio, p.VideoCompletionRatio, chdStr) }