@@ -95,6 +95,8 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
9595
9696 const tracer = this . _tracer . sub ( 'constructor' ) ;
9797
98+ this . _undesiredModelsManager = new UndesiredModels . Manager ( this . _vscodeExtensionContext ) ;
99+
98100 this . _modelsObs = derived ( ( reader ) => {
99101 tracer . trace ( 'computing models' ) ;
100102 return this . aggregateModels ( {
@@ -123,8 +125,6 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
123125 } ) . recomputeInitiallyAndOnChange ( this . _store ) ;
124126
125127 this . onModelListUpdated = Event . fromObservableLight ( this . _modelInfoObs ) ;
126-
127- this . _undesiredModelsManager = new UndesiredModels . Manager ( this . _vscodeExtensionContext ) ;
128128 }
129129
130130 get modelInfo ( ) : vscode . InlineCompletionModelInfo | undefined {
@@ -162,25 +162,27 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
162162 return ;
163163 }
164164
165+ // if currently selected model is from exp config, then mark that model as undesired
166+ if ( currentPreferredModel . source === ModelSource . ExpConfig ) {
167+ await this . _undesiredModelsManager . addUndesiredModelId ( currentPreferredModel . modelName ) ;
168+ }
169+
170+ if ( this . _undesiredModelsManager . isUndesiredModelId ( newPreferredModelId ) ) {
171+ await this . _undesiredModelsManager . removeUndesiredModelId ( newPreferredModelId ) ;
172+ }
173+
165174 // if user picks same as the default model, we should reset the user setting
166175 // otherwise, update the model
167176 const expectedDefaultModel = this . _pickModel ( { preferredModelName : 'none' , models } ) ;
168- if ( newPreferredModelId === expectedDefaultModel . modelName ) {
177+ if ( newPreferredModel . source === ModelSource . ExpConfig || // because exp-configured model already takes highest priority
178+ ( newPreferredModelId === expectedDefaultModel . modelName && ! models . some ( m => m . source === ModelSource . ExpConfig ) )
179+ ) {
169180 this . _tracer . trace ( `New preferred model id ${ newPreferredModelId } is the same as the default model, resetting user setting.` ) ;
170181 await this . _configService . setConfig ( ConfigKey . Advanced . InlineEditsPreferredModel , 'none' ) ;
171182 } else {
172183 this . _tracer . trace ( `New preferred model id ${ newPreferredModelId } is different from the default model, updating user setting to ${ newPreferredModelId } .` ) ;
173184 await this . _configService . setConfig ( ConfigKey . Advanced . InlineEditsPreferredModel , newPreferredModelId ) ;
174185 }
175-
176- // if currently selected model is from exp config, then mark that model as undesired
177- if ( currentPreferredModel . source === ModelSource . ExpConfig ) {
178- await this . _undesiredModelsManager . addUndesiredModelId ( currentPreferredModel . modelName ) ;
179- }
180-
181- if ( this . _undesiredModelsManager . isUndesiredModelId ( newPreferredModelId ) ) {
182- await this . _undesiredModelsManager . removeUndesiredModelId ( newPreferredModelId ) ;
183- }
184186 }
185187
186188 private aggregateModels (
@@ -234,6 +236,10 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
234236 if ( ! isPromptingStrategy ( m . capabilities . promptStrategy ) ) {
235237 return undefined ;
236238 }
239+ if ( models . some ( knownModel => knownModel . modelName === m . name ) ) {
240+ tracer . trace ( `Fetched model ${ m . name } already exists in the model list, skipping.` ) ;
241+ return undefined ;
242+ }
237243 return {
238244 modelName : m . name ,
239245 promptingStrategy : m . capabilities . promptStrategy ,
@@ -263,9 +269,7 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
263269
264270 public selectedModelConfiguration ( ) : ModelConfiguration {
265271 const tracer = this . _tracer . sub ( 'selectedModelConfiguration' ) ;
266- const currentModel = this . _currentModelObs . get ( ) ;
267- tracer . trace ( `Current model id: ${ currentModel . modelName } ` ) ;
268- const model = this . _modelsObs . get ( ) . find ( m => m . modelName === currentModel . modelName ) ;
272+ const model = this . _currentModelObs . get ( ) ;
269273 if ( model ) {
270274 tracer . trace ( `Selected model found: ${ model . modelName } ` ) ;
271275 return {
0 commit comments