fix(models): Resolve case sensitivity issue with model names (#7595)

* fix(models): 修复模型名称大小写敏感问题

确保在检查支持的禁用生成模型时,将模型名称统一转换为小写进行比较

* feat(utils): 添加获取小写基础模型名称的函数

新增 getLowerBaseModelName 函数,用于从模型ID中提取基础名称并转换为小写
替换多处直接调用 getBaseModelName().toLowerCase() 的代码,提高代码复用性
This commit is contained in:
Wang Jiyuan 2025-06-27 13:45:15 +08:00 committed by GitHub
parent 093d04c386
commit a6b53457b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 48 additions and 5 deletions

View File

@ -145,7 +145,7 @@ import YoudaoLogo from '@renderer/assets/images/providers/netease-youdao.svg'
import NomicLogo from '@renderer/assets/images/providers/nomic.png'
import { getProviderByModel } from '@renderer/services/AssistantService'
import { Model } from '@renderer/types'
import { getBaseModelName } from '@renderer/utils'
import { getLowerBaseModelName } from '@renderer/utils'
import OpenAI from 'openai'
import { WEB_SEARCH_PROMPT_FOR_OPENROUTER } from './prompts'
@ -2503,7 +2503,7 @@ export function isSupportedThinkingTokenQwenModel(model?: Model): boolean {
return false
}
const baseName = getBaseModelName(model.id, '/').toLowerCase()
const baseName = getLowerBaseModelName(model.id, '/')
return (
baseName.startsWith('qwen3') ||
@ -2616,7 +2616,7 @@ export function isWebSearchModel(model: Model): boolean {
return false
}
const baseName = getBaseModelName(model.id, '/').toLowerCase()
const baseName = getLowerBaseModelName(model.id, '/')
// 不管哪个供应商都判断了
if (model.id.includes('claude')) {
@ -2710,7 +2710,7 @@ export function isGenerateImageModel(model: Model): boolean {
return false
}
const baseName = getBaseModelName(model.id, '/').toLowerCase()
const baseName = getLowerBaseModelName(model.id, '/')
if (GENERATE_IMAGE_MODELS.includes(baseName)) {
return true
}
@ -2722,7 +2722,7 @@ export function isSupportedDisableGenerationModel(model: Model): boolean {
return false
}
return SUPPORTED_DISABLE_GENERATION_MODELS.includes(getBaseModelName(model.id))
return SUPPORTED_DISABLE_GENERATION_MODELS.includes(getLowerBaseModelName(model.id))
}
export function getOpenAIWebSearchParams(model: Model, isEnableWebSearch?: boolean): Record<string, any> {

View File

@ -8,6 +8,7 @@ import {
getDefaultGroupName,
getFirstCharacter,
getLeadingEmoji,
getLowerBaseModelName,
isEmoji,
removeLeadingEmoji,
removeSpecialCharactersForTopicName
@ -190,6 +191,35 @@ describe('naming', () => {
})
})
describe('getLowerBaseModelName', () => {
it('should convert base model name to lowercase', () => {
// 验证将基础模型名称转换为小写
expect(getLowerBaseModelName('DeepSeek/DeepSeek-R1')).toBe('deepseek-r1')
expect(getLowerBaseModelName('openai/GPT-4.1')).toBe('gpt-4.1')
expect(getLowerBaseModelName('Anthropic/Claude-3.5-Sonnet')).toBe('claude-3.5-sonnet')
})
it('should handle multiple levels of paths', () => {
// 验证处理多层路径
expect(getLowerBaseModelName('Pro/DeepSeek-AI/DeepSeek-R1')).toBe('deepseek-r1')
expect(getLowerBaseModelName('Org/Team/Group/Model')).toBe('model')
})
it('should return lowercase original id if no delimiter found', () => {
// 验证没有分隔符时返回小写原始ID
expect(getLowerBaseModelName('DeepSeek-R1')).toBe('deepseek-r1')
expect(getLowerBaseModelName('GPT-4:Free')).toBe('gpt-4:free')
})
it('should handle edge cases', () => {
// 验证边缘情况
expect(getLowerBaseModelName('')).toBe('')
expect(getLowerBaseModelName('Model/')).toBe('')
expect(getLowerBaseModelName('/Model')).toBe('model')
expect(getLowerBaseModelName('Model//Name')).toBe('name')
})
})
describe('generateColorFromChar', () => {
it('should generate a valid hex color code', () => {
// 验证生成有效的十六进制颜色代码

View File

@ -60,6 +60,19 @@ export const getBaseModelName = (id: string, delimiter: string = '/'): string =>
return parts[parts.length - 1]
}
/**
* ID
*
* - 'deepseek/DeepSeek-R1' => 'deepseek-r1'
* - 'deepseek-ai/deepseek/DeepSeek-R1' => 'deepseek-r1'
* @param {string} id ID
* @param {string} [delimiter='/'] '/'
* @returns {string}
*/
export const getLowerBaseModelName = (id: string, delimiter: string = '/'): string => {
return getBaseModelName(id, delimiter).toLowerCase()
}
/**
* avatar
* @param {string} str