@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
80 lines (64 loc) • 1.48 kB
text/typescript
import { template } from 'lodash-es';
import { LOADING_FLAT } from '@/const/message';
import { FieldType } from '@/features/ShareModal/ShareText/type';
import { ChatMessage } from '@/types/message';
const markdownTemplate = template(
`# {{title}}
<% if (systemRole) { %>
\`\`\`\`md
{{systemRole}}
\`\`\`\`
<% } %>
<% messages.forEach(function(chat) { %>
<% if (withRole) { %>
<% if (chat.role === 'user') { %>
##### User:
<% } else if (chat.role === 'assistant') { %>
##### Assistant:
<% } else if (chat.role === 'tool') { %>
##### Tools Calling:
<% } %>
<% } %>
<% if (chat.role === 'tool') { %>
\`\`\`json
{{chat.content}}
\`\`\`
<% } else { %>
{{chat.content}}
<% if (includeTool && chat.tools) { %>
\`\`\`json
{{JSON.stringify(chat.tools, null, 2)}}
\`\`\`
<% } %>
<% } %>
<% }); %>
`,
{
evaluate: /<%([\S\s]+?)%>/g,
interpolate: /{{([\S\s]+?)}}/g,
},
);
interface MarkdownParams extends FieldType {
messages: ChatMessage[];
systemRole: string;
title: string;
}
export const generateMarkdown = ({
messages,
title,
includeTool,
includeUser,
withSystemRole,
withRole,
systemRole,
}: MarkdownParams) =>
markdownTemplate({
includeTool,
messages: messages
.filter((m) => m.content !== LOADING_FLAT)
.filter((m) => (!includeUser ? m.role !== 'user' : true))
.filter((m) => (!includeTool ? m.role !== 'tool' : true)),
systemRole: withSystemRole ? systemRole : undefined,
title,
withRole,
});