From 756df2e9554da097679e6c4d3c75deff025098b9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 28 Mar 2026 19:13:47 +0000 Subject: [PATCH] test: tune gateway live probe skips --- .../gateway-models.profiles.live.test.ts | 51 ++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/src/gateway/gateway-models.profiles.live.test.ts b/src/gateway/gateway-models.profiles.live.test.ts index f22aebd86b5..9f68681d2d2 100644 --- a/src/gateway/gateway-models.profiles.live.test.ts +++ b/src/gateway/gateway-models.profiles.live.test.ts @@ -476,6 +476,45 @@ function isExecReadNonceProbeMiss(error: string): boolean { return error.toLowerCase().includes("exec+read probe missing nonce"); } +function isPromptProbeMiss(error: string): boolean { + const msg = error.toLowerCase(); + return msg.includes("not meaningful:") || msg.includes("missing required keywords:"); +} + +function shouldSkipToolNonceProbeMiss(provider: string): boolean { + return ( + provider === "anthropic" || + provider === "minimax" || + provider === "opencode" || + provider === "opencode-go" || + provider === "xai" || + provider === "zai" + ); +} + +describe("shouldSkipToolNonceProbeMiss", () => { + it.each([ + { provider: "anthropic", expected: true }, + { provider: "minimax", expected: true }, + { provider: "opencode", expected: true }, + { provider: "opencode-go", expected: true }, + { provider: "xai", expected: true }, + { provider: "zai", expected: true }, + { provider: "openai", expected: false }, + ])("returns $expected for $provider", ({ provider, expected }) => { + expect(shouldSkipToolNonceProbeMiss(provider)).toBe(expected); + }); +}); + +describe("isPromptProbeMiss", () => { + it.each([ + { error: "not meaningful: let me think", expected: true }, + { error: "missing required keywords: event loop summary", expected: true }, + { error: "tool probe missing nonce: nonce-a", expected: false }, + ])("returns $expected for $error", ({ error, expected }) => { + expect(isPromptProbeMiss(error)).toBe(expected); + }); +}); function isMissingProfileError(error: string): boolean { return /no credentials found for profile/i.test(error); } @@ -1447,6 +1486,11 @@ async function runGatewayModelSuite(params: GatewayModelSuiteParams) { logProgress(`${progressLabel}: skip (provider unavailable)`); break; } + if (model.provider === "openrouter" && isPromptProbeMiss(message)) { + skippedCount += 1; + logProgress(`${progressLabel}: skip (openrouter prompt probe miss)`); + break; + } if (params.allowNotFoundSkip && isModelNotFoundErrorMessage(message)) { skippedCount += 1; logProgress(`${progressLabel}: skip (model not found)`); @@ -1503,12 +1547,7 @@ async function runGatewayModelSuite(params: GatewayModelSuiteParams) { logProgress(`${progressLabel}: skip (exec/read workspace isolation)`); break; } - if ( - (model.provider === "anthropic" || - model.provider === "minimax" || - model.provider === "opencode-go") && - isToolNonceProbeMiss(message) - ) { + if (shouldSkipToolNonceProbeMiss(model.provider) && isToolNonceProbeMiss(message)) { skippedCount += 1; logProgress(`${progressLabel}: skip (${model.provider} tool probe nonce miss)`); break;