1
0
mirror of https://github.com/voideditor/void.git synced 2025-03-15 23:24:36 +00:00

better model onboard

This commit is contained in:
Mathew Pareles
2025-01-28 16:22:32 -08:00
parent 3baaf8d6c4
commit 528b8a6b9b
4 changed files with 26 additions and 6 deletions
.gitignore
src/vs
platform/void/common
workbench/contrib/void/browser/react/src/void-settings-tsx

1
.gitignore vendored

@ -22,4 +22,5 @@ product.overrides.json
*.snap.actual
.vscode-test
.tmp/
.tmp2/
.tool-versions

@ -12,6 +12,7 @@ import { createDecorator } from '../../instantiation/common/instantiation.js';
import { Event } from '../../../base/common/event.js';
import { Disposable } from '../../../base/common/lifecycle.js';
import { IVoidSettingsService } from './voidSettingsService.js';
import { getProvidersWithoutModels } from './voidSettingsTypes.js';
// import { INotificationService } from '../../notification/common/notification.js';
// calls channel to implement features
@ -92,6 +93,15 @@ export class LLMMessageService extends Disposable implements ILLMMessageService
// end early if no provider
const modelSelection = this.voidSettingsService.state.modelSelectionOfFeature[featureName]
// throw an error for providers without models
const providersWithoutModels = getProvidersWithoutModels(this.voidSettingsService.state.settingsOfProvider)
if (providersWithoutModels.length !== 0) {
onError({ message: `You haven't added any models for ${providersWithoutModels.join(', ')}.`, fullError: null })
return null
}
// throw an error if no models
if (modelSelection === null) {
onError({ message: 'Please add a Provider in Settings!', fullError: null })
return null

@ -185,6 +185,13 @@ export const customSettingNamesOfProvider = (providerName: ProviderName) => {
return Object.keys(defaultProviderSettings[providerName]) as CustomSettingName[]
}
export const getProvidersWithoutModels = (settingsOfProvider: SettingsOfProvider) => {
return Object.entries(settingsOfProvider)
.filter(([name, provider]) => provider._enabled && provider.models.length === 0)
.map(([name]) => name)
}
type CommonProviderSettings = {
_enabled: boolean | undefined, // undefined initially, computed when user types in all fields

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------*/
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { FeatureName, featureNames, ModelSelection, modelSelectionsEqual, ProviderName, providerNames } from '../../../../../../../platform/void/common/voidSettingsTypes.js'
import { FeatureName, featureNames, getProvidersWithoutModels, ModelSelection, modelSelectionsEqual, ProviderName, providerNames, SettingsOfProvider } from '../../../../../../../platform/void/common/voidSettingsTypes.js'
import { useSettingsState, useRefreshModelState, useAccessor } from '../util/services.js'
import { _VoidSelectBox, VoidCustomSelectBox } from '../util/inputs.js'
import { SelectBox } from '../../../../../../../base/browser/ui/selectBox/selectBox.js'
@ -12,8 +12,6 @@ import { IconWarning } from '../sidebar-tsx/SidebarChat.js'
import { VOID_OPEN_SETTINGS_ACTION_ID, VOID_TOGGLE_SETTINGS_ACTION_ID } from '../../../voidSettingsPane.js'
import { ModelOption } from '../../../../../../../platform/void/common/voidSettingsService.js'
const optionsEqual = (m1: ModelOption[], m2: ModelOption[]) => {
if (m1.length !== m2.length) return false
for (let i = 0; i < m1.length; i++) {
@ -119,15 +117,19 @@ export const WarningBox = ({ text, onClick, className }: { text: string; onClick
export const ModelDropdown = ({ featureName }: { featureName: FeatureName }) => {
const settingsState = useSettingsState()
const providersWithMissingModels = getProvidersWithoutModels(settingsState.settingsOfProvider)
const accessor = useAccessor()
const commandService = accessor.get('ICommandService')
const openSettings = () => { commandService.executeCommand(VOID_OPEN_SETTINGS_ACTION_ID); };
return <>
{settingsState._modelOptions.length === 0 ?
<WarningBox onClick={openSettings} text='Provider required' />
: <MemoizedModelSelectBox featureName={featureName} />
{providersWithMissingModels.length !== 0 ?
<WarningBox onClick={openSettings} text={`Model required for ${providersWithMissingModels[0]}`} />
: settingsState._modelOptions.length === 0 ?
<WarningBox onClick={openSettings} text='Provider required' />
: <MemoizedModelSelectBox featureName={featureName} />
}
</>
}