UNPKG

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
"use strict"; 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=