fix(config): load provider models from config.yaml in model dropdown — PR #644 by @ccqqlo

Providers in config.yaml with explicit models: list were silently ignored. Fix extends the model-list builder to check cfg.providers[pid].models, covering both dict and list formats. Also includes providers only in config.yaml (not _PROVIDER_MODELS). 5 regression tests added. Independent review by @nesquena.
This commit is contained in:
nesquena-hermes
2026-04-18 00:14:03 -07:00
committed by GitHub
parent ad6e76e48e
commit 20a5f48a1f
4 changed files with 143 additions and 3 deletions

View File

@@ -1065,12 +1065,22 @@ def get_available_models() -> dict:
],
}
)
elif pid in _PROVIDER_MODELS:
elif pid in _PROVIDER_MODELS or pid in cfg.get("providers", {}):
# For non-default providers, prefix model IDs with @provider:model
# so resolve_model_provider() routes through that specific provider
# via resolve_runtime_provider(requested=provider).
# The default provider's models keep bare names for direct API routing.
raw_models = _PROVIDER_MODELS[pid]
raw_models = _PROVIDER_MODELS.get(pid, [])
# Override or merge from config.yaml if user specified explicit models
provider_cfg = cfg.get("providers", {}).get(pid, {})
if isinstance(provider_cfg, dict) and "models" in provider_cfg:
cfg_models = provider_cfg["models"]
if isinstance(cfg_models, dict):
# config format is usually models: { "gpt-5.4": { context_length: ... } }
raw_models = [{"id": k, "label": k} for k in cfg_models.keys()]
elif isinstance(cfg_models, list):
raw_models = [{"id": k, "label": k} for k in cfg_models]
_active = (active_provider or "").lower()
if _active and pid != _active:
models = []