@@ -493,38 +493,6 @@ async def get_filtered_models(models, user, db=None):
493493 return filtered_models
494494
495495
496- async def get_openai_loaded_models (request : Request , models : dict , api_base_urls : list ):
497- """
498- Fetch loaded-model state from providers that expose it and annotate
499- each model dict with a ``loaded`` boolean.
500-
501- Currently supports:
502- - **llama.cpp** – queries ``GET /slots`` and matches slot model IDs.
503- """
504- api_configs = request .app .state .config .OPENAI_API_CONFIGS
505- api_keys = request .app .state .config .OPENAI_API_KEYS
506-
507- for idx , url in enumerate (api_base_urls ):
508- api_config = api_configs .get (
509- str (idx ),
510- api_configs .get (url , {}),
511- )
512- provider = api_config .get ('provider' , '' )
513-
514- if provider == 'llama.cpp' :
515- try :
516- root_url = url .rstrip ('/' ).removesuffix ('/v1' )
517- key = api_keys [idx ] if idx < len (api_keys ) else None
518- slots = await send_get_request (url = f'{ root_url } /slots' , key = key )
519- loaded_model_ids = (
520- {s .get ('model' ) for s in slots if s .get ('model' )} if isinstance (slots , list ) else set ()
521- )
522- for model_id , model in models .items ():
523- if model .get ('urlIdx' ) == idx :
524- model ['loaded' ] = model_id in loaded_model_ids
525- except Exception as e :
526- log .debug (f'Failed to fetch llama.cpp slots for idx { idx } : { e } ' )
527-
528496
529497@cached (
530498 ttl = MODELS_CACHE_TTL ,
@@ -580,7 +548,7 @@ def get_merged_models(model_lists):
580548 continue
581549
582550 if model_id and model_id not in models :
583- models [ model_id ] = {
551+ merged = {
584552 ** model ,
585553 'name' : model .get ('name' , model_id ),
586554 'owned_by' : 'openai' ,
@@ -590,13 +558,19 @@ def get_merged_models(model_lists):
590558 'urlIdx' : idx ,
591559 }
592560
561+ # llama.cpp router mode: derive loaded state from
562+ # the status object returned by GET /v1/models.
563+ status = model .get ('status' )
564+ if isinstance (status , dict ) and 'value' in status :
565+ merged ['loaded' ] = status ['value' ] in ('loaded' , 'sleeping' )
566+
567+ models [model_id ] = merged
568+
593569 return models
594570
595571 models = get_merged_models (map (extract_data , responses ))
596572 log .debug (f'models: { models } ' )
597573
598- # Fetch loaded state for providers that support it (e.g. llama.cpp /slots)
599- await get_openai_loaded_models (request , models , api_base_urls )
600574
601575 request .app .state .OPENAI_MODELS = models
602576 return {'data' : list (models .values ())}
0 commit comments