diff --git a/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/ModelDropdown.tsx b/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/ModelDropdown.tsx
index 42f4de23..813968a4 100644
--- a/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/ModelDropdown.tsx
+++ b/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/ModelDropdown.tsx
@@ -86,7 +86,7 @@ const MemoizedModelDropdown = ({ featureName, className }: { featureName: Featur
useEffect(() => {
const oldOptions = oldOptionsRef.current
- const newOptions = settingsState._modelOptions.filter((o) => filter(o.selection))
+ const newOptions = settingsState._modelOptions.filter((o) => filter(o.selection, { chatMode: settingsState.globalSettings.chatMode }))
if (!optionsEqual(oldOptions, newOptions)) {
setMemoizedOptions(newOptions)
@@ -95,7 +95,7 @@ const MemoizedModelDropdown = ({ featureName, className }: { featureName: Featur
}, [settingsState._modelOptions, filter])
if (memoizedOptions.length === 0) { // Pretty sure this will never be reached unless filter is enabled
- return
+ return
}
return
@@ -116,7 +116,7 @@ export const ModelDropdown = ({ featureName, className }: { featureName: Feature
const isDisabled = isFeatureNameDisabled(featureName, settingsState)
if (isDisabled)
return boolean; emptyMessage: string | null } } = {
- 'Autocomplete': { filter: o => getModelCapabilities(o.providerName, o.modelName).supportsFIM, emptyMessage: 'No models support FIM' },
- 'Chat': { filter: o => true, emptyMessage: null },
- 'Ctrl+K': { filter: o => true, emptyMessage: null },
- 'Apply': { filter: o => true, emptyMessage: null },
+export const modelFilterOfFeatureName: { [featureName in FeatureName]: { filter: (o: ModelSelection, opts: { chatMode: ChatMode }) => boolean; emptyMessage: null | { message: string, priority: 'always' | 'fallback' } } } = {
+ 'Autocomplete': { filter: (o) => getModelCapabilities(o.providerName, o.modelName).supportsFIM, emptyMessage: { message: 'No models support FIM', priority: 'always' } },
+ 'Chat': { filter: (o, { chatMode }) => chatMode === 'chat' ? true : !!getModelCapabilities(o.providerName, o.modelName).supportsTools, emptyMessage: { message: 'No models support tool use', priority: 'fallback' } },
+ 'Ctrl+K': { filter: o => true, emptyMessage: null, },
+ 'Apply': { filter: o => true, emptyMessage: null, },
}
-const _validatedState = (state: Omit) => {
+const _validatedModelState = (state: Omit) => {
let newSettingsOfProvider = state.settingsOfProvider
@@ -143,7 +143,8 @@ const _validatedState = (state: Omit) => {
for (const featureName of featureNames) {
const { filter } = modelFilterOfFeatureName[featureName]
- const modelOptionsForThisFeature = newModelOptions.filter((o) => filter(o.selection))
+ const filterOpts = { chatMode: state.globalSettings.chatMode }
+ const modelOptionsForThisFeature = newModelOptions.filter((o) => filter(o.selection, filterOpts))
const modelSelectionAtFeature = newModelSelectionOfFeature[featureName]
const selnIdx = modelSelectionAtFeature === null ? -1 : modelOptionsForThisFeature.findIndex(m => modelSelectionsEqual(m.selection, modelSelectionAtFeature))
@@ -218,7 +219,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
// the stored data structure might be outdated, so we need to update it here
const finalState = readS
- this.state = _validatedState(finalState);
+ this.state = _validatedModelState(finalState);
this._resolver();
this._onDidChangeState.fire();
@@ -265,7 +266,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
globalSettings: newGlobalSettings,
}
- this.state = _validatedState(newState)
+ this.state = _validatedModelState(newState)
await this._storeState()
this._onDidChangeState.fire()
@@ -287,7 +288,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
[settingName]: newVal
}
}
- this.state = newState
+ this.state = _validatedModelState(newState)
await this._storeState()
this._onDidChangeState.fire()
@@ -305,7 +306,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
}
}
- this.state = newState
+ this.state = _validatedModelState(newState)
await this._storeState()
this._onDidChangeState.fire()
@@ -331,7 +332,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
}
}
}
- this.state = newState
+ this.state = _validatedModelState(newState)
await this._storeState()
this._onDidChangeState.fire()