Spaces:
Runtime error
Runtime error
const { HumanChatMessage, AIChatMessage } = require('langchain/schema'); | |
const PluginsClient = require('../PluginsClient'); | |
const crypto = require('crypto'); | |
jest.mock('../../../lib/db/connectDb'); | |
jest.mock('../../../models/Conversation', () => { | |
return function () { | |
return { | |
save: jest.fn(), | |
deleteConvos: jest.fn(), | |
}; | |
}; | |
}); | |
describe('PluginsClient', () => { | |
let TestAgent; | |
let options = { | |
tools: [], | |
modelOptions: { | |
model: 'gpt-3.5-turbo', | |
temperature: 0, | |
max_tokens: 2, | |
}, | |
agentOptions: { | |
model: 'gpt-3.5-turbo', | |
}, | |
}; | |
let parentMessageId; | |
let conversationId; | |
const fakeMessages = []; | |
const userMessage = 'Hello, ChatGPT!'; | |
const apiKey = 'fake-api-key'; | |
beforeEach(() => { | |
TestAgent = new PluginsClient(apiKey, options); | |
TestAgent.loadHistory = jest | |
.fn() | |
.mockImplementation((conversationId, parentMessageId = null) => { | |
if (!conversationId) { | |
TestAgent.currentMessages = []; | |
return Promise.resolve([]); | |
} | |
const orderedMessages = TestAgent.constructor.getMessagesForConversation( | |
fakeMessages, | |
parentMessageId, | |
); | |
const chatMessages = orderedMessages.map((msg) => | |
msg?.isCreatedByUser || msg?.role?.toLowerCase() === 'user' | |
? new HumanChatMessage(msg.text) | |
: new AIChatMessage(msg.text), | |
); | |
TestAgent.currentMessages = orderedMessages; | |
return Promise.resolve(chatMessages); | |
}); | |
TestAgent.sendMessage = jest.fn().mockImplementation(async (message, opts = {}) => { | |
if (opts && typeof opts === 'object') { | |
TestAgent.setOptions(opts); | |
} | |
const conversationId = opts.conversationId || crypto.randomUUID(); | |
const parentMessageId = opts.parentMessageId || '00000000-0000-0000-0000-000000000000'; | |
const userMessageId = opts.overrideParentMessageId || crypto.randomUUID(); | |
this.pastMessages = await TestAgent.loadHistory( | |
conversationId, | |
TestAgent.options?.parentMessageId, | |
); | |
const userMessage = { | |
text: message, | |
sender: 'ChatGPT', | |
isCreatedByUser: true, | |
messageId: userMessageId, | |
parentMessageId, | |
conversationId, | |
}; | |
const response = { | |
sender: 'ChatGPT', | |
text: 'Hello, User!', | |
isCreatedByUser: false, | |
messageId: crypto.randomUUID(), | |
parentMessageId: userMessage.messageId, | |
conversationId, | |
}; | |
fakeMessages.push(userMessage); | |
fakeMessages.push(response); | |
return response; | |
}); | |
}); | |
test('initializes PluginsClient without crashing', () => { | |
expect(TestAgent).toBeInstanceOf(PluginsClient); | |
}); | |
test('check setOptions function', () => { | |
expect(TestAgent.agentIsGpt3).toBe(true); | |
}); | |
describe('sendMessage', () => { | |
test('sendMessage should return a response message', async () => { | |
const expectedResult = expect.objectContaining({ | |
sender: 'ChatGPT', | |
text: expect.any(String), | |
isCreatedByUser: false, | |
messageId: expect.any(String), | |
parentMessageId: expect.any(String), | |
conversationId: expect.any(String), | |
}); | |
const response = await TestAgent.sendMessage(userMessage); | |
console.log(response); | |
parentMessageId = response.messageId; | |
conversationId = response.conversationId; | |
expect(response).toEqual(expectedResult); | |
}); | |
test('sendMessage should work with provided conversationId and parentMessageId', async () => { | |
const userMessage = 'Second message in the conversation'; | |
const opts = { | |
conversationId, | |
parentMessageId, | |
}; | |
const expectedResult = expect.objectContaining({ | |
sender: 'ChatGPT', | |
text: expect.any(String), | |
isCreatedByUser: false, | |
messageId: expect.any(String), | |
parentMessageId: expect.any(String), | |
conversationId: opts.conversationId, | |
}); | |
const response = await TestAgent.sendMessage(userMessage, opts); | |
parentMessageId = response.messageId; | |
expect(response.conversationId).toEqual(conversationId); | |
expect(response).toEqual(expectedResult); | |
}); | |
test('should return chat history', async () => { | |
const chatMessages = await TestAgent.loadHistory(conversationId, parentMessageId); | |
expect(TestAgent.currentMessages).toHaveLength(4); | |
expect(chatMessages[0].text).toEqual(userMessage); | |
}); | |
}); | |
}); | |