import { simulateReadableStream } from 'ai'; import { MockLanguageModelV2 } from 'ai/test'; import { getResponseChunksByPrompt } from '@/tests/prompts/utils'; export const chatModel = new MockLanguageModelV2({ doGenerate: async () => ({ rawCall: { rawPrompt: null, rawSettings: {} }, finishReason: 'stop', usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 }, content: [{ type: 'text', text: 'Hello, world!' }], warnings: [], }), doStream: async ({ prompt }) => ({ stream: simulateReadableStream({ chunkDelayInMs: 500, initialDelayInMs: 1000, chunks: getResponseChunksByPrompt(prompt), }), rawCall: { rawPrompt: null, rawSettings: {} }, }), }); export const reasoningModel = new MockLanguageModelV2({ doGenerate: async () => ({ rawCall: { rawPrompt: null, rawSettings: {} }, finishReason: 'stop', usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 }, content: [{ type: 'text', text: 'Hello, world!' }], warnings: [], }), doStream: async ({ prompt }) => ({ stream: simulateReadableStream({ chunkDelayInMs: 500, initialDelayInMs: 1000, chunks: getResponseChunksByPrompt(prompt, true), }), rawCall: { rawPrompt: null, rawSettings: {} }, }), }); export const titleModel = new MockLanguageModelV2({ doGenerate: async () => ({ rawCall: { rawPrompt: null, rawSettings: {} }, finishReason: 'stop', usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 }, content: [{ type: 'text', text: 'This is a test title' }], warnings: [], }), doStream: async () => ({ stream: simulateReadableStream({ chunkDelayInMs: 500, initialDelayInMs: 1000, chunks: [ { id: '1', type: 'text-start' }, { id: '1', type: 'text-delta', delta: 'This is a test title' }, { id: '1', type: 'text-end' }, { type: 'finish', finishReason: 'stop', usage: { inputTokens: 3, outputTokens: 10, totalTokens: 13 }, }, ], }), rawCall: { rawPrompt: null, rawSettings: {} }, }), }); export const artifactModel = new MockLanguageModelV2({ doGenerate: async () => ({ rawCall: { rawPrompt: null, rawSettings: {} }, finishReason: 'stop', usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 }, content: [{ type: 'text', text: 'Hello, world!' }], warnings: [], }), doStream: async ({ prompt }) => ({ stream: simulateReadableStream({ chunkDelayInMs: 50, initialDelayInMs: 100, chunks: getResponseChunksByPrompt(prompt), }), rawCall: { rawPrompt: null, rawSettings: {} }, }), });