|
4 | 4 | *--------------------------------------------------------------------------------------------*/ |
5 | 5 |
|
6 | 6 | import { coalesce } from '../../../../base/common/arrays.js'; |
7 | | -import { Disposable } from '../../../../base/common/lifecycle.js'; |
| 7 | +import { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; |
8 | 8 | import { IReader, autorun, observableValue } from '../../../../base/common/observable.js'; |
9 | 9 | import { localize2 } from '../../../../nls.js'; |
10 | 10 | import { Action2, registerAction2, MenuId, MenuRegistry, isIMenuItem } from '../../../../platform/actions/common/actions.js'; |
@@ -158,8 +158,11 @@ registerAction2(class extends Action2 { |
158 | 158 | * so it can be rendered by a {@link MenuWorkbenchToolBar}. |
159 | 159 | */ |
160 | 160 | class PickerActionViewItem extends BaseActionViewItem { |
161 | | - constructor(private readonly picker: { render(container: HTMLElement): void; dispose(): void }) { |
| 161 | + constructor(private readonly picker: { render(container: HTMLElement): void; dispose(): void }, disposable?: IDisposable) { |
162 | 162 | super(undefined, { id: '', label: '', enabled: true, class: undefined, tooltip: '', run: () => { } }); |
| 163 | + if (disposable) { |
| 164 | + this._register(disposable); |
| 165 | + } |
163 | 166 | } |
164 | 167 |
|
165 | 168 | override render(container: HTMLElement): void { |
@@ -248,9 +251,21 @@ class CopilotPickerActionViewItemContribution extends Disposable implements IWor |
248 | 251 | } |
249 | 252 | }; |
250 | 253 | initModel(); |
251 | | - this._register(languageModelsService.onDidChangeLanguageModels(() => initModel())); |
252 | 254 |
|
253 | | - return modelPicker; |
| 255 | + const disposableStore = new DisposableStore(); |
| 256 | + disposableStore.add(languageModelsService.onDidChangeLanguageModels(() => initModel())); |
| 257 | + |
| 258 | + // When the active session changes, push the selected model to the new session |
| 259 | + disposableStore.add(autorun(reader => { |
| 260 | + const session = sessionsManagementService.activeSession.read(reader); |
| 261 | + const model = currentModel.read(reader); |
| 262 | + if (session && model) { |
| 263 | + const provider = sessionsProvidersService.getProviders().find(p => p.id === session.providerId); |
| 264 | + provider?.setModel(session.sessionId, model.identifier); |
| 265 | + } |
| 266 | + })); |
| 267 | + |
| 268 | + return new PickerActionViewItem(modelPicker, disposableStore); |
254 | 269 | }, |
255 | 270 | )); |
256 | 271 | this._register(actionViewItemService.register( |
|
0 commit comments