(text: string)
| 59 | * 导致 thinking 后半段 + 闭合标签泄漏到正文。 |
| 60 | */ |
| 61 | export function extractThinking(text: string): { thinkingContent: string; strippedText: string } { |
| 62 | const startIdx = text.indexOf(THINKING_OPEN); |
| 63 | if (startIdx === -1) return { thinkingContent: '', strippedText: text }; |
| 64 | |
| 65 | const contentStart = startIdx + THINKING_OPEN.length; |
| 66 | const endIdx = text.lastIndexOf(THINKING_CLOSE); |
| 67 | |
| 68 | if (endIdx > startIdx) { |
| 69 | return { |
| 70 | thinkingContent: text.slice(contentStart, endIdx).trim(), |
| 71 | strippedText: (text.slice(0, startIdx) + text.slice(endIdx + THINKING_CLOSE.length)).trim(), |
| 72 | }; |
| 73 | } |
| 74 | // 未闭合(流式截断)→ thinking 取到末尾,正文为开头部分 |
| 75 | return { |
| 76 | thinkingContent: text.slice(contentStart).trim(), |
| 77 | strippedText: text.slice(0, startIdx).trim(), |
| 78 | }; |
| 79 | } |
| 80 | |
| 81 | // ==================== 模型列表 ==================== |
| 82 |
no outgoing calls
no test coverage detected