hermes / ui-tui /src /lib /reasoning.ts
haochengsama's picture
Add files using upload-large-folder tool
04d8658 verified
Raw
History Blame Contribute Delete
1.06 kB
const TAGS = ['think', 'reasoning', 'thinking', 'thought', 'REASONING_SCRATCHPAD'] as const
export interface SplitReasoning {
reasoning: string
text: string
}
export function splitReasoning(input: string): SplitReasoning {
let text = input
const reasoning: string[] = []
for (const tag of TAGS) {
const paired = new RegExp(`<${tag}>([\\s\\S]*?)</${tag}>\\s*`, 'gi')
text = text.replace(paired, (_m, inner: string) => {
const trimmed = inner.trim()
if (trimmed) {
reasoning.push(trimmed)
}
return ''
})
const unclosed = new RegExp(`<${tag}>([\\s\\S]*)$`, 'i')
text = text.replace(unclosed, (_m, inner: string) => {
const trimmed = inner.trim()
if (trimmed) {
reasoning.push(trimmed)
}
return ''
})
}
return {
reasoning: reasoning.join('\n\n').trim(),
text: text.trim()
}
}
export const hasReasoningTag = (input: string) => {
for (const tag of TAGS) {
if (input.includes(`<${tag}>`)) {
return true
}
}
return false
}