fix: resolve runtime crashes in render.jsx and TieredPricingEditor.jsx
- render.jsx: change const destructuring of completionRatio/audioRatio to use raw names with ?? 0 defaults, preventing "Assignment to constant variable" errors in renderModelPrice, renderAudioModelPrice, and renderClaudeModelPrice - TieredPricingEditor.jsx: add missing MATCH_GTE import, remove misleading alias help text, preserve conditions for single-tier configs
This commit is contained in:
Vendored
+10
-28
@@ -1643,7 +1643,7 @@ export function renderModelPrice(opts) {
|
|||||||
completion_tokens: completionTokens = 0,
|
completion_tokens: completionTokens = 0,
|
||||||
model_ratio: modelRatio = 0,
|
model_ratio: modelRatio = 0,
|
||||||
model_price: modelPrice = -1,
|
model_price: modelPrice = -1,
|
||||||
completion_ratio: completionRatio,
|
completion_ratio: _completionRatio,
|
||||||
group_ratio: _groupRatio,
|
group_ratio: _groupRatio,
|
||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
cache_tokens: cacheTokens = 0,
|
cache_tokens: cacheTokens = 0,
|
||||||
@@ -1669,6 +1669,7 @@ export function renderModelPrice(opts) {
|
|||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
);
|
);
|
||||||
let groupRatio = effectiveGroupRatio;
|
let groupRatio = effectiveGroupRatio;
|
||||||
|
const completionRatio = _completionRatio ?? 0;
|
||||||
|
|
||||||
const { symbol, rate } = getCurrencyConfig();
|
const { symbol, rate } = getCurrencyConfig();
|
||||||
|
|
||||||
@@ -1695,9 +1696,6 @@ export function renderModelPrice(opts) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionRatio === undefined) {
|
|
||||||
completionRatio = 0;
|
|
||||||
}
|
|
||||||
const inputRatioPrice = modelRatio * 2.0;
|
const inputRatioPrice = modelRatio * 2.0;
|
||||||
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
||||||
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
|
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
|
||||||
@@ -1908,10 +1906,6 @@ export function renderModelPrice(opts) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionRatio === undefined) {
|
|
||||||
completionRatio = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const modelRatioValue = formatRatioValue(modelRatio);
|
const modelRatioValue = formatRatioValue(modelRatio);
|
||||||
const completionRatioValue = formatRatioValue(completionRatio);
|
const completionRatioValue = formatRatioValue(completionRatio);
|
||||||
const cacheRatioValue = formatRatioValue(cacheRatio);
|
const cacheRatioValue = formatRatioValue(cacheRatio);
|
||||||
@@ -2408,11 +2402,11 @@ export function renderAudioModelPrice(opts) {
|
|||||||
completion_tokens: completionTokens = 0,
|
completion_tokens: completionTokens = 0,
|
||||||
model_ratio: modelRatio = 0,
|
model_ratio: modelRatio = 0,
|
||||||
model_price: modelPrice = -1,
|
model_price: modelPrice = -1,
|
||||||
completion_ratio: completionRatio,
|
completion_ratio: _completionRatio,
|
||||||
audio_input: audioInputTokens = 0,
|
audio_input: audioInputTokens = 0,
|
||||||
audio_output: audioCompletionTokens = 0,
|
audio_output: audioCompletionTokens = 0,
|
||||||
audio_ratio: audioRatio,
|
audio_ratio: _audioRatio,
|
||||||
audio_completion_ratio: audioCompletionRatio,
|
audio_completion_ratio: _audioCompletionRatio,
|
||||||
group_ratio: _groupRatio,
|
group_ratio: _groupRatio,
|
||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
cache_tokens: cacheTokens = 0,
|
cache_tokens: cacheTokens = 0,
|
||||||
@@ -2424,6 +2418,9 @@ export function renderAudioModelPrice(opts) {
|
|||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
);
|
);
|
||||||
let groupRatio = effectiveGroupRatio;
|
let groupRatio = effectiveGroupRatio;
|
||||||
|
const completionRatio = _completionRatio ?? 0;
|
||||||
|
const audioRatio = parseFloat(_audioRatio ?? 0).toFixed(6);
|
||||||
|
const audioCompletionRatio = _audioCompletionRatio ?? 0;
|
||||||
|
|
||||||
// 获取货币配置
|
// 获取货币配置
|
||||||
const { symbol, rate } = getCurrencyConfig();
|
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 inputRatioPrice = modelRatio * 2.0;
|
||||||
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
||||||
const textPrice =
|
const textPrice =
|
||||||
@@ -2541,10 +2534,6 @@ export function renderAudioModelPrice(opts) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionRatio === undefined) {
|
|
||||||
completionRatio = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const modelRatioValue = formatRatioValue(modelRatio);
|
const modelRatioValue = formatRatioValue(modelRatio);
|
||||||
const completionRatioValue = formatRatioValue(completionRatio);
|
const completionRatioValue = formatRatioValue(completionRatio);
|
||||||
const cacheRatioValue = formatRatioValue(cacheRatio);
|
const cacheRatioValue = formatRatioValue(cacheRatio);
|
||||||
@@ -2695,7 +2684,7 @@ export function renderClaudeModelPrice(opts) {
|
|||||||
completion_tokens: completionTokens = 0,
|
completion_tokens: completionTokens = 0,
|
||||||
model_ratio: modelRatio = 0,
|
model_ratio: modelRatio = 0,
|
||||||
model_price: modelPrice = -1,
|
model_price: modelPrice = -1,
|
||||||
completion_ratio: completionRatio,
|
completion_ratio: _completionRatio,
|
||||||
group_ratio: _groupRatio,
|
group_ratio: _groupRatio,
|
||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
cache_tokens: cacheTokens = 0,
|
cache_tokens: cacheTokens = 0,
|
||||||
@@ -2713,6 +2702,7 @@ export function renderClaudeModelPrice(opts) {
|
|||||||
user_group_ratio,
|
user_group_ratio,
|
||||||
);
|
);
|
||||||
let groupRatio = effectiveGroupRatio;
|
let groupRatio = effectiveGroupRatio;
|
||||||
|
const completionRatio = _completionRatio ?? 0;
|
||||||
|
|
||||||
// 获取货币配置
|
// 获取货币配置
|
||||||
const { symbol, rate } = getCurrencyConfig();
|
const { symbol, rate } = getCurrencyConfig();
|
||||||
@@ -2739,10 +2729,6 @@ export function renderClaudeModelPrice(opts) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionRatio === undefined) {
|
|
||||||
completionRatio = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const inputRatioPrice = modelRatio * 2.0;
|
const inputRatioPrice = modelRatio * 2.0;
|
||||||
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
const completionRatioPrice = modelRatio * 2.0 * completionRatio;
|
||||||
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
|
const cacheRatioPrice = modelRatio * 2.0 * cacheRatio;
|
||||||
@@ -2926,10 +2912,6 @@ export function renderClaudeModelPrice(opts) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionRatio === undefined) {
|
|
||||||
completionRatio = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const modelRatioValue = formatRatioValue(modelRatio);
|
const modelRatioValue = formatRatioValue(modelRatio);
|
||||||
const completionRatioValue = formatRatioValue(completionRatio);
|
const completionRatioValue = formatRatioValue(completionRatio);
|
||||||
const cacheRatioValue = formatRatioValue(cacheRatio);
|
const cacheRatioValue = formatRatioValue(cacheRatio);
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ import {
|
|||||||
MATCH_EXISTS,
|
MATCH_EXISTS,
|
||||||
MATCH_CONTAINS,
|
MATCH_CONTAINS,
|
||||||
MATCH_RANGE,
|
MATCH_RANGE,
|
||||||
|
MATCH_GTE,
|
||||||
SOURCE_HEADER,
|
SOURCE_HEADER,
|
||||||
SOURCE_PARAM,
|
SOURCE_PARAM,
|
||||||
SOURCE_TIME,
|
SOURCE_TIME,
|
||||||
@@ -164,7 +165,12 @@ function generateExprFromVisualConfig(config) {
|
|||||||
if (tiers.length === 1) {
|
if (tiers.length === 1) {
|
||||||
const t = tiers[0];
|
const t = tiers[0];
|
||||||
const label = t.label || 'default';
|
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 = [];
|
const parts = [];
|
||||||
@@ -885,12 +891,6 @@ function RawExprEditor({ exprString, onChange, t }) {
|
|||||||
<code>abs(x)</code>, <code>header(name)</code>,{' '}
|
<code>abs(x)</code>, <code>header(name)</code>,{' '}
|
||||||
<code>param(path)</code>, <code>has(source, text)</code>
|
<code>param(path)</code>, <code>has(source, text)</code>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
{t('也支持更好懂的别名')}: <code>prompt_tokens</code>,{' '}
|
|
||||||
<code>completion_tokens</code>, <code>cache_read_tokens</code>,{' '}
|
|
||||||
<code>cache_create_tokens</code>,{' '}
|
|
||||||
<code>cache_create_1h_tokens</code>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
style={{ marginBottom: 12 }}
|
style={{ marginBottom: 12 }}
|
||||||
|
|||||||
Reference in New Issue
Block a user