From 12cb841a64ec54d0384dcde53b444d6cf3f988fa Mon Sep 17 00:00:00 2001 From: lusipad Date: Fri, 5 Dec 2025 07:56:53 +0800 Subject: [PATCH] refactor: address Copilot review feedback - Import isOpus45OrNewer from modelHelper instead of duplicating code - Remove invalid 'claude_free' check (only 'free' is used in practice) --- scripts/test-official-models.js | 88 +------------------------- src/services/claudeAccountService.js | 4 +- src/services/unifiedClaudeScheduler.js | 2 +- 3 files changed, 4 insertions(+), 90 deletions(-) diff --git a/scripts/test-official-models.js b/scripts/test-official-models.js index f7046e5b..d87953fa 100644 --- a/scripts/test-official-models.js +++ b/scripts/test-official-models.js @@ -3,93 +3,7 @@ * 官方模型版本识别测试 - 最终版 v2 */ -/** - * 检查模型是否为 Opus 4.5 或更新版本 - * 支持格式: - * - 新格式: claude-opus-{major}[-{minor}][-date] 如 claude-opus-4-5-20251101 - * - 新格式: claude-opus-{major}.{minor} 如 claude-opus-4.5 - * - 旧格式: claude-{version}-opus[-date] 如 claude-3-opus-20240229 - * - * @param {string} modelName - 模型名称 - * @returns {boolean} - 是否为 Opus 4.5+ - */ -function isOpus45OrNewer(modelName) { - if (!modelName) { - return false - } - - const lowerModel = modelName.toLowerCase() - if (!lowerModel.includes('opus')) { - return false - } - - // 处理 latest 特殊情况 - if (lowerModel.includes('opus-latest') || lowerModel.includes('opus_latest')) { - return true - } - - // 旧格式: claude-{version}-opus (版本在 opus 前面) - // 例如: claude-3-opus-20240229, claude-3.5-opus - const oldFormatMatch = lowerModel.match(/claude[- ](\d+)(?:[.-](\d+))?[- ]opus/) - if (oldFormatMatch) { - const majorVersion = parseInt(oldFormatMatch[1], 10) - const minorVersion = oldFormatMatch[2] ? parseInt(oldFormatMatch[2], 10) : 0 - - // 旧格式的版本号指的是 Claude 大版本 - if (majorVersion > 4) { - return true - } - if (majorVersion === 4 && minorVersion >= 5) { - return true - } - return false - } - - // 新格式 1: opus-{major}.{minor} (点分隔) - // 例如: claude-opus-4.5, opus-4.5 - const dotFormatMatch = lowerModel.match(/opus[- ]?(\d+)\.(\d+)/) - if (dotFormatMatch) { - const majorVersion = parseInt(dotFormatMatch[1], 10) - const minorVersion = parseInt(dotFormatMatch[2], 10) - - if (majorVersion > 4) { - return true - } - if (majorVersion === 4 && minorVersion >= 5) { - return true - } - return false - } - - // 新格式 2: opus-{major}[-{minor}][-date] (横线分隔) - // 例如: claude-opus-4-5-20251101, claude-opus-4-20250514, claude-opus-4-1-20250805 - // 关键:小版本号必须是 1 位数字,且后面紧跟 8 位日期或结束 - // 如果 opus-{major} 后面直接是 8 位日期,则没有小版本号 - - // 提取 opus 后面的部分 - const opusIndex = lowerModel.indexOf('opus') - const afterOpus = lowerModel.substring(opusIndex + 4) // 'opus' 后面的内容 - - // 尝试匹配: -{major}-{minor}-{date} 或 -{major}-{date} 或 -{major} - // 小版本号只能是 1 位数字 (如 1, 5),不会是 2 位以上 - const versionMatch = afterOpus.match(/^[- ](\d+)(?:[- ](\d)(?=[- ]\d{8}|$))?/) - - if (versionMatch) { - const majorVersion = parseInt(versionMatch[1], 10) - const minorVersion = versionMatch[2] ? parseInt(versionMatch[2], 10) : 0 - - if (majorVersion > 4) { - return true - } - if (majorVersion === 4 && minorVersion >= 5) { - return true - } - return false - } - - // 其他包含 opus 但无法解析版本的情况,默认认为是旧版本 - return false -} +const { isOpus45OrNewer } = require('../src/utils/modelHelper') // 官方模型 const officialModels = [ diff --git a/src/services/claudeAccountService.js b/src/services/claudeAccountService.js index ec06e0ea..9b00958b 100644 --- a/src/services/claudeAccountService.js +++ b/src/services/claudeAccountService.js @@ -863,7 +863,7 @@ class ClaudeAccountService { const info = JSON.parse(account.subscriptionInfo) // Free 账号不支持任何 Opus 模型 - if (info.accountType === 'claude_free' || info.accountType === 'free') { + if (info.accountType === 'free') { return false } @@ -992,7 +992,7 @@ class ClaudeAccountService { const info = JSON.parse(account.subscriptionInfo) // Free 账号不支持任何 Opus 模型 - if (info.accountType === 'claude_free' || info.accountType === 'free') { + if (info.accountType === 'free') { return false } diff --git a/src/services/unifiedClaudeScheduler.js b/src/services/unifiedClaudeScheduler.js index 99d81336..3a944180 100644 --- a/src/services/unifiedClaudeScheduler.js +++ b/src/services/unifiedClaudeScheduler.js @@ -58,7 +58,7 @@ class UnifiedClaudeScheduler { : account.subscriptionInfo // Free 账号不支持任何 Opus 模型 - if (info.accountType === 'claude_free' || info.accountType === 'free') { + if (info.accountType === 'free') { logger.info( `🚫 Claude account ${account.name} (Free) does not support Opus model${context ? ` ${context}` : ''}` )