mirror of
https://github.com/woodchen-ink/aimodels-prices.git
synced 2025-07-18 05:32:00 +08:00
优化模型数据处理逻辑,增强黑名单检查机制
- 在 UpdateOtherPrices 函数中新增对模型名称的特殊标记检查,跳过包含":free"或":extended"的模型 - 增强黑名单匹配过程的日志记录,提供更详细的调试信息 - 移除冗余的模型数据映射逻辑,简化数据处理流程,提高代码可读性和性能
This commit is contained in:
parent
eb9e069f76
commit
611938ec2d
@ -29,10 +29,10 @@ var blacklist = []string{
|
|||||||
"o3-mini-high",
|
"o3-mini-high",
|
||||||
"claude-instant",
|
"claude-instant",
|
||||||
"claude-1",
|
"claude-1",
|
||||||
|
"claude-2",
|
||||||
"claude-3-haiku",
|
"claude-3-haiku",
|
||||||
"claude-3-opus",
|
"claude-3-opus",
|
||||||
"claude-3-sonnet",
|
"claude-3-sonnet",
|
||||||
":extended",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -60,68 +60,28 @@ func UpdateOtherPrices() error {
|
|||||||
processedCount := 0
|
processedCount := 0
|
||||||
skippedCount := 0
|
skippedCount := 0
|
||||||
|
|
||||||
// 创建一个映射,用于按作者和模型名称存储模型数据
|
// 创建一个集合用于跟踪已处理的模型,避免重复
|
||||||
// 键:作者/模型名称基础部分
|
processedModels := make(map[string]bool)
|
||||||
// 值:带有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
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建一个集合用于跟踪已处理的模型,避免重复
|
|
||||||
processedModels := make(map[string]bool)
|
|
||||||
|
|
||||||
// 第二遍遍历,根据处理规则选择合适的模型数据
|
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提取模型名称
|
|
||||||
parts := strings.Split(modelData.Slug, "/")
|
|
||||||
modelName := strings.Split(parts[1], ":")[0] // 移除":free"后缀
|
|
||||||
author := parts[0]
|
author := parts[0]
|
||||||
|
modelName := parts[1]
|
||||||
|
|
||||||
|
// 直接跳过包含":free"或":extended"的模型
|
||||||
|
if strings.Contains(modelName, ":free") || strings.Contains(modelName, ":extended") {
|
||||||
|
log.Printf("跳过带特殊标记的模型: %s", modelData.Slug)
|
||||||
|
skippedCount++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// 检查是否在黑名单中
|
// 检查是否在黑名单中
|
||||||
if isInBlacklist(modelName) {
|
if isInBlacklist(modelName) {
|
||||||
@ -154,7 +114,7 @@ func UpdateOtherPrices() error {
|
|||||||
modelName = "claude-3-5" + suffix
|
modelName = "claude-3-5" + suffix
|
||||||
log.Printf("修正Claude模型名称: %s -> %s", parts[1], modelName)
|
log.Printf("修正Claude模型名称: %s -> %s", parts[1], modelName)
|
||||||
}
|
}
|
||||||
|
// 处理claude-3.7-sonnet系列模型名称
|
||||||
if strings.HasPrefix(modelName, "claude-3.7") {
|
if strings.HasPrefix(modelName, "claude-3.7") {
|
||||||
suffix := strings.TrimPrefix(modelName, "claude-3.7")
|
suffix := strings.TrimPrefix(modelName, "claude-3.7")
|
||||||
modelName = "claude-3-7" + suffix
|
modelName = "claude-3-7" + suffix
|
||||||
@ -305,10 +265,27 @@ func fetchOpenRouterData() (*OpenRouterResponse, error) {
|
|||||||
// isInBlacklist 检查模型名称是否在黑名单中
|
// isInBlacklist 检查模型名称是否在黑名单中
|
||||||
func isInBlacklist(modelName string) bool {
|
func isInBlacklist(modelName string) bool {
|
||||||
modelNameLower := strings.ToLower(modelName)
|
modelNameLower := strings.ToLower(modelName)
|
||||||
|
|
||||||
|
// 记录黑名单匹配过程
|
||||||
|
log.Printf("检查模型是否在黑名单中: %s", modelNameLower)
|
||||||
|
|
||||||
for _, blacklistItem := range blacklist {
|
for _, blacklistItem := range blacklist {
|
||||||
if strings.Contains(modelNameLower, blacklistItem) {
|
blacklistItemLower := strings.ToLower(blacklistItem)
|
||||||
|
|
||||||
|
// 1. 完全匹配 - 模型名称与黑名单项完全相同
|
||||||
|
if modelNameLower == blacklistItemLower {
|
||||||
|
log.Printf("模型【%s】完全匹配黑名单项【%s】", modelNameLower, blacklistItemLower)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 包含匹配 - 模型名称中包含黑名单项
|
||||||
|
if strings.Contains(modelNameLower, blacklistItemLower) {
|
||||||
|
log.Printf("模型【%s】包含黑名单项【%s】", modelNameLower, blacklistItemLower)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 记录未匹配的情况
|
||||||
|
log.Printf("模型【%s】不在黑名单中", modelNameLower)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user