'use server'; import { generateText, type UIMessage } from 'ai'; import { cookies } from 'next/headers'; import { deleteMessagesByChatIdAfterTimestamp, getMessageById, updateChatVisiblityById, } from '@/lib/db/queries'; import type { VisibilityType } from '@/components/visibility-selector'; import { myProvider } from '@/lib/ai/providers'; export async function saveChatModelAsCookie(model: string) { const cookieStore = await cookies(); cookieStore.set('chat-model', model); } export async function generateTitleFromUserMessage({ message, }: { message: UIMessage; }) { const { text: title } = await generateText({ model: myProvider.languageModel('title-model'), system: `\n - you will generate a short title based on the first message a user begins a conversation with - ensure it is not more than 80 characters long - the title should be a summary of the user's message - do not use quotes or colons`, prompt: JSON.stringify(message), }); return title; } export async function deleteTrailingMessages({ id }: { id: string }) { const [message] = await getMessageById({ id }); await deleteMessagesByChatIdAfterTimestamp({ chatId: message.chatId, timestamp: message.createdAt, }); } export async function updateChatVisibility({ chatId, visibility, }: { chatId: string; visibility: VisibilityType; }) { await updateChatVisiblityById({ chatId, visibility }); }