import { smoothStream, streamText } from 'ai'; import { myProvider } from '@/lib/ai/providers'; import { createDocumentHandler } from '@/lib/artifacts/server'; import { updateDocumentPrompt } from '@/lib/ai/prompts'; export const textDocumentHandler = createDocumentHandler<'text'>({ kind: 'text', onCreateDocument: async ({ title, dataStream }) => { let draftContent = ''; const { fullStream } = streamText({ model: myProvider.languageModel('artifact-model'), system: 'Write about the given topic. Markdown is supported. Use headings wherever appropriate.', experimental_transform: smoothStream({ chunking: 'word' }), prompt: title, }); for await (const delta of fullStream) { const { type } = delta; if (type === 'text-delta') { const { text } = delta; draftContent += text; dataStream.write({ type: 'data-textDelta', data: text, transient: true, }); } } return draftContent; }, onUpdateDocument: async ({ document, description, dataStream }) => { let draftContent = ''; const { fullStream } = streamText({ model: myProvider.languageModel('artifact-model'), system: updateDocumentPrompt(document.content, 'text'), experimental_transform: smoothStream({ chunking: 'word' }), prompt: description, providerOptions: { openai: { prediction: { type: 'content', content: document.content, }, }, }, }); for await (const delta of fullStream) { const { type } = delta; if (type === 'text-delta') { const { text } = delta; draftContent += text; dataStream.write({ type: 'data-textDelta', data: text, transient: true, }); } } return draftContent; }, });