hermes - ✅(Solved) Fix [Bug]: Gateway /model picker does not fetch dynamic Portal API recommendations [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#28886Fetched 2026-05-20 04:01:20
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Timeline (top)
labeled ×4commented ×1cross-referenced ×1

Root Cause

  • Gateway path: _handle_model_commandlist_picker_providerslist_authenticated_providersget_curated_nous_model_ids → reads static model-catalog.json or _PROVIDER_MODELS["nous"]
  • CLI path: auth.py handle_nous_authunion_with_portal_free_recommendations → fetches dynamic freeRecommendedModels from Portal API → merges with curated list
  • The gap: list_authenticated_providers (called by the gateway) never calls union_with_portal_free_recommendations or union_with_portal_paid_recommendations for the nous provider

Fix Action

Fixed

PR fix notes

PR #28931: fix(gateway): merge Portal API free recommendations into /model picker

Description (problem / solution / changelog)

Summary

The gateway /model picker only uses the static model-catalog.json for the Nous Portal provider, missing dynamically-recommended models like DeepSeek V4 Flash (announced May 14 via Novita Labs promotion). The interactive CLI already calls union_with_portal_free_recommendations() — this teaches

list_authenticated_providers() (used by the gateway) to do the same.

Related Issue

Fixes #28886

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)

Changes Made

  • hermes_cli/model_switch.py:1169-1180 — after get_curated_nous_model_ids(), call union_with_portal_free_recommendations() to merge Portal API freeRecommendedModels into the nous provider's curated list. Falls back to the curated list on any error (silent degrade).

How to Test

  1. Authenticate with Nous Portal on a free tier (hermes login nous)
  2. Send /model via Discord or Telegram gateway
  3. Previously: DeepSeek V4 Flash (and other recent Portal free models) missing
  4. Now: Portal-recommended free models appear alongside the curated list

Changed files

  • hermes_cli/model_switch.py (modified, +19/-0)
  • hermes_cli/models.py (modified, +60/-0)
  • tests/hermes_cli/test_model_catalog.py (modified, +4/-0)
RAW_BUFFERClick to expand / collapse

Bug Description

The gateway /model picker (Discord/Telegram) only uses the static model-catalog.json curated list for the Nous Portal provider. It does NOT call the Portal API's freeRecommendedModels endpoint to dynamically discover newly-launched free models (e.g. DeepSeek V4 Flash via Novita Labs promotion, announced May 14).

The interactive hermes model CLI flow does call this endpoint (via auth.py union_with_portal_free_recommendations), so models like deepseek-v4-flash appear in the terminal picker but NOT in the Discord/Telegram picker.

Steps to Reproduce

  1. Authenticate with Nous Portal (hermes login nous) on a free tier subscription
  2. Send /model via Discord or Telegram gateway
  3. Look for recently-launched free models in the Nous Portal section
  4. DeepSeek V4 Flash (free on Nous Portal via Novita Labs since May 14) does not appear
  5. Same model DOES appear when running hermes model interactively in terminal

Expected Behavior

The gateway /model picker should show the same models as the interactive hermes model CLI, including dynamically-recommended models from the Portal API.

Actual Behavior

Only models from the static model-catalog.json manifest are shown. The static catalog was last updated May 11, 3 days before the DeepSeek Flash promotion was announced.

Root Cause

  • Gateway path: _handle_model_commandlist_picker_providerslist_authenticated_providersget_curated_nous_model_ids → reads static model-catalog.json or _PROVIDER_MODELS["nous"]
  • CLI path: auth.py handle_nous_authunion_with_portal_free_recommendations → fetches dynamic freeRecommendedModels from Portal API → merges with curated list
  • The gap: list_authenticated_providers (called by the gateway) never calls union_with_portal_free_recommendations or union_with_portal_paid_recommendations for the nous provider

Affected Code

  • gateway/run.py_handle_model_command
  • hermes_cli/model_switch.pylist_picker_providers, list_authenticated_providers
  • hermes_cli/models.pyget_curated_nous_model_ids
  • hermes_cli/auth.py — dynamic recommendations logic

Environment

  • Hermes Agent v0.14.0 (2026.5.16)
  • Discord gateway connected
  • Nous Portal authenticated (OAuth device_code, free tier)
  • config.yaml model_catalog.enabled: true

Proposed Fix

In list_authenticated_providers (or a helper called by it), when building the model list for the nous provider, also call union_with_portal_free_recommendations (for free tier) or union_with_portal_paid_recommendations (for paid users) and merge the results with the curated list — same as the CLI handle_nous_auth does.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING