diff --git a/consts/pricing/charge_mode.go b/consts/pricing/charge_mode.go new file mode 100644 index 0000000..75fcf36 --- /dev/null +++ b/consts/pricing/charge_mode.go @@ -0,0 +1,26 @@ +package pricing + +// ChargeMode 计费方式(全 DB 配置,代码不写死金额;新增方式在 charge_calc 计算器注册表加一项) +type ChargeMode string + +const ( + ChargeModePerItem ChargeMode = "per_item" // 按条:档位开放、上不封顶(rules.tiers + overflow) + ChargeModePerSecond ChargeMode = "per_second" // 按秒(workflow:整秒向上取整;model:精确秒) + ChargeModePerToken ChargeMode = "per_token" // 按token(workflow 结算时按各模型 subject 实时价) + ChargeModePer1K ChargeMode = "per_1K" // 每千token(模型 token 计费) + ChargeModePer1M ChargeMode = "per_1M" // 每百万token(模型 token 计费) + ChargeModePer1 ChargeMode = "per_1" // 每个/每张图(图片按张数) + ChargeModePerMinute ChargeMode = "per_minute" // 每分钟(音频时长) + ChargeModePerHour ChargeMode = "per_hour" // 每小时(音频时长) + ChargeModePerChar ChargeMode = "per_char" // 每字(音频按字数) + ChargeModePerPeriod ChargeMode = "per_period" // 周期订阅(business 按年) +) + +// ModelUnitSet model subject 允许的计费单位(spec §4.2) +var ModelUnitSet = map[ChargeMode]bool{ + ChargeModePer1K: true, ChargeModePer1M: true, ChargeModePer1: true, + ChargeModePerSecond: true, ChargeModePerMinute: true, ChargeModePerHour: true, ChargeModePerChar: true, +} + +// PeriodSet 周期允许集合(per_period,扩月/季只加值) +var PeriodSet = map[string]bool{"year": true} diff --git a/consts/pricing/subject.go b/consts/pricing/subject.go new file mode 100644 index 0000000..4f20575 --- /dev/null +++ b/consts/pricing/subject.go @@ -0,0 +1,38 @@ +package pricing + +// SubjectType 计价对象类型(固定枚举 = pricing_config 唯一键第一部分) +type SubjectType string + +const ( + SubjectTypeWorkflow SubjectType = "workflow" // 工作流(固定单主体) + SubjectTypeModel SubjectType = "model" // 模型(model-gateway 系统模型,subject_id=模型ID) + SubjectTypeBusiness SubjectType = "business" // 业务模块(固定写死列表) +) + +// WorkflowSubjectID 工作流固定 subject_id +const WorkflowSubjectID = "workflow" + +// BusinessSubject 业务模块枚举项(固定写死,新增业务模块改这里) +type BusinessSubject struct { + SubjectID string `json:"subjectId"` + Name string `json:"name"` + ChargeModes []ChargeMode `json:"chargeModes"` +} + +// BusinessSubjects 业务模块固定列表(spec §7:与「固定枚举」一致) +var BusinessSubjects = []BusinessSubject{ + {SubjectID: "ai_customer_service", Name: "AI客服", ChargeModes: []ChargeMode{ChargeModePerPeriod}}, +} + +// ModelTypeCode 模型类型编码(透传 model-gateway 枚举,管理端按此分组渲染编辑器) +type ModelTypeCode = int + +const ( + ModelTypeReasoning ModelTypeCode = 100 // 推理 + ModelTypeImage ModelTypeCode = 200 // 图片 + ModelTypeAudio ModelTypeCode = 300 // 音频 + ModelTypeVector ModelTypeCode = 400 // 向量 + ModelTypeOmni ModelTypeCode = 500 // 多模态 + ModelTypeVideo ModelTypeCode = 600 // 视频 + ModelTypeCode2 ModelTypeCode = 700 // 代码 +)