Skip to content

Commit aa66ce0

Browse files
Alexey Panfilovclaude
andcommitted
fix: update router tests for three-level classifier (1/2/3)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9edf13e commit aa66ce0

1 file changed

Lines changed: 36 additions & 10 deletions

File tree

internal/llm/router_test.go

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,9 @@ func TestRouter_MultimodalPriority(t *testing.T) {
149149
}
150150
}
151151

152-
// TestRouter_ClassifierRoutesToReasoner: classifier возвращает "yes" → reasoner используется.
153-
func TestRouter_ClassifierRoutesToReasoner(t *testing.T) {
154-
classifier := &mockProvider{name: "classifier", resp: Response{Content: "yes"}}
152+
// TestRouter_ClassifierLevel3: classifier возвращает "3" → reasoner используется.
153+
func TestRouter_ClassifierLevel3(t *testing.T) {
154+
classifier := &mockProvider{name: "classifier", resp: Response{Content: "3"}}
155155
reasoner := &mockProvider{name: "reasoner", resp: Response{Content: "deep answer"}}
156156
primary := &mockProvider{name: "primary", resp: Response{Content: "simple answer"}}
157157

@@ -176,11 +176,37 @@ func TestRouter_ClassifierRoutesToReasoner(t *testing.T) {
176176
}
177177
}
178178

179-
// TestRouter_ClassifierNo: classifier возвращает "no" → primary используется.
180-
func TestRouter_ClassifierNo(t *testing.T) {
181-
classifier := &mockProvider{name: "classifier", resp: Response{Content: "no"}}
179+
// TestRouter_ClassifierLevel1: classifier возвращает "1" → local используется.
180+
func TestRouter_ClassifierLevel1(t *testing.T) {
181+
classifier := &mockProvider{name: "classifier", resp: Response{Content: "1"}}
182+
local := &mockProvider{name: "local", resp: Response{Content: "local answer"}}
183+
primary := &mockProvider{name: "primary", resp: Response{Content: "cloud answer"}}
184+
185+
r := newTestRouter(RouterConfig{
186+
Local: "local",
187+
Primary: "primary",
188+
Classifier: "classifier",
189+
ClassifierMinLen: 5,
190+
}, map[string]Provider{
191+
"local": local,
192+
"primary": primary,
193+
"classifier": classifier,
194+
})
195+
196+
resp, err := r.Chat(context.Background(), []Message{{Role: "user", Content: "what time is it"}}, "", nil)
197+
if err != nil {
198+
t.Fatalf("unexpected error: %v", err)
199+
}
200+
if resp.Content != "local answer" {
201+
t.Errorf("expected local, got %q", resp.Content)
202+
}
203+
}
204+
205+
// TestRouter_ClassifierLevel2: classifier возвращает "2" → primary используется.
206+
func TestRouter_ClassifierLevel2(t *testing.T) {
207+
classifier := &mockProvider{name: "classifier", resp: Response{Content: "2"}}
182208
reasoner := &mockProvider{name: "reasoner"}
183-
primary := &mockProvider{name: "primary", resp: Response{Content: "simple answer"}}
209+
primary := &mockProvider{name: "primary", resp: Response{Content: "cloud answer"}}
184210

185211
r := newTestRouter(RouterConfig{
186212
Primary: "primary",
@@ -193,15 +219,15 @@ func TestRouter_ClassifierNo(t *testing.T) {
193219
"classifier": classifier,
194220
})
195221

196-
resp, err := r.Chat(context.Background(), []Message{{Role: "user", Content: "what time is it"}}, "", nil)
222+
resp, err := r.Chat(context.Background(), []Message{{Role: "user", Content: "summarize this article about AI"}}, "", nil)
197223
if err != nil {
198224
t.Fatalf("unexpected error: %v", err)
199225
}
200-
if resp.Content != "simple answer" {
226+
if resp.Content != "cloud answer" {
201227
t.Errorf("expected primary, got %q", resp.Content)
202228
}
203229
if reasoner.calls != 0 {
204-
t.Errorf("reasoner should not be called when classifier returns no")
230+
t.Errorf("reasoner should not be called for level 2")
205231
}
206232
}
207233

0 commit comments

Comments
 (0)