|
export function ChatMessageBubble(props) { |
|
const colorClassName = |
|
props.message.role === "user" ? "bg-sky-600" : "bg-slate-50 text-black"; |
|
const alignmentClassName = |
|
props.message.role === "user" ? "ml-auto" : "mr-auto"; |
|
return ( |
|
<div |
|
className={`${alignmentClassName} ${colorClassName} rounded px-4 py-2 max-w-[80%] mb-8 flex`} |
|
> |
|
<div className="whitespace-pre-wrap flex flex-col"> |
|
<span>{props.message.content}</span> |
|
{props.sources && props.sources.length ? <> |
|
<code className="mt-4 mr-auto bg-slate-600 px-2 py-1 rounded"> |
|
<h2> |
|
🔍 Sources: |
|
</h2> |
|
</code> |
|
<code className="mt-1 mr-2 bg-slate-600 px-2 py-1 rounded text-xs"> |
|
{props.sources?.map((source, i) => ( |
|
<div className="mt-2" key={"source:" + i}> |
|
{i + 1}. "{source.pageContent}"{ |
|
source.metadata?.loc?.lines !== undefined |
|
? <div><br/>Lines {source.metadata?.loc?.lines?.from} to {source.metadata?.loc?.lines?.to}</div> |
|
: "" |
|
} |
|
</div> |
|
))} |
|
</code> |
|
</> : ""} |
|
</div> |
|
</div> |
|
); |
|
} |
|
|