57 lines
3.0 KiB
JavaScript
Vendored
57 lines
3.0 KiB
JavaScript
Vendored
/**
|
|
* Single source of truth for billing expression variables.
|
|
*
|
|
* Every expression variable (p, c, cr, cc, ...) is defined here once.
|
|
* All frontend consumers — editor, estimator, log display, model detail —
|
|
* derive their data structures from this registry.
|
|
*
|
|
* To add a new variable:
|
|
* 1. Add an entry here
|
|
* 2. Backend: add to TokenParams, compileEnvPrototype, runProgram env, BuildTieredTokenParams
|
|
*/
|
|
|
|
export const BILLING_VARS = [
|
|
{ key: 'p', field: 'inputPrice', tierField: 'input_unit_cost', label: '输入价格', shortLabel: '输入', side: 'input', isBase: true },
|
|
{ key: 'c', field: 'outputPrice', tierField: 'output_unit_cost', label: '补全价格', shortLabel: '补全', side: 'output', isBase: true },
|
|
{ key: 'len', field: null, tierField: null, label: '输入长度', shortLabel: '长度', side: 'condition', isConditionOnly: true },
|
|
{ key: 'cr', field: 'cacheReadPrice', tierField: 'cache_read_unit_cost', label: '缓存读取价格', shortLabel: '缓存读', side: 'input', group: 'cache' },
|
|
{ key: 'cc', field: 'cacheCreatePrice', tierField: 'cache_create_unit_cost', label: '缓存创建价格', shortLabel: '缓存创建', side: 'input', group: 'cache' },
|
|
{ key: 'cc1h', field: 'cacheCreate1hPrice', tierField: 'cache_create_1h_unit_cost', label: '1h缓存创建价格', shortLabel: '1h缓存创建', side: 'input', group: 'cache' },
|
|
{ key: 'img', field: 'imagePrice', tierField: 'image_unit_cost', label: '图片输入价格', shortLabel: '图片输入', side: 'input', group: 'media' },
|
|
{ key: 'img_o', field: 'imageOutputPrice', tierField: 'image_output_unit_cost', label: '图片输出价格', shortLabel: '图片输出', side: 'output', group: 'media' },
|
|
{ key: 'ai', field: 'audioInputPrice', tierField: 'audio_input_unit_cost', label: '音频输入价格', shortLabel: '音频输入', side: 'input', group: 'media' },
|
|
{ key: 'ao', field: 'audioOutputPrice', tierField: 'audio_output_unit_cost', label: '音频补全价格', shortLabel: '音频输出', side: 'output', group: 'media' },
|
|
];
|
|
|
|
export const BILLING_VAR_KEYS = BILLING_VARS.map((v) => v.key);
|
|
|
|
export const BILLING_PRICING_VARS = BILLING_VARS.filter((v) => !v.isConditionOnly);
|
|
|
|
export const BILLING_EXTRA_VARS = BILLING_VARS.filter((v) => !v.isBase && !v.isConditionOnly);
|
|
|
|
export const BILLING_VAR_KEY_TO_FIELD = Object.fromEntries(
|
|
BILLING_PRICING_VARS.map((v) => [v.key, v.field]),
|
|
);
|
|
|
|
export const BILLING_VAR_FIELD_TO_LABEL = Object.fromEntries(
|
|
BILLING_PRICING_VARS.map((v) => [v.field, v.label]),
|
|
);
|
|
|
|
export const BILLING_VAR_FIELD_TO_SHORT_LABEL = Object.fromEntries(
|
|
BILLING_PRICING_VARS.map((v) => [v.field, v.shortLabel]),
|
|
);
|
|
|
|
export const BILLING_CACHE_VAR_MAP = BILLING_EXTRA_VARS.map((v) => ({
|
|
field: v.tierField,
|
|
exprVar: v.key,
|
|
}));
|
|
|
|
export const BILLING_VAR_REGEX = new RegExp(
|
|
`\\b(${BILLING_PRICING_VARS.map((v) => v.key).join('|')})\\s*\\*\\s*([\\d.eE+-]+)`,
|
|
'g',
|
|
);
|
|
|
|
export const BILLING_CONDITION_VARS = BILLING_VARS.filter(
|
|
(v) => v.isBase || v.isConditionOnly,
|
|
).map((v) => v.key);
|