test: accept synchronous vip98k image results

This commit is contained in:
134 2026-09-07 20:27:56 +08:00 committed by root
parent 42359fbf0f
commit 2fb53b4279

View File

@ -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 {