Spaces:
Runtime error
Runtime error
| import useLLM from "@react-llm/headless"; | |
| import { useEffect, useRef } from "react"; | |
| import { MemoizedReactMarkdown } from './Markdown' | |
| import { CodeBlock } from './CodeBlock' | |
| function MessageList({ | |
| fileMode | |
| }) { | |
| const scrollRef = useRef(null); | |
| const { conversation, userRoleName } = useLLM(); | |
| const messages = conversation?.messages || []; | |
| const scrollToBottom = () => { | |
| if (scrollRef.current) { | |
| scrollRef.current.scrollIntoView(); | |
| } | |
| }; | |
| useEffect(() => { | |
| scrollToBottom(); | |
| }, [conversation, messages.length]); | |
| return ( | |
| <div style={{ height: "75vh", overflowY: 'scroll' }} className="w-full"> | |
| <div className="p-2 leading-6 w-full min-h-full"> | |
| {conversation?.messages.map((m) => ( | |
| <div key={m.id} style={{ display: "flex" }}> | |
| <div | |
| style={{ | |
| paddingTop: "5px", | |
| paddingBottom: "5px", | |
| paddingRight: "15px", | |
| paddingLeft: "15px", | |
| margin: "5px", | |
| borderRadius: "15px", | |
| backgroundColor: m.role === userRoleName ? "green": "#333333" | |
| }} | |
| > | |
| <MemoizedReactMarkdown | |
| className="prose dark:prose-invert flex-1" | |
| components={{ | |
| code({ node, inline, className, children, ...props }) { | |
| if (children.length) { | |
| if (children[0] == 'β') { | |
| return <span className="animate-pulse cursor-default mt-1">β</span> | |
| } | |
| children[0] = (children[0]).replace("`β`", "β") | |
| } | |
| const match = /language-(\w+)/.exec(className || ''); | |
| return !inline ? ( | |
| <CodeBlock | |
| key={Math.random()} | |
| language={(match && match[1]) || ''} | |
| value={String(children).replace(/\n$/, '')} | |
| {...props} | |
| /> | |
| ) : ( | |
| <code className={className} {...props}> | |
| {children} | |
| </code> | |
| ); | |
| }, | |
| table({ children }) { | |
| return ( | |
| <table className="border-collapse border border-black px-3 py-1 dark:border-white"> | |
| {children} | |
| </table> | |
| ); | |
| }, | |
| th({ children }) { | |
| return ( | |
| <th className="break-words border border-black bg-gray-500 px-3 py-1 text-white dark:border-white"> | |
| {children} | |
| </th> | |
| ); | |
| }, | |
| td({ children }) { | |
| return ( | |
| <td className="break-words border border-black px-3 py-1 dark:border-white"> | |
| {children} | |
| </td> | |
| ); | |
| }, | |
| }} | |
| > | |
| {m.text} | |
| </MemoizedReactMarkdown> | |
| </div> | |
| </div> | |
| ))} | |
| <div ref={scrollRef}></div> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| export default MessageList; |