LibreChat / api /app /clients /prompts /formatMessages.spec.js
N.Achyuth Reddy
Upload 683 files
9705b6c
const { formatMessage, formatLangChainMessages, formatFromLangChain } = require('./formatMessages');
const { HumanMessage, AIMessage, SystemMessage } = require('langchain/schema');
describe('formatMessage', () => {
it('formats user message', () => {
const input = {
message: {
sender: 'user',
text: 'Hello',
},
userName: 'John',
};
const result = formatMessage(input);
expect(result).toEqual({
role: 'user',
content: 'Hello',
name: 'John',
});
});
it('formats a realistic user message', () => {
const input = {
message: {
_id: '6512cdfb92cbf69fea615331',
messageId: 'b620bf73-c5c3-4a38-b724-76886aac24c4',
__v: 0,
cancelled: false,
conversationId: '5c23d24f-941f-4aab-85df-127b596c8aa5',
createdAt: Date.now(),
error: false,
finish_reason: null,
isCreatedByUser: true,
isEdited: false,
model: null,
parentMessageId: '00000000-0000-0000-0000-000000000000',
sender: 'User',
text: 'hi',
tokenCount: 5,
unfinished: false,
updatedAt: Date.now(),
user: '6512cdf475f05c86d44c31d2',
},
userName: 'John',
};
const result = formatMessage(input);
expect(result).toEqual({
role: 'user',
content: 'hi',
name: 'John',
});
});
it('formats assistant message', () => {
const input = {
message: {
sender: 'assistant',
text: 'Hi there',
},
assistantName: 'Assistant',
};
const result = formatMessage(input);
expect(result).toEqual({
role: 'assistant',
content: 'Hi there',
name: 'Assistant',
});
});
it('formats system message', () => {
const input = {
message: {
role: 'system',
text: 'Hi there',
},
};
const result = formatMessage(input);
expect(result).toEqual({
role: 'system',
content: 'Hi there',
});
});
it('formats user message with langChain', () => {
const input = {
message: {
sender: 'user',
text: 'Hello',
},
userName: 'John',
langChain: true,
};
const result = formatMessage(input);
expect(result).toBeInstanceOf(HumanMessage);
expect(result.lc_kwargs.content).toEqual(input.message.text);
expect(result.lc_kwargs.name).toEqual(input.userName);
});
it('formats assistant message with langChain', () => {
const input = {
message: {
sender: 'assistant',
text: 'Hi there',
},
assistantName: 'Assistant',
langChain: true,
};
const result = formatMessage(input);
expect(result).toBeInstanceOf(AIMessage);
expect(result.lc_kwargs.content).toEqual(input.message.text);
expect(result.lc_kwargs.name).toEqual(input.assistantName);
});
it('formats system message with langChain', () => {
const input = {
message: {
role: 'system',
text: 'This is a system message.',
},
langChain: true,
};
const result = formatMessage(input);
expect(result).toBeInstanceOf(SystemMessage);
expect(result.lc_kwargs.content).toEqual(input.message.text);
});
it('formats langChain messages into OpenAI payload format', () => {
const human = {
message: new HumanMessage({
content: 'Hello',
}),
};
const system = {
message: new SystemMessage({
content: 'Hello',
}),
};
const ai = {
message: new AIMessage({
content: 'Hello',
}),
};
const humanResult = formatMessage(human);
const systemResult = formatMessage(system);
const aiResult = formatMessage(ai);
expect(humanResult).toEqual({
role: 'user',
content: 'Hello',
});
expect(systemResult).toEqual({
role: 'system',
content: 'Hello',
});
expect(aiResult).toEqual({
role: 'assistant',
content: 'Hello',
});
});
});
describe('formatLangChainMessages', () => {
it('formats an array of messages for LangChain', () => {
const messages = [
{
role: 'system',
content: 'This is a system message',
},
{
sender: 'user',
text: 'Hello',
},
{
sender: 'assistant',
text: 'Hi there',
},
];
const formatOptions = {
userName: 'John',
assistantName: 'Assistant',
};
const result = formatLangChainMessages(messages, formatOptions);
expect(result).toHaveLength(3);
expect(result[0]).toBeInstanceOf(SystemMessage);
expect(result[1]).toBeInstanceOf(HumanMessage);
expect(result[2]).toBeInstanceOf(AIMessage);
expect(result[0].lc_kwargs.content).toEqual(messages[0].content);
expect(result[1].lc_kwargs.content).toEqual(messages[1].text);
expect(result[2].lc_kwargs.content).toEqual(messages[2].text);
expect(result[1].lc_kwargs.name).toEqual(formatOptions.userName);
expect(result[2].lc_kwargs.name).toEqual(formatOptions.assistantName);
});
describe('formatFromLangChain', () => {
it('should merge kwargs and additional_kwargs', () => {
const message = {
kwargs: {
content: 'some content',
name: 'dan',
additional_kwargs: {
function_call: {
name: 'dall-e',
arguments: '{\n "input": "Subject: hedgehog, Style: cute"\n}',
},
},
},
};
const expected = {
content: 'some content',
name: 'dan',
function_call: {
name: 'dall-e',
arguments: '{\n "input": "Subject: hedgehog, Style: cute"\n}',
},
};
expect(formatFromLangChain(message)).toEqual(expected);
});
it('should handle messages without additional_kwargs', () => {
const message = {
kwargs: {
content: 'some content',
name: 'dan',
},
};
const expected = {
content: 'some content',
name: 'dan',
};
expect(formatFromLangChain(message)).toEqual(expected);
});
it('should handle empty messages', () => {
const message = {
kwargs: {},
};
const expected = {};
expect(formatFromLangChain(message)).toEqual(expected);
});
});
});