From cca35404ea2fb77413aab3e68a74e0afa60ed202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E6=99=93=E6=B3=A20668000512?= Date: Fri, 3 Apr 2026 18:17:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AMiniMax=20coding=5Fp?= =?UTF-8?q?lan=20=E5=B0=86=20interval/weekly=20usage=5Fcount=20=E6=8C=89?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E9=85=8D=E9=A2=9D=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/infra/provider-usage.fetch.minimax.test.ts | 14 ++++++++++++++ src/infra/provider-usage.fetch.minimax.ts | 10 ++++++++-- src/infra/provider-usage.test.ts | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/infra/provider-usage.fetch.minimax.test.ts b/src/infra/provider-usage.fetch.minimax.test.ts index ceb1c5439b0..b950d58fe31 100644 --- a/src/infra/provider-usage.fetch.minimax.test.ts +++ b/src/infra/provider-usage.fetch.minimax.test.ts @@ -116,6 +116,20 @@ describe("fetchMinimaxUsage", () => { windows: [{ label: "5h", usedPercent: 75, resetAt: 1_700_000_000_000 }], }, }, + { + name: "treats MiniMax current_interval_usage_count as remaining quota (not consumed)", + payload: { + data: { + current_interval_total_count: 100, + current_interval_usage_count: 98, + plan_name: "Coding Plan", + }, + }, + expected: { + plan: "Coding Plan", + windows: [{ label: "5h", usedPercent: 2, resetAt: undefined }], + }, + }, { name: "falls back to payload-level reset and plan when nested usage records omit them", payload: { diff --git a/src/infra/provider-usage.fetch.minimax.ts b/src/infra/provider-usage.fetch.minimax.ts index 224c2455264..7959f7e7675 100644 --- a/src/infra/provider-usage.fetch.minimax.ts +++ b/src/infra/provider-usage.fetch.minimax.ts @@ -67,8 +67,6 @@ const USED_KEYS = [ "usedPrompt", "prompts_used", "promptsUsed", - "current_interval_usage_count", - "currentIntervalUsageCount", "consumed", ] as const; @@ -96,6 +94,8 @@ const TOTAL_KEYS = [ "totalPrompts", "current_interval_total_count", "currentIntervalTotalCount", + "current_weekly_total_count", + "currentWeeklyTotalCount", "limit", "quota", "quota_limit", @@ -133,6 +133,12 @@ const REMAINING_KEYS = [ "prompts_left", "promptsLeft", "left", + // MiniMax `/coding_plan/remains` misnames these: values are remaining quota, not consumed. + // See https://github.com/MiniMax-AI/MiniMax-M2/issues/99 + "current_interval_usage_count", + "currentIntervalUsageCount", + "current_weekly_usage_count", + "currentWeeklyUsageCount", ] as const; const PLAN_KEYS = ["plan", "plan_name", "planName", "product", "tier"] as const; diff --git a/src/infra/provider-usage.test.ts b/src/infra/provider-usage.test.ts index fb267613184..0b495ac4b9f 100644 --- a/src/infra/provider-usage.test.ts +++ b/src/infra/provider-usage.test.ts @@ -214,12 +214,13 @@ describe("provider usage loading", () => { end_time: 1736235600, remains_time: 600, current_interval_total_count: 120, + // API field is remaining quota, not consumed (MiniMax-M2#99). current_interval_usage_count: 30, model_name: "MiniMax-M2.5", }, ], }, - expected: { usedPercent: 25 }, + expected: { usedPercent: 75 }, }, { name: "keeps payload-level MiniMax plan metadata when the usage candidate is nested",