From bee339d279ccecbf8c8a89e14ddbbd902f78bd5d Mon Sep 17 00:00:00 2001 From: CaIon Date: Mon, 27 Apr 2026 22:07:11 +0800 Subject: [PATCH] fix: always serialize ratio/price values for all models to ensure fallback during sync delays --- .../Ratio/hooks/useModelPricingEditorState.js | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/web/src/pages/Setting/Ratio/hooks/useModelPricingEditorState.js b/web/src/pages/Setting/Ratio/hooks/useModelPricingEditorState.js index f389ec9e..ba9efdfc 100644 --- a/web/src/pages/Setting/Ratio/hooks/useModelPricingEditorState.js +++ b/web/src/pages/Setting/Ratio/hooks/useModelPricingEditorState.js @@ -1050,16 +1050,23 @@ export function useModelPricingEditorState({ tieredOutput['billing_setting.billing_expr'][model.name] = finalBillingExpr; } } - if (model.billingMode === 'tiered_expr') { - continue; - } - const serialized = serializeModel(model, t); - Object.entries(serialized).forEach(([key, value]) => { - if (value !== null) { - output[key][model.name] = value; + // Always serialize ratio/price values for all models (including + // tiered_expr) so they serve as fallback during multi-instance sync + // delay. ModelPriceHelper checks billing_mode first, so these values + // are only used when billing_setting hasn't propagated yet. + try { + const serialized = serializeModel(model, t); + Object.entries(serialized).forEach(([key, value]) => { + if (value !== null) { + output[key][model.name] = value; + } + }); + } catch (e) { + if (model.billingMode !== 'tiered_expr') { + throw e; } - }); + } } const requestQueue = [