Remove redundant provider reload call from plugin change handler

The provider manager now uses the plugin cache system and automatically reloads when plugins change, making the explicit reload_providers() call unnecessary.

frdel committed Mar 12, 2026 at 07:31 UTC 36f26c1e2ce8012ed31e2016b3e99477e9a7dfc8
2 files changed +10 -7
helpers/plugins.py
-2
@@ -79,8 +79,6 @@ class PluginListItem(BaseModel):
79
80 def after_plugin_change(plugin_names: list[str] | None = None):
81 clear_plugin_cache()
82 - from helpers.providers import reload_providers
83 - reload_providers()
82 send_frontend_reload_notification(plugin_names)
83
84
helpers/providers.py
+10 -5
@@ -1,28 +1,33 @@
1 import yaml
2 -from helpers import files
2 +from helpers import files, cache
3 from typing import List, Dict, Optional, TypedDict, Literal
4
5 ModelType = Literal["chat", "embedding"]
6
7 +PROVIDER_MANAGER_CACHE_AREA = "model_providers(plugins)"
8 +PROVIDER_MANAGER_CACHE_KEY = "manager"
9 +
10 # Type alias for UI option items
11 class FieldOption(TypedDict):
12 value: str
13 label: str
14
15 class ProviderManager:
13 - _instance = None
16 _raw: Optional[Dict[str, List[Dict[str, str]]]] = None # full provider data
17 _options: Optional[Dict[str, List[FieldOption]]] = None # UI-friendly list
18
19 @classmethod
20 def get_instance(cls):
19 - if cls._instance is None:
20 - cls._instance = cls()
21 - return cls._instance
21 + instance = cache.get(PROVIDER_MANAGER_CACHE_AREA, PROVIDER_MANAGER_CACHE_KEY)
22 + if instance is None:
23 + instance = cls()
24 + cache.add(PROVIDER_MANAGER_CACHE_AREA, PROVIDER_MANAGER_CACHE_KEY, instance)
25 + return instance
26
27 @classmethod
28 def reload(cls):
29 """Force reload of all provider configs (call after plugin changes)."""
30 + cache.remove(PROVIDER_MANAGER_CACHE_AREA, PROVIDER_MANAGER_CACHE_KEY)
31 inst = cls.get_instance()
32 inst._load_providers()
33