fix(gateway,channelbridge,turnreply): p 标签半包写入侧规整(修「整条塌成一段」)
裁定(已发安卓):**能修**,走**写入侧规整** —— 不指望模型输出、不动客户端。 - 新增 internal/runtime/turnreply/paragraph.go 的 NormalizeParagraphs: 把未被 <p> 包裹的段落补上 <p>(按空行分段;<action>/<narration> 段也包进 <p>, 与正确形态 <p><action>…</action>…</p> 一致) - **幂等**守门断言:已完全包裹的文本逐字不变(防二次加工) - 落点覆盖 Web 与 IM 两条落库路径(gateway/session_turn_reply.go、channelbridge/turnreply.go、 proactive.go)⇒ 两边共用同一份规整文本 ⇒ **历史一次性变好、两个客户端零改动**、渲染口径不分叉 (测试与变异详见切片报告)
This commit is contained in:
1 parent
d532eb3fcd
commit
5de708a560
17 files changed
+721
-46
No files matched your search
@@ -307,20 +307,24 @@ func TestTurnEnd_ModelErrorStillPersistsAssistant(t *testing.T) {
|
||||
|
||||
// TestTurnEnd_NormalReplyIsPersistedVerbatim 是必测③的回归项:正常回合(无工具
|
||||
// 失败)的落库行为逐字不变 —— 恰好一条 assistant,内容与模型正文完全相同。
|
||||
//
|
||||
// 样本取**已规范**的正文:写入侧会给未被 <p> 包裹的段落补上包裹(幂等的加法,
|
||||
// 见 session_turn_reply_paragraph_test.go),因此「逐字不变」的守门断言要用规范
|
||||
// 形态来钉 —— 它保证规整绝不二次加工好文本。
|
||||
func TestTurnEnd_NormalReplyIsPersistedVerbatim(t *testing.T) {
|
||||
t.Parallel()
|
||||
ad := &kbScriptAdapter{toolSteps: 0, final: "你好,我在。"}
|
||||
ad := &kbScriptAdapter{toolSteps: 0, final: "<p>你好,我在。</p>"}
|
||||
f := newKBTurnFixture(t, ad, 0)
|
||||
|
||||
res, err := f.submit(t)
|
||||
if err != nil {
|
||||
t.Fatalf("正常回合不该报错: %v", err)
|
||||
}
|
||||
if res.Text != "你好,我在。" {
|
||||
if res.Text != "<p>你好,我在。</p>" {
|
||||
t.Fatalf("Result.Text = %q", res.Text)
|
||||
}
|
||||
assistant := f.assertUserAndSingleAssistant(t)
|
||||
if assistant.Content != "你好,我在。" {
|
||||
if assistant.Content != "<p>你好,我在。</p>" {
|
||||
t.Fatalf("落库内容 = %q, want 逐字等于模型正文", assistant.Content)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user