From bb278ee607d16ec29f5df890fdcd2c8e786d0d3d Mon Sep 17 00:00:00 2001 From: MrMushrooooom Date: Sun, 23 Aug 2026 04:14:23 +0000 Subject: [PATCH] fix(console): support DeepSeek weekend pricing --- .../console/app/src/routes/zen/util/handler.ts | 4 ++-- .../console/app/src/routes/zen/util/pricing.ts | 7 +++++++ packages/console/app/test/pricing.test.ts | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/console/app/src/routes/zen/util/pricing.ts create mode 100644 packages/console/app/test/pricing.test.ts diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index c6296c25aa7..5b4edaea807 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -53,6 +53,7 @@ import { createProviderBudgetTracker } from "./providerBudgetTracker" import { accumulateUsage, HOT_WORKSPACES } from "./usageBatcher" import { Workspace } from "@opencode-ai/console-core/workspace.js" import { countryFromRequest, isModelCountryRestricted } from "~/lib/request-country" +import { isPeakPricing } from "./pricing" type ZenData = Awaited> type RetryOptions = { @@ -1048,9 +1049,8 @@ export async function handler( const { inputTokens, outputTokens, reasoningTokens, cacheReadTokens, cacheWrite5mTokens, cacheWrite1hTokens } = usageInfo - const hour = new Date().getUTCHours() const modelCost = - modelInfo.costPeak && ((hour >= 1 && hour < 4) || (hour >= 6 && hour < 10)) + modelInfo.costPeak && isPeakPricing(new Date()) ? modelInfo.costPeak : modelInfo.cost200K && inputTokens + (cacheReadTokens ?? 0) + (cacheWrite5mTokens ?? 0) + (cacheWrite1hTokens ?? 0) > 200_000 diff --git a/packages/console/app/src/routes/zen/util/pricing.ts b/packages/console/app/src/routes/zen/util/pricing.ts new file mode 100644 index 00000000000..0f16e3cf363 --- /dev/null +++ b/packages/console/app/src/routes/zen/util/pricing.ts @@ -0,0 +1,7 @@ +export function isPeakPricing(date: Date) { + const hour = date.getUTCHours() + // DeepSeek defines weekends in Beijing time, which is fixed at UTC+8. + const dayInBeijing = new Date(date.getTime() + 8 * 60 * 60 * 1000).getUTCDay() + if (dayInBeijing === 0 || dayInBeijing === 6) return false + return (hour >= 1 && hour < 4) || (hour >= 6 && hour < 10) +} diff --git a/packages/console/app/test/pricing.test.ts b/packages/console/app/test/pricing.test.ts new file mode 100644 index 00000000000..a1ce454eb27 --- /dev/null +++ b/packages/console/app/test/pricing.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, test } from "bun:test" +import { isPeakPricing } from "../src/routes/zen/util/pricing" + +describe("isPeakPricing", () => { + test.each([ + ["weekday first window starts", "2026-08-27T01:00:00.000Z", true], + ["weekday first window ends", "2026-08-27T04:00:00.000Z", false], + ["weekday second window starts", "2026-08-27T06:00:00.000Z", true], + ["weekday second window ends", "2026-08-27T10:00:00.000Z", false], + ["Saturday in Beijing", "2026-08-29T01:00:00.000Z", false], + ["Sunday in Beijing", "2026-08-30T06:00:00.000Z", false], + ["Monday in Beijing", "2026-08-31T01:00:00.000Z", true], + ] as const)("handles %s", (_name, timestamp, expected) => { + expect(isPeakPricing(new Date(timestamp))).toBe(expected) + }) +})