Summary
The /model picker in the gateway/Telegram flow only shows a single model for custom_providers entries, even when the provider config contains multiple models under custom_providers[].models.
This appears to happen because the picker/listing path reads only custom_providers[].model and ignores custom_providers[].models.
Sanitized example config
model:
default: model-a
provider: custom
base_url: https://redacted-gateway.example/v1
custom_providers:
- name: Redacted Gateway
base_url: https://redacted-gateway.example/v1
model: model-a
models:
model-a: {}
model-b: {}
model-c: {}
model-d: {}
Steps to reproduce
- Configure a custom provider only under
custom_providers: with one default model in model: / custom_providers[].model and several available models under custom_providers[].models.
- Open
/model in Telegram or another gateway surface that uses the interactive provider/model picker.
- Select the custom provider.
Expected behavior
The provider button should show the total number of configured models from custom_providers[].models, and the next picker step should list those configured models.
Using the sanitized example above, the provider should show (4) and the picker should offer model-a, model-b, model-c, and model-d.
Actual behavior
The provider shows only (1), and after selecting it the picker shows only the single value from custom_providers[].model (for example model-a).
Suspected root cause
hermes_cli/model_switch.py list_authenticated_providers() currently builds the custom-provider model list from entry.get("model") only and does not consume entry.get("models").
That means:
models_list contains only one item
total_models is reported as 1
- the Telegram picker downstream receives only that single model
Why this matters
This makes /model appear broken for custom OpenAI-compatible gateways that intentionally expose multiple models through a single endpoint.
It also creates a mismatch with other Hermes paths that already read richer metadata from custom_providers.
Suggested fix
When building picker data for custom_providers, merge in model IDs from custom_providers[].models.
At minimum:
- if
entry["models"] is a dict, use its keys as the available model IDs
- fall back to
entry["model"] only when entry["models"] is absent or empty
- set
total_models from the full model set, not just the default model
Notes
This report uses a redacted provider name and redacted base URL. It does not include any user-private endpoint details.
Summary
The
/modelpicker in the gateway/Telegram flow only shows a single model forcustom_providersentries, even when the provider config contains multiple models undercustom_providers[].models.This appears to happen because the picker/listing path reads only
custom_providers[].modeland ignorescustom_providers[].models.Sanitized example config
Steps to reproduce
custom_providers:with one default model inmodel:/custom_providers[].modeland several available models undercustom_providers[].models./modelin Telegram or another gateway surface that uses the interactive provider/model picker.Expected behavior
The provider button should show the total number of configured models from
custom_providers[].models, and the next picker step should list those configured models.Using the sanitized example above, the provider should show
(4)and the picker should offermodel-a,model-b,model-c, andmodel-d.Actual behavior
The provider shows only
(1), and after selecting it the picker shows only the single value fromcustom_providers[].model(for examplemodel-a).Suspected root cause
hermes_cli/model_switch.pylist_authenticated_providers()currently builds the custom-provider model list fromentry.get("model")only and does not consumeentry.get("models").That means:
models_listcontains only one itemtotal_modelsis reported as1Why this matters
This makes
/modelappear broken for custom OpenAI-compatible gateways that intentionally expose multiple models through a single endpoint.It also creates a mismatch with other Hermes paths that already read richer metadata from
custom_providers.Suggested fix
When building picker data for
custom_providers, merge in model IDs fromcustom_providers[].models.At minimum:
entry["models"]is a dict, use its keys as the available model IDsentry["model"]only whenentry["models"]is absent or emptytotal_modelsfrom the full model set, not just the default modelNotes
This report uses a redacted provider name and redacted base URL. It does not include any user-private endpoint details.