From f82a763dfba65978d79c93002af72fc4e4be49c5 Mon Sep 17 00:00:00 2001 From: BonyFish Date: Sat, 16 May 2026 12:38:39 +0800 Subject: [PATCH] fix: support list format for custom_providers.models in model dropdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The get_available_models() function only handled dict-format models (`{model_id: {}}`) for custom_providers entries, silently dropping models specified as YAML lists (`[model1, model2]`) or list of dicts (`[{id: ..., label: ...}]`). This caused users who define their custom providers with list-format model declarations to see zero or incomplete model entries in both Settings → Preferences → Default Model dropdown and the chat interface model picker. The fix adds an `elif isinstance(_cp_models_dict, list)` branch with support for three list sub-formats: - Plain string list: `models: [m1, m2]` - Dict list: `models: [{id: m1, label: ...}]` - Mixed: `models: [m1, {id: m2}]` Refs: hermes-agent issue where YAML list models were invisible --- api/config.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/api/config.py b/api/config.py index 77b601f6..5ab5043f 100644 --- a/api/config.py +++ b/api/config.py @@ -3194,6 +3194,16 @@ def get_available_models() -> dict: for _m_id in _cp_models_dict: if isinstance(_m_id, str) and _m_id.strip() and _m_id not in _cp_model_ids: _cp_model_ids.append(_m_id.strip()) + elif isinstance(_cp_models_dict, list): + for _item in _cp_models_dict: + if isinstance(_item, str): + _mid = _item.strip() + if _mid and _mid not in _cp_model_ids: + _cp_model_ids.append(_mid) + elif isinstance(_item, dict): + _mid = str(_item.get("id") or _item.get("model") or _item.get("name") or "").strip() + if _mid and _mid not in _cp_model_ids: + _cp_model_ids.append(_mid) for _cp_model in _cp_model_ids: _dedup_key = f"{_slug}:{_cp_model}" if _slug else _cp_model