Merge pull request #966 from TyrantLucifer/fix-cluade-opus-limit

fix: update the claude model limit logic
This commit is contained in:
Wesley Liddick
2026-02-10 19:15:41 +08:00
committed by GitHub
4 changed files with 23 additions and 6 deletions

View File

@@ -9,7 +9,7 @@ const ClientValidator = require('../validators/clientValidator')
const ClaudeCodeValidator = require('../validators/clients/claudeCodeValidator')
const claudeRelayConfigService = require('../services/claudeRelayConfigService')
const { calculateWaitTimeStats } = require('../utils/statsHelper')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
const { isOpusModel } = require('../utils/modelHelper')
// 工具函数
function sleep(ms) {
@@ -1256,7 +1256,7 @@ const authenticateApiKey = async (req, res, next) => {
const model = requestBody.model || ''
// 判断是否为 Claude 模型
if (isClaudeFamilyModel(model)) {
if (isOpusModel(model)) {
const weeklyOpusCost = validation.keyData.weeklyOpusCost || 0
if (weeklyOpusCost >= weeklyOpusCostLimit) {

View File

@@ -4,7 +4,7 @@ const config = require('../../config/config')
const redis = require('../models/redis')
const logger = require('../utils/logger')
const serviceRatesService = require('./serviceRatesService')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
const { isOpusModel } = require('../utils/modelHelper')
const ACCOUNT_TYPE_CONFIG = {
claude: { prefix: 'claude:account:' },
@@ -1649,7 +1649,7 @@ class ApiKeyService {
async recordOpusCost(keyId, ratedCost, realCost, model, accountType) {
try {
// 判断是否为 Claude 系列模型(包含 Bedrock 格式等)
if (!isClaudeFamilyModel(model)) {
if (!isOpusModel(model)) {
return
}

View File

@@ -2,7 +2,7 @@ const redis = require('../models/redis')
const logger = require('../utils/logger')
const pricingService = require('./pricingService')
const serviceRatesService = require('./serviceRatesService')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
const { isOpusModel } = require('../utils/modelHelper')
function pad2(n) {
return String(n).padStart(2, '0')
@@ -151,7 +151,7 @@ class WeeklyClaudeCostInitService {
}
const keyId = match[1]
const model = match[2]
if (!isClaudeFamilyModel(model)) {
if (!isOpusModel(model)) {
continue
}
matchedClaudeKeys++

View File

@@ -188,6 +188,22 @@ function isOpus45OrNewer(modelName) {
return false
}
/**
* 判断是否为 Opus 模型(任意版本)
* 匹配所有包含 "opus" 关键词的 Claude 模型
*/
function isOpusModel(modelName) {
if (!modelName || typeof modelName !== 'string') {
return false
}
const { baseModel } = parseVendorPrefixedModel(modelName)
const m = (baseModel || '').trim().toLowerCase()
if (!m) {
return false
}
return m.includes('opus')
}
/**
* 判断某个 model 名称是否属于 Anthropic Claude 系列模型。
*
@@ -237,5 +253,6 @@ module.exports = {
getEffectiveModel,
getVendorType,
isOpus45OrNewer,
isOpusModel,
isClaudeFamilyModel
}