@@ -709,6 +709,46 @@ describe("resolveModel", () => {
709709 expect ( result . error ) . toBe ( "Unknown model: openai/typoed-model" ) ;
710710 } ) ;
711711
712+ it ( "resolves per-model api and baseUrl override in fallback model" , ( ) => {
713+ const cfg = {
714+ models : {
715+ providers : {
716+ "my-router" : {
717+ baseUrl : "http://localhost:8080" ,
718+ api : "ollama" ,
719+ models : [
720+ {
721+ id : "my-router/claude" ,
722+ name : "Claude via Router" ,
723+ api : "anthropic-messages" ,
724+ input : [ "text" , "image" ] ,
725+ contextWindow : 200_000 ,
726+ } ,
727+ {
728+ id : "my-router/gpt" ,
729+ name : "GPT via Router" ,
730+ api : "openai-completions" ,
731+ baseUrl : "http://localhost:8080/v1" ,
732+ input : [ "text" ] ,
733+ contextWindow : 400_000 ,
734+ } ,
735+ ] ,
736+ } ,
737+ } ,
738+ } ,
739+ } as unknown as OpenClawConfig ;
740+
741+ const claude = resolveModelForTest ( "my-router" , "my-router/claude" , "/tmp/agent" , cfg ) ;
742+ const claudeModel = expectResolvedModel ( claude ) ;
743+ expect ( claudeModel . api ) . toBe ( "anthropic-messages" ) ;
744+ expect ( claudeModel . baseUrl ) . toBe ( "http://localhost:8080" ) ;
745+
746+ const gpt = resolveModelForTest ( "my-router" , "my-router/gpt" , "/tmp/agent" , cfg ) ;
747+ const gptModel = expectResolvedModel ( gpt ) ;
748+ expect ( gptModel . api ) . toBe ( "openai-completions" ) ;
749+ expect ( gptModel . baseUrl ) . toBe ( "http://localhost:8080/v1" ) ;
750+ } ) ;
751+
712752 it ( "defaults baseUrl-only local custom fallback models to chat completions" , ( ) => {
713753 const cfg = {
714754 agents : {
0 commit comments