File size: 1,068 Bytes
6e29063
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { Paper, Stack } from "@mantine/core";
import type { ChatMessage } from "gpt-tokenizer/GptEncoding";
import { Suspense, lazy, memo } from "react";

const FormattedMarkdown = lazy(() => import("./FormattedMarkdown"));

interface MessageListProps {
  messages: ChatMessage[];
}

const MessageList = memo(function MessageList({ messages }: MessageListProps) {
  if (messages.length <= 2) return null;

  return (
    <Stack gap="md">
      {messages
        .slice(2)
        .filter((message) => message.content.length > 0)
        .map((message, index) => (
          <Paper
            key={`${message.role}-${index}`}
            shadow="xs"
            radius="xl"
            p="sm"
            maw="90%"
            style={{
              alignSelf: message.role === "user" ? "flex-end" : "flex-start",
            }}
          >
            <Suspense fallback={message.content}>
              <FormattedMarkdown>{message.content}</FormattedMarkdown>
            </Suspense>
          </Paper>
        ))}
    </Stack>
  );
});

export default MessageList;