diff --git a/model/renderers/gemma4_reference_test.go b/model/renderers/gemma4_reference_test.go index 05e0517ec..6a22f8833 100644 --- a/model/renderers/gemma4_reference_test.go +++ b/model/renderers/gemma4_reference_test.go @@ -704,6 +704,13 @@ func TestGemma4RendererMatchesReference(t *testing.T) { think: thinkTrue(), expected: "<|turn>system\n<|think|>\n\n<|turn>user\nHi\n<|turn>model\n", }, + { + name: "nothink_no_system", + messages: []api.Message{{Role: "user", Content: "Hi"}}, + think: thinkFalse(), + expected: "<|turn>user\nHi\n<|turn>model\n", + skipJinja2: true, + }, { name: "thinking_system", messages: []api.Message{ @@ -1628,6 +1635,7 @@ func TestGemma4RendererKnownJinja2Differences(t *testing.T) { name string messages []api.Message tools []api.Tool + think *api.ThinkValue wantJinjaFrag string wantRenderFrag string }{ @@ -1676,15 +1684,22 @@ func TestGemma4RendererKnownJinja2Differences(t *testing.T) { wantJinjaFrag: `response:read{value:<|"|>payload<|"|>}`, wantRenderFrag: `response:unknown{value:<|"|>payload<|"|>}`, }, + { + name: "explicit_nothink_skips_empty_thought_channel", + messages: []api.Message{{Role: "user", Content: "Hi"}}, + think: thinkFalse(), + wantJinjaFrag: "<|turn>model\n<|channel>thought\n", + wantRenderFrag: "<|turn>model\n", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { renderer := &Gemma4Renderer{useImgTags: RenderImgTags} - got, err := renderer.Render(tt.messages, tt.tools, nil) + got, err := renderer.Render(tt.messages, tt.tools, tt.think) assert.NoError(t, err) - jinja2Output := renderWithJinja2(t, tt.messages, tt.tools, nil) + jinja2Output := renderWithJinja2(t, tt.messages, tt.tools, tt.think) assert.NotEqual(t, jinja2Output, got, "case no longer differs from Jinja2 output") assert.Contains(t, jinja2Output, tt.wantJinjaFrag) assert.Contains(t, got, tt.wantRenderFrag) @@ -1814,3 +1829,7 @@ print(tmpl.render(**kwargs), end="") func thinkTrue() *api.ThinkValue { return &api.ThinkValue{Value: true} } + +func thinkFalse() *api.ThinkValue { + return &api.ThinkValue{Value: false} +}