@@ -25,6 +25,8 @@ import {
2525import {
2626 defaultModelSelectionsAreMixed ,
2727 getAppModelOptionsForInstance ,
28+ getCustomModelOptionsByInstance ,
29+ getTextGenerationModelOptionsByInstance ,
2830 resolveAppModelSelectionForInstance ,
2931 resolveAppModelSelectionState ,
3032 resolveEffectiveDefaultModelSelection ,
@@ -917,6 +919,60 @@ describe("instance-scoped model selection", () => {
917919 NO_PROVIDER_MODEL_SELECTION ,
918920 ) ;
919921 } ) ;
922+
923+ it ( "excludes customized extension models while preserving unknown custom and thread models" , ( ) => {
924+ const pi = provider ( {
925+ provider : ProviderDriverKind . make ( "pi" ) ,
926+ instanceId : "pi" ,
927+ models : [ "default" , "demo/demo-model" ] ,
928+ } ) ;
929+ const providers = [
930+ {
931+ ...pi ,
932+ models : pi . models . map ( ( model ) =>
933+ model . slug === "demo/demo-model" ? { ...model , supportsTextGeneration : false } : model ,
934+ ) ,
935+ } ,
936+ ] ;
937+ const settings : UnifiedSettings = {
938+ ...DEFAULT_UNIFIED_SETTINGS ,
939+ providerInstances : {
940+ [ pi . instanceId ] : {
941+ driver : ProviderDriverKind . make ( "pi" ) ,
942+ config : {
943+ customModels : [
944+ { slug : "demo/demo-model" , name : "My extension model" } ,
945+ { slug : "unknown/model" , name : "My custom model" } ,
946+ ] ,
947+ } ,
948+ } ,
949+ } ,
950+ textGenerationModelSelection : createModelSelection ( pi . instanceId , "demo/demo-model" ) ,
951+ } ;
952+ const supported = providers . filter ( ( provider ) => provider . supportsTextGeneration !== false ) ;
953+ expect (
954+ getTextGenerationModelOptionsByInstance ( settings , supported , pi . instanceId , "demo/demo-model" )
955+ . get ( pi . instanceId )
956+ ?. map ( ( option ) => option . slug ) ,
957+ ) . toEqual ( [ "default" , "unknown/model" ] ) ;
958+ expect ( resolveAppModelSelectionState ( settings , supported ) ) . toEqual (
959+ createModelSelection ( pi . instanceId , "default" ) ,
960+ ) ;
961+ expect (
962+ resolveAppModelSelectionState (
963+ {
964+ ...settings ,
965+ textGenerationModelSelection : createModelSelection ( pi . instanceId , "unknown/model" ) ,
966+ } ,
967+ supported ,
968+ ) . model ,
969+ ) . toBe ( "unknown/model" ) ;
970+ expect (
971+ getCustomModelOptionsByInstance ( settings , providers )
972+ . get ( pi . instanceId )
973+ ?. map ( ( option ) => option . slug ) ,
974+ ) . toEqual ( [ "default" , "demo/demo-model" , "unknown/model" ] ) ;
975+ } ) ;
920976} ) ;
921977
922978describe ( "resolveAppModelSelectionState with the opencode plan agent" , ( ) => {
0 commit comments