优化模型数据处理逻辑,增加模型数据分类和选择机制

- 在 UpdateOtherPrices 函数中新增模型数据映射,按作者和模型名称分类整理模型数据
- 实现优先选择非free版本的逻辑,确保处理模型数据的准确性
- 增强代码可读性,修复部分逻辑问题,提升整体性能
This commit is contained in:
wood chen 2025-03-18 02:33:21 +08:00
parent 75d62d978a
commit 92889df8b0

View File

@ -59,18 +59,66 @@ func UpdateOtherPrices() error {
// 处理每个模型的价格数据 // 处理每个模型的价格数据
processedCount := 0 processedCount := 0
skippedCount := 0 skippedCount := 0
// 创建一个映射,用于按作者和模型名称存储模型数据
// 键:作者/模型名称基础部分
// 值带有free标识和不带free标识的模型数据
modelDataMap := make(map[string]map[bool]*ModelData)
// 第一遍遍历,分类整理模型数据
for _, modelData := range resp.Data { for _, modelData := range resp.Data {
// 提取模型名称slug中/后面的部分) // 提取模型名称slug中/后面的部分)
parts := strings.Split(modelData.Slug, "/") parts := strings.Split(modelData.Slug, "/")
if len(parts) < 2 { if len(parts) < 2 {
log.Printf("跳过无效的模型名称: %s", modelData.Slug) log.Printf("跳过无效的模型名称: %s", modelData.Slug)
continue
}
author := parts[0]
fullModelName := parts[1]
// 判断是否带有":free"后缀
isFree := strings.HasSuffix(fullModelName, ":free")
// 提取基础模型名称(不带":free"后缀)
baseModelName := fullModelName
if isFree {
baseModelName = strings.TrimSuffix(fullModelName, ":free")
}
// 创建模型的唯一键
modelKey := author + "/" + baseModelName
// 如果需要,为这个模型键初始化一个条目
if _, exists := modelDataMap[modelKey]; !exists {
modelDataMap[modelKey] = make(map[bool]*ModelData)
}
// 存储模型数据
modelDataMap[modelKey][isFree] = &modelData
}
// 第二遍遍历,根据处理规则选择合适的模型数据
for modelKey, variants := range modelDataMap {
var modelData *ModelData
// 优先选择非free版本
if nonFreeData, hasNonFree := variants[false]; hasNonFree {
modelData = nonFreeData
} else if freeData, hasFree := variants[true]; hasFree {
// 如果只有free版本则使用free版本
modelData = freeData
} else {
// 不应该发生,但为了安全
log.Printf("处理模型数据异常: %s", modelKey)
skippedCount++ skippedCount++
continue continue
} }
// 获取模型名称并去除":free"后缀 // 提取模型名称
modelName := parts[1] parts := strings.Split(modelData.Slug, "/")
modelName = strings.Split(modelName, ":")[0] modelName := strings.Split(parts[1], ":")[0] // 移除":free"后缀
author := parts[0]
// 检查是否在黑名单中 // 检查是否在黑名单中
if isInBlacklist(modelName) { if isInBlacklist(modelName) {
@ -79,9 +127,6 @@ func UpdateOtherPrices() error {
continue continue
} }
// 获取作者名称
author := parts[0]
// 检查是否支持的厂商 // 检查是否支持的厂商
channelType, ok := authorToChannelType[author] channelType, ok := authorToChannelType[author]
if !ok { if !ok {