1+ /* eslint-disable @typescript-eslint/no-explicit-any */
12import { useEffect , useState , useRef , useMemo , useCallback } from 'react'
23import {
34 Popover ,
@@ -121,17 +122,20 @@ const DropdownModelProvider = ({
121122
122123 // Add 'vision' capability if not already present AND if user hasn't manually configured capabilities
123124 // Check if model has a custom capabilities config flag
124- // eslint-disable-next-line @typescript-eslint/no-explicit-any
125- const hasUserConfiguredCapabilities = ( model as any ) . _userConfiguredCapabilities === true
126-
127- if ( ! capabilities . includes ( 'vision' ) && ! hasUserConfiguredCapabilities ) {
125+
126+ const hasUserConfiguredCapabilities =
127+ ( model as any ) . _userConfiguredCapabilities === true
128+
129+ if (
130+ ! capabilities . includes ( 'vision' ) &&
131+ ! hasUserConfiguredCapabilities
132+ ) {
128133 const updatedModels = [ ...provider . models ]
129134 updatedModels [ modelIndex ] = {
130135 ...model ,
131136 capabilities : [ ...capabilities , 'vision' ] ,
132137 // Mark this as auto-detected, not user-configured
133138 _autoDetectedVision : true ,
134- // eslint-disable-next-line @typescript-eslint/no-explicit-any
135139 } as any
136140
137141 updateProvider ( 'llamacpp' , { models : updatedModels } )
@@ -385,6 +389,11 @@ const DropdownModelProvider = ({
385389
386390 const handleSelect = useCallback (
387391 async ( searchableModel : SearchableModel ) => {
392+ // Immediately update display to prevent double-click issues
393+ setDisplayModel ( searchableModel . model . id )
394+ setSearchValue ( '' )
395+ setOpen ( false )
396+
388397 selectModelProvider (
389398 searchableModel . provider . provider ,
390399 searchableModel . model . id
@@ -394,28 +403,42 @@ const DropdownModelProvider = ({
394403 provider : searchableModel . provider . provider ,
395404 } )
396405
397- // Check mmproj existence for llamacpp models
406+ // Store the selected model as last used
407+ if ( useLastUsedModel ) {
408+ setLastUsedModel (
409+ searchableModel . provider . provider ,
410+ searchableModel . model . id
411+ )
412+ }
413+
414+ // Check mmproj existence for llamacpp models (async, don't block UI)
398415 if ( searchableModel . provider . provider === 'llamacpp' ) {
399- await serviceHub
416+ serviceHub
400417 . models ( )
401418 . checkMmprojExistsAndUpdateOffloadMMprojSetting (
402419 searchableModel . model . id ,
403420 updateProvider ,
404421 getProviderByName
405422 )
406- // Also check vision capability
407- await checkAndUpdateModelVisionCapability ( searchableModel . model . id )
408- }
409-
410- // Store the selected model as last used
411- if ( useLastUsedModel ) {
412- setLastUsedModel (
413- searchableModel . provider . provider ,
414- searchableModel . model . id
423+ . catch ( ( error ) => {
424+ console . debug (
425+ 'Error checking mmproj for model:' ,
426+ searchableModel . model . id ,
427+ error
428+ )
429+ } )
430+
431+ // Also check vision capability (async, don't block UI)
432+ checkAndUpdateModelVisionCapability ( searchableModel . model . id ) . catch (
433+ ( error ) => {
434+ console . debug (
435+ 'Error checking vision capability for model:' ,
436+ searchableModel . model . id ,
437+ error
438+ )
439+ }
415440 )
416441 }
417- setSearchValue ( '' )
418- setOpen ( false )
419442 } ,
420443 [
421444 selectModelProvider ,
0 commit comments