import { streamText } from "ai"; import { sheetPrompt, updateDocumentPrompt } from "@/lib/ai/prompts"; import { getLanguageModel } from "@/lib/ai/providers"; import { createDocumentHandler } from "@/lib/artifacts/server"; export const sheetDocumentHandler = createDocumentHandler<"sheet">({ kind: "sheet", onCreateDocument: async ({ title, dataStream, modelId }) => { let draftContent = ""; const { fullStream } = streamText({ model: getLanguageModel(modelId), system: `${sheetPrompt}\n\nOutput ONLY the raw CSV data. No explanations, no markdown fences.`, prompt: title, }); for await (const delta of fullStream) { if (delta.type === "text-delta") { draftContent += delta.text; dataStream.write({ type: "data-sheetDelta", data: draftContent, transient: true, }); } } return draftContent; }, onUpdateDocument: async ({ document, description, dataStream, modelId }) => { let draftContent = ""; const { fullStream } = streamText({ model: getLanguageModel(modelId), system: `${updateDocumentPrompt(document.content, "sheet")}\n\nOutput ONLY the raw CSV data. No explanations, no markdown fences.`, prompt: description, }); for await (const delta of fullStream) { if (delta.type === "text-delta") { draftContent += delta.text; dataStream.write({ type: "data-sheetDelta", data: draftContent, transient: true, }); } } return draftContent; }, });