返回 DeepSeek-Reasonix
session_context_cache_test.go
根目录 / internal / provider / anthropic / session_context_cache_test.go
1 package anthropic
2
3 import (
4 "context"
5 "testing"
6
7 "reasonix/internal/provider"
8 "reasonix/internal/sessioncontext"
9 )
10
11 func TestBuildRequestRestoresSessionContextBlockAndUsesThreeBreakpoints(t *testing.T) {
12 snapshot := sessioncontext.Build(sessioncontext.Sections{
13 Environment: "go/linux", Workspace: `Current workspace: "/work"`, SkillsCatalog: "```\nreview — Review code\n```",
14 })
15 c := &client{model: "claude-opus-4-8"}
16 r := c.buildRequest(context.Background(), provider.Request{Messages: []provider.Message{
17 {Role: provider.RoleSystem, Content: "stable system"},
18 {Role: provider.RoleUser, Content: snapshot.Content},
19 {Role: provider.RoleUser, Content: "real request"},
20 }})
21 if len(r.System) != 1 || r.System[0].CacheControl == nil {
22 t.Fatalf("system breakpoint = %+v", r.System)
23 }
24 if len(r.Messages) != 1 || len(r.Messages[0].Content) != 2 {
25 t.Fatalf("strict-role user blocks = %+v", r.Messages)
26 }
27 contextBlock, requestBlock := r.Messages[0].Content[0], r.Messages[0].Content[1]
28 if contextBlock.Text != snapshot.Content || contextBlock.CacheControl == nil {
29 t.Fatalf("context block = %+v", contextBlock)
30 }
31 if requestBlock.Text != "real request" || requestBlock.CacheControl == nil {
32 t.Fatalf("last-message block = %+v", requestBlock)
33 }
34 breakpoints := 0
35 for _, block := range r.System {
36 if block.CacheControl != nil {
37 breakpoints++
38 }
39 }
40 for _, message := range r.Messages {
41 for _, block := range message.Content {
42 if block.CacheControl != nil {
43 breakpoints++
44 }
45 }
46 }
47 if breakpoints != 3 {
48 t.Fatalf("cache breakpoints = %d, want 3", breakpoints)
49 }
50 }
51
52 func TestBuildRequestDeepSeekSessionContextHasNoCacheControl(t *testing.T) {
53 snapshot := sessioncontext.Build(sessioncontext.Sections{Workspace: "/work"})
54 r := (&client{model: "deepseek-v4", deepseek: true}).buildRequest(context.Background(), provider.Request{Messages: []provider.Message{
55 {Role: provider.RoleSystem, Content: "stable system"},
56 {Role: provider.RoleUser, Content: snapshot.Content},
57 {Role: provider.RoleUser, Content: "real request"},
58 }})
59 for _, block := range r.System {
60 if block.CacheControl != nil {
61 t.Fatalf("DeepSeek system block has cache_control: %+v", block)
62 }
63 }
64 for _, message := range r.Messages {
65 for _, block := range message.Content {
66 if block.CacheControl != nil {
67 t.Fatalf("DeepSeek message block has cache_control: %+v", block)
68 }
69 }
70 }
71 }
72
72 lines GO