152 lines
3.5 KiB
TypeScript
152 lines
3.5 KiB
TypeScript
import { Message } from '../shared/types';
|
|
import {
|
|
experimental_buildOpenAIMessages,
|
|
ChatCompletionMessageParam,
|
|
} from './openai';
|
|
|
|
describe('experimental_buildOpenAIMessages', () => {
|
|
it('should correctly map messages to ChatCompletionMessageParam', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'system',
|
|
content: 'System message',
|
|
},
|
|
{
|
|
id: '2',
|
|
role: 'user',
|
|
content: 'User message',
|
|
},
|
|
{
|
|
id: '3',
|
|
role: 'assistant',
|
|
content: 'Assistant message',
|
|
function_call: {
|
|
name: 'functionName',
|
|
arguments: 'arg1, arg2',
|
|
},
|
|
},
|
|
{
|
|
id: '4',
|
|
role: 'function',
|
|
content: 'Function message',
|
|
name: 'functionName',
|
|
},
|
|
{
|
|
id: '5',
|
|
role: 'tool',
|
|
content: 'Tool message',
|
|
name: 'toolName',
|
|
tool_call_id: 'toolCallId',
|
|
},
|
|
];
|
|
|
|
const expected: ChatCompletionMessageParam[] = [
|
|
{
|
|
role: 'system',
|
|
content: 'System message',
|
|
},
|
|
{
|
|
role: 'user',
|
|
content: 'User message',
|
|
},
|
|
{
|
|
role: 'assistant',
|
|
content: 'Assistant message',
|
|
function_call: {
|
|
name: 'functionName',
|
|
arguments: 'arg1, arg2',
|
|
},
|
|
},
|
|
{
|
|
role: 'function',
|
|
content: 'Function message',
|
|
name: 'functionName',
|
|
},
|
|
{
|
|
role: 'tool',
|
|
content: 'Tool message',
|
|
tool_call_id: 'toolCallId',
|
|
},
|
|
];
|
|
|
|
const result = experimental_buildOpenAIMessages(messages);
|
|
|
|
expect(result).toEqual(expected);
|
|
});
|
|
|
|
it('should throw an error for invalid function call in assistant message', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'assistant',
|
|
content: 'Assistant message',
|
|
function_call: 'invalidFunctionCall',
|
|
},
|
|
];
|
|
|
|
expect(() => experimental_buildOpenAIMessages(messages)).toThrowError(
|
|
'Invalid function call in message. Expected a function call object',
|
|
);
|
|
});
|
|
|
|
it('should throw an error for invalid function call in function message', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'function',
|
|
content: 'Function message',
|
|
},
|
|
];
|
|
|
|
expect(() => experimental_buildOpenAIMessages(messages)).toThrowError(
|
|
'Invalid function call in message. Expected a name',
|
|
);
|
|
});
|
|
|
|
it('should throw an error for unsupported message role', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'data',
|
|
content: 'Data message',
|
|
},
|
|
];
|
|
|
|
expect(() => experimental_buildOpenAIMessages(messages)).toThrowError(
|
|
"unsupported message role 'data'",
|
|
);
|
|
});
|
|
|
|
it('should throw an error for invalid tool message', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'tool',
|
|
content: 'Tool message',
|
|
name: undefined,
|
|
},
|
|
];
|
|
|
|
expect(() => experimental_buildOpenAIMessages(messages)).toThrowError(
|
|
'Invalid tool message. Expected a name',
|
|
);
|
|
});
|
|
|
|
it('should throw an error for invalid tool message', () => {
|
|
const messages: Message[] = [
|
|
{
|
|
id: '1',
|
|
role: 'tool',
|
|
content: 'Tool message',
|
|
name: 'toolName',
|
|
tool_call_id: undefined,
|
|
},
|
|
];
|
|
|
|
expect(() => experimental_buildOpenAIMessages(messages)).toThrowError(
|
|
'Invalid tool message. Expected a tool_call_id',
|
|
);
|
|
});
|
|
});
|