Skip to content

Commit 4b92d58

Browse files
committed
Update preset handling to transmit all mode-specific presets to the webview at once
1 parent 9835228 commit 4b92d58

3 files changed

Lines changed: 51 additions & 34 deletions

File tree

packages/vscode/src/view/backend/view-provider.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,7 @@ export class ViewProvider implements vscode.WebviewViewProvider {
394394
} else if (message.command == 'GET_WEB_MODE') {
395395
handle_get_mode_web(this)
396396
} else if (message.command == 'SAVE_WEB_MODE') {
397-
handle_save_mode_web(this, message.mode)
398-
this.send_presets_to_webview(webview_view.webview)
397+
await handle_save_mode_web(this, message.mode)
399398
} else if (message.command == 'GET_API_MODE') {
400399
handle_get_mode_api(this)
401400
} else if (message.command == 'SAVE_API_MODE') {
@@ -429,17 +428,32 @@ export class ViewProvider implements vscode.WebviewViewProvider {
429428

430429
public send_presets_to_webview(_: vscode.Webview) {
431430
const config = vscode.workspace.getConfiguration('codeWebChat')
432-
const presets_config_key = this.get_presets_config_key()
433-
const web_chat_presets_config =
434-
config.get<ConfigPresetFormat[]>(presets_config_key, []) || []
435-
436-
const presets_for_ui: Preset[] = web_chat_presets_config
437-
.filter((preset_config) => CHATBOTS[preset_config.chatbot])
438-
.map((preset_config) => config_preset_to_ui_format(preset_config))
439-
431+
const web_modes: WebMode[] = [
432+
'ask',
433+
'edit',
434+
'code-completions',
435+
'no-context'
436+
]
437+
const mode_to_config_key: Record<WebMode, string> = {
438+
ask: 'chatPresetsForAskAboutContext',
439+
edit: 'chatPresetsForEditContext',
440+
'code-completions': 'chatPresetsForCodeAtCursor',
441+
'no-context': 'chatPresetsForNoContext'
442+
}
443+
const all_presets = Object.fromEntries(
444+
web_modes.map((mode) => {
445+
const presets_config_key = mode_to_config_key[mode]
446+
const presets_config =
447+
config.get<ConfigPresetFormat[]>(presets_config_key, []) || []
448+
const presets_ui = presets_config
449+
.filter((preset_config) => CHATBOTS[preset_config.chatbot])
450+
.map((preset_config) => config_preset_to_ui_format(preset_config))
451+
return [mode, presets_ui]
452+
})
453+
) as { [T in WebMode]: Preset[] }
440454
this.send_message<PresetsMessage>({
441455
command: 'PRESETS',
442-
presets: presets_for_ui
456+
presets: all_presets
443457
})
444458
}
445459

packages/vscode/src/view/frontend/home/Home.tsx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ type Props = {
3232

3333
export const Home: React.FC<Props> = (props) => {
3434
const [is_connected, set_is_connected] = useState<boolean>()
35-
const [presets, set_presets] = useState<Preset[]>()
35+
const [all_presets, set_all_presets] = useState<{
36+
[T in WebMode]: Preset[]
37+
}>()
3638
const [selected_presets, set_selected_presets] = useState<string[]>([])
3739
const [has_active_editor, set_has_active_editor] = useState<boolean>()
3840
const [has_active_selection, set_has_active_selection] = useState<boolean>()
@@ -60,7 +62,7 @@ export const Home: React.FC<Props> = (props) => {
6062
set_is_connected(message.connected)
6163
break
6264
case 'PRESETS':
63-
set_presets((message as PresetsMessage).presets)
65+
set_all_presets((message as PresetsMessage).presets)
6466
break
6567
case 'SELECTED_PRESETS':
6668
set_selected_presets(message.names)
@@ -198,8 +200,10 @@ export const Home: React.FC<Props> = (props) => {
198200
}
199201

200202
const handle_presets_reorder = (reordered_presets: Preset[]) => {
201-
// Update local state
202-
set_presets(reordered_presets)
203+
if (all_presets) {
204+
// Update local state
205+
set_all_presets({ ...all_presets, [current_mode]: reordered_presets })
206+
}
203207

204208
// Send message to extension to save the new order
205209
props.vscode.postMessage({
@@ -227,7 +231,14 @@ export const Home: React.FC<Props> = (props) => {
227231
}
228232

229233
const handle_preset_edit = (name: string) => {
230-
const preset = presets?.find((preset) => preset.name == name)
234+
const current_presets = all_presets
235+
? all_presets[
236+
props.home_view_type === HOME_VIEW_TYPES.WEB
237+
? props.web_mode
238+
: props.api_mode
239+
]
240+
: []
241+
const preset = current_presets.find((preset) => preset.name == name)
231242
if (preset) props.on_preset_edit(preset)
232243
}
233244

@@ -392,7 +403,7 @@ export const Home: React.FC<Props> = (props) => {
392403

393404
if (
394405
is_connected === undefined ||
395-
presets === undefined ||
406+
all_presets === undefined ||
396407
has_active_editor === undefined ||
397408
has_active_selection === undefined ||
398409
ask_history === undefined ||
@@ -407,6 +418,13 @@ export const Home: React.FC<Props> = (props) => {
407418
return <></>
408419
}
409420

421+
const presets_for_current_mode =
422+
all_presets[
423+
props.home_view_type === HOME_VIEW_TYPES.WEB
424+
? props.web_mode
425+
: props.api_mode
426+
]
427+
410428
return (
411429
<HomeView
412430
on_show_intro={props.on_show_intro}
@@ -415,7 +433,7 @@ export const Home: React.FC<Props> = (props) => {
415433
on_search_click={handle_search_click}
416434
on_at_sign_click={handle_at_sign_click}
417435
is_connected={is_connected}
418-
presets={presets}
436+
presets={presets_for_current_mode}
419437
selected_presets={selected_presets}
420438
on_create_preset={handle_create_preset}
421439
on_quick_action_click={handle_quick_action_click}

packages/vscode/src/view/types/messages.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { CHATBOTS } from '@shared/constants/chatbots'
21
import { EditFormat } from '@shared/types/edit-format'
32
import { Preset } from '@shared/types/preset'
43
import { PROVIDERS } from '@shared/constants/providers'
@@ -208,23 +207,9 @@ export interface EditFormatMessage extends BaseMessage {
208207
api_edit_format: EditFormat
209208
}
210209

211-
export interface PresetMessageFormat {
212-
name: string
213-
chatbot: keyof typeof CHATBOTS
214-
prompt_prefix?: string
215-
prompt_suffix?: string
216-
model?: string
217-
temperature?: number
218-
top_p?: number
219-
thinking_budget?: number
220-
system_instructions?: string
221-
options?: string[]
222-
port?: number
223-
}
224-
225210
export interface PresetsMessage extends BaseMessage {
226211
command: 'PRESETS'
227-
presets: PresetMessageFormat[]
212+
presets: { [T in WebMode]: Preset[] }
228213
}
229214

230215
export interface SelectedPresetsMessage extends BaseMessage {

0 commit comments

Comments
 (0)