import { describe, expect, it } from 'vitest' import { ReasoningTagStreamParser } from './reasoning-stream' describe('ReasoningTagStreamParser', () => { it('separates think and thinking blocks from final text', () => { const parser = new ReasoningTagStreamParser() expect( parser.push( '开头分析一中间分析二结尾' ) ).toEqual([ { type: 'text', delta: '开头' }, { type: 'reasoning', delta: '分析一' }, { type: 'text', delta: '中间' }, { type: 'reasoning', delta: '分析二' }, { type: 'text', delta: '结尾' } ]) expect(parser.finish()).toEqual([]) }) it('handles tags split across streaming chunks', () => { const parser = new ReasoningTagStreamParser() expect(parser.push('回答前逐步分析最终答案')).toEqual([ { type: 'text', delta: '最终答案' } ]) expect(parser.finish()).toEqual([]) }) it('keeps an unclosed reasoning block as reasoning', () => { const parser = new ReasoningTagStreamParser() expect(parser.push('仍在分析')).toEqual([ { type: 'reasoning', delta: '仍在分析' } ]) expect(parser.finish()).toEqual([]) }) })