feat: sanitise response content

This commit is contained in:
Timothy J. Baek 2024-04-03 10:57:58 -07:00
parent 4a09342a71
commit 944efd2cd8
2 changed files with 25 additions and 4 deletions

View file

@ -17,7 +17,11 @@
import { config, settings } from '$lib/stores'; import { config, settings } from '$lib/stores';
import { synthesizeOpenAISpeech } from '$lib/apis/openai'; import { synthesizeOpenAISpeech } from '$lib/apis/openai';
import { imageGenerations } from '$lib/apis/images'; import { imageGenerations } from '$lib/apis/images';
import { extractSentences } from '$lib/utils'; import {
extractSentences,
revertSanitizedResponseContent,
sanitizeResponseContent
} from '$lib/utils';
import Name from './Name.svelte'; import Name from './Name.svelte';
import ProfileImage from './ProfileImage.svelte'; import ProfileImage from './ProfileImage.svelte';
@ -56,7 +60,7 @@
let loadingSpeech = false; let loadingSpeech = false;
let generatingImage = false; let generatingImage = false;
$: tokens = marked.lexer(message.content); $: tokens = marked.lexer(sanitizeResponseContent(message.content));
const renderer = new marked.Renderer(); const renderer = new marked.Renderer();
@ -405,8 +409,10 @@
{:else} {:else}
{#each tokens as token} {#each tokens as token}
{#if token.type === 'code'} {#if token.type === 'code'}
<!-- {token.text} --> <CodeBlock
<CodeBlock lang={token.lang} code={token.text} /> lang={token.lang}
code={revertSanitizedResponseContent(token.text)}
/>
{:else} {:else}
{@html marked.parse(token.raw, { {@html marked.parse(token.raw, {
...defaults, ...defaults,

View file

@ -31,6 +31,21 @@ export const getModels = async (token: string) => {
// Helper functions // Helper functions
////////////////////////// //////////////////////////
export const sanitizeResponseContent = (content: string) => {
return content
.replace(/<\|[a-z]*$/, '')
.replace(/<\|[a-z]+\|$/, '')
.replace(/<$/, '')
.replaceAll(/<\|[a-z]+\|>/g, ' ')
.replaceAll(/<br\s?\/?>/gi, '\n')
.replaceAll('<', '&lt;')
.trim();
};
export const revertSanitizedResponseContent = (content: string) => {
return content.replaceAll('&lt;', '<');
};
export const capitalizeFirstLetter = (string) => { export const capitalizeFirstLetter = (string) => {
return string.charAt(0).toUpperCase() + string.slice(1); return string.charAt(0).toUpperCase() + string.slice(1);
}; };