mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-16 07:33:06 +08:00
- custom-voices endpoint 改由匹配到的路由模板推导(c.FullPath())。 原实现按请求 URL 字面后缀判 /audio,voice_id 恰为 "audio" 时 GET /custom-voices/audio 会被改写成 custom-voices/audio/audio, 把档案查询变成音频下载。补 voice_id="audio" 的路由推导测试。 - NormalizeVideoModelPrices 不再把无法识别的分辨率静默折算成 480p: 新增 LookupVideoBillingResolution 报告未知档位,配置解析路径丢弃并告警, 运行时计费仍走 OrDefault 兜底。model/tier 两层遍历改为排序遍历, 多个别名收敛到同一 family 时结果不再随 Go map 顺序漂移,冲突单价告警。 - grok free quota 软门禁缓存新增过期淘汰。条目按 account_id 键控且只写不删, 账号下线后会驻留至进程结束;淘汰只挂在已受 TTL 约束的查询路径上, 不影响缓存命中热路径。 - 迁移 220 清空非 Grok 分组视频价前先落快照表 groups_video_price_backup_220, 原 UPDATE 不可回滚。 - 简化 grok_search_count 两处等价冗余的事件类型分支。
58 lines
2.1 KiB
Go
58 lines
2.1 KiB
Go
package service
|
|
|
|
import "strings"
|
|
|
|
const (
|
|
VideoBillingResolution480P = "480p"
|
|
VideoBillingResolution720P = "720p"
|
|
VideoBillingResolution1080P = "1080p"
|
|
)
|
|
|
|
// xAI 视频生成按秒计费,duration 请求参数允许 1-15 秒;未指定时上游默认生成 8 秒。
|
|
// 计费时长必须与上游实际消耗对齐,否则用户可通过拉长 duration 套利(提交时长由用户控制)。
|
|
const (
|
|
VideoBillingMinDurationSeconds = 1
|
|
VideoBillingMaxDurationSeconds = 15
|
|
VideoBillingDefaultDurationSeconds = 8
|
|
)
|
|
|
|
// NormalizeVideoBillingDurationSecondsOrDefault 归一化计费用视频时长:
|
|
// 未指定(<=0)按上游默认 8 秒计,超出上游允许区间按边界收敛。
|
|
func NormalizeVideoBillingDurationSecondsOrDefault(durationSeconds int) int {
|
|
if durationSeconds <= 0 {
|
|
return VideoBillingDefaultDurationSeconds
|
|
}
|
|
if durationSeconds < VideoBillingMinDurationSeconds {
|
|
return VideoBillingMinDurationSeconds
|
|
}
|
|
if durationSeconds > VideoBillingMaxDurationSeconds {
|
|
return VideoBillingMaxDurationSeconds
|
|
}
|
|
return durationSeconds
|
|
}
|
|
|
|
// LookupVideoBillingResolution 归一化分辨率并报告是否为已知档位。
|
|
// 配置解析路径必须用它而不是 OrDefault:把无法识别的档位(如 "4k"、拼错的
|
|
// "1080i")静默折算成 480p,会让管理员配的高分辨率单价被挂到低分辨率档上。
|
|
func LookupVideoBillingResolution(resolution string) (string, bool) {
|
|
switch strings.ToLower(strings.TrimSpace(resolution)) {
|
|
case "480", "480p", "sd":
|
|
return VideoBillingResolution480P, true
|
|
case "720", "720p", "hd":
|
|
return VideoBillingResolution720P, true
|
|
case "1080", "1080p", "full_hd", "full-hd", "fhd":
|
|
return VideoBillingResolution1080P, true
|
|
default:
|
|
return "", false
|
|
}
|
|
}
|
|
|
|
// NormalizeVideoBillingResolutionOrDefault 用于运行时计费:上游回传的分辨率
|
|
// 缺失或无法识别时按最低档兜底,保证请求仍可计费。
|
|
func NormalizeVideoBillingResolutionOrDefault(resolution string) string {
|
|
if normalized, ok := LookupVideoBillingResolution(resolution); ok {
|
|
return normalized
|
|
}
|
|
return VideoBillingResolution480P
|
|
}
|