mirror of
https://github.com/woodchen-ink/aimodels-prices.git
synced 2025-07-18 13:41:59 +08:00
优化模型数据处理逻辑,增加模型数据分类和选择机制
- 在 UpdateOtherPrices 函数中新增模型数据映射,按作者和模型名称分类整理模型数据 - 实现优先选择非free版本的逻辑,确保处理模型数据的准确性 - 增强代码可读性,修复部分逻辑问题,提升整体性能
This commit is contained in:
parent
75d62d978a
commit
92889df8b0
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user