From 6703aa15451de0fbe45acd3eaa5fe3e7aae62d29 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Thu, 12 Dec 2024 01:42:06 -0800 Subject: [PATCH] get ready to sync ollama models --- .../platform/void/browser/metricsService.ts | 8 +- .../void/browser/void.contribution.ts | 9 + .../void/common/voidConfigModelDefaults.ts | 58 +++++ .../platform/void/common/voidConfigTypes.ts | 217 +++--------------- .../void/electron-main/llmMessage/ollama.ts | 26 ++- .../llmMessage/sendOllamaMessage.ts | 4 + .../sidebar-tsx/ModelSelectionSettings.tsx | 3 +- .../contrib/void/browser/registerActions.ts | 19 +- .../contrib/void/browser/registerSidebar.ts | 45 ++-- src/vs/workbench/workbench.common.main.ts | 3 +- 10 files changed, 168 insertions(+), 224 deletions(-) create mode 100644 src/vs/platform/void/browser/void.contribution.ts create mode 100644 src/vs/platform/void/common/voidConfigModelDefaults.ts create mode 100644 src/vs/platform/void/electron-main/llmMessage/sendOllamaMessage.ts diff --git a/src/vs/platform/void/browser/metricsService.ts b/src/vs/platform/void/browser/metricsService.ts index 47043c1c..860600d0 100644 --- a/src/vs/platform/void/browser/metricsService.ts +++ b/src/vs/platform/void/browser/metricsService.ts @@ -3,7 +3,7 @@ * Void Editor additions licensed under the AGPL 3.0 License. *--------------------------------------------------------------------------------------------*/ -import { IChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ProxyChannel } from '../../../base/parts/ipc/common/ipc.js'; import { IMainProcessService } from '../../ipc/common/mainProcessService.js'; import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; import { IMetricsService } from '../common/metricsService.js'; @@ -13,17 +13,17 @@ import { IMetricsService } from '../common/metricsService.js'; export class MetricsService implements IMetricsService { readonly _serviceBrand: undefined; - private readonly channel: IChannel; + private readonly metricsService: IMetricsService; constructor( @IMainProcessService mainProcessService: IMainProcessService // (only usable on client side) ) { - this.channel = mainProcessService.getChannel('void-channel-metrics') + this.metricsService = ProxyChannel.toService(mainProcessService.getChannel('void-channel-metrics')); } // call capture on the channel capture(...params: Parameters) { - this.channel.call('capture', params); + this.metricsService.capture(...params); } } diff --git a/src/vs/platform/void/browser/void.contribution.ts b/src/vs/platform/void/browser/void.contribution.ts new file mode 100644 index 00000000..05b6c3c1 --- /dev/null +++ b/src/vs/platform/void/browser/void.contribution.ts @@ -0,0 +1,9 @@ + +// metrics +import '../browser/metricsService.js' + +// llmMessage +import '../browser/llmMessageService.js' + +// voidConfig +import '../common/voidConfigService.js' diff --git a/src/vs/platform/void/common/voidConfigModelDefaults.ts b/src/vs/platform/void/common/voidConfigModelDefaults.ts new file mode 100644 index 00000000..8d2fc0f2 --- /dev/null +++ b/src/vs/platform/void/common/voidConfigModelDefaults.ts @@ -0,0 +1,58 @@ + + +export const defaultAnthropicModels = [ + 'claude-3-5-sonnet-20240620', + // 'claude-3-opus-20240229', + // 'claude-3-sonnet-20240229', + // 'claude-3-haiku-20240307' +] + + +export const defaultOpenAIModels = [ + 'o1-preview', + 'o1-mini', + 'gpt-4o', + 'gpt-4o-mini', + // 'gpt-4o-2024-05-13', + // 'gpt-4o-2024-08-06', + // 'gpt-4o-mini-2024-07-18', + // 'gpt-4-turbo', + // 'gpt-4-turbo-2024-04-09', + // 'gpt-4-turbo-preview', + // 'gpt-4-0125-preview', + // 'gpt-4-1106-preview', + // 'gpt-4', + // 'gpt-4-0613', + // 'gpt-3.5-turbo-0125', + // 'gpt-3.5-turbo', + // 'gpt-3.5-turbo-1106', +] + + + +export const defaultGroqModels = [ + "mixtral-8x7b-32768", + "llama2-70b-4096", + "gemma-7b-it" +] + + +export const defaultGeminiModels = [ + 'gemini-1.5-flash', + 'gemini-1.5-pro', + 'gemini-1.5-flash-8b', + 'gemini-1.0-pro' +] + + + + + +export const dummyModelData = { + anthropic: ['claude 3.5'], + openAI: ['gpt 4o'], + ollama: ['llama 3.2', 'codestral'], + openRouter: ['qwen 2.5'], +} + + diff --git a/src/vs/platform/void/common/voidConfigTypes.ts b/src/vs/platform/void/common/voidConfigTypes.ts index 36b77bc4..3f9ef35d 100644 --- a/src/vs/platform/void/common/voidConfigTypes.ts +++ b/src/vs/platform/void/common/voidConfigTypes.ts @@ -4,18 +4,7 @@ * Void Editor additions licensed under the AGPL 3.0 License. *--------------------------------------------------------------------------------------------*/ - - -// const voidProviderDefaults = { -// "ctrl+L":{ -// models:[ // select only if present -// { -// provider:"anthropic", -// model:"claude-3-5-sonnet-20240620" -// }, -// ] -// }, -// } +import { defaultAnthropicModels, defaultGeminiModels, defaultGroqModels, defaultOpenAIModels } from './voidConfigModelDefaults.js' @@ -45,173 +34,29 @@ export const voidProviderDefaults = { } as const -export const dummyModelData = { - anthropic: ['claude 3.5'], - openAI: ['gpt 4o'], - ollama: ['llama 3.2'], - openRouter: ['qwen 2.5'], -} - - - - export const voidInitModelOptions = { - anthropic: () => ({ - // model: 'claude-3-5-sonnet-20240620', - models: [ - 'claude-3-5-sonnet-20240620', - 'claude-3-opus-20240229', - 'claude-3-sonnet-20240229', - 'claude-3-haiku-20240307' - ], - }), - openAI: () => ({ - // model: 'gpt-4o', - models: [ - 'o1-preview', - 'o1-mini', - 'gpt-4o', - 'gpt-4o-2024-05-13', - 'gpt-4o-2024-08-06', - 'gpt-4o-mini', - 'gpt-4o-mini-2024-07-18', - 'gpt-4-turbo', - 'gpt-4-turbo-2024-04-09', - 'gpt-4-turbo-preview', - 'gpt-4-0125-preview', - 'gpt-4-1106-preview', - 'gpt-4', - 'gpt-4-0613', - 'gpt-3.5-turbo-0125', - 'gpt-3.5-turbo', - 'gpt-3.5-turbo-1106', - ], - }), - ollama: () => ({ // TODO make this do a fetch to get the models - // model: 'codestral', - models: [ - 'codestral', - 'qwen2.5-coder', - 'qwen2.5-coder:0.5b', - 'qwen2.5-coder:1.5b', - 'qwen2.5-coder:3b', - 'qwen2.5-coder:7b', - 'qwen2.5-coder:14b', - 'qwen2.5-coder:32b', - 'codegemma', - 'codegemma:2b', - 'codegemma:7b', - 'codellama', - 'codellama:7b', - 'codellama:13b', - 'codellama:34b', - 'codellama:70b', - 'codellama:code', - 'codellama:python', - 'command-r', - 'command-r:35b', - 'command-r-plus', - 'command-r-plus:104b', - 'deepseek-coder-v2', - 'deepseek-coder-v2:16b', - 'deepseek-coder-v2:236b', - 'falcon2', - 'falcon2:11b', - 'firefunction-v2', - 'firefunction-v2:70b', - 'gemma', - 'gemma:2b', - 'gemma:7b', - 'gemma2', - 'gemma2:2b', - 'gemma2:9b', - 'gemma2:27b', - 'llama2', - 'llama2:7b', - 'llama2:13b', - 'llama2:70b', - 'llama3', - 'llama3:8b', - 'llama3:70b', - 'llama3-chatqa', - 'llama3-chatqa:8b', - 'llama3-chatqa:70b', - 'llama3-gradient', - 'llama3-gradient:8b', - 'llama3-gradient:70b', - 'llama3.1', - 'llama3.1:8b', - 'llama3.1:70b', - 'llama3.1:405b', - 'llava', - 'llava:7b', - 'llava:13b', - 'llava:34b', - 'llava-llama3', - 'llava-llama3:8b', - 'llava-phi3', - 'llava-phi3:3.8b', - 'mistral', - 'mistral:7b', - 'mistral-large', - 'mistral-large:123b', - 'mistral-nemo', - 'mistral-nemo:12b', - 'mixtral', - 'mixtral:8x7b', - 'mixtral:8x22b', - 'moondream', - 'moondream:1.8b', - 'openhermes', - 'openhermes:v2.5', - 'phi3', - 'phi3:3.8b', - 'phi3:14b', - 'phi3.5', - 'phi3.5:3.8b', - 'qwen', - 'qwen:7b', - 'qwen:14b', - 'qwen:32b', - 'qwen:72b', - 'qwen:110b', - 'qwen2', - 'qwen2:0.5b', - 'qwen2:1.5b', - 'qwen2:7b', - 'qwen2:72b', - 'smollm', - 'smollm:135m', - 'smollm:360m', - 'smollm:1.7b', - ], - }), - openRouter: () => ({ - // model: 'openai/gpt-4o', - models: null, // any - }), - openAICompatible: () => ({ - // model: 'openai/gpt-4o', - models: null, // any - }), - gemini: () => ({ - // model: 'gemini-1.5-flash', - models: [ - 'gemini-1.5-flash', - 'gemini-1.5-pro', - 'gemini-1.5-flash-8b', - 'gemini-1.0-pro' - ], - }), - groq: () => ({ - // model: 'mixtral-8x7b-32768', - models: [ - "mixtral-8x7b-32768", - "llama2-70b-4096", - "gemma-7b-it" - ] - }) -} as const + anthropic: { + models: defaultAnthropicModels, + }, + openAI: { + models: defaultOpenAIModels, + }, + ollama: { + models: [],//getDefaultOllamaModels, + }, + openRouter: { + models: [], // any string + }, + openAICompatible: { + models: [], + }, + gemini: { + models: defaultGeminiModels, + }, + groq: { + models: defaultGroqModels, + }, +} @@ -231,7 +76,7 @@ export type SettingsOfProvider = { enabled: string, // 'true' | 'false' maxTokens: string, - models: string[] | null, // if null, user can type in any string as a model + models: string[], // if null, user can type in any string as a model }) } @@ -323,43 +168,43 @@ export const displayInfoOfSettingName = (providerName: ProviderName, settingName export const defaultVoidProviderState: SettingsOfProvider = { anthropic: { ...voidProviderDefaults.anthropic, - ...voidInitModelOptions.anthropic(), + ...voidInitModelOptions.anthropic, enabled: 'false', maxTokens: '', }, openAI: { ...voidProviderDefaults.openAI, - ...voidInitModelOptions.openAI(), + ...voidInitModelOptions.openAI, enabled: 'false', maxTokens: '', }, ollama: { ...voidProviderDefaults.ollama, - ...voidInitModelOptions.ollama(), + ...voidInitModelOptions.ollama, enabled: 'false', maxTokens: '', }, openRouter: { ...voidProviderDefaults.openRouter, - ...voidInitModelOptions.openRouter(), + ...voidInitModelOptions.openRouter, enabled: 'false', maxTokens: '', }, openAICompatible: { ...voidProviderDefaults.openAICompatible, - ...voidInitModelOptions.openAICompatible(), + ...voidInitModelOptions.openAICompatible, enabled: 'false', maxTokens: '', }, gemini: { ...voidProviderDefaults.gemini, - ...voidInitModelOptions.gemini(), + ...voidInitModelOptions.gemini, enabled: 'false', maxTokens: '', }, groq: { ...voidProviderDefaults.groq, - ...voidInitModelOptions.groq(), + ...voidInitModelOptions.groq, enabled: 'false', maxTokens: '', } diff --git a/src/vs/platform/void/electron-main/llmMessage/ollama.ts b/src/vs/platform/void/electron-main/llmMessage/ollama.ts index b631aad2..d2684062 100644 --- a/src/vs/platform/void/electron-main/llmMessage/ollama.ts +++ b/src/vs/platform/void/electron-main/llmMessage/ollama.ts @@ -3,9 +3,32 @@ * Void Editor additions licensed under the AGPL 3.0 License. *--------------------------------------------------------------------------------------------*/ -import { Ollama } from 'ollama'; +import { ModelResponse, Ollama } from 'ollama'; import { SendLLMMessageFnTypeInternal } from '../../common/llmMessageTypes.js'; import { parseMaxTokensStr } from './util.js'; +import { SettingsOfProvider } from '../../common/voidConfigTypes.js'; + + +type GetOllamaModelsFnType = (args: { + settingsOfProvider: SettingsOfProvider; + onSuccess: (param: { models: ModelResponse[] }) => void; + onError: (param: { error: any }) => void; +}) => void + +export const getDefaultOllamaModels: GetOllamaModelsFnType = async ({ onSuccess, onError, settingsOfProvider }) => { + const thisConfig = settingsOfProvider.ollama + const ollama = new Ollama({ host: thisConfig.endpoint }) + ollama.list() + .then((response) => { + const { models } = response + onSuccess({ models }) + }) + .catch((error) => { + console.error('getDefaultOllamaModels: error:', error) + onError(error) + }) +} + // Ollama export const sendOllamaMsg: SendLLMMessageFnTypeInternal = ({ messages, onText, onFinalMessage, onError, settingsOfProvider, modelName, _setAborter }) => { @@ -50,3 +73,4 @@ export const sendOllamaMsg: SendLLMMessageFnTypeInternal = ({ messages, onText, +// ['codestral', 'qwen2.5-coder', 'qwen2.5-coder:0.5b', 'qwen2.5-coder:1.5b', 'qwen2.5-coder:3b', 'qwen2.5-coder:7b', 'qwen2.5-coder:14b', 'qwen2.5-coder:32b', 'codegemma', 'codegemma:2b', 'codegemma:7b', 'codellama', 'codellama:7b', 'codellama:13b', 'codellama:34b', 'codellama:70b', 'codellama:code', 'codellama:python', 'command-r', 'command-r:35b', 'command-r-plus', 'command-r-plus:104b', 'deepseek-coder-v2', 'deepseek-coder-v2:16b', 'deepseek-coder-v2:236b', 'falcon2', 'falcon2:11b', 'firefunction-v2', 'firefunction-v2:70b', 'gemma', 'gemma:2b', 'gemma:7b', 'gemma2', 'gemma2:2b', 'gemma2:9b', 'gemma2:27b', 'llama2', 'llama2:7b', 'llama2:13b', 'llama2:70b', 'llama3', 'llama3:8b', 'llama3:70b', 'llama3-chatqa', 'llama3-chatqa:8b', 'llama3-chatqa:70b', 'llama3-gradient', 'llama3-gradient:8b', 'llama3-gradient:70b', 'llama3.1', 'llama3.1:8b', 'llama3.1:70b', 'llama3.1:405b', 'llava', 'llava:7b', 'llava:13b', 'llava:34b', 'llava-llama3', 'llava-llama3:8b', 'llava-phi3', 'llava-phi3:3.8b', 'mistral', 'mistral:7b', 'mistral-large', 'mistral-large:123b', 'mistral-nemo', 'mistral-nemo:12b', 'mixtral', 'mixtral:8x7b', 'mixtral:8x22b', 'moondream', 'moondream:1.8b', 'openhermes', 'openhermes:v2.5', 'phi3', 'phi3:3.8b', 'phi3:14b', 'phi3.5', 'phi3.5:3.8b', 'qwen', 'qwen:7b', 'qwen:14b', 'qwen:32b', 'qwen:72b', 'qwen:110b', 'qwen2', 'qwen2:0.5b', 'qwen2:1.5b', 'qwen2:7b', 'qwen2:72b', 'smollm', 'smollm:135m', 'smollm:360m', 'smollm:1.7b',] diff --git a/src/vs/platform/void/electron-main/llmMessage/sendOllamaMessage.ts b/src/vs/platform/void/electron-main/llmMessage/sendOllamaMessage.ts new file mode 100644 index 00000000..7af2a1a8 --- /dev/null +++ b/src/vs/platform/void/electron-main/llmMessage/sendOllamaMessage.ts @@ -0,0 +1,4 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Glass Devtools, Inc. All rights reserved. + * Void Editor additions licensed under the AGPL 3.0 License. + *--------------------------------------------------------------------------------------------*/ diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx index d469af3b..3289de59 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { useCallback, useEffect, useRef } from 'react' -import { dummyModelData, FeatureName, featureNames, ProviderName, providerNames } from '../../../../../../../platform/void/common/voidConfigTypes.js' +import { FeatureName, featureNames, ProviderName, providerNames } from '../../../../../../../platform/void/common/voidConfigTypes.js' +import { dummyModelData } from '../../../../../../../platform/void/common/voidConfigModelDefaults.js' import { useConfigState, useService } from '../util/services.js' import { VoidSelectBox } from './inputs.js' import { SelectBox } from '../../../../../../../base/browser/ui/selectBox/selectBox.js' diff --git a/src/vs/workbench/contrib/void/browser/registerActions.ts b/src/vs/workbench/contrib/void/browser/registerActions.ts index 986c627c..67312942 100644 --- a/src/vs/workbench/contrib/void/browser/registerActions.ts +++ b/src/vs/workbench/contrib/void/browser/registerActions.ts @@ -19,6 +19,7 @@ import { ICodeEditorService } from '../../../../editor/browser/services/codeEdit import { IRange } from '../../../../editor/common/core/range.js'; import { ITextModel } from '../../../../editor/common/model.js'; import { IVoidSidebarStateService, VOID_VIEW_ID } from './registerSidebar.js'; +import { IMetricsService } from '../../../../platform/void/common/metricsService.js'; // import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; @@ -60,8 +61,11 @@ registerAction2(class extends Action2 { if (!model) return - const stateService = accessor.get(IVoidSidebarStateService) + const metricsService = accessor.get(IMetricsService) + + metricsService.capture('Chat Navigation', { type: 'Ctrl+L' }) + stateService.setState({ isHistoryOpen: false, currentTab: 'chat' }) stateService.fireFocusChat() @@ -109,9 +113,12 @@ registerAction2(class extends Action2 { } async run(accessor: ServicesAccessor): Promise { const stateService = accessor.get(IVoidSidebarStateService) + const metricsService = accessor.get(IMetricsService) + + metricsService.capture('Chat Navigation', { type: 'New Chat' }) + stateService.setState({ isHistoryOpen: false, currentTab: 'chat' }) stateService.fireFocusChat() - const historyService = accessor.get(IThreadHistoryService) historyService.startNewThread() } @@ -129,6 +136,10 @@ registerAction2(class extends Action2 { } async run(accessor: ServicesAccessor): Promise { const stateService = accessor.get(IVoidSidebarStateService) + const metricsService = accessor.get(IMetricsService) + + metricsService.capture('Chat Navigation', { type: 'History' }) + stateService.setState({ isHistoryOpen: !stateService.state.isHistoryOpen, currentTab: 'chat' }) stateService.fireBlurChat() } @@ -146,6 +157,10 @@ registerAction2(class extends Action2 { } async run(accessor: ServicesAccessor): Promise { const stateService = accessor.get(IVoidSidebarStateService) + const metricsService = accessor.get(IMetricsService) + + metricsService.capture('Chat Navigation', { type: 'Settings' }) + stateService.setState({ isHistoryOpen: false, currentTab: stateService.state.currentTab === 'settings' ? 'chat' : 'settings' }) stateService.fireBlurChat() } diff --git a/src/vs/workbench/contrib/void/browser/registerSidebar.ts b/src/vs/workbench/contrib/void/browser/registerSidebar.ts index e18f2340..3fd8ecc9 100644 --- a/src/vs/workbench/contrib/void/browser/registerSidebar.ts +++ b/src/vs/workbench/contrib/void/browser/registerSidebar.ts @@ -27,8 +27,6 @@ import { IContextKeyService } from '../../../../platform/contextkey/common/conte import { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; import { Disposable } from '../../../../base/common/lifecycle.js'; import { Emitter, Event } from '../../../../base/common/event.js'; -import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; -import { IViewsService } from '../../../services/views/common/viewsService.js'; import { IThreadHistoryService } from './registerThreads.js'; import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; import { IThemeService } from '../../../../platform/theme/common/themeService.js'; @@ -37,8 +35,6 @@ import { IKeybindingService } from '../../../../platform/keybinding/common/keybi import { IOpenerService } from '../../../../platform/opener/common/opener.js'; import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; import { IHoverService } from '../../../../platform/hover/browser/hover.js'; -// import { IVoidConfigService } from './registerSettings.js'; -// import { IEditorService } from '../../../services/editor/common/editorService.js'; import mountFn from './react/out/sidebar-tsx/Sidebar.js'; @@ -48,9 +44,8 @@ import { IInlineDiffsService } from './registerInlineDiffs.js'; import { IModelService } from '../../../../editor/common/services/model.js'; import { ISendLLMMessageService } from '../../../../platform/void/browser/llmMessageService.js'; import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; - - -// import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { IViewsService } from '../../../services/views/common/viewsService.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; // compare against search.contribution.ts and debug.contribution.ts, scm.contribution.ts (source control) @@ -136,7 +131,7 @@ const voidViewIcon = registerIcon('void-view-icon', voidThemeIcon, localize('voi // called VIEWLET_ID in other places for some reason export const VOID_VIEW_CONTAINER_ID = 'workbench.view.void' -export const VOID_VIEW_ID = VOID_VIEW_CONTAINER_ID // not sure if we can change this +export const VOID_VIEW_ID = VOID_VIEW_CONTAINER_ID // simplicity // Register view container const viewContainerRegistry = Registry.as(ViewContainerExtensions.ViewContainersRegistry); @@ -186,14 +181,15 @@ export interface IVoidSidebarStateService { fireFocusChat(): void; fireBlurChat(): void; - openView(): void; + openSidebarView(): void; } - export const IVoidSidebarStateService = createDecorator('voidSidebarStateService'); class VoidSidebarStateService extends Disposable implements IVoidSidebarStateService { _serviceBrand: undefined; + static readonly ID = 'voidSidebarStateService'; + private readonly _onDidChangeState = new Emitter(); readonly onDidChangeState: Event = this._onDidChangeState.event; @@ -207,11 +203,20 @@ class VoidSidebarStateService extends Disposable implements IVoidSidebarStateSer // state state: VoidSidebarState + constructor( + @IViewsService private readonly _viewsService: IViewsService, + ) { + super() + + // initial state + this.state = { isHistoryOpen: false, currentTab: 'chat', } + } + setState(newState: Partial) { // make sure view is open if the tab changes if ('currentTab' in newState) { - this.openView() + this.openSidebarView() } this.state = { ...this.state, ...newState } @@ -226,27 +231,11 @@ class VoidSidebarStateService extends Disposable implements IVoidSidebarStateSer this._onBlurChat.fire() } - openView() { + openSidebarView() { this._viewsService.openViewContainer(VOID_VIEW_CONTAINER_ID); this._viewsService.openView(VOID_VIEW_ID); } - constructor( - @IViewsService private readonly _viewsService: IViewsService, - // @IThreadHistoryService private readonly _threadHistoryService: IThreadHistoryService, - ) { - super() - // auto open the view on mount (if it bothers you this is here, this is technically just initializing the state of the view) - this.openView() - - // initial state - this.state = { - isHistoryOpen: false, - currentTab: 'chat', - } - - } - } registerSingleton(IVoidSidebarStateService, VoidSidebarStateService, InstantiationType.Eager); diff --git a/src/vs/workbench/workbench.common.main.ts b/src/vs/workbench/workbench.common.main.ts index b5e3d5e6..36bd6ad4 100644 --- a/src/vs/workbench/workbench.common.main.ts +++ b/src/vs/workbench/workbench.common.main.ts @@ -17,8 +17,7 @@ import './browser/workbench.contribution.js'; //#region --- Void // Void added this: import './contrib/void/browser/void.contribution.js'; -import '../platform/void/browser/llmMessageService.js'; -import '../platform/void/common/voidConfigService.js'; +import '../platform/void/browser/void.contribution.js'; //#endregion