fix: 修复官方等价对比 pattern 无法匹配后端 model_name 的问题
- Pattern 改为匹配后端实际格式(如 claude-opus-4-5 而非 claude-4.5-opus) - 确保更具体的 pattern 排在前面,避免 Opus 4.5 误匹配到 Opus 4 的 $15 官方价 - 补充更多模型:GPT-4.1 Mini/Nano、Gemini Flash Lite、DeepSeek R1/V3 等 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
2109f2a7a0
commit
b27fa4df53
30 files changed
+64
-47
No files matched your search
+35
-18
@@ -1,31 +1,48 @@
|
||||
import { Q } from '../api';
|
||||
|
||||
// Official prices (input $/1M tokens) for reference models
|
||||
// Official prices (input $/1M tokens) for reference models.
|
||||
// These are the REAL official API prices from Anthropic, OpenAI, Google etc.
|
||||
// IMPORTANT: More specific patterns MUST come before less specific ones
|
||||
// (e.g. "claude-opus-4-5" before "claude-opus-4") to avoid false matches.
|
||||
// Patterns must match actual backend model_name format (e.g. "claude-opus-4-5-20251101").
|
||||
const OFFICIAL_PRICES = [
|
||||
// Claude
|
||||
{ pattern: 'claude-4-sonnet', label: 'Claude Sonnet 4', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-sonnet-4', label: 'Claude Sonnet 4', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-4.5-sonnet', label: 'Claude 4.5 Sonnet', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-4.6-sonnet', label: 'Claude 4.6 Sonnet', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-4-opus', label: 'Claude Opus 4', inputPerMtok: 15 },
|
||||
// Claude — order matters: longer/more-specific first
|
||||
{ pattern: 'claude-opus-4-5', label: 'Claude Opus 4.5', inputPerMtok: 5 },
|
||||
{ pattern: 'claude-opus-4-6', label: 'Claude Opus 4.6', inputPerMtok: 5 },
|
||||
{ pattern: 'claude-opus-4-1', label: 'Claude Opus 4.1', inputPerMtok: 15 },
|
||||
{ pattern: 'claude-opus-4', label: 'Claude Opus 4', inputPerMtok: 15 },
|
||||
{ pattern: 'claude-4.1-opus', label: 'Claude Opus 4.1', inputPerMtok: 15 },
|
||||
{ pattern: 'claude-4.5-opus', label: 'Claude Opus 4.5', inputPerMtok: 5 },
|
||||
{ pattern: 'claude-4.6-opus', label: 'Claude Opus 4.6', inputPerMtok: 5 },
|
||||
{ pattern: 'claude-3.5-haiku', label: 'Claude 3.5 Haiku', inputPerMtok: 0.8 },
|
||||
{ pattern: 'claude-3-opus', label: 'Claude 3 Opus', inputPerMtok: 15 },
|
||||
{ pattern: 'claude-sonnet-4-5', label: 'Claude Sonnet 4.5', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-sonnet-4', label: 'Claude Sonnet 4', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-3-7-sonnet', label: 'Claude 3.7 Sonnet', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-3-5-sonnet', label: 'Claude 3.5 Sonnet', inputPerMtok: 3 },
|
||||
{ pattern: 'claude-haiku-4-5', label: 'Claude Haiku 4.5', inputPerMtok: 1 },
|
||||
{ pattern: 'claude-3-5-haiku', label: 'Claude 3.5 Haiku', inputPerMtok: 0.8 },
|
||||
// OpenAI
|
||||
{ pattern: 'gpt-5.1', label: 'GPT-5.1', inputPerMtok: 1.25 },
|
||||
{ pattern: 'gpt-5.2', label: 'GPT-5.2', inputPerMtok: 1.75 },
|
||||
{ pattern: 'gpt-5.3', label: 'GPT-5.3', inputPerMtok: 1.75 },
|
||||
{ pattern: 'gpt-5.4', label: 'GPT-5.4', inputPerMtok: 2.5 },
|
||||
{ pattern: 'claude-3-haiku', label: 'Claude 3 Haiku', inputPerMtok: 0.25 },
|
||||
// OpenAI — more specific first
|
||||
{ pattern: 'gpt-4o-mini', label: 'GPT-4o Mini', inputPerMtok: 0.15 },
|
||||
{ pattern: 'gpt-4o-2024-05-13', label: 'GPT-4o', inputPerMtok: 5 },
|
||||
{ pattern: 'chatgpt-4o-latest', label: 'GPT-4o', inputPerMtok: 5 },
|
||||
{ pattern: 'gpt-4o', label: 'GPT-4o', inputPerMtok: 2.5 },
|
||||
{ pattern: 'gpt-4.1-mini', label: 'GPT-4.1 Mini', inputPerMtok: 0.4 },
|
||||
{ pattern: 'gpt-4.1-nano', label: 'GPT-4.1 Nano', inputPerMtok: 0.1 },
|
||||
{ pattern: 'gpt-4.1', label: 'GPT-4.1', inputPerMtok: 2 },
|
||||
// Gemini
|
||||
{ pattern: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', inputPerMtok: 1.25 },
|
||||
{ pattern: 'gpt-5.4', label: 'GPT-5.4', inputPerMtok: 2.5 },
|
||||
{ pattern: 'gpt-5.3', label: 'GPT-5.3', inputPerMtok: 1.75 },
|
||||
{ pattern: 'gpt-5.2', label: 'GPT-5.2', inputPerMtok: 1.75 },
|
||||
{ pattern: 'gpt-5.1', label: 'GPT-5.1', inputPerMtok: 1.25 },
|
||||
// Gemini — more specific first
|
||||
{ pattern: 'gemini-2.5-flash-lite', label: 'Gemini 2.5 Flash Lite', inputPerMtok: 0.04 },
|
||||
{ pattern: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', inputPerMtok: 0.15 },
|
||||
{ pattern: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', inputPerMtok: 1.25 },
|
||||
{ pattern: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash', inputPerMtok: 0.1 },
|
||||
{ pattern: 'gemini-1.5-pro', label: 'Gemini 1.5 Pro', inputPerMtok: 1.25 },
|
||||
{ pattern: 'gemini-1.5-flash', label: 'Gemini 1.5 Flash', inputPerMtok: 0.075 },
|
||||
// DeepSeek
|
||||
{ pattern: 'deepseek-r1', label: 'DeepSeek R1', inputPerMtok: 0.55 },
|
||||
{ pattern: 'deepseek-chat', label: 'DeepSeek V3', inputPerMtok: 0.27 },
|
||||
{ pattern: 'deepseek-v3', label: 'DeepSeek V3', inputPerMtok: 0.27 },
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user