woolball-client
Version:
Client-side library for Woolball enabling secure browser resource sharing for distributed AI task processing
54 lines (53 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.translation = translation;
async function translation(data) {
const { input, model, srcLang, tgtLang, provider, ...options } = data;
if (!input || !srcLang || !tgtLang) {
throw new Error("Required parameters: input, srcLang and tgtLang");
}
if (provider === 'prompt-api' && 'Translator' in self) {
try {
const translatorCapabilities = await self.Translator.availability({
sourceLanguage: srcLang,
targetLanguage: tgtLang,
});
if (translatorCapabilities === 'available' || translatorCapabilities === 'downloadable') {
const translator = await self.Translator.create({
sourceLanguage: srcLang,
targetLanguage: tgtLang,
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
const translatedText = await translator.translate(input);
return { translatedText };
}
}
catch (error) {
console.error('Chrome Translator API error:', error);
}
}
const { pipeline, env } = await import('@huggingface/transformers');
env.allowLocalModels = false;
const { getTransformersDevice } = await import('../../../utils/environment.js');
const pipe = await pipeline('translation', model, {
dtype: data.dtype,
device: getTransformersDevice('wasm'),
});
const translationOptions = {
...options
};
translationOptions.src_lang = srcLang;
translationOptions.tgt_lang = tgtLang;
const result = await pipe(input, translationOptions);
let translatedText = '';
if (Array.isArray(result) && result.length > 0) {
const firstResult = result[0];
translatedText = firstResult.translation_text || '';
}
await pipe.dispose();
return { translatedText };
}