in packages/core/src/models/clip.js [20:89]
async run() {
const {
result: [test, expected, cleanup],
time: setupTime,
} = await time(async () => {
const model_id = "onnx-internal-testing/tiny-random-CLIPModel-ONNX";
const tokenizer = await AutoTokenizer.from_pretrained(model_id);
const processor = await AutoImageProcessor.from_pretrained(model_id);
const model = await CLIPModel.from_pretrained(model_id, {
...DEFAULT_MODEL_OPTIONS,
...this.options,
});
const texts = ["a photo of a car", "a photo of a football match"];
const text_inputs = tokenizer(texts, { padding: true, truncation: true });
const image_inputs = await processor(DUMMY_IMAGE);
const expected = {
logits_per_image: [1, 2],
logits_per_text: [2, 1],
text_embeds: [2, 64],
image_embeds: [1, 64],
};
return [
async () => {
const {
logits_per_image,
logits_per_text,
text_embeds,
image_embeds,
} = await model({
...text_inputs,
...image_inputs,
});
return {
logits_per_image: logits_per_image.dims,
logits_per_text: logits_per_text.dims,
text_embeds: text_embeds.dims,
image_embeds: image_embeds.dims,
};
},
expected,
() => model.dispose(),
];
});
const times = [];
const numRuns = DEFAULT_NUM_WARMUP_RUNS + this.num_runs;
for (let i = 0; i < numRuns; ++i) {
const { result, time: executionTime } = await time(test);
const { pass, message } = toBeCloseToNested(result, expected);
if (!pass) {
console.log(result);
console.log(expected);
throw new Error(message());
}
if (i >= DEFAULT_NUM_WARMUP_RUNS) times.push(executionTime);
}
const stats = {
[this.name]: computeStatistics(times),
};
const { time: disposeTime } = await time(cleanup);
return {
setupTime,
stats,
disposeTime,
};
}