diff --git a/scripts/test-vip98k-image-models.ts b/scripts/test-vip98k-image-models.ts index 9f2fd03a3..8199907c0 100644 --- a/scripts/test-vip98k-image-models.ts +++ b/scripts/test-vip98k-image-models.ts @@ -134,6 +134,17 @@ function extractTaskId(payload: unknown) { return String(data.taskId || data.task_id || data.id || root.id || ""); } +function extractImmediateOutputUrl(payload: unknown) { + const root = asRecord(payload); + const data = Array.isArray(root.data) ? root.data : []; + for (const item of data) { + const record = asRecord(item); + const url = String(record.url || record.image_url || "").trim(); + if (url.startsWith("http")) return url; + } + return ""; +} + async function fetchCatalog(apiKey: string) { const [catalogPayload, authorizedPayload] = await Promise.all([ readJson( @@ -265,6 +276,7 @@ async function analyzeImage(url: string, modelId: string) { } async function testModel(apiKey: string, model: JsonRecord) { + const startedAt = Date.now(); const modelId = String(model.id || ""); const invocations = (Array.isArray(model.invocations) ? model.invocations @@ -307,14 +319,24 @@ async function testModel(apiKey: string, model: JsonRecord) { signal: AbortSignal.timeout(120_000), }), ); + const immediateOutputUrl = extractImmediateOutputUrl(submitted); const taskId = extractTaskId(submitted); - if (!taskId) throw new Error(`${modelId} returned no task ID`); - const resultPath = String(invocation.result_path || "").replace( - "{task_id}", - encodeURIComponent(taskId), - ); - if (!resultPath) throw new Error(`${modelId} publishes no result path`); - const completed = await pollTask(apiKey, taskId, resultPath); + let completed: { durationMs: number; outputUrl: string }; + if (immediateOutputUrl) { + completed = { + durationMs: Date.now() - startedAt, + outputUrl: immediateOutputUrl, + }; + } else { + if (!taskId) throw new Error(`${modelId} returned neither a task ID nor an image URL`); + const resultPath = String(invocation.result_path || "").replace( + "{task_id}", + encodeURIComponent(taskId), + ); + if (!resultPath) throw new Error(`${modelId} publishes no result path`); + completed = await pollTask(apiKey, taskId, resultPath); + completed.durationMs = Date.now() - startedAt; + } const image = await analyzeImage(completed.outputUrl, modelId); const passed = USES_CUSTOM_REFERENCES || image.bothReferencesDetected; return {