summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFrank <[email protected]>2026-02-23 18:18:45 -0500
committerFrank <[email protected]>2026-02-23 18:18:47 -0500
commit284251ad6615dd37d4f2c0c9b14e0a989dbf3f1e (patch)
treef0330901fa6b7509d1f257d17c1caf3123a32d7f
parent34495a70d5069355bbad95c95625818afa677eb1 (diff)
downloadopencode-284251ad6615dd37d4f2c0c9b14e0a989dbf3f1e.tar.gz
opencode-284251ad6615dd37d4f2c0c9b14e0a989dbf3f1e.zip
zen: display BYOK cost
-rw-r--r--packages/console/app/src/i18n/ar.ts1
-rw-r--r--packages/console/app/src/i18n/br.ts1
-rw-r--r--packages/console/app/src/i18n/da.ts1
-rw-r--r--packages/console/app/src/i18n/de.ts1
-rw-r--r--packages/console/app/src/i18n/en.ts1
-rw-r--r--packages/console/app/src/i18n/es.ts1
-rw-r--r--packages/console/app/src/i18n/fr.ts1
-rw-r--r--packages/console/app/src/i18n/it.ts1
-rw-r--r--packages/console/app/src/i18n/ja.ts1
-rw-r--r--packages/console/app/src/i18n/ko.ts1
-rw-r--r--packages/console/app/src/i18n/no.ts1
-rw-r--r--packages/console/app/src/i18n/pl.ts1
-rw-r--r--packages/console/app/src/i18n/ru.ts1
-rw-r--r--packages/console/app/src/i18n/th.ts1
-rw-r--r--packages/console/app/src/i18n/tr.ts1
-rw-r--r--packages/console/app/src/i18n/zh.ts1
-rw-r--r--packages/console/app/src/i18n/zht.ts1
-rw-r--r--packages/console/app/src/routes/workspace/[id]/usage-section.tsx11
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts13
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 105546f63..b595af2e5 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 8f94a1f6b..ad30d05dc 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 cd887bf27..bca212229 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 bd711cd02..c54b124cd 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 55551de64..7ee737e66 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 aafe8aa00..946469ca3 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 a915fde3b..e653a6c74 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 4ffc728c8..5d1c84a2d 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 8ecc5d58b..dbc2554a7 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 9692ef47a..4c0882f3b 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 c1729b83c..a87a2493a 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 0bcc7e735..0466f6410 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 489125a58..86058638a 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 cbd534c96..4646183dd 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 4a333ccda..9ff33dfee 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 4628b9977..cf3e6b0f9 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 b7edf1b79..8adc9e16e 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 7b030f4af..3d6637610 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() {
<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),
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index dc10e1bf9..6096d7378 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}