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); }); }); });