@@ -415,6 +415,7 @@ def __init__(self):
415415 spacing = 12 ,
416416 orientation = 1
417417 )
418+
418419 self .pulling_list = pulling_model_list ()
419420 self .append (self .pulling_list )
420421 self .local_list = local_model_list ()
@@ -483,11 +484,37 @@ def update_available_list(self):
483484 def change_model (self , model_name :str ):
484485 self .model_selector .change_model (model_name )
485486
487+ def has_vision (self , model_name ) -> bool :
488+ response = (
489+ window .ollama_instance .request (
490+ "POST" , "api/show" , json .dumps ({"name" : model_name })
491+ )
492+ )
493+
494+ if response .status_code != 200 :
495+ logger .error (f"Status code was { response .status_code } " )
496+ return False
497+
498+ try :
499+ model_info = json .loads (response .text )
500+ logger .debug (f"Vision for { model_name } : { 'projector_info' in model_info } " )
501+ return 'projector_info' in model_info
502+ except Exception as e :
503+ logger .error (f"Error fetching vision info: { str (e )} " )
504+ return False
505+
486506 def verify_if_image_can_be_used (self ):
487507 logger .debug ("Verifying if image can be used" )
488508 selected = self .get_selected_model ()
489509 if selected == None :
490510 return False
511+
512+ # first try ollama show API.
513+ if self .has_vision (selected ):
514+ return True
515+
516+ # then fall back to the old method.)
517+
491518 selected = selected .split (":" )[0 ]
492519 with open (os .path .join (source_dir , 'available_models.json' ), 'r' , encoding = "utf-8" ) as f :
493520 if selected in [key for key , value in json .load (f ).items () if value ["image" ]]:
@@ -532,4 +559,3 @@ def pull_model(self, model_name:str, modelfile:str=None):
532559 GLib .idle_add (window .chat_list_box .update_welcome_screens , len (self .get_model_list ()) > 0 )
533560 if len (list (self .pulling_list )) == 0 :
534561 GLib .idle_add (self .pulling_list .set_visible , False )
535-
0 commit comments