import type { Message } from 'ai' import { appendResponseMessages, appendClientMessage, streamText } from 'ai' import { createWorkersAI } from 'workers-ai-provider' import { loadChat } from '~~/server/utils/chat' export default defineEventHandler(async (event) => { const { id, message, model, agent } = await readBody(event) console.log(model, agent) const workersAI = createWorkersAI({ binding: hubAI() }) const previousMessages = await loadChat(id) const messages = appendClientMessage({ messages: previousMessages, message }) const result = streamText({ model: workersAI('@cf/meta/llama-3.1-8b-instruct'), // system, TODO: add system // prompt, TODO: add prompt messages, // tools, TODO: add tools async onFinish({ response }) { await saveChat({ id, messages: appendResponseMessages({ messages, responseMessages: response.messages }) }) } }) result.consumeStream() return result.toDataStreamResponse() }) async function saveChat({ id, messages }: { id: string, messages: Message[] }) { const hub = hubBlob() await hub.delete(`chats/${id}.json`) await $fetch('/api/chats', { method: 'POST', body: { file: { name: `${id}.json`, content: JSON.stringify(messages, null, 2) } } }) }