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