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 { cookies } from "next/headers";
import type { VisibilityType } from "@/components/visibility-selector"; import type { VisibilityType } from "@/components/visibility-selector";
import { myProvider } from "@/lib/ai/providers"; import { myProvider } from "@/lib/ai/providers";
import { titlePrompt } from "@/lib/ai/prompts";
import { import {
deleteMessagesByChatIdAfterTimestamp, deleteMessagesByChatIdAfterTimestamp,
getMessageById, getMessageById,
updateChatVisiblityById, updateChatVisiblityById,
} from "@/lib/db/queries"; } from "@/lib/db/queries";
import { getTextFromMessage } from "@/lib/utils";
export async function saveChatModelAsCookie(model: string) { export async function saveChatModelAsCookie(model: string) {
const cookieStore = await cookies(); const cookieStore = await cookies();
@ -22,12 +24,8 @@ export async function generateTitleFromUserMessage({
}) { }) {
const { text: title } = await generateText({ const { text: title } = await generateText({
model: myProvider.languageModel("title-model"), model: myProvider.languageModel("title-model"),
system: `\n system: titlePrompt,
- you will generate a short title based on the first message a user begins a conversation with prompt: getTextFromMessage(message),
- 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; return title;

View file

@ -112,3 +112,9 @@ export const updateDocumentPrompt = (
${currentContent}`; ${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 return message.parts
.filter((part) => part.type === 'text') .filter((part) => part.type === 'text')
.map((part) => part.text) .map((part) => (part as { type: 'text'; text: string}).text)
.join(''); .join('');
} }