UNPKG

anylang

Version:

A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs

88 lines (86 loc) 9.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTranslatorsScore = getTranslatorsScore; var _transformers = require("@xenova/transformers"); var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; function cosineSimilarity(a, b) { const dot = a.reduce((sum, val, i) => sum + val * b[i], 0); const normA = Math.sqrt(a.reduce((sum, val) => sum + val * val, 0)); const normB = Math.sqrt(b.reduce((sum, val) => sum + val * val, 0)); return dot / (normA * normB); } class SimilarityScore { constructor() { this.pipe = null; } getPipe() { if (this.pipe) return this.pipe; this.pipe = (0, _transformers.pipeline)('feature-extraction', 'Xenova/all-MiniLM-L6-v2').catch(error => { this.pipe = null; throw error; }); return this.pipe; } getEmbedding(text) { return __awaiter(this, void 0, void 0, function* () { const pipe = yield this.getPipe(); const output = yield pipe(text, { pooling: 'mean', normalize: true }); return Array.from(output.data); }); } score(text1, text2) { return __awaiter(this, void 0, void 0, function* () { return cosineSimilarity(yield this.getEmbedding(text1), yield this.getEmbedding(text2)); }); } } function getTranslatorsScore(translators, reference) { return __awaiter(this, void 0, void 0, function* () { const similarity = new SimilarityScore(); const translatorsScore = {}; for (const translator of translators) { console.log(`Score translator ${translator.translatorName}...`); const translatorInstance = new translator(); const translation = yield translatorInstance.translate(reference.text, 'en', 'ru'); const score = yield similarity.score(reference.translation, translation); console.log(`Score is ${score}`); translatorsScore[translator.translatorName] = score; } return Object.entries(translatorsScore).map(([name, score]) => ({ name, score })).sort((a, b) => b.score - a.score); }); } //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvcnMvX190ZXN0c19fL2JlbmNobWFyay5qcyIsIm5hbWVzIjpbIl90cmFuc2Zvcm1lcnMiLCJyZXF1aXJlIiwiY29zaW5lU2ltaWxhcml0eSIsImEiLCJiIiwiZG90IiwicmVkdWNlIiwic3VtIiwidmFsIiwiaSIsIm5vcm1BIiwiTWF0aCIsInNxcnQiLCJub3JtQiIsIlNpbWlsYXJpdHlTY29yZSIsImNvbnN0cnVjdG9yIiwicGlwZSIsImdldFBpcGUiLCJwaXBlbGluZSIsImNhdGNoIiwiZXJyb3IiLCJnZXRFbWJlZGRpbmciLCJ0ZXh0Iiwib3V0cHV0IiwicG9vbGluZyIsIm5vcm1hbGl6ZSIsIkFycmF5IiwiZnJvbSIsImRhdGEiLCJzY29yZSIsInRleHQxIiwidGV4dDIiLCJnZXRUcmFuc2xhdG9yc1Njb3JlIiwidHJhbnNsYXRvcnMiLCJyZWZlcmVuY2UiLCJzaW1pbGFyaXR5IiwidHJhbnNsYXRvcnNTY29yZSIsInRyYW5zbGF0b3IiLCJjb25zb2xlIiwibG9nIiwidHJhbnNsYXRvck5hbWUiLCJ0cmFuc2xhdG9ySW5zdGFuY2UiLCJ0cmFuc2xhdGlvbiIsInRyYW5zbGF0ZSIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJuYW1lIiwic29ydCJdLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL19fdGVzdHNfXy9iZW5jaG1hcmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmVhdHVyZUV4dHJhY3Rpb25QaXBlbGluZSwgcGlwZWxpbmUgfSBmcm9tICdAeGVub3ZhL3RyYW5zZm9ybWVycyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0b3JDb25zdHJ1Y3RvciB9IGZyb20gJy4uL1RyYW5zbGF0b3InO1xuXG5mdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG5cdGNvbnN0IGRvdCA9IGEucmVkdWNlKChzdW0sIHZhbCwgaSkgPT4gc3VtICsgdmFsICogYltpXSwgMCk7XG5cdGNvbnN0IG5vcm1BID0gTWF0aC5zcXJ0KGEucmVkdWNlKChzdW0sIHZhbCkgPT4gc3VtICsgdmFsICogdmFsLCAwKSk7XG5cdGNvbnN0IG5vcm1CID0gTWF0aC5zcXJ0KGIucmVkdWNlKChzdW0sIHZhbCkgPT4gc3VtICsgdmFsICogdmFsLCAwKSk7XG5cdHJldHVybiBkb3QgLyAobm9ybUEgKiBub3JtQik7XG59XG5cbmNsYXNzIFNpbWlsYXJpdHlTY29yZSB7XG5cdHByaXZhdGUgcGlwZTogUHJvbWlzZTxGZWF0dXJlRXh0cmFjdGlvblBpcGVsaW5lPiB8IEZlYXR1cmVFeHRyYWN0aW9uUGlwZWxpbmUgfCBudWxsID1cblx0XHRudWxsO1xuXHRwcml2YXRlIGdldFBpcGUoKSB7XG5cdFx0aWYgKHRoaXMucGlwZSkgcmV0dXJuIHRoaXMucGlwZTtcblxuXHRcdHRoaXMucGlwZSA9IHBpcGVsaW5lKCdmZWF0dXJlLWV4dHJhY3Rpb24nLCAnWGVub3ZhL2FsbC1NaW5pTE0tTDYtdjInKS5jYXRjaChcblx0XHRcdChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHR0aGlzLnBpcGUgPSBudWxsO1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH0sXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy5waXBlO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldEVtYmVkZGluZyh0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcltdPiB7XG5cdFx0Y29uc3QgcGlwZSA9IGF3YWl0IHRoaXMuZ2V0UGlwZSgpO1xuXG5cdFx0Y29uc3Qgb3V0cHV0ID0gYXdhaXQgcGlwZSh0ZXh0LCB7IHBvb2xpbmc6ICdtZWFuJywgbm9ybWFsaXplOiB0cnVlIH0pO1xuXHRcdHJldHVybiBBcnJheS5mcm9tKG91dHB1dC5kYXRhKSBhcyBudW1iZXJbXTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBzY29yZSh0ZXh0MTogc3RyaW5nLCB0ZXh0Mjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGNvc2luZVNpbWlsYXJpdHkoXG5cdFx0XHRhd2FpdCB0aGlzLmdldEVtYmVkZGluZyh0ZXh0MSksXG5cdFx0XHRhd2FpdCB0aGlzLmdldEVtYmVkZGluZyh0ZXh0MiksXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcnNTY29yZShcblx0dHJhbnNsYXRvcnM6IFRyYW5zbGF0b3JDb25zdHJ1Y3RvcltdLFxuXHRyZWZlcmVuY2U6IHtcblx0XHR0ZXh0OiBzdHJpbmc7XG5cdFx0dHJhbnNsYXRpb246IHN0cmluZztcblx0fSxcbikge1xuXHRjb25zdCBzaW1pbGFyaXR5ID0gbmV3IFNpbWlsYXJpdHlTY29yZSgpO1xuXG5cdGNvbnN0IHRyYW5zbGF0b3JzU2NvcmU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblx0Zm9yIChjb25zdCB0cmFuc2xhdG9yIG9mIHRyYW5zbGF0b3JzKSB7XG5cdFx0Y29uc29sZS5sb2coYFNjb3JlIHRyYW5zbGF0b3IgJHt0cmFuc2xhdG9yLnRyYW5zbGF0b3JOYW1lfS4uLmApO1xuXG5cdFx0Y29uc3QgdHJhbnNsYXRvckluc3RhbmNlID0gbmV3IHRyYW5zbGF0b3IoKTtcblx0XHRjb25zdCB0cmFuc2xhdGlvbiA9IGF3YWl0IHRyYW5zbGF0b3JJbnN0YW5jZS50cmFuc2xhdGUoXG5cdFx0XHRyZWZlcmVuY2UudGV4dCxcblx0XHRcdCdlbicsXG5cdFx0XHQncnUnLFxuXHRcdCk7XG5cblx0XHRjb25zdCBzY29yZSA9IGF3YWl0IHNpbWlsYXJpdHkuc2NvcmUocmVmZXJlbmNlLnRyYW5zbGF0aW9uLCB0cmFuc2xhdGlvbik7XG5cdFx0Y29uc29sZS5sb2coYFNjb3JlIGlzICR7c2NvcmV9YCk7XG5cblx0XHR0cmFuc2xhdG9yc1Njb3JlW3RyYW5zbGF0b3IudHJhbnNsYXRvck5hbWVdID0gc2NvcmU7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0LmVudHJpZXModHJhbnNsYXRvcnNTY29yZSlcblx0XHQubWFwKChbbmFtZSwgc2NvcmVdKSA9PiAoeyBuYW1lLCBzY29yZSB9KSlcblx0XHQuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxTQUFTQyxnQkFBZ0JBLENBQUNDLENBQVcsRUFBRUMsQ0FBVztFQUNqRCxNQUFNQyxHQUFHLEdBQUdGLENBQUMsQ0FBQ0csTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxDQUFDLEtBQUtGLEdBQUcsR0FBR0MsR0FBRyxHQUFHSixDQUFDLENBQUNLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMxRCxNQUFNQyxLQUFLLEdBQUdDLElBQUksQ0FBQ0MsSUFBSSxDQUFDVCxDQUFDLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLEdBQUcsS0FBS0QsR0FBRyxHQUFHQyxHQUFHLEdBQUdBLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuRSxNQUFNSyxLQUFLLEdBQUdGLElBQUksQ0FBQ0MsSUFBSSxDQUFDUixDQUFDLENBQUNFLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLEdBQUcsS0FBS0QsR0FBRyxHQUFHQyxHQUFHLEdBQUdBLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuRSxPQUFPSCxHQUFHLElBQUlLLEtBQUssR0FBR0csS0FBSyxDQUFDO0FBQzdCO0FBRUEsTUFBTUMsZUFBZTtFQUFyQkMsWUFBQTtJQUNTLEtBQUFDLElBQUksR0FDWCxJQUFJO0VBMEJOO0VBekJTQyxPQUFPQSxDQUFBO0lBQ2QsSUFBSSxJQUFJLENBQUNELElBQUksRUFBRSxPQUFPLElBQUksQ0FBQ0EsSUFBSTtJQUUvQixJQUFJLENBQUNBLElBQUksR0FBRyxJQUFBRSxzQkFBUSxFQUFDLG9CQUFvQixFQUFFLHlCQUF5QixDQUFDLENBQUNDLEtBQUssQ0FDekVDLEtBQWMsSUFBSTtNQUNsQixJQUFJLENBQUNKLElBQUksR0FBRyxJQUFJO01BQ2hCLE1BQU1JLEtBQUs7SUFDWixDQUFDLENBQ0Q7SUFDRCxPQUFPLElBQUksQ0FBQ0osSUFBSTtFQUNqQjtFQUVhSyxZQUFZQSxDQUFDQyxJQUFZOztNQUNyQyxNQUFNTixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNDLE9BQU8sRUFBRTtNQUVqQyxNQUFNTSxNQUFNLEdBQUcsTUFBTVAsSUFBSSxDQUFDTSxJQUFJLEVBQUU7UUFBRUUsT0FBTyxFQUFFLE1BQU07UUFBRUMsU0FBUyxFQUFFO01BQUksQ0FBRSxDQUFDO01BQ3JFLE9BQU9DLEtBQUssQ0FBQ0MsSUFBSSxDQUFDSixNQUFNLENBQUNLLElBQUksQ0FBYTtJQUMzQyxDQUFDOztFQUVZQyxLQUFLQSxDQUFDQyxLQUFhLEVBQUVDLEtBQWE7O01BQzlDLE9BQU83QixnQkFBZ0IsQ0FDdEIsTUFBTSxJQUFJLENBQUNtQixZQUFZLENBQUNTLEtBQUssQ0FBQyxFQUM5QixNQUFNLElBQUksQ0FBQ1QsWUFBWSxDQUFDVSxLQUFLLENBQUMsQ0FDOUI7SUFDRixDQUFDOzs7QUFHSSxTQUFnQkMsbUJBQW1CQSxDQUN4Q0MsV0FBb0MsRUFDcENDLFNBR0M7O0lBRUQsTUFBTUMsVUFBVSxHQUFHLElBQUlyQixlQUFlLEVBQUU7SUFFeEMsTUFBTXNCLGdCQUFnQixHQUEyQixFQUFFO0lBQ25ELEtBQUssTUFBTUMsVUFBVSxJQUFJSixXQUFXLEVBQUU7TUFDckNLLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG9CQUFvQkYsVUFBVSxDQUFDRyxjQUFjLEtBQUssQ0FBQztNQUUvRCxNQUFNQyxrQkFBa0IsR0FBRyxJQUFJSixVQUFVLEVBQUU7TUFDM0MsTUFBTUssV0FBVyxHQUFHLE1BQU1ELGtCQUFrQixDQUFDRSxTQUFTLENBQ3JEVCxTQUFTLENBQUNaLElBQUksRUFDZCxJQUFJLEVBQ0osSUFBSSxDQUNKO01BRUQsTUFBTU8sS0FBSyxHQUFHLE1BQU1NLFVBQVUsQ0FBQ04sS0FBSyxDQUFDSyxTQUFTLENBQUNRLFdBQVcsRUFBRUEsV0FBVyxDQUFDO01BQ3hFSixPQUFPLENBQUNDLEdBQUcsQ0FBQyxZQUFZVixLQUFLLEVBQUUsQ0FBQztNQUVoQ08sZ0JBQWdCLENBQUNDLFVBQVUsQ0FBQ0csY0FBYyxDQUFDLEdBQUdYLEtBQUs7SUFDcEQ7SUFFQSxPQUFPZSxNQUFNLENBQUNDLE9BQU8sQ0FBQ1QsZ0JBQWdCLENBQUMsQ0FDckNVLEdBQUcsQ0FBQyxDQUFDLENBQUNDLElBQUksRUFBRWxCLEtBQUssQ0FBQyxNQUFNO01BQUVrQixJQUFJO01BQUVsQjtJQUFLLENBQUUsQ0FBQyxDQUFDLENBQ3pDbUIsSUFBSSxDQUFDLENBQUM3QyxDQUFDLEVBQUVDLENBQUMsS0FBS0EsQ0FBQyxDQUFDeUIsS0FBSyxHQUFHMUIsQ0FBQyxDQUFDMEIsS0FBSyxDQUFDO0VBQ3BDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=