feat(prompt): align DeepSeek prompt assembly with tokenizer-style turns

This commit is contained in:
CJACK.
2026-04-12 13:59:42 +08:00
parent 792e295512
commit 433a3a877d
10 changed files with 56 additions and 21 deletions

View File

@@ -12,7 +12,7 @@ func TestMessagesPrepareBasic(t *testing.T) {
if got == "" {
t.Fatal("expected non-empty prompt")
}
if got != "<User>\nHello<end▁of▁sentence>" {
if got != "<begin▁of▁sentence>\n\n<User>\nHello<end▁of▁sentence>\n\n<Assistant></think>" {
t.Fatalf("unexpected prompt: %q", got)
}
}
@@ -29,10 +29,13 @@ func TestMessagesPrepareRoles(t *testing.T) {
if !contains(got, "<System>\nYou are helper<end▁of▁instructions>\n\n<User>\nHi<end▁of▁sentence>") {
t.Fatalf("expected system/user separation in %q", got)
}
if !contains(got, "<User>\nHi<end▁of▁sentence>\n\n<Assistant>\nHello<end▁of▁sentence>") {
if !contains(got, "<begin▁of▁sentence>") {
t.Fatalf("expected begin marker in %q", got)
}
if !contains(got, "<User>\nHi<end▁of▁sentence>\n\n<Assistant>\n</think>Hello<end▁of▁sentence>") {
t.Fatalf("expected user/assistant separation in %q", got)
}
if !contains(got, "<Assistant>\nHello<end▁of▁sentence>\n\n<Tool>\nSearch results<end▁of▁toolresults>") {
if !contains(got, "<Assistant>\n</think>Hello<end▁of▁sentence>\n\n<Tool>\nSearch results<end▁of▁toolresults>") {
t.Fatalf("expected assistant/tool separation in %q", got)
}
if !contains(got, "<Tool>\nSearch results<end▁of▁toolresults>\n\n<User>\nHow are you<end▁of▁sentence>") {
@@ -74,7 +77,7 @@ func TestMessagesPrepareArrayTextVariants(t *testing.T) {
},
}
got := MessagesPrepare(messages)
if got != "<User>\nline1\nline2<end▁of▁sentence>" {
if got != "<begin▁of▁sentence>\n\n<User>\nline1\nline2<end▁of▁sentence>\n\n<Assistant></think>" {
t.Fatalf("unexpected content from text variants: %q", got)
}
}

View File

@@ -162,7 +162,7 @@ func TestMessagesPrepareMergesConsecutiveSameRole(t *testing.T) {
{"role": "user", "content": "World"},
}
got := MessagesPrepare(messages)
if !strings.HasPrefix(got, "<User>") {
if !strings.HasPrefix(got, "<begin▁of▁sentence>") {
t.Fatalf("expected user marker at the start, got %q", got)
}
if !strings.Contains(got, "Hello") || !strings.Contains(got, "World") {
@@ -193,7 +193,7 @@ func TestMessagesPrepareAssistantMarkers(t *testing.T) {
if strings.Count(got, "<end▁of▁sentence>") != 2 {
t.Fatalf("expected both turns to be terminated, got %q", got)
}
if !strings.Contains(got, "<Assistant>\nHello!<end▁of▁sentence>") {
if !strings.Contains(got, "<Assistant>\n</think>Hello!<end▁of▁sentence>") {
t.Fatalf("expected assistant EOS suffix, got %q", got)
}
if strings.Contains(got, "<system_instructions>") {