generate runningSummary on each turn, and include it with the main completion

This commit is contained in:
Avraham Sakal
2025-07-21 20:38:42 -04:00
parent d4018bdc8e
commit 3ba60b999c
8 changed files with 980 additions and 44 deletions
+69 -11
View File
@@ -1,6 +1,13 @@
import { JsonInput, Tabs, Textarea } from "@mantine/core";
import {
Box,
Group,
JsonInput,
Stack,
Tabs,
Textarea,
useMantineTheme,
} from "@mantine/core";
import { trpc } from "../../../trpc/client";
import type { Message as UIMessage } from "ai";
import { useEffect } from "react";
import {
defaultParameters,
@@ -11,6 +18,8 @@ import { usePageContext } from "vike-react/usePageContext";
import { useData } from "vike-react/useData";
import type { Data } from "./+data";
import type { ConversationsId } from "../../../database/generated/public/Conversations";
import type { CommittedMessage, DraftMessage } from "../../../types";
import Markdown from "react-markdown";
export default function ChatPage() {
const pageContext = usePageContext();
@@ -31,7 +40,7 @@ export default function ChatPage() {
const setParameters = useStore((state) => state.setParameters);
const setLoading = useStore((state) => state.setLoading);
const conversation = useData<Data>();
const { conversation, messages: initialMessages } = useData<Data>();
useEffect(() => {
setConversationId(conversationId);
@@ -49,6 +58,10 @@ export default function ChatPage() {
setConversationTitle,
]);
useEffect(() => {
setMessages(initialMessages);
}, [initialMessages, setMessages]);
return (
<>
<div>
@@ -86,18 +99,36 @@ export default function ChatPage() {
e.preventDefault();
const messagesWithNewUserMessage = [
...messages,
{ role: "user" as const, content: message } as UIMessage,
{ role: "user" as const, content: message } as DraftMessage,
];
setMessages(messagesWithNewUserMessage);
setLoading(true);
const response = await trpc.chat.sendMessage.mutate({
conversationId,
messages: messagesWithNewUserMessage,
systemPrompt,
parameters,
});
const messagesWithAssistantMessage = [
...messagesWithNewUserMessage,
{ role: "assistant", content: response.text } as UIMessage,
...messages,
{
id: response.insertedUserMessage?.id,
conversationId,
role: "user" as const,
content: message,
index: response.insertedUserMessage?.index,
runningSummary: undefined,
} as CommittedMessage,
{
id: response.insertedAssistantMessage?.id,
conversationId,
role: "assistant" as const,
content: response.insertedAssistantMessage?.content,
index: response.insertedAssistantMessage?.index,
runningSummary:
response.insertedAssistantMessage?.running_summary ||
undefined,
} as CommittedMessage,
];
setMessages(messagesWithAssistantMessage);
setMessage("");
@@ -131,14 +162,41 @@ export default function ChatPage() {
function Messages({
messages,
}: {
messages: Array<UIMessage>;
messages: Array<DraftMessage | CommittedMessage>;
}) {
const theme = useMantineTheme();
console.log("messages", messages);
return (
<div>
<Stack gap="md" justify="flex-start">
{messages.map((message, index) => (
// biome-ignore lint/suspicious/noArrayIndexKey: <explanation>
<div key={index}>{message.content}</div>
<Group
// biome-ignore lint/suspicious/noArrayIndexKey: <explanation>
key={index}
justify={message.role === "user" ? "flex-end" : "flex-start"}
>
<Box
w="75%"
bg={
message.role === "user"
? theme.colors.gray[2]
: theme.colors.blue[2]
}
p="md"
bdrs="md"
>
<div>
{"index" in message ? message.index : ""}
{message.role}
</div>
<Markdown>{message.content}</Markdown>
{"runningSummary" in message && (
<div>
<strong>Running Summary:</strong> {message.runningSummary}
</div>
)}
</Box>
</Group>
))}
</div>
</Stack>
);
}
+4 -1
View File
@@ -9,5 +9,8 @@ export const data = async (pageContext: PageContextServer) => {
const conversation = await caller.fetchConversation({
id: Number(id),
});
return conversation;
const messages = await caller.fetchMessages({
conversationId: Number(id),
});
return { conversation, messages };
};