feat: add support for 'none' option in math engine settings (#5122)
This commit is contained in:
parent
6c6b2f0b9e
commit
8125fac309
@ -1168,6 +1168,7 @@
|
||||
"messages.input.enable_delete_model": "Enable the backspace key to delete models/attachments.",
|
||||
"messages.markdown_rendering_input_message": "Markdown render input message",
|
||||
"messages.math_engine": "Math engine",
|
||||
"messages.math_engine.none": "None",
|
||||
"messages.metrics": "{{time_first_token_millsec}}ms to first token | {{token_speed}} tok/sec",
|
||||
"messages.model.title": "Model Settings",
|
||||
"messages.navigation": "Message Navigation",
|
||||
|
||||
@ -1167,6 +1167,7 @@
|
||||
"messages.input.enable_delete_model": "バックスペースキーでモデル/添付ファイルを削除します。",
|
||||
"messages.markdown_rendering_input_message": "Markdownで入力メッセージをレンダリング",
|
||||
"messages.math_engine": "数式エンジン",
|
||||
"messages.math_engine.none": "なし",
|
||||
"messages.metrics": "最初のトークンまでの時間 {{time_first_token_millsec}}ms | トークン速度 {{token_speed}} tok/sec",
|
||||
"messages.model.title": "モデル設定",
|
||||
"messages.navigation": "メッセージナビゲーション",
|
||||
|
||||
@ -1167,6 +1167,7 @@
|
||||
"messages.input.enable_delete_model": "Включите удаление модели/вложения с помощью клавиши Backspace",
|
||||
"messages.markdown_rendering_input_message": "Отображение ввода в формате Markdown",
|
||||
"messages.math_engine": "Математический движок",
|
||||
"messages.math_engine.none": "Нет",
|
||||
"messages.metrics": "{{time_first_token_millsec}}ms до первого токена | {{token_speed}} tok/sec",
|
||||
"messages.model.title": "Настройки модели",
|
||||
"messages.navigation": "Навигация сообщений",
|
||||
|
||||
@ -1168,6 +1168,7 @@
|
||||
"messages.input.enable_delete_model": "启用删除键删除输入的模型/附件",
|
||||
"messages.markdown_rendering_input_message": "Markdown 渲染输入消息",
|
||||
"messages.math_engine": "数学公式引擎",
|
||||
"messages.math_engine.none": "无",
|
||||
"messages.metrics": "首字时延 {{time_first_token_millsec}}ms | 每秒 {{token_speed}} tokens",
|
||||
"messages.model.title": "模型设置",
|
||||
"messages.navigation": "对话导航按钮",
|
||||
|
||||
@ -1166,7 +1166,8 @@
|
||||
"messages.input.enable_quick_triggers": "啟用 '/' 和 '@' 觸發快捷選單",
|
||||
"messages.input.enable_delete_model": "啟用刪除鍵刪除模型/附件",
|
||||
"messages.markdown_rendering_input_message": "Markdown 渲染輸入訊息",
|
||||
"messages.math_engine": "Markdown 渲染輸入訊息",
|
||||
"messages.math_engine": "數學公式引擎",
|
||||
"messages.math_engine.none": "無",
|
||||
"messages.metrics": "首字延遲 {{time_first_token_millsec}}ms | 每秒 {{token_speed}} tokens",
|
||||
"messages.model.title": "模型設定",
|
||||
"messages.navigation": "訊息導航",
|
||||
|
||||
@ -32,12 +32,18 @@ interface Props {
|
||||
message: Message
|
||||
}
|
||||
|
||||
const remarkPlugins = [remarkMath, remarkGfm, remarkCjkFriendly]
|
||||
|
||||
const Markdown: FC<Props> = ({ message }) => {
|
||||
const { t } = useTranslation()
|
||||
const { renderInputMessageAsMarkdown, mathEngine } = useSettings()
|
||||
|
||||
const remarkPlugins = useMemo(() => {
|
||||
const plugins = [remarkGfm, remarkCjkFriendly]
|
||||
if (mathEngine !== 'none') {
|
||||
plugins.push(remarkMath)
|
||||
}
|
||||
return plugins
|
||||
}, [mathEngine])
|
||||
|
||||
const messageContent = useMemo(() => {
|
||||
const empty = isEmpty(message.content)
|
||||
const paused = message.status === 'paused'
|
||||
@ -45,12 +51,18 @@ const Markdown: FC<Props> = ({ message }) => {
|
||||
return removeSvgEmptyLines(escapeBrackets(content))
|
||||
}, [message, t])
|
||||
|
||||
const rehypeMath = useMemo(() => (mathEngine === 'KaTeX' ? rehypeKatex : rehypeMathjax), [mathEngine])
|
||||
|
||||
const rehypePlugins = useMemo(() => {
|
||||
const hasElements = ALLOWED_ELEMENTS.test(messageContent)
|
||||
return hasElements ? [rehypeRaw, rehypeMath] : [rehypeMath]
|
||||
}, [messageContent, rehypeMath])
|
||||
const plugins: any[] = []
|
||||
if (ALLOWED_ELEMENTS.test(messageContent)) {
|
||||
plugins.push(rehypeRaw)
|
||||
}
|
||||
if (mathEngine === 'KaTeX') {
|
||||
plugins.push(rehypeKatex as any)
|
||||
} else if (mathEngine === 'MathJax') {
|
||||
plugins.push(rehypeMathjax as any)
|
||||
}
|
||||
return plugins
|
||||
}, [mathEngine, messageContent])
|
||||
|
||||
const components = useMemo(() => {
|
||||
const baseComponents = {
|
||||
|
||||
@ -42,7 +42,14 @@ import {
|
||||
setShowMessageDivider,
|
||||
setThoughtAutoCollapse
|
||||
} from '@renderer/store/settings'
|
||||
import { Assistant, AssistantSettings, CodeStyleVarious, ThemeMode, TranslateLanguageVarious } from '@renderer/types'
|
||||
import {
|
||||
Assistant,
|
||||
AssistantSettings,
|
||||
CodeStyleVarious,
|
||||
MathEngine,
|
||||
ThemeMode,
|
||||
TranslateLanguageVarious
|
||||
} from '@renderer/types'
|
||||
import { modalConfirm } from '@renderer/utils'
|
||||
import { Button, Col, InputNumber, Row, Segmented, Select, Slider, Switch, Tooltip } from 'antd'
|
||||
import { CircleHelp, RotateCcw, Settings2 } from 'lucide-react'
|
||||
@ -512,11 +519,12 @@ const SettingsTab: FC<Props> = (props) => {
|
||||
<SettingRowTitleSmall>{t('settings.messages.math_engine')}</SettingRowTitleSmall>
|
||||
<StyledSelect
|
||||
value={mathEngine}
|
||||
onChange={(value) => dispatch(setMathEngine(value as 'MathJax' | 'KaTeX'))}
|
||||
onChange={(value) => dispatch(setMathEngine(value as MathEngine))}
|
||||
style={{ width: 135 }}
|
||||
size="small">
|
||||
<Select.Option value="KaTeX">KaTeX</Select.Option>
|
||||
<Select.Option value="MathJax">MathJax</Select.Option>
|
||||
<Select.Option value="none">{t('settings.messages.math_engine.none')}</Select.Option>
|
||||
</StyledSelect>
|
||||
</SettingRow>
|
||||
<SettingDivider />
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
||||
import { TRANSLATE_PROMPT } from '@renderer/config/prompts'
|
||||
import { CodeStyleVarious, LanguageVarious, ThemeMode, TranslateLanguageVarious } from '@renderer/types'
|
||||
import { CodeStyleVarious, LanguageVarious, MathEngine, ThemeMode, TranslateLanguageVarious } from '@renderer/types'
|
||||
import { IpcChannel } from '@shared/IpcChannel'
|
||||
|
||||
import { WebDAVSyncState } from './backup'
|
||||
@ -58,7 +58,7 @@ export interface SettingsState {
|
||||
codeCacheMaxSize: number
|
||||
codeCacheTTL: number
|
||||
codeCacheThreshold: number
|
||||
mathEngine: 'MathJax' | 'KaTeX'
|
||||
mathEngine: MathEngine
|
||||
messageStyle: 'plain' | 'bubble'
|
||||
codeStyle: CodeStyleVarious
|
||||
foldDisplayMode: 'expanded' | 'compact'
|
||||
@ -360,7 +360,7 @@ const settingsSlice = createSlice({
|
||||
setCodeCacheThreshold: (state, action: PayloadAction<number>) => {
|
||||
state.codeCacheThreshold = action.payload
|
||||
},
|
||||
setMathEngine: (state, action: PayloadAction<'MathJax' | 'KaTeX'>) => {
|
||||
setMathEngine: (state, action: PayloadAction<MathEngine>) => {
|
||||
state.mathEngine = action.payload
|
||||
},
|
||||
setFoldDisplayMode: (state, action: PayloadAction<'expanded' | 'compact'>) => {
|
||||
|
||||
@ -510,3 +510,5 @@ export interface Citation {
|
||||
title?: string
|
||||
content?: string
|
||||
}
|
||||
|
||||
export type MathEngine = 'KaTeX' | 'MathJax' | 'none'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user