open-webui/src/lib/components/chat/Messages/Markdown.svelte

77 lines
1.8 KiB
Svelte
Raw Normal View History

2024-08-18 18:59:59 +00:00
<script>
import { marked } from 'marked';
import { replaceTokens, processResponseContent } from '$lib/utils';
import { user } from '$lib/stores';
2024-09-30 10:50:53 +00:00
import markedExtension from '$lib/utils/marked/extension';
import markedKatexExtension from '$lib/utils/marked/katex-extension';
2025-11-23 22:16:10 +00:00
import { disableSingleTilde } from '$lib/utils/marked/strikethrough-extension';
2025-09-14 22:49:01 +00:00
import { mentionExtension } from '$lib/utils/marked/mention-extension';
2024-09-30 10:50:53 +00:00
2024-08-18 18:59:59 +00:00
import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
2025-11-23 23:27:57 +00:00
import footnoteExtension from '$lib/utils/marked/footnote-extension';
import citationExtension from '$lib/utils/marked/citation-extension';
2024-08-18 18:59:59 +00:00
2025-03-28 19:18:27 +00:00
export let id = '';
2024-08-18 18:59:59 +00:00
export let content;
2025-07-18 12:38:43 +00:00
export let done = true;
2024-08-18 18:59:59 +00:00
export let model = null;
2024-10-05 19:07:45 +00:00
export let save = false;
2025-05-16 17:47:43 +00:00
export let preview = false;
2025-08-26 13:34:33 +00:00
export let editCodeBlock = true;
2025-08-09 21:03:02 +00:00
export let topPadding = false;
2024-08-18 18:59:59 +00:00
2024-11-22 01:58:29 +00:00
export let sourceIds = [];
2025-02-14 06:37:01 +00:00
2025-05-16 23:14:26 +00:00
export let onSave = () => {};
2025-04-18 09:38:53 +00:00
export let onUpdate = () => {};
2025-05-16 23:14:26 +00:00
2025-05-16 17:47:43 +00:00
export let onPreview = () => {};
2025-04-18 09:38:53 +00:00
2024-11-22 01:58:29 +00:00
export let onSourceClick = () => {};
2025-02-14 06:37:01 +00:00
export let onTaskClick = () => {};
2024-11-22 01:58:29 +00:00
2024-08-18 18:59:59 +00:00
let tokens = [];
const options = {
2025-06-16 16:08:20 +00:00
throwOnError: false,
breaks: true
2024-08-18 18:59:59 +00:00
};
2024-09-30 10:50:53 +00:00
marked.use(markedKatexExtension(options));
marked.use(markedExtension(options));
2025-11-23 23:27:57 +00:00
marked.use(citationExtension(options));
marked.use(footnoteExtension(options));
2025-11-23 22:16:10 +00:00
marked.use(disableSingleTilde);
2025-09-17 02:41:47 +00:00
marked.use({
extensions: [mentionExtension({ triggerChar: '@' }), mentionExtension({ triggerChar: '#' })]
});
2024-08-18 18:59:59 +00:00
$: (async () => {
if (content) {
tokens = marked.lexer(
2025-11-23 23:27:57 +00:00
replaceTokens(processResponseContent(content), model?.name, $user?.name)
2024-08-18 18:59:59 +00:00
);
}
})();
</script>
{#key id}
2025-05-16 17:47:43 +00:00
<MarkdownTokens
{tokens}
{id}
2025-07-18 12:38:43 +00:00
{done}
2025-05-16 17:47:43 +00:00
{save}
{preview}
2025-08-26 13:34:33 +00:00
{editCodeBlock}
2025-11-23 23:27:57 +00:00
{sourceIds}
2025-08-09 21:03:02 +00:00
{topPadding}
2025-05-16 17:47:43 +00:00
{onTaskClick}
{onSourceClick}
2025-05-16 23:14:26 +00:00
{onSave}
2025-05-16 17:47:43 +00:00
{onUpdate}
{onPreview}
/>
2024-08-18 18:59:59 +00:00
{/key}