import { z } from 'zod'; import { streamObject } from 'ai'; import { myProvider } from '@/lib/ai/providers'; import { codePrompt, updateDocumentPrompt } from '@/lib/ai/prompts'; import { createDocumentHandler } from '@/lib/artifacts/server'; export const codeDocumentHandler = createDocumentHandler<'code'>({ kind: 'code', onCreateDocument: async ({ title, dataStream }) => { let draftContent = ''; const { fullStream } = streamObject({ model: myProvider.languageModel('artifact-model'), system: codePrompt, prompt: title, schema: z.object({ code: z.string(), }), }); for await (const delta of fullStream) { const { type } = delta; if (type === 'object') { const { object } = delta; const { code } = object; if (code) { dataStream.write({ type: 'data-codeDelta', data: code ?? '', transient: true, }); draftContent = code; } } } return draftContent; }, onUpdateDocument: async ({ document, description, dataStream }) => { let draftContent = ''; const { fullStream } = streamObject({ model: myProvider.languageModel('artifact-model'), system: updateDocumentPrompt(document.content, 'code'), prompt: description, schema: z.object({ code: z.string(), }), }); for await (const delta of fullStream) { const { type } = delta; if (type === 'object') { const { object } = delta; const { code } = object; if (code) { dataStream.write({ type: 'data-codeDelta', data: code ?? '', transient: true, }); draftContent = code; } } } return draftContent; }, });