diff --git a/public/scripts/PromptManager.js b/public/scripts/PromptManager.js index 8d4edee91..d158d2983 100644 --- a/public/scripts/PromptManager.js +++ b/public/scripts/PromptManager.js @@ -546,6 +546,8 @@ PromptManagerModule.prototype.preparePrompt = function (prompt, original = null) else preparedPrompt.content = substituteParams(prompt.content); } + if (prompt.name) preparedPrompt.name = prompt.name; + return preparedPrompt; } diff --git a/public/scripts/openai.js b/public/scripts/openai.js index 487bc6fda..b28b9c612 100644 --- a/public/scripts/openai.js +++ b/public/scripts/openai.js @@ -250,7 +250,8 @@ function setOpenAIMessages(chat) { // Apply the "wrap in quotes" option if (role == 'user' && oai_settings.wrap_in_quotes) content = `"${content}"`; - openai_msgs[i] = { "role": role, "content": content }; + const name = chat[j]['name']; + openai_msgs[i] = { "role": role, "content": content, name: name}; j++; } @@ -393,7 +394,7 @@ function populateChatHistory(prompts, chatCompletion) { // Insert chat messages as long as there is budget available [...openai_msgs].reverse().every((prompt, index) => { - const chatMessage = new Message(prompt.role, prompt.content, 'chatHistory-' + index); + const chatMessage = new Message(prompt.role, prompt.content, 'chatHistory-' + index, prompt.name); if (chatCompletion.canAfford(chatMessage)) chatCompletion.insertAtStart(chatMessage, 'chatHistory'); else return false; return true; @@ -615,6 +616,8 @@ function prepareOpenAIMessages({ } } finally { promptManager.populateTokenHandler(chatCompletion.getMessages()); + + // All information are up-to-date, render without dry-run. promptManager.render(false); } @@ -1186,10 +1189,11 @@ class TokenBudgetExceededError extends Error { class Message { tokens; identifier; role; content; - constructor(role, content, identifier) { + constructor(role, content, identifier, name = '') { this.identifier = identifier; this.role = role; this.content = content; + this.name = name; if (this.content) { this.tokens = tokenHandler.count({role: this.role, content: this.content}) @@ -1315,7 +1319,8 @@ class ChatCompletion { for (let item of this.messages.collection) { if (item instanceof MessageCollection) { const messages = item.collection.reduce((acc, message) => { - if (message.content) acc.push({role: message.role, content: message.content}); + const name = message.name; + if (message.content) acc.push({role: message.role, ...(name && { name }), content: message.content}); return acc; }, []); chat.push(...messages);