fix(wp7-02): normalize generated image dimensions
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 2m17s
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 2m17s
This commit is contained in:
@@ -1,16 +1,14 @@
|
||||
import { createHash } from "node:crypto";
|
||||
|
||||
import {
|
||||
gptImageRequestSizeForRatio,
|
||||
normalizeImageOutputToRatio,
|
||||
} from "../../apps/worker/src/image-output-normalizer.mjs";
|
||||
import { WP7_02_MODEL_IDS, buildModelContractPlan } from "./wp7-02-external-contract.mjs";
|
||||
|
||||
export const WP7_02_CONTROLLED_REAL_LIMIT = 120;
|
||||
|
||||
const ratios = ["3:4", "1:1", "4:3", "9:16"];
|
||||
const openAiSizes = Object.freeze({
|
||||
"3:4": "1080x1440",
|
||||
"1:1": "1080x1080",
|
||||
"4:3": "1440x1080",
|
||||
"9:16": "1080x1920",
|
||||
});
|
||||
const allowedMimeTypes = new Set(["image/jpeg", "image/png", "image/webp"]);
|
||||
const forbiddenEvidenceKeys = /(?:^|_)(?:absolute_path|authorization|body|credential|credential_value|image_bytes|image_data|original_image|password|path|prompt|raw|raw_provider_payload|raw_prompt|secret|token)(?:_|$)/i;
|
||||
|
||||
@@ -87,7 +85,7 @@ export function buildProviderRequest({ modelConfig, prompt, ratio, reference })
|
||||
model: config.model_id,
|
||||
prompt,
|
||||
response_format: "b64_json",
|
||||
size: openAiSizes[ratio],
|
||||
size: gptImageRequestSizeForRatio(ratio),
|
||||
};
|
||||
if (reference) body.image = `data:${reference.mime_type};base64,${reference.bytes.toString("base64")}`;
|
||||
return { body, headers, method: "POST", url: config.route_profile.endpoint };
|
||||
@@ -221,6 +219,7 @@ export function buildSanitizedResponseEvidence(normalized) {
|
||||
dimensions: structuredClone(normalized.dimensions),
|
||||
evidence_hash: normalized.evidence_hash,
|
||||
mime: normalized.mime,
|
||||
...(normalized.normalization ? { normalization: structuredClone(normalized.normalization) } : {}),
|
||||
usage_summary: structuredClone(normalized.usage_summary),
|
||||
};
|
||||
return validateSanitizedEvidence(evidence);
|
||||
@@ -264,7 +263,25 @@ export async function executeProviderRequest({ fetchImpl = fetch, modelConfig, p
|
||||
const providerResponse = await response.json();
|
||||
let normalized;
|
||||
try {
|
||||
normalized = normalizeProviderResponse(modelConfig, providerResponse);
|
||||
const providerNormalized = normalizeProviderResponse(modelConfig, providerResponse);
|
||||
const adapted = await normalizeImageOutputToRatio({
|
||||
bytes: providerNormalized.bytes,
|
||||
mimeType: providerNormalized.mime,
|
||||
pixelHeight: providerNormalized.dimensions.height,
|
||||
pixelWidth: providerNormalized.dimensions.width,
|
||||
ratio,
|
||||
});
|
||||
normalized = {
|
||||
...providerNormalized,
|
||||
bytes: adapted.bytes,
|
||||
dimensions: { height: adapted.pixelHeight, width: adapted.pixelWidth },
|
||||
evidence_hash: `sha256:${sha256(adapted.bytes)}`,
|
||||
mime: adapted.mimeType,
|
||||
normalization: {
|
||||
applied: adapted.normalized,
|
||||
upstream_dimensions: { height: adapted.upstreamPixelHeight, width: adapted.upstreamPixelWidth },
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error && /^WP7_02_[A-Z0-9_]+$/.test(error.message)) {
|
||||
error.safe_response_shape = describeProviderResponseShape(providerResponse);
|
||||
|
||||
Reference in New Issue
Block a user