@@ -210,6 +210,39 @@ local defaults = {
210210 parrot .logger .info (" Asking model: " .. model_obj .name )
211211 parrot .Prompt (params , parrot .ui .Target .popup , model_obj , " 🤖 Ask ~ " , template )
212212 end ,
213+ -- PrtReloadCache reloads cached models for all or specific providers
214+ ReloadCache = function (parrot , params )
215+ local provider = params .args -- Optional provider name from command args
216+ local state = parrot .chat_handler .state
217+ local spinner = parrot .options .enable_spinner and require (" parrot.spinner" ):new (parrot .options .spinner_type ) or nil
218+
219+ -- Validate provider if specified
220+ if provider and not vim .tbl_contains (parrot .available_providers , provider ) then
221+ parrot .logger .error (" Provider '" .. provider .. " ' is not configured or available" )
222+ return
223+ end
224+
225+ -- Clear cache
226+ state :clear_cache (provider )
227+
228+ -- Determine providers to reload (only available ones)
229+ local providers_to_reload = provider and {provider } or parrot .available_providers
230+
231+ -- Refetch models (similar to setup logic, only for available providers)
232+ for _ , prov_name in ipairs (providers_to_reload ) do
233+ local _prov = require (" parrot.provider" ).init_provider (vim .tbl_deep_extend (" force" , {name = prov_name }, parrot .providers [prov_name ]))
234+ if _prov :online_model_fetching () and parrot .options .model_cache_expiry_hours > 0 then
235+ local endpoint_hash = require (" parrot.utils" ).generate_endpoint_hash (_prov )
236+ parrot .logger .info (" Reloading model cache for " .. prov_name )
237+ local fresh_models = _prov :get_available_models_cached (state , parrot .options .model_cache_expiry_hours , spinner )
238+ parrot .available_models [prov_name ] = fresh_models
239+ end
240+ end
241+
242+ -- Refresh state with updated models
243+ state :refresh (parrot .available_providers , parrot .available_models )
244+ parrot .logger .info (" Model cache reloaded" .. (provider and " for " .. provider or " for all providers" ))
245+ end ,
213246 },
214247 prompts = {
215248 [" ProofReader" ] = " You are a professional proofreader looking for spell and grammar errors" ,
382415M .register_hooks = function (hooks , options )
383416 -- register user commands
384417 for hook , _ in pairs (hooks ) do
418+ local complete_func = nil
419+ if hook == " ReloadCache" then
420+ complete_func = function ()
421+ return M .available_providers
422+ end
423+ end
385424 vim .api .nvim_create_user_command (options .cmd_prefix .. hook , function (params )
386425 M .call_hook (hook , params )
387- end , { nargs = " ?" , range = true , desc = " Parrot LLM plugin" })
426+ end , { nargs = " ?" , range = true , desc = " Parrot LLM plugin" , complete = complete_func })
388427 end
389428end
390429
0 commit comments