@@ -25,10 +25,36 @@ export const initial_select_provider = async (
2525 }
2626
2727 const provider_items = providers . map ( ( p ) => ( { label : p . name , provider : p } ) )
28- const selected = await vscode . window . showQuickPick ( provider_items , {
29- title : 'Model Providers'
30- } )
28+ const selected = await new Promise < ( typeof provider_items ) [ 0 ] | undefined > (
29+ ( resolve ) => {
30+ const quick_pick =
31+ vscode . window . createQuickPick < ( typeof provider_items ) [ 0 ] > ( )
32+ quick_pick . items = provider_items
33+ quick_pick . title = 'Model Providers'
34+ quick_pick . buttons = [ vscode . QuickInputButtons . Back ]
35+ let accepted = false
36+ const disposables : vscode . Disposable [ ] = [ ]
3137
38+ disposables . push (
39+ quick_pick . onDidAccept ( ( ) => {
40+ accepted = true
41+ resolve ( quick_pick . selectedItems [ 0 ] )
42+ quick_pick . hide ( )
43+ } ) ,
44+ quick_pick . onDidTriggerButton ( ( button ) => {
45+ if ( button === vscode . QuickInputButtons . Back ) {
46+ quick_pick . hide ( )
47+ }
48+ } ) ,
49+ quick_pick . onDidHide ( ( ) => {
50+ if ( ! accepted ) resolve ( undefined )
51+ disposables . forEach ( ( d ) => d . dispose ( ) )
52+ quick_pick . dispose ( )
53+ } )
54+ )
55+ quick_pick . show ( )
56+ }
57+ )
3258 return selected ?. provider
3359}
3460
@@ -125,10 +151,37 @@ export const edit_provider_for_config = async (
125151 detail : p . type ,
126152 provider : p
127153 } ) )
128- const selected_provider_item = await vscode . window . showQuickPick (
129- provider_items ,
130- { title : 'Model Providers' }
131- )
154+ const selected_provider_item = await new Promise <
155+ ( typeof provider_items ) [ 0 ] | undefined
156+ > ( ( resolve ) => {
157+ const quick_pick =
158+ vscode . window . createQuickPick < ( typeof provider_items ) [ 0 ] > ( )
159+ quick_pick . items = provider_items
160+ quick_pick . title = 'Model Providers'
161+ quick_pick . buttons = [ vscode . QuickInputButtons . Back ]
162+ let accepted = false
163+ const disposables : vscode . Disposable [ ] = [ ]
164+
165+ disposables . push (
166+ quick_pick . onDidAccept ( ( ) => {
167+ accepted = true
168+ resolve ( quick_pick . selectedItems [ 0 ] )
169+ quick_pick . hide ( )
170+ } ) ,
171+ quick_pick . onDidTriggerButton ( ( button ) => {
172+ if ( button === vscode . QuickInputButtons . Back ) {
173+ quick_pick . hide ( )
174+ }
175+ } ) ,
176+ quick_pick . onDidHide ( ( ) => {
177+ if ( ! accepted ) resolve ( undefined )
178+ disposables . forEach ( ( d ) => d . dispose ( ) )
179+ quick_pick . dispose ( )
180+ } )
181+ )
182+ quick_pick . show ( )
183+ } )
184+
132185 if ( selected_provider_item ) {
133186 return {
134187 provider_name : selected_provider_item . provider . name ,
@@ -167,9 +220,6 @@ export const edit_model_for_config = async (
167220 return undefined
168221 }
169222
170- let new_model_value : string | undefined
171- let model_selected = false
172-
173223 try {
174224 const models = await model_fetcher . get_models ( {
175225 base_url,
@@ -182,15 +232,43 @@ export const edit_model_for_config = async (
182232 description : model . name ? model . id : undefined ,
183233 detail : model . description
184234 } ) )
185- const selected_model_item = await vscode . window . showQuickPick (
186- model_items ,
187- { title : 'Models' , placeHolder : 'Choose a model' }
188- )
235+ const selected_model_item = await new Promise <
236+ ( typeof model_items ) [ 0 ] | undefined
237+ > ( ( resolve ) => {
238+ const quick_pick =
239+ vscode . window . createQuickPick < ( typeof model_items ) [ 0 ] > ( )
240+ quick_pick . items = model_items
241+ quick_pick . title = 'Models'
242+ quick_pick . placeholder = 'Choose a model'
243+ quick_pick . buttons = [ vscode . QuickInputButtons . Back ]
244+ let accepted = false
245+ const disposables : vscode . Disposable [ ] = [ ]
246+
247+ disposables . push (
248+ quick_pick . onDidAccept ( ( ) => {
249+ accepted = true
250+ resolve ( quick_pick . selectedItems [ 0 ] )
251+ quick_pick . hide ( )
252+ } ) ,
253+ quick_pick . onDidTriggerButton ( ( button ) => {
254+ if ( button === vscode . QuickInputButtons . Back ) {
255+ quick_pick . hide ( )
256+ }
257+ } ) ,
258+ quick_pick . onDidHide ( ( ) => {
259+ if ( ! accepted ) resolve ( undefined )
260+ disposables . forEach ( ( d ) => d . dispose ( ) )
261+ quick_pick . dispose ( )
262+ } )
263+ )
264+ quick_pick . show ( )
265+ } )
189266 if ( selected_model_item ) {
190- new_model_value =
267+ return (
191268 selected_model_item . description || selected_model_item . label
192- model_selected = true
269+ ) . trim ( )
193270 }
271+ return undefined
194272 } else {
195273 vscode . window . showWarningMessage (
196274 dictionary . warning_message . NO_MODELS_FOUND_MANUAL_ENTRY (
@@ -223,19 +301,13 @@ export const edit_model_for_config = async (
223301 }
224302 }
225303
226- if ( ! model_selected ) {
227- const new_model_input = await vscode . window . showInputBox ( {
228- title : 'Enter Model Name' ,
229- value : config . model ,
230- prompt : `Enter a model name (ID)`
231- } )
232- if ( new_model_input !== undefined ) {
233- new_model_value = new_model_input
234- }
235- }
236-
237- if ( new_model_value !== undefined ) {
238- return new_model_value . trim ( )
304+ const new_model_input = await vscode . window . showInputBox ( {
305+ title : 'Enter Model Name' ,
306+ value : config . model ,
307+ prompt : `Enter a model name (ID)`
308+ } )
309+ if ( new_model_input !== undefined ) {
310+ return new_model_input . trim ( )
239311 }
240312 return undefined
241313}
0 commit comments