UNPKG

@nomyx/assistant

Version:

A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)

69 lines (68 loc) 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageCollationMiddleware = void 0; class MessageCollationMiddleware { async preProcess(messages) { const collatedMessages = []; let currentRole = null; let currentContent = []; for (const message of messages) { if (message.role !== currentRole) { if (currentRole !== null) { collatedMessages.push({ role: currentRole, content: currentContent.join('\n') }); } currentRole = message.role; currentContent = [message.content]; } else { currentContent.push(message.content); } } if (currentRole !== null) { collatedMessages.push({ role: currentRole, content: currentContent.join('\n') }); } // Ensure roles alternate between "user" and "assistant" const alternatingMessages = []; let lastRole = null; for (const message of collatedMessages) { if (message.role === 'system') { // Prepend system messages to the user's first message if (alternatingMessages.length === 0) { alternatingMessages.push({ role: 'system', content: `${message.content}\n\n` }); } else { alternatingMessages[0].content = `${message.content}\n\n${alternatingMessages[0].content}`; } } else if (message.role !== lastRole) { alternatingMessages.push(message); lastRole = message.role; } else { // If the role is the same as the last one, insert a dummy message from the other role const dummyRole = message.role === 'user' ? 'assistant' : 'user'; alternatingMessages.push({ role: dummyRole, content: 'Continuing the conversation...' }); alternatingMessages.push(message); lastRole = message.role; } } return alternatingMessages; } async postProcess(response) { // No post-processing needed for this middleware return response; } } exports.MessageCollationMiddleware = MessageCollationMiddleware;