UNPKG

@aj-archipelago/cortex

Version:

Cortex is a GraphQL API for AI. It provides a simple, extensible interface for using AI services from OpenAI, Azure and others.

146 lines (123 loc) 6.01 kB
// util.test.js // Tests for utility functions in cortex/lib/util.js import test from 'ava'; import { removeOldImageAndFileContent } from '../lib/util.js'; // Test removeOldImageAndFileContent function test('removeOldImageAndFileContent should return original chat history if empty', t => { const chatHistory = []; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, chatHistory); }); test('removeOldImageAndFileContent should return original chat history if null or undefined', t => { t.deepEqual(removeOldImageAndFileContent(null), null); t.deepEqual(removeOldImageAndFileContent(undefined), undefined); }); test('removeOldImageAndFileContent should not modify chat history without image or file content', t => { const chatHistory = [ { role: 'user', content: 'Hello' }, { role: 'assistant', content: 'Hi there!' }, { role: 'user', content: 'How are you?' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, chatHistory); }); test('removeOldImageAndFileContent should keep only the last user message with image content', t => { const chatHistory = [ { role: 'user', content: [{ type: 'image_url', url: 'image1.jpg' }, 'Text 1'] }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: [{ type: 'image_url', url: 'image2.jpg' }, 'Text 2'] }, { role: 'assistant', content: 'I see image 2' } ]; const expected = [ { role: 'user', content: ['Text 1'] }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: [{ type: 'image_url', url: 'image2.jpg' }, 'Text 2'] }, { role: 'assistant', content: 'I see image 2' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); }); test('removeOldImageAndFileContent should handle string JSON content', t => { const chatHistory = [ { role: 'user', content: JSON.stringify({ type: 'image_url', url: 'image1.jpg' }) }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: JSON.stringify({ type: 'image_url', url: 'image2.jpg' }) }, { role: 'assistant', content: 'I see image 2' } ]; const expected = [ { role: 'user', content: '' }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: JSON.stringify({ type: 'image_url', url: 'image2.jpg' }) }, { role: 'assistant', content: 'I see image 2' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); }); test('removeOldImageAndFileContent should handle object content', t => { const chatHistory = [ { role: 'user', content: { type: 'image_url', url: 'image1.jpg' } }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: { type: 'image_url', url: 'image2.jpg' } }, { role: 'assistant', content: 'I see image 2' } ]; const expected = [ { role: 'user', content: '' }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: { type: 'image_url', url: 'image2.jpg' } }, { role: 'assistant', content: 'I see image 2' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); }); test('removeOldImageAndFileContent should handle file content', t => { const chatHistory = [ { role: 'user', content: { type: 'file', url: 'document1.pdf' } }, { role: 'assistant', content: 'I see document 1' }, { role: 'user', content: { type: 'file', url: 'document2.pdf' } }, { role: 'assistant', content: 'I see document 2' } ]; const expected = [ { role: 'user', content: '' }, { role: 'assistant', content: 'I see document 1' }, { role: 'user', content: { type: 'file', url: 'document2.pdf' } }, { role: 'assistant', content: 'I see document 2' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); }); test('removeOldImageAndFileContent should only process user messages', t => { const chatHistory = [ { role: 'user', content: { type: 'image_url', url: 'image1.jpg' } }, { role: 'assistant', content: { type: 'image_url', url: 'response1.jpg' } }, { role: 'user', content: { type: 'image_url', url: 'image2.jpg' } }, { role: 'assistant', content: { type: 'image_url', url: 'response2.jpg' } } ]; const expected = [ { role: 'user', content: '' }, { role: 'assistant', content: { type: 'image_url', url: 'response1.jpg' } }, { role: 'user', content: { type: 'image_url', url: 'image2.jpg' } }, { role: 'assistant', content: { type: 'image_url', url: 'response2.jpg' } } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); }); test('removeOldImageAndFileContent should handle mixed content types', t => { const chatHistory = [ { role: 'user', content: [{ type: 'image_url', url: 'image1.jpg' }, 'Text 1'] }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: 'Just text' }, { role: 'assistant', content: 'I see text' }, { role: 'user', content: [{ type: 'file', url: 'document.pdf' }, 'Text 2'] }, { role: 'assistant', content: 'I see document' } ]; const expected = [ { role: 'user', content: ['Text 1'] }, { role: 'assistant', content: 'I see image 1' }, { role: 'user', content: 'Just text' }, { role: 'assistant', content: 'I see text' }, { role: 'user', content: [{ type: 'file', url: 'document.pdf' }, 'Text 2'] }, { role: 'assistant', content: 'I see document' } ]; const result = removeOldImageAndFileContent(chatHistory); t.deepEqual(result, expected); });