@@ -652,6 +652,102 @@ it.instance("getSmallModel returns appropriate small model", () =>
652652 } ) ,
653653)
654654
655+ it . instance ( "getSmallModel prefers Gemini for Google Vertex" , ( ) =>
656+ Effect . gen ( function * ( ) {
657+ yield * set ( "GOOGLE_VERTEX_PROJECT" , "test-project" )
658+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . googleVertex )
659+ expect ( model ) . toBeDefined ( )
660+ expect ( model ?. id ) . toContain ( "gemini" )
661+ } ) ,
662+ )
663+
664+ it . instance (
665+ "getSmallModel selects the latest model in the preferred family" ,
666+ Effect . gen ( function * ( ) {
667+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . make ( "test-provider" ) )
668+ expect ( model ?. id ) . toBe ( ModelV2 . ID . make ( "new-flash" ) )
669+ } ) ,
670+ {
671+ config : {
672+ provider : {
673+ "test-provider" : {
674+ name : "Test Provider" ,
675+ npm : "@ai-sdk/openai-compatible" ,
676+ models : {
677+ "old-flash" : { family : "gemini-flash" , release_date : "2025-01-01" } ,
678+ "new-flash" : { family : "gemini-flash" , release_date : "2026-01-01" } ,
679+ "newer-haiku" : { family : "claude-haiku" , release_date : "2026-06-01" } ,
680+ } ,
681+ options : { apiKey : "test-key" } ,
682+ } ,
683+ } ,
684+ } ,
685+ } ,
686+ )
687+
688+ it . instance (
689+ "getSmallModel matches exact model families" ,
690+ Effect . gen ( function * ( ) {
691+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . make ( "test-provider" ) )
692+ expect ( model ?. id ) . toBe ( ModelV2 . ID . make ( "claude-haiku" ) )
693+ } ) ,
694+ {
695+ config : {
696+ provider : {
697+ "test-provider" : {
698+ name : "Test Provider" ,
699+ npm : "@ai-sdk/openai-compatible" ,
700+ models : {
701+ "glm-flash" : { family : "glm-flash" , release_date : "2026-06-01" } ,
702+ "claude-haiku" : { family : "claude-haiku" , release_date : "2026-01-01" } ,
703+ } ,
704+ options : { apiKey : "test-key" } ,
705+ } ,
706+ } ,
707+ } ,
708+ } ,
709+ )
710+
711+ it . instance (
712+ "getSmallModel ignores model IDs without family metadata" ,
713+ Effect . gen ( function * ( ) {
714+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . make ( "test-provider" ) )
715+ expect ( model ) . toBeUndefined ( )
716+ } ) ,
717+ {
718+ config : {
719+ provider : {
720+ "test-provider" : {
721+ name : "Test Provider" ,
722+ npm : "@ai-sdk/openai-compatible" ,
723+ models : {
724+ "gpt-5-nano" : { release_date : "2026-01-01" } ,
725+ } ,
726+ options : { apiKey : "test-key" } ,
727+ } ,
728+ } ,
729+ } ,
730+ } ,
731+ )
732+
733+ it . instance ( "getSmallModel skips inferred models for Azure" , ( ) =>
734+ Effect . gen ( function * ( ) {
735+ yield * set ( "AZURE_RESOURCE_NAME" , "test-resource" )
736+ yield * set ( "AZURE_API_KEY" , "test-key" )
737+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . azure )
738+ expect ( model ) . toBeUndefined ( )
739+ } ) ,
740+ )
741+
742+ it . instance ( "getSmallModel skips inferred models for Azure Cognitive Services" , ( ) =>
743+ Effect . gen ( function * ( ) {
744+ yield * set ( "AZURE_COGNITIVE_SERVICES_RESOURCE_NAME" , "test-resource" )
745+ yield * set ( "AZURE_COGNITIVE_SERVICES_API_KEY" , "test-key" )
746+ const model = yield * Provider . use . getSmallModel ( ProviderV2 . ID . make ( "azure-cognitive-services" ) )
747+ expect ( model ) . toBeUndefined ( )
748+ } ) ,
749+ )
750+
655751it . instance (
656752 "getSmallModel respects config small_model override" ,
657753 Effect . gen ( function * ( ) {
0 commit comments