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]*?)\\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 }