Browse Source

✨ feat(render): introduce getEffectiveRatio helper for improved group ratio handling

CaIon 8 months ago
parent
commit
f191f981c4
1 changed files with 35 additions and 36 deletions
  1. 35 36
      web/src/helpers/render.js

+ 35 - 36
web/src/helpers/render.js

@@ -868,7 +868,27 @@ export function renderQuota(quota, digits = 2) {
 }
 }
 
 
 function isValidGroupRatio(ratio) {
 function isValidGroupRatio(ratio) {
-  return ratio !== undefined && ratio !== null && ratio !== -1;
+  return Number.isFinite(ratio) && ratio !== -1;
+}
+
+/**
+ * Helper function to get effective ratio and label
+ * @param {number} groupRatio - The default group ratio
+ * @param {number} user_group_ratio - The user-specific group ratio  
+ * @returns {Object} - Object containing { ratio, label, useUserGroupRatio }
+ */
+function getEffectiveRatio(groupRatio, user_group_ratio) {
+  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
+  const ratioLabel = useUserGroupRatio
+    ? i18next.t('专属倍率')
+    : i18next.t('分组倍率');
+  const effectiveRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  
+  return {
+    ratio: effectiveRatio,
+    label: ratioLabel,
+    useUserGroupRatio: useUserGroupRatio
+  };
 }
 }
 
 
 export function renderModelPrice(
 export function renderModelPrice(
@@ -894,11 +914,9 @@ export function renderModelPrice(
   audioInputTokens = 0,
   audioInputTokens = 0,
   audioInputPrice = 0,
   audioInputPrice = 0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
+
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t(
     return i18next.t(
       '模型价格:${{price}} * {{ratioType}}:{{ratio}} = ${{total}}',
       '模型价格:${{price}} * {{ratioType}}:{{ratio}} = ${{total}}',
@@ -1110,11 +1128,7 @@ export function renderLogContent(
   fileSearch = false,
   fileSearch = false,
   fileSearchCallCount = 0,
   fileSearchCallCount = 0,
 ) {
 ) {
-  useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  const ratio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio, label: ratioLabel, useUserGroupRatio: useUserGroupRatio } = getEffectiveRatio(groupRatio, user_group_ratio);
 
 
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t('模型价格 ${{price}},{{ratioType}} {{ratio}}', {
     return i18next.t('模型价格 ${{price}},{{ratioType}} {{ratio}}', {
@@ -1169,11 +1183,8 @@ export function renderModelPriceSimple(
   image = false,
   image = false,
   imageRatio = 1.0,
   imageRatio = 1.0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t('价格:${{price}} * {{ratioType}}:{{ratio}}', {
     return i18next.t('价格:${{price}} * {{ratioType}}:{{ratio}}', {
       price: modelPrice,
       price: modelPrice,
@@ -1236,11 +1247,8 @@ export function renderAudioModelPrice(
   cacheTokens = 0,
   cacheTokens = 0,
   cacheRatio = 1.0,
   cacheRatio = 1.0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
   // 1 ratio = $0.002 / 1K tokens
   // 1 ratio = $0.002 / 1K tokens
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t(
     return i18next.t(
@@ -1409,11 +1417,8 @@ export function renderClaudeModelPrice(
   cacheCreationTokens = 0,
   cacheCreationTokens = 0,
   cacheCreationRatio = 1.0,
   cacheCreationRatio = 1.0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
 
 
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t(
     return i18next.t(
@@ -1541,11 +1546,8 @@ export function renderClaudeLogContent(
   cacheRatio = 1.0,
   cacheRatio = 1.0,
   cacheCreationRatio = 1.0,
   cacheCreationRatio = 1.0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
 
 
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t('模型价格 ${{price}},{{ratioType}} {{ratio}}', {
     return i18next.t('模型价格 ${{price}},{{ratioType}} {{ratio}}', {
@@ -1578,11 +1580,8 @@ export function renderClaudeModelPriceSimple(
   cacheCreationTokens = 0,
   cacheCreationTokens = 0,
   cacheCreationRatio = 1.0,
   cacheCreationRatio = 1.0,
 ) {
 ) {
-  const useUserGroupRatio = isValidGroupRatio(user_group_ratio);
-  const ratioLabel = useUserGroupRatio
-    ? i18next.t('专属倍率')
-    : i18next.t('分组倍率');
-  groupRatio = useUserGroupRatio ? user_group_ratio : groupRatio;
+  const { ratio: effectiveGroupRatio, label: ratioLabel } = getEffectiveRatio(groupRatio, user_group_ratio);
+  groupRatio = effectiveGroupRatio;
 
 
   if (modelPrice !== -1) {
   if (modelPrice !== -1) {
     return i18next.t('价格:${{price}} * {{ratioType}}:{{ratio}}', {
     return i18next.t('价格:${{price}} * {{ratioType}}:{{ratio}}', {