anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
90 lines (88 loc) • 7.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ChatGPTLLMResponseSchema = exports.ChatGPTLLMFetcher = void 0;
var _zod = require("zod");
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());
});
};
const ChatGPTLLMResponseSchema = exports.ChatGPTLLMResponseSchema = _zod.z.object({
choices: _zod.z.object({
message: _zod.z.object({
content: _zod.z.string()
})
}).array().min(1)
});
class ChatGPTLLMFetcher {
constructor({
apiKey,
model,
apiOrigin
}) {
this.config = {
apiKey: apiKey,
model: model !== null && model !== void 0 ? model : 'gpt-4o-mini',
apiOrigin: apiOrigin !== null && apiOrigin !== void 0 ? apiOrigin : 'https://api.openai.com'
};
this.apiUrl = new URL('/v1/chat/completions', this.config.apiOrigin).toString();
}
getLengthLimit() {
return 5000;
}
getRequestsTimeout() {
return 500;
}
fetch(prompt) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield fetch(this.apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${this.config.apiKey}`
},
body: JSON.stringify({
model: this.config.model,
messages: [{
role: 'user',
content: prompt
}]
})
});
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}: ${response.statusText}`);
}
// validate response structure
const parseResult = ChatGPTLLMResponseSchema.parse(yield response.json());
// a list of chat completion choices, there can be more than one only if specified directly.
// source: https://platform.openai.com/docs/api-reference/chat/object#chat/object-choices
return parseResult.choices[0].message.content;
});
}
}
exports.ChatGPTLLMFetcher = ChatGPTLLMFetcher;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvcnMvTExNVHJhbnNsYXRvcnMvQ2hhdEdQVExMTVRyYW5zbGF0b3IvQ2hhdEdQVExMTUZldGNoZXIuanMiLCJuYW1lcyI6WyJfem9kIiwicmVxdWlyZSIsIkNoYXRHUFRMTE1SZXNwb25zZVNjaGVtYSIsImV4cG9ydHMiLCJ6Iiwib2JqZWN0IiwiY2hvaWNlcyIsIm1lc3NhZ2UiLCJjb250ZW50Iiwic3RyaW5nIiwiYXJyYXkiLCJtaW4iLCJDaGF0R1BUTExNRmV0Y2hlciIsImNvbnN0cnVjdG9yIiwiYXBpS2V5IiwibW9kZWwiLCJhcGlPcmlnaW4iLCJjb25maWciLCJhcGlVcmwiLCJVUkwiLCJ0b1N0cmluZyIsImdldExlbmd0aExpbWl0IiwiZ2V0UmVxdWVzdHNUaW1lb3V0IiwiZmV0Y2giLCJwcm9tcHQiLCJyZXNwb25zZSIsIm1ldGhvZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlcyIsInJvbGUiLCJvayIsIkVycm9yIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInBhcnNlUmVzdWx0IiwicGFyc2UiLCJqc29uIl0sInNvdXJjZXMiOlsidHJhbnNsYXRvcnMvTExNVHJhbnNsYXRvcnMvQ2hhdEdQVExMTVRyYW5zbGF0b3IvQ2hhdEdQVExMTUZldGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IExMTUZldGNoZXIgfSBmcm9tICcuLic7XG5cbmV4cG9ydCBjb25zdCBDaGF0R1BUTExNUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG5cdGNob2ljZXM6IHpcblx0XHQub2JqZWN0KHsgbWVzc2FnZTogei5vYmplY3QoeyBjb250ZW50OiB6LnN0cmluZygpIH0pIH0pXG5cdFx0LmFycmF5KClcblx0XHQubWluKDEpLFxufSk7XG5cbmV4cG9ydCBjbGFzcyBDaGF0R1BUTExNRmV0Y2hlciBpbXBsZW1lbnRzIExMTUZldGNoZXIge1xuXHRwcml2YXRlIHJlYWRvbmx5IGFwaVVybDogc3RyaW5nO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZztcblxuXHRjb25zdHJ1Y3Rvcih7XG5cdFx0YXBpS2V5LFxuXHRcdG1vZGVsLFxuXHRcdGFwaU9yaWdpbixcblx0fToge1xuXHRcdGFwaUtleTogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHRcdGFwaU9yaWdpbj86IHN0cmluZztcblx0fSkge1xuXHRcdHRoaXMuY29uZmlnID0ge1xuXHRcdFx0YXBpS2V5OiBhcGlLZXksXG5cdFx0XHRtb2RlbDogbW9kZWwgPz8gJ2dwdC00by1taW5pJyxcblx0XHRcdGFwaU9yaWdpbjogYXBpT3JpZ2luID8/ICdodHRwczovL2FwaS5vcGVuYWkuY29tJyxcblx0XHR9O1xuXHRcdHRoaXMuYXBpVXJsID0gbmV3IFVSTCgnL3YxL2NoYXQvY29tcGxldGlvbnMnLCB0aGlzLmNvbmZpZy5hcGlPcmlnaW4pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TGVuZ3RoTGltaXQoKSB7XG5cdFx0cmV0dXJuIDUwMDA7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVxdWVzdHNUaW1lb3V0KCkge1xuXHRcdHJldHVybiA1MDA7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZmV0Y2gocHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0XHRBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYXBpS2V5fWAsXG5cdFx0XHR9LFxuXHRcdFx0Ym9keTogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRtb2RlbDogdGhpcy5jb25maWcubW9kZWwsXG5cdFx0XHRcdG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IHByb21wdCB9XSxcblx0XHRcdH0pLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFyZXNwb25zZS5vaykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsaWRhdGUgcmVzcG9uc2Ugc3RydWN0dXJlXG5cdFx0Y29uc3QgcGFyc2VSZXN1bHQgPSBDaGF0R1BUTExNUmVzcG9uc2VTY2hlbWEucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcblxuXHRcdC8vIGEgbGlzdCBvZiBjaGF0IGNvbXBsZXRpb24gY2hvaWNlcywgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgb25seSBpZiBzcGVjaWZpZWQgZGlyZWN0bHkuXG5cdFx0Ly8gc291cmNlOiBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2NoYXQvb2JqZWN0I2NoYXQvb2JqZWN0LWNob2ljZXNcblx0XHRyZXR1cm4gcGFyc2VSZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsSUFBQSxHQUFBQyxPQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSU8sTUFBTUMsd0JBQXdCLEdBQUFDLE9BQUEsQ0FBQUQsd0JBQUEsR0FBR0UsTUFBQyxDQUFDQyxNQUFNLENBQUM7RUFDaERDLE9BQU8sRUFBRUYsTUFBQyxDQUNSQyxNQUFNLENBQUM7SUFBRUUsT0FBTyxFQUFFSCxNQUFDLENBQUNDLE1BQU0sQ0FBQztNQUFFRyxPQUFPLEVBQUVKLE1BQUMsQ0FBQ0ssTUFBTTtJQUFFLENBQUU7RUFBQyxDQUFFLENBQUMsQ0FDdERDLEtBQUssRUFBRSxDQUNQQyxHQUFHLENBQUMsQ0FBQztDQUNQLENBQUM7QUFFSSxNQUFPQyxpQkFBaUI7RUFJN0JDLFlBQVk7SUFDWEMsTUFBTTtJQUNOQyxLQUFLO0lBQ0xDO0VBQVMsQ0FLVDtJQUNBLElBQUksQ0FBQ0MsTUFBTSxHQUFHO01BQ2JILE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxLQUFLLEVBQUVBLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUksYUFBYTtNQUM3QkMsU0FBUyxFQUFFQSxTQUFTLGFBQVRBLFNBQVMsY0FBVEEsU0FBUyxHQUFJO0tBQ3hCO0lBQ0QsSUFBSSxDQUFDRSxNQUFNLEdBQUcsSUFBSUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQ0YsTUFBTSxDQUFDRCxTQUFTLENBQUMsQ0FBQ0ksUUFBUSxFQUFFO0VBQ2hGO0VBRU9DLGNBQWNBLENBQUE7SUFDcEIsT0FBTyxJQUFJO0VBQ1o7RUFFT0Msa0JBQWtCQSxDQUFBO0lBQ3hCLE9BQU8sR0FBRztFQUNYO0VBRWFDLEtBQUtBLENBQUNDLE1BQWM7O01BQ2hDLE1BQU1DLFFBQVEsR0FBRyxNQUFNRixLQUFLLENBQUMsSUFBSSxDQUFDTCxNQUFNLEVBQUU7UUFDekNRLE1BQU0sRUFBRSxNQUFNO1FBQ2RDLE9BQU8sRUFBRTtVQUNSLGNBQWMsRUFBRSxrQkFBa0I7VUFDbENDLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQ1gsTUFBTSxDQUFDSCxNQUFNO1NBQzNDO1FBQ0RlLElBQUksRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDcEJoQixLQUFLLEVBQUUsSUFBSSxDQUFDRSxNQUFNLENBQUNGLEtBQUs7VUFDeEJpQixRQUFRLEVBQUUsQ0FBQztZQUFFQyxJQUFJLEVBQUUsTUFBTTtZQUFFekIsT0FBTyxFQUFFZ0I7VUFBTSxDQUFFO1NBQzVDO09BQ0QsQ0FBQztNQUVGLElBQUksQ0FBQ0MsUUFBUSxDQUFDUyxFQUFFLEVBQUU7UUFDakIsTUFBTSxJQUFJQyxLQUFLLENBQ2QsOEJBQThCVixRQUFRLENBQUNXLE1BQU0sS0FBS1gsUUFBUSxDQUFDWSxVQUFVLEVBQUUsQ0FDdkU7TUFDRjtNQUVBO01BQ0EsTUFBTUMsV0FBVyxHQUFHcEMsd0JBQXdCLENBQUNxQyxLQUFLLENBQUMsTUFBTWQsUUFBUSxDQUFDZSxJQUFJLEVBQUUsQ0FBQztNQUV6RTtNQUNBO01BQ0EsT0FBT0YsV0FBVyxDQUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUNDLE9BQU87SUFDOUMsQ0FBQzs7O0FBQ0RMLE9BQUEsQ0FBQVMsaUJBQUEsR0FBQUEsaUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=