62 lines
2.4 KiB
TypeScript
62 lines
2.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import { splitInlineReasoning, stripReasoning } from "./reasoning";
|
|
|
|
test("空输入返回空正文与 null 推理", () => {
|
|
assert.deepEqual(splitInlineReasoning(""), { content: "", reasoning: null });
|
|
});
|
|
|
|
test("无 think 标签时原样返回正文", () => {
|
|
assert.deepEqual(splitInlineReasoning("纯正文,无推理"), {
|
|
content: "纯正文,无推理",
|
|
reasoning: null,
|
|
});
|
|
});
|
|
|
|
test("形态 1:完整 <think>…</think> 提取推理,保留正文", () => {
|
|
const { content, reasoning } = splitInlineReasoning("<think>先想一下</think>这是答案");
|
|
assert.equal(content, "这是答案");
|
|
assert.equal(reasoning, "先想一下");
|
|
});
|
|
|
|
test("形态 2:多段 think 合并推理", () => {
|
|
const { content, reasoning } = splitInlineReasoning(
|
|
"<think>第一段</think>正文A<think>第二段</think>正文B",
|
|
);
|
|
assert.equal(content, "正文A正文B");
|
|
assert.equal(reasoning, "第一段\n\n第二段");
|
|
});
|
|
|
|
test("形态 3:流式未闭合 <think> 尾段算推理", () => {
|
|
const { content, reasoning } = splitInlineReasoning("正文<think>还在想…");
|
|
assert.equal(content, "正文");
|
|
assert.equal(reasoning, "还在想…");
|
|
});
|
|
|
|
test("形态 4:模板注入式只吐闭合 </think>,前导内容算推理", () => {
|
|
const { content, reasoning } = splitInlineReasoning(
|
|
"我需要分析一下需求</think>这是最终方案",
|
|
);
|
|
assert.equal(content, "这是最终方案");
|
|
assert.equal(reasoning, "我需要分析一下需求");
|
|
});
|
|
|
|
test("形态 4 流式:尚未吐出 </think> 时全部当正文(后续闭合再归位)", () => {
|
|
// 未出现任何标签 → 无从区分,先按正文渲染。
|
|
const { content, reasoning } = splitInlineReasoning("正在推理中,还没收到闭合标签");
|
|
assert.equal(content, "正在推理中,还没收到闭合标签");
|
|
assert.equal(reasoning, null);
|
|
});
|
|
|
|
test("安全兜底:正文里绝不残留任何 think 标签字面量", () => {
|
|
const { content } = splitInlineReasoning("答案前</think>答案中<think>");
|
|
assert.ok(!content.includes("<think>"));
|
|
assert.ok(!content.includes("</think>"));
|
|
});
|
|
|
|
test("stripReasoning 只返回正文", () => {
|
|
assert.equal(stripReasoning("<think>推理</think>交付正文"), "交付正文");
|
|
assert.equal(stripReasoning("前导推理</think>交付正文"), "交付正文");
|
|
});
|