From 284251ad6615dd37d4f2c0c9b14e0a989dbf3f1e Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 23 Feb 2026 18:18:45 -0500 Subject: [PATCH] zen: display BYOK cost --- packages/console/app/src/i18n/ar.ts | 1 + packages/console/app/src/i18n/br.ts | 1 + packages/console/app/src/i18n/da.ts | 1 + packages/console/app/src/i18n/de.ts | 1 + packages/console/app/src/i18n/en.ts | 1 + packages/console/app/src/i18n/es.ts | 1 + packages/console/app/src/i18n/fr.ts | 1 + packages/console/app/src/i18n/it.ts | 1 + packages/console/app/src/i18n/ja.ts | 1 + packages/console/app/src/i18n/ko.ts | 1 + packages/console/app/src/i18n/no.ts | 1 + packages/console/app/src/i18n/pl.ts | 1 + packages/console/app/src/i18n/ru.ts | 1 + packages/console/app/src/i18n/th.ts | 1 + packages/console/app/src/i18n/tr.ts | 1 + packages/console/app/src/i18n/zh.ts | 1 + packages/console/app/src/i18n/zht.ts | 1 + .../app/src/routes/workspace/[id]/usage-section.tsx | 11 ++++++++++- packages/console/app/src/routes/zen/util/handler.ts | 13 +++++++++---- 19 files changed, 36 insertions(+), 5 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 105546f637..b595af2e50 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -344,6 +344,7 @@ export const dict = { "workspace.usage.breakdown.output": "الخرج", "workspace.usage.breakdown.reasoning": "المنطق", "workspace.usage.subscription": "الاشتراك (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "التكلفة", "workspace.cost.subtitle": "تكاليف الاستخدام مقسمة حسب النموذج.", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 8f94a1f6b8..ad30d05dc8 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -349,6 +349,7 @@ export const dict = { "workspace.usage.breakdown.output": "Saída", "workspace.usage.breakdown.reasoning": "Raciocínio", "workspace.usage.subscription": "assinatura (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Custo", "workspace.cost.subtitle": "Custos de uso discriminados por modelo.", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index cd887bf27b..bca2122298 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -347,6 +347,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Ræsonnement", "workspace.usage.subscription": "abonnement (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Omkostninger", "workspace.cost.subtitle": "Brugsomkostninger opdelt efter model.", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index bd711cd023..c54b124cd9 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -349,6 +349,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Reasoning", "workspace.usage.subscription": "Abonnement (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Kosten", "workspace.cost.subtitle": "Nutzungskosten aufgeschlüsselt nach Modell.", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 55551de645..7ee737e662 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -341,6 +341,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Reasoning", "workspace.usage.subscription": "subscription (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Cost", "workspace.cost.subtitle": "Usage costs broken down by model.", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index aafe8aa00c..946469ca3a 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -350,6 +350,7 @@ export const dict = { "workspace.usage.breakdown.output": "Salida", "workspace.usage.breakdown.reasoning": "Razonamiento", "workspace.usage.subscription": "suscripción (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Costo", "workspace.cost.subtitle": "Costos de uso desglosados por modelo.", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index a915fde3b2..e653a6c74d 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -355,6 +355,7 @@ export const dict = { "workspace.usage.breakdown.output": "Sortie", "workspace.usage.breakdown.reasoning": "Raisonnement", "workspace.usage.subscription": "abonnement ({{amount}} $)", + "workspace.usage.byok": "BYOK ({{amount}} $)", "workspace.cost.title": "Coût", "workspace.cost.subtitle": "Coûts d'utilisation répartis par modèle.", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 4ffc728c86..5d1c84a2d9 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -349,6 +349,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Reasoning", "workspace.usage.subscription": "abbonamento (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Costo", "workspace.cost.subtitle": "Costi di utilizzo suddivisi per modello.", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 8ecc5d58b7..dbc2554a72 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -346,6 +346,7 @@ export const dict = { "workspace.usage.breakdown.output": "出力", "workspace.usage.breakdown.reasoning": "推論", "workspace.usage.subscription": "サブスクリプション (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "コスト", "workspace.cost.subtitle": "モデルごとの使用料金の内訳。", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 9692ef47a3..4c0882f3bf 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -343,6 +343,7 @@ export const dict = { "workspace.usage.breakdown.output": "출력", "workspace.usage.breakdown.reasoning": "추론", "workspace.usage.subscription": "구독 (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "비용", "workspace.cost.subtitle": "모델별 사용 비용 내역.", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index c1729b83c0..a87a2493a0 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -347,6 +347,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Resonnering", "workspace.usage.subscription": "abonnement (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Kostnad", "workspace.cost.subtitle": "Brukskostnader fordelt på modell.", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 0bcc7e735d..0466f6410b 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -348,6 +348,7 @@ export const dict = { "workspace.usage.breakdown.output": "Wyjście", "workspace.usage.breakdown.reasoning": "Rozumowanie", "workspace.usage.subscription": "subskrypcja (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Koszt", "workspace.cost.subtitle": "Koszty użycia w podziale na modele.", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 489125a583..86058638ab 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -353,6 +353,7 @@ export const dict = { "workspace.usage.breakdown.output": "Выход", "workspace.usage.breakdown.reasoning": "Reasoning (рассуждения)", "workspace.usage.subscription": "подписка (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Расходы", "workspace.cost.subtitle": "Расходы на использование с разбивкой по моделям.", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index cbd534c96f..4646183dd6 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -346,6 +346,7 @@ export const dict = { "workspace.usage.breakdown.output": "Output", "workspace.usage.breakdown.reasoning": "Reasoning", "workspace.usage.subscription": "สมัครสมาชิก (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "ค่าใช้จ่าย", "workspace.cost.subtitle": "ต้นทุนการใช้งานแยกตามโมเดล", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 4a333ccda8..9ff33dfee7 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -349,6 +349,7 @@ export const dict = { "workspace.usage.breakdown.output": "Çıkış", "workspace.usage.breakdown.reasoning": "Muhakeme", "workspace.usage.subscription": "abonelik (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "Maliyet", "workspace.cost.subtitle": "Modele göre ayrılmış kullanım maliyetleri.", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 4628b99773..cf3e6b0f9e 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -334,6 +334,7 @@ export const dict = { "workspace.usage.breakdown.output": "输出", "workspace.usage.breakdown.reasoning": "推理", "workspace.usage.subscription": "订阅 (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "成本", "workspace.cost.subtitle": "按模型细分的使用成本。", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index b7edf1b792..8adc9e16e5 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -334,6 +334,7 @@ export const dict = { "workspace.usage.breakdown.output": "輸出", "workspace.usage.breakdown.reasoning": "推理", "workspace.usage.subscription": "訂閱 (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", "workspace.cost.title": "成本", "workspace.cost.subtitle": "按模型細分的使用成本。", diff --git a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx index 7b030f4afb..3d6637610a 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx @@ -177,7 +177,16 @@ export function UsageSection() { ${((usage.cost ?? 0) / 100000000).toFixed(4)}} + fallback={ + ${((usage.cost ?? 0) / 100000000).toFixed(4)}} + > + {i18n.t("workspace.usage.byok", { + amount: ((usage.cost ?? 0) / 100000000).toFixed(4), + })} + + } > {i18n.t("workspace.usage.subscription", { amount: ((usage.cost ?? 0) / 100000000).toFixed(4), diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index dc10e1bf93..6096d73784 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -740,7 +740,11 @@ export async function handler( cost, keyID: authInfo.apiKeyId, sessionID: sessionId.substring(0, 30), - enrichment: billingSource === "subscription" ? { plan: "sub" } : undefined, + enrichment: (() => { + if (billingSource === "subscription") return { plan: "sub" } + if (billingSource === "byok") return { plan: "byok" } + return undefined + })(), }), db .update(KeyTable) @@ -788,9 +792,10 @@ export async function handler( db .update(BillingTable) .set({ - balance: authInfo.isFree - ? sql`${BillingTable.balance} - ${0}` - : sql`${BillingTable.balance} - ${cost}`, + balance: + billingSource === "free" || billingSource === "byok" + ? sql`${BillingTable.balance} - ${0}` + : sql`${BillingTable.balance} - ${cost}`, monthlyUsage: sql` CASE WHEN MONTH(${BillingTable.timeMonthlyUsageUpdated}) = MONTH(now()) AND YEAR(${BillingTable.timeMonthlyUsageUpdated}) = YEAR(now()) THEN ${BillingTable.monthlyUsage} + ${cost}