Spaces:
Configuration error
Configuration error
import type { Accessor } from 'solid-js' | |
import type { ChatMessage } from '../types' | |
import MarkdownIt from 'markdown-it' | |
// @ts-ignore | |
import mdKatex from 'markdown-it-katex' | |
import mdHighlight from 'markdown-it-highlightjs' | |
interface Props { | |
role: ChatMessage['role'] | |
message: Accessor<string> | string | |
} | |
export default ({ role, message }: Props) => { | |
const roleClass = { | |
system: 'bg-gradient-to-r from-gray-300 via-gray-200 to-gray-300', | |
user: 'bg-gradient-to-r from-purple-400 to-yellow-400', | |
assistant: 'bg-gradient-to-r from-yellow-200 via-green-200 to-green-300', | |
} | |
const htmlString = () => { | |
const md = MarkdownIt().use(mdKatex).use(mdHighlight) | |
if (typeof message === 'function') { | |
return md.render(message()) | |
} else if (typeof message === 'string') { | |
return md.render(message) | |
} | |
return '' | |
} | |
return ( | |
<div class="flex py-2 gap-3 -mx-4 px-4 rounded-lg transition-colors md:hover:bg-slate/3" class:op-75={ role === 'user' }> | |
<div class={ `shrink-0 w-7 h-7 mt-4 rounded-full op-80 ${ roleClass[role] }` }></div> | |
<div class="message prose text-slate break-words overflow-hidden" innerHTML={htmlString()} /> | |
</div> | |
) | |
} |