From 582b25dc44f7e4c8bf727a5bece18bca9c7601aa Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Mon, 9 Dec 2024 16:26:29 -0800 Subject: [PATCH] build works --- src/vs/platform/void/common/configTypes.ts | 137 ++++++++++-------- .../browser/react/src/sidebar-tsx/Sidebar.tsx | 3 +- .../src/sidebar-tsx/SidebarModelSettings.tsx | 7 +- .../sidebar-tsx/SidebarProviderSettings.tsx | 16 +- .../contrib/void/browser/registerConfig.ts | 10 +- 5 files changed, 102 insertions(+), 71 deletions(-) diff --git a/src/vs/platform/void/common/configTypes.ts b/src/vs/platform/void/common/configTypes.ts index 0c121809..a812e4a7 100644 --- a/src/vs/platform/void/common/configTypes.ts +++ b/src/vs/platform/void/common/configTypes.ts @@ -5,6 +5,46 @@ *--------------------------------------------------------------------------------------------*/ + +// const voidProviderDefaults = { +// "ctrl+L":{ +// models:[ // select only if present +// { +// provider:"anthropic", +// model:"claude-3-5-sonnet-20240620" +// }, +// ] +// }, +// } + + + +export const voidProviderDefaults = { + anthropic: { + apiKey: '', + }, + openAI: { + apiKey: '', + }, + ollama: { + endpoint: 'http://127.0.0.1:11434', + }, + openRouter: { + apiKey: '', + }, + openAICompatible: { + apiKey: '', + endpoint: 'http://127.0.0.1:11434/v1', + }, + gemini: { + apiKey: '', + }, + groq: { + apiKey: '' + } +} as const + + export const voidInitModelOptions = { anthropic: () => ({ model: 'claude-3-5-sonnet-20240620', @@ -161,36 +201,10 @@ export const voidInitModelOptions = { "gemma-7b-it" ] }) -} - -export const voidProviderDefaults = { - anthropic: { - apiKey: '', - }, - openAI: { - apiKey: '', - }, - ollama: { - endpoint: 'http://127.0.0.1:11434', - }, - openRouter: { - apiKey: '', - }, - openAICompatible: { - apiKey: '', - endpoint: 'http://127.0.0.1:11434/v1', - }, - gemini: { - apiKey: '', - }, - groq: { - apiKey: '' - } } as const - export type ProviderName = keyof typeof voidProviderDefaults export const providerNames = Object.keys(voidProviderDefaults) as ProviderName[] @@ -204,7 +218,7 @@ export type FeatureName = typeof featureNames[number] export type VoidConfigState = { [providerName in ProviderName]: ({ enabled: string, // 'true' | 'false' - models: string[], + models: string[] | null, // if null, user can type in any string as a model model: string, maxTokens: string, } & { @@ -214,6 +228,7 @@ export type VoidConfigState = { type UnionOfKeys = T extends T ? keyof T : never; + export const descOfSettingName = (providerName: ProviderName, settingName: UnionOfKeys) => { if (settingName === 'apiKey') return 'API Key' @@ -230,60 +245,68 @@ export const descOfSettingName = (providerName: ProviderName, settingName: Union else if (settingName === 'models') return 'Available Models' - throw new Error(`Unknown setting name: "${settingName}"`) + throw new Error(`desc: Unknown setting name: "${settingName}"`) } +export const inputTypeOfSettingName = (settingName: UnionOfKeys) => { + if (settingName === 'apiKey') + return 'string' + else if (settingName === 'endpoint') + return 'string' + else if (settingName === 'maxTokens') + return 'number' + else if (settingName === 'model') + return 'string' + else if (settingName === 'enabled') + return 'boolean' + else if (settingName === 'models') + return 'string[]?' + + throw new Error(`inputType: Unknown setting name: "${settingName}"`) +} export const defaultVoidConfigState: VoidConfigState = { anthropic: { + ...voidProviderDefaults.anthropic, + ...voidInitModelOptions.anthropic(), enabled: 'false', - models: [], - model: '', - apiKey: '', - maxTokens: '1000', + maxTokens: '', }, openAI: { + ...voidProviderDefaults.openAI, + ...voidInitModelOptions.openAI(), enabled: 'false', - models: [], - model: '', - apiKey: '', - maxTokens: '1000', + maxTokens: '', }, ollama: { + ...voidProviderDefaults.ollama, + ...voidInitModelOptions.ollama(), enabled: 'false', - models: [], - model: '', - endpoint: '', - maxTokens: '1000', + maxTokens: '', }, openRouter: { + ...voidProviderDefaults.openRouter, + ...voidInitModelOptions.openRouter(), enabled: 'false', - models: [], - model: '', - apiKey: '', - maxTokens: '1000', + maxTokens: '', }, openAICompatible: { + ...voidProviderDefaults.openAICompatible, + ...voidInitModelOptions.openAICompatible(), enabled: 'false', - models: [], - model: '', - apiKey: '', - endpoint: '', - maxTokens: '1000', + maxTokens: '', }, gemini: { + ...voidProviderDefaults.gemini, + ...voidInitModelOptions.gemini(), enabled: 'false', - models: [], - model: '', - apiKey: '', - maxTokens: '1000', + maxTokens: '', }, groq: { + ...voidProviderDefaults.groq, + ...voidInitModelOptions.groq(), enabled: 'false', - models: [], - model: '', - apiKey: '', - maxTokens: '1000', + maxTokens: '', } } diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/Sidebar.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/Sidebar.tsx index 04fdb3b6..5d43ad46 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/Sidebar.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/Sidebar.tsx @@ -41,7 +41,8 @@ const Sidebar = () => {
- {false && } + + --------
diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarModelSettings.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarModelSettings.tsx index 660e6911..8cfb6321 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarModelSettings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarModelSettings.tsx @@ -16,8 +16,8 @@ export const SidebarModelSettingsForFeature = ({ featureName }: { featureName: F const models: [string,string][] = [] for (const providerName of providerNames) { const providerConfig = voidConfigState[providerName] - if (!providerConfig.enabled) continue - providerConfig.models.forEach(model => { + if (providerConfig.enabled === 'false') continue + providerConfig.models?.forEach(model => { models.push([providerName,model]) }) } @@ -31,7 +31,6 @@ export const SidebarModelSettingsForFeature = ({ featureName }: { featureName: F export const SidebarModelSettings = () => { return <> {featureNames.map(featureName => )} - - } + diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarProviderSettings.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarProviderSettings.tsx index 6b93809f..d64031ec 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarProviderSettings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarProviderSettings.tsx @@ -11,7 +11,7 @@ import { useConfigState, useService } from '../util/services.js' const SettingsForProvider = ({ providerName }: { providerName: ProviderName }) => { const voidConfigState = useConfigState() const voidConfigService = useService('configStateService') - console.log('CONFIG', voidConfigState) + console.log('CONFIG!', voidConfigState) console.log('provider:', providerName, voidConfigState[providerName]) const { models, model, ...others } = voidConfigState[providerName] @@ -36,12 +36,14 @@ const SettingsForProvider = ({ providerName }: { providerName: ProviderName }) = })}

{'Models'}

- { () => { } }} - selectBoxRef={{ current: null }} - /> + {models === null ? +

{'No models available.'}

+ : { () => { } }} + selectBoxRef={{ current: null }} + />}

{'Enabled'}

todo diff --git a/src/vs/workbench/contrib/void/browser/registerConfig.ts b/src/vs/workbench/contrib/void/browser/registerConfig.ts index e73a1514..4b454f60 100644 --- a/src/vs/workbench/contrib/void/browser/registerConfig.ts +++ b/src/vs/workbench/contrib/void/browser/registerConfig.ts @@ -40,6 +40,10 @@ class VoidConfigStateService extends Disposable implements IVoidConfigStateServi state: VoidConfigState; // readonly voidConfigInfo: VoidConfigInfo = voidConfigInfo; // just putting this here for simplicity, it's static though + get _defaultState() { + return deepClone(defaultVoidConfigState) + } + constructor( @IStorageService private readonly _storageService: IStorageService, @@ -50,7 +54,7 @@ class VoidConfigStateService extends Disposable implements IVoidConfigStateServi super() // at the start, we haven't read the partial config yet, but we need to set state to something, just treat partialVoidConfig like it's empty - this.state = deepClone(defaultVoidConfigState) + this.state = this._defaultState // read and update the actual state immediately this._readVoidConfigState().then(voidConfigState => { @@ -59,11 +63,13 @@ class VoidConfigStateService extends Disposable implements IVoidConfigStateServi } + + private async _readVoidConfigState(): Promise { const encryptedPartialConfig = this._storageService.get(VOID_CONFIG_KEY, StorageScope.APPLICATION) if (!encryptedPartialConfig) - return deepClone(defaultVoidConfigState) + return this._defaultState const voidConfigStateStr = await this._encryptionService.decrypt(encryptedPartialConfig) return JSON.parse(voidConfigStateStr)