reasoning model unified think tag is <think></think> (#13392)

Co-authored-by: crazywoola <427733928@qq.com>
This commit is contained in:
Junjie.M
2025-02-08 16:19:41 +08:00
committed by GitHub
parent 78708eb5d5
commit 286cdc41ab
5 changed files with 26 additions and 25 deletions

View File

@@ -10,6 +10,7 @@ import SyntaxHighlighter from 'react-syntax-highlighter'
import { atelierHeathLight } from 'react-syntax-highlighter/dist/esm/styles/hljs'
import { Component, memo, useMemo, useRef, useState } from 'react'
import type { CodeComponent } from 'react-markdown/lib/ast-to-react'
import { flow } from 'lodash/fp'
import cn from '@/utils/classnames'
import CopyBtn from '@/app/components/base/copy-btn'
import SVGBtn from '@/app/components/base/svg'
@@ -58,9 +59,24 @@ const getCorrectCapitalizationLanguageName = (language: string) => {
const preprocessLaTeX = (content: string) => {
if (typeof content !== 'string')
return content
return content.replace(/\\\[(.*?)\\\]/g, (_, equation) => `$$${equation}$$`)
.replace(/\\\((.*?)\\\)/g, (_, equation) => `$$${equation}$$`)
.replace(/(^|[^\\])\$(.+?)\$/g, (_, prefix, equation) => `${prefix}$${equation}$`)
return flow([
(str: string) => str.replace(/\\\[(.*?)\\\]/g, (_, equation) => `$$${equation}$$`),
(str: string) => str.replace(/\\\((.*?)\\\)/g, (_, equation) => `$$${equation}$$`),
(str: string) => str.replace(/(^|[^\\])\$(.+?)\$/g, (_, prefix, equation) => `${prefix}$${equation}$`),
])(content)
}
const preprocessThinkTag = (content: string) => {
if (!content.trim().startsWith('<think>\n'))
return content
return flow([
(str: string) => str.replace('<think>\n', '<details open><summary class="text-gray-500 font-bold">Thinking</summary><div class="text-gray-500 p-3 ml-2 bg-gray-50 border-l border-gray-300">\n'),
(str: string) => str.includes('\n</think>')
? str.replace('\n</think>', '\n</div></details>')
: `${str}\n</div></details>`,
])(content)
}
export function PreCode(props: { children: any }) {
@@ -225,7 +241,10 @@ const Link = ({ node, ...props }: any) => {
}
export function Markdown(props: { content: string; className?: string }) {
const latexContent = preprocessLaTeX(props.content)
const latexContent = flow([
preprocessThinkTag,
preprocessLaTeX,
])(props.content)
return (
<div className={cn(props.className, 'markdown-body')}>
<ReactMarkdown