Browse Source

zen: display BYOK cost

Frank 1 month ago
parent
commit
284251ad66

+ 1 - 0
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": "تكاليف الاستخدام مقسمة حسب النموذج.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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": "モデルごとの使用料金の内訳。",

+ 1 - 0
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": "모델별 사용 비용 내역.",

+ 1 - 0
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.",

+ 1 - 0
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.",

+ 1 - 0
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": "Расходы на использование с разбивкой по моделям.",

+ 1 - 0
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": "ต้นทุนการใช้งานแยกตามโมเดล",

+ 1 - 0
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.",

+ 1 - 0
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": "按模型细分的使用成本。",

+ 1 - 0
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": "按模型細分的使用成本。",

+ 10 - 1
packages/console/app/src/routes/workspace/[id]/usage-section.tsx

@@ -177,7 +177,16 @@ export function UsageSection() {
                       <td data-slot="usage-cost">
                         <Show
                           when={usage.enrichment?.plan === "sub"}
-                          fallback={<>${((usage.cost ?? 0) / 100000000).toFixed(4)}</>}
+                          fallback={
+                            <Show
+                              when={usage.enrichment?.plan === "byok"}
+                              fallback={<>${((usage.cost ?? 0) / 100000000).toFixed(4)}</>}
+                            >
+                              {i18n.t("workspace.usage.byok", {
+                                amount: ((usage.cost ?? 0) / 100000000).toFixed(4),
+                              })}
+                            </Show>
+                          }
                         >
                           {i18n.t("workspace.usage.subscription", {
                             amount: ((usage.cost ?? 0) / 100000000).toFixed(4),

+ 9 - 4
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}