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