| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import type { UIMessage } from 'ai'
- import { describe, expect, it } from 'vitest'
- import { prepareMessagesForAPI } from './message-utils'
- describe('prepareMessagesForAPI', () => {
- it('should limit messages to last 7 entries', () => {
- const messages: UIMessage[] = Array.from({ length: 10 }, (_, i) => ({
- id: `msg-${i}`,
- role: 'user',
- parts: [{ type: 'text', text: `Message ${i}` }],
- }))
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(7)
- expect(result[0].parts[0]).toEqual({ type: 'text', text: 'Message 3' })
- expect(result[6].parts[0]).toEqual({ type: 'text', text: 'Message 9' })
- })
- it('should remove results property from assistant messages', () => {
- const messages = [
- {
- id: 'msg-1',
- role: 'assistant',
- parts: [{ type: 'text', text: 'Response' }],
- results: { data: 'some data' },
- },
- ] as Array<UIMessage & { results?: unknown }>
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(1)
- expect(result[0]).not.toHaveProperty('results')
- expect(result[0].parts[0]).toEqual({ type: 'text', text: 'Response' })
- })
- it('should preserve messages without results', () => {
- const messages: UIMessage[] = [
- {
- id: 'msg-1',
- role: 'user',
- parts: [{ type: 'text', text: 'Question' }],
- },
- {
- id: 'msg-2',
- role: 'assistant',
- parts: [{ type: 'text', text: 'Answer' }],
- },
- ]
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(2)
- expect(result[0]).toEqual(messages[0])
- expect(result[1]).toEqual(messages[1])
- })
- it('should handle empty array', () => {
- const messages: UIMessage[] = []
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(0)
- expect(result).toEqual([])
- })
- it('should handle array with fewer than 7 messages', () => {
- const messages: UIMessage[] = [
- { id: 'msg-1', role: 'user', parts: [{ type: 'text', text: 'Message 1' }] },
- { id: 'msg-2', role: 'assistant', parts: [{ type: 'text', text: 'Message 2' }] },
- { id: 'msg-3', role: 'user', parts: [{ type: 'text', text: 'Message 3' }] },
- ]
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(3)
- expect(result).toEqual(messages)
- })
- it('should handle array with exactly 7 messages', () => {
- const messages: UIMessage[] = Array.from({ length: 7 }, (_, i) => ({
- id: `msg-${i}`,
- role: i % 2 === 0 ? 'user' : 'assistant',
- parts: [{ type: 'text', text: `Message ${i}` }],
- }))
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(7)
- expect(result).toEqual(messages)
- })
- it('should only remove results from assistant messages, not user messages', () => {
- const messages = [
- {
- id: 'msg-1',
- role: 'user',
- parts: [{ type: 'text', text: 'Question' }],
- results: { data: 'user data' },
- },
- {
- id: 'msg-2',
- role: 'assistant',
- parts: [{ type: 'text', text: 'Answer' }],
- results: { data: 'assistant data' },
- },
- ] as Array<UIMessage & { results?: unknown }>
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(2)
- // User message keeps results (not removed by the function)
- expect((result[0] as any).results).toEqual({ data: 'user data' })
- // Assistant message has results removed
- expect(result[1]).not.toHaveProperty('results')
- })
- it('should handle mixed messages with and without results', () => {
- const messages = [
- {
- id: 'msg-1',
- role: 'assistant',
- parts: [{ type: 'text', text: 'First' }],
- results: { data: 'data1' },
- },
- {
- id: 'msg-2',
- role: 'user',
- parts: [{ type: 'text', text: 'Second' }],
- },
- {
- id: 'msg-3',
- role: 'assistant',
- parts: [{ type: 'text', text: 'Third' }],
- },
- {
- id: 'msg-4',
- role: 'assistant',
- parts: [{ type: 'text', text: 'Fourth' }],
- results: { data: 'data2' },
- },
- ] as Array<UIMessage & { results?: unknown }>
- const result = prepareMessagesForAPI(messages)
- expect(result).toHaveLength(4)
- expect(result[0]).not.toHaveProperty('results')
- expect(result[1]).toEqual(messages[1])
- expect(result[2]).toEqual(messages[2])
- expect(result[3]).not.toHaveProperty('results')
- })
- })
|