in src/pipelines.js [3483:3540]
async function loadItems(mapping, model, pretrainedOptions) {
const result = Object.create(null);
/**@type {Promise[]} */
const promises = [];
for (const [name, cls] of mapping.entries()) {
if (!cls) continue;
/**@type {Promise} */
let promise;
if (Array.isArray(cls)) {
promise = new Promise(async (resolve, reject) => {
let e;
for (const c of cls) {
if (c === null) {
// If null, we resolve it immediately, meaning the relevant
// class was not found, but it is optional.
resolve(null);
return;
}
try {
resolve(await c.from_pretrained(model, pretrainedOptions));
return;
} catch (err) {
if (err.message?.includes('Unsupported model type')) {
// If the error is due to an unsupported model type, we
// save the error and try the next class.
e = err;
} else if (err.message?.includes('Could not locate file')) {
e = err;
} else {
reject(err);
return;
}
}
}
reject(e);
})
} else {
promise = cls.from_pretrained(model, pretrainedOptions);
}
result[name] = promise;
promises.push(promise);
}
// Wait for all promises to resolve (in parallel)
await Promise.all(promises);
// Then assign to result
for (const [name, promise] of Object.entries(result)) {
result[name] = await promise;
}
return result;
}