@@ -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