UNPKG

i18n-ai-translate

Version:

Use LLMs to translate your i18n JSON to any language.

84 lines 2.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chat_interface_1 = __importDefault(require("./chat_interface")); const role_1 = __importDefault(require("../enums/role")); class ChatGPT extends chat_interface_1.default { model; chatParams; history; rateLimiter; constructor(model, rateLimiter) { super(); this.model = model; this.chatParams = null; this.history = []; this.rateLimiter = rateLimiter; } startChat(params) { this.chatParams = params; if (params.messages.length > 0) { this.history = params.messages; } } async sendMessage(message) { if (!this.chatParams) { console.trace("Chat not started"); return ""; } // Limit the history to prevent wasting tokens if (this.history.length > 10) { this.history = this.history.slice(this.history.length - 10); } await this.rateLimiter.wait(); this.rateLimiter.apiCalled(); this.history.push({ content: message, role: role_1.default.User }); try { const response = await this.model.chat.completions.create({ ...this.chatParams, messages: this.history, }); const responseText = response.choices[0].message.content; if (!responseText) { return ""; } this.history.push({ content: responseText, role: role_1.default.Assistant }); return responseText; } catch (err) { console.error(err); return ""; } } resetChatHistory() { this.history = []; } rollbackLastMessage() { if (this.history[this.history.length - 1].role === role_1.default.Assistant) { // Remove the last two messages (user and assistant) // so we can get back to the last successful state in history this.history.pop(); this.history.pop(); } else if (this.history[this.history.length - 1].role === role_1.default.User) { // The model didn't respond, so we only need to remove the user message this.history.pop(); } } invalidTranslation() { this.history.push({ content: this.invalidTranslationMessage(), role: role_1.default.System, }); } invalidStyling() { this.history.push({ content: this.invalidStylingMessage(), role: role_1.default.System, }); } } exports.default = ChatGPT; //# sourceMappingURL=chatgpt.js.map