test(wp7-02): enforce exact image dimensions
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 51s

This commit is contained in:
suyx
2026-08-04 16:28:31 +08:00
parent 470d243b5b
commit 84a845136e
4 changed files with 75 additions and 17 deletions
+19 -15
View File
@@ -8,11 +8,11 @@ import {
validateSanitizedEvidence,
} from "./wp7-02-controlled-executor.mjs";
const ratioParts = Object.freeze({
"3:4": [3, 4],
"1:1": [1, 1],
"4:3": [4, 3],
"9:16": [9, 16],
const productDimensions = Object.freeze({
"3:4": { height: 1440, width: 1080 },
"1:1": { height: 1080, width: 1080 },
"4:3": { height: 1080, width: 1440 },
"9:16": { height: 1920, width: 1080 },
});
function sha256(value) {
@@ -71,9 +71,9 @@ function promptForScenario(scenario) {
return `Create one safe abstract test image; ${subject}; no text, logos, people, or real places; aspect ratio ${scenario.ratio}.`;
}
function ratioMatches(dimensions, ratio) {
const [widthPart, heightPart] = ratioParts[ratio];
return dimensions.width * heightPart === dimensions.height * widthPart;
function dimensionsMatch(dimensions, ratio) {
const expected = productDimensions[ratio];
return dimensions.width === expected.width && dimensions.height === expected.height;
}
function safeErrorCode(error) {
@@ -100,7 +100,7 @@ export async function runControlledRealScenarios({ fetchImpl = fetch, maxRealCal
reference: scenario.input === "reference_image" ? { bytes: referenceBytes, mime_type: "image/png" } : undefined,
token,
});
const ratioPassed = ratioMatches(result.normalized.dimensions, scenario.ratio);
const dimensionsPassed = dimensionsMatch(result.normalized.dimensions, scenario.ratio);
calls.push(validateSanitizedEvidence({
duration_ms: result.duration_ms,
http_status: result.http_status,
@@ -109,22 +109,26 @@ export async function runControlledRealScenarios({ fetchImpl = fetch, maxRealCal
response: result.response_evidence,
scenario_id: `real-${index + 1}`,
source: "real_gateway",
status: ratioPassed ? "passed" : "failed",
validation: { ratio: ratioPassed ? "passed" : "failed", response: "passed" },
status: dimensionsPassed ? "passed" : "failed",
validation: { dimensions: dimensionsPassed ? "passed" : "failed", response: "passed" },
}));
} catch (error) {
calls.push({
const failed = {
error_code: safeErrorCode(error),
input: scenario.input,
requested_ratio: scenario.ratio,
scenario_id: `real-${index + 1}`,
source: "real_gateway",
status: "failed",
});
...(error?.safe_response_shape ? { response_shape: error.safe_response_shape } : {}),
};
calls.push(validateSanitizedEvidence(failed));
if (["WP7_02_RESPONSE_SINGLE_IMAGE_REQUIRED", "WP7_02_RESPONSE_MEDIA_INVALID", "WP7_02_CREDENTIAL_INVALID",
"WP7_02_UPSTREAM_HTTP_401", "WP7_02_UPSTREAM_HTTP_403", "WP7_02_UPSTREAM_HTTP_404", "WP7_02_UPSTREAM_HTTP_429"].includes(failed.error_code)) break;
}
}
referenceBytes.fill(0);
const blockers = calls.filter((call) => call.status !== "passed").map((call) => `${call.scenario_id}:${call.error_code ?? "ratio_or_response_invalid"}`);
const blockers = calls.filter((call) => call.status !== "passed").map((call) => `${call.scenario_id}:${call.error_code ?? "dimensions_or_response_invalid"}`);
return validateSanitizedEvidence({
blockers,
calls,
@@ -176,7 +180,7 @@ export function assembleControlledModelEvidence({ deterministicState, modelConfi
throw new Error("WP7_02_DETERMINISTIC_STATE_INCOMPLETE");
}
const execution = buildDeterministicExecutionEvidence(modelConfig.model_id, runId);
const ratioRows = Object.keys(ratioParts).map((ratio) => ({
const ratioRows = Object.keys(productDimensions).map((ratio) => ({
outputs: passedCall(realExecution.calls, (call) => call.requested_ratio === ratio) ? 1 : 0,
ratio,
status: passedCall(realExecution.calls, (call) => call.requested_ratio === ratio) ? "passed" : "failed",