diff --git a/web/src/helpers/render.jsx b/web/src/helpers/render.jsx
index 14ce0d3e..d7ba6546 100644
--- a/web/src/helpers/render.jsx
+++ b/web/src/helpers/render.jsx
@@ -1643,7 +1643,7 @@ export function renderModelPrice(opts) {
completion_tokens: completionTokens = 0,
model_ratio: modelRatio = 0,
model_price: modelPrice = -1,
- completion_ratio: completionRatio,
+ completion_ratio: _completionRatio,
group_ratio: _groupRatio,
user_group_ratio,
cache_tokens: cacheTokens = 0,
@@ -1669,6 +1669,7 @@ export function renderModelPrice(opts) {
user_group_ratio,
);
let groupRatio = effectiveGroupRatio;
+ const completionRatio = _completionRatio ?? 0;
const { symbol, rate } = getCurrencyConfig();
@@ -1695,9 +1696,6 @@ export function renderModelPrice(opts) {
]);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
const inputRatioPrice = modelRatio * 2.0;
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
@@ -1908,10 +1906,6 @@ export function renderModelPrice(opts) {
);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
-
const modelRatioValue = formatRatioValue(modelRatio);
const completionRatioValue = formatRatioValue(completionRatio);
const cacheRatioValue = formatRatioValue(cacheRatio);
@@ -2408,11 +2402,11 @@ export function renderAudioModelPrice(opts) {
completion_tokens: completionTokens = 0,
model_ratio: modelRatio = 0,
model_price: modelPrice = -1,
- completion_ratio: completionRatio,
+ completion_ratio: _completionRatio,
audio_input: audioInputTokens = 0,
audio_output: audioCompletionTokens = 0,
- audio_ratio: audioRatio,
- audio_completion_ratio: audioCompletionRatio,
+ audio_ratio: _audioRatio,
+ audio_completion_ratio: _audioCompletionRatio,
group_ratio: _groupRatio,
user_group_ratio,
cache_tokens: cacheTokens = 0,
@@ -2424,6 +2418,9 @@ export function renderAudioModelPrice(opts) {
user_group_ratio,
);
let groupRatio = effectiveGroupRatio;
+ const completionRatio = _completionRatio ?? 0;
+ const audioRatio = parseFloat(_audioRatio ?? 0).toFixed(6);
+ const audioCompletionRatio = _audioCompletionRatio ?? 0;
// 获取货币配置
const { symbol, rate } = getCurrencyConfig();
@@ -2450,10 +2447,6 @@ export function renderAudioModelPrice(opts) {
]);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
- audioRatio = parseFloat(audioRatio).toFixed(6);
const inputRatioPrice = modelRatio * 2.0;
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
const textPrice =
@@ -2541,10 +2534,6 @@ export function renderAudioModelPrice(opts) {
);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
-
const modelRatioValue = formatRatioValue(modelRatio);
const completionRatioValue = formatRatioValue(completionRatio);
const cacheRatioValue = formatRatioValue(cacheRatio);
@@ -2695,7 +2684,7 @@ export function renderClaudeModelPrice(opts) {
completion_tokens: completionTokens = 0,
model_ratio: modelRatio = 0,
model_price: modelPrice = -1,
- completion_ratio: completionRatio,
+ completion_ratio: _completionRatio,
group_ratio: _groupRatio,
user_group_ratio,
cache_tokens: cacheTokens = 0,
@@ -2713,6 +2702,7 @@ export function renderClaudeModelPrice(opts) {
user_group_ratio,
);
let groupRatio = effectiveGroupRatio;
+ const completionRatio = _completionRatio ?? 0;
// 获取货币配置
const { symbol, rate } = getCurrencyConfig();
@@ -2739,10 +2729,6 @@ export function renderClaudeModelPrice(opts) {
]);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
-
const inputRatioPrice = modelRatio * 2.0;
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
@@ -2926,10 +2912,6 @@ export function renderClaudeModelPrice(opts) {
);
}
- if (completionRatio === undefined) {
- completionRatio = 0;
- }
-
const modelRatioValue = formatRatioValue(modelRatio);
const completionRatioValue = formatRatioValue(completionRatio);
const cacheRatioValue = formatRatioValue(cacheRatio);
diff --git a/web/src/pages/Setting/Ratio/components/TieredPricingEditor.jsx b/web/src/pages/Setting/Ratio/components/TieredPricingEditor.jsx
index 3e3a59c4..ec06a340 100644
--- a/web/src/pages/Setting/Ratio/components/TieredPricingEditor.jsx
+++ b/web/src/pages/Setting/Ratio/components/TieredPricingEditor.jsx
@@ -49,6 +49,7 @@ import {
MATCH_EXISTS,
MATCH_CONTAINS,
MATCH_RANGE,
+ MATCH_GTE,
SOURCE_HEADER,
SOURCE_PARAM,
SOURCE_TIME,
@@ -164,7 +165,12 @@ function generateExprFromVisualConfig(config) {
if (tiers.length === 1) {
const t = tiers[0];
const label = t.label || 'default';
- return `tier("${label}", ${buildTierBodyExpr(t)})`;
+ const body = `tier("${label}", ${buildTierBodyExpr(t)})`;
+ const cond = buildConditionStr(t.conditions);
+ if (cond) {
+ return `${cond} ? ${body} : p * 0 + c * 0`;
+ }
+ return body;
}
const parts = [];
@@ -885,12 +891,6 @@ function RawExprEditor({ exprString, onChange, t }) {
abs(x), header(name),{' '}
param(path), has(source, text)
-
prompt_tokens,{' '}
- completion_tokens, cache_read_tokens,{' '}
- cache_create_tokens,{' '}
- cache_create_1h_tokens
-