Fix: generate title from user message — use only text parts (#1279)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Mateo Ortegon 2025-10-31 20:09:46 -04:00 committed by GitHub
parent 6a02d4fa9a
commit d366de3c86
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 8 deletions

View file

@ -4,11 +4,13 @@ import { generateText, type UIMessage } from "ai";
import { cookies } from "next/headers";
import type { VisibilityType } from "@/components/visibility-selector";
import { myProvider } from "@/lib/ai/providers";
import { titlePrompt } from "@/lib/ai/prompts";
import {
deleteMessagesByChatIdAfterTimestamp,
getMessageById,
updateChatVisiblityById,
} from "@/lib/db/queries";
import { getTextFromMessage } from "@/lib/utils";
export async function saveChatModelAsCookie(model: string) {
const cookieStore = await cookies();
@ -22,12 +24,8 @@ export async function generateTitleFromUserMessage({
}) {
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),
system: titlePrompt,
prompt: getTextFromMessage(message),
});
return title;

View file

@ -112,3 +112,9 @@ export const updateDocumentPrompt = (
${currentContent}`;
};
export const titlePrompt = `\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`

View file

@ -108,9 +108,9 @@ export function convertToUIMessages(messages: DBMessage[]): ChatMessage[] {
}));
}
export function getTextFromMessage(message: ChatMessage): string {
export function getTextFromMessage(message: ChatMessage | UIMessage): string {
return message.parts
.filter((part) => part.type === 'text')
.map((part) => part.text)
.map((part) => (part as { type: 'text'; text: string}).text)
.join('');
}