@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
JavaScript
;
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;