diff --git a/actions/setup/js/parse_copilot_log.cjs b/actions/setup/js/parse_copilot_log.cjs index 48223d8a005..f070c749b8c 100644 --- a/actions/setup/js/parse_copilot_log.cjs +++ b/actions/setup/js/parse_copilot_log.cjs @@ -17,12 +17,13 @@ const main = createEngineLogParser({ */ function extractPremiumRequestCount(logContent) { // Try various patterns that might appear in the Copilot CLI output - const patterns = [/premium\s+requests?\s+consumed:?\s*(\d+)/i, /(\d+)\s+premium\s+requests?\s+consumed/i, /consumed\s+(\d+)\s+premium\s+requests?/i]; + // Use \d+(?:\.\d+)? to match both integers and decimals (e.g., 1, 0.33, 2.5) + const patterns = [/premium\s+requests?\s+consumed:?\s*(\d+(?:\.\d+)?)/i, /(\d+(?:\.\d+)?)\s+premium\s+requests?\s+consumed/i, /consumed\s+(\d+(?:\.\d+)?)\s+premium\s+requests?/i]; for (const pattern of patterns) { const match = logContent.match(pattern); if (match && match[1]) { - const count = parseInt(match[1], 10); + const count = parseFloat(match[1]); if (!isNaN(count) && count > 0) { return count; } diff --git a/actions/setup/js/parse_copilot_log.test.cjs b/actions/setup/js/parse_copilot_log.test.cjs index 241707af18e..1e2a262af7a 100644 --- a/actions/setup/js/parse_copilot_log.test.cjs +++ b/actions/setup/js/parse_copilot_log.test.cjs @@ -232,6 +232,22 @@ describe("parse_copilot_log.cjs", () => { it("should ignore invalid numbers", () => { expect(extractPremiumRequestCount("Premium requests: abc")).toBe(1); }); + + it("should parse integer premium request count", () => { + expect(extractPremiumRequestCount("premium requests consumed: 2")).toBe(2); + }); + + it("should parse decimal premium request count (e.g. gemini-3-flash-preview)", () => { + expect(extractPremiumRequestCount("premium requests consumed: 0.33")).toBe(0.33); + }); + + it("should parse decimal in alternate format", () => { + expect(extractPremiumRequestCount("0.33 premium requests consumed")).toBe(0.33); + }); + + it("should parse decimal in consumed-first format", () => { + expect(extractPremiumRequestCount("consumed 0.5 premium requests")).toBe(0.5); + }); }); describe("main function integration", () => {