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
JavaScript
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=
;