Add message actions (#482)

This commit is contained in:
Jeremy 2024-11-05 17:15:51 +03:00 committed by GitHub
parent 94f563f179
commit 171914941e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 1011 additions and 150 deletions

View file

@ -2,14 +2,13 @@ import {
CoreAssistantMessage,
CoreMessage,
CoreToolMessage,
generateId,
Message,
ToolInvocation,
} from 'ai';
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
import { Chat, Document } from '@/db/schema';
import { Message as DBMessage, Document } from '@/db/schema';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
@ -86,7 +85,7 @@ function addToolMessageToChat({
}
export function convertToUIMessages(
messages: Array<CoreMessage>
messages: Array<DBMessage>
): Array<Message> {
return messages.reduce((chatMessages: Array<Message>, message) => {
if (message.role === 'tool') {
@ -117,8 +116,8 @@ export function convertToUIMessages(
}
chatMessages.push({
id: generateId(),
role: message.role,
id: message.id,
role: message.role as Message['role'],
content: textContent,
toolInvocations,
});
@ -127,29 +126,6 @@ export function convertToUIMessages(
}, []);
}
export function getTitleFromChat(chat: Chat) {
const messages = convertToUIMessages(chat.messages as Array<CoreMessage>);
const firstMessage = messages[0];
if (!firstMessage) {
return 'Untitled';
}
return firstMessage.content;
}
const emptyAssistantMessage = [
{
role: 'assistant',
content: [
{
type: 'text',
text: '',
},
],
},
];
export function sanitizeResponseMessages(
messages: Array<CoreToolMessage | CoreAssistantMessage>
): Array<CoreToolMessage | CoreAssistantMessage> {
@ -222,6 +198,11 @@ export function sanitizeUIMessages(messages: Array<Message>): Array<Message> {
);
}
export function getMostRecentUserMessage(messages: Array<CoreMessage>) {
const userMessages = messages.filter((message) => message.role === 'user');
return userMessages.at(-1);
}
export function getDocumentTimestampByIndex(
documents: Array<Document>,
index: number
@ -231,3 +212,13 @@ export function getDocumentTimestampByIndex(
return documents[index].createdAt;
}
export function getMessageIdFromAnnotations(message: Message) {
if (!message.annotations) return message.id;
const [annotation] = message.annotations;
if (!annotation) return message.id;
// @ts-expect-error messageIdFromServer is not defined in MessageAnnotation
return annotation.messageIdFromServer;
}