hermes - ✅(Solved) Fix Feature request: Add free-tier filter to /models and include all free OpenRouter models in curated list [1 pull requests, 1 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#17923Fetched 2026-05-01 05:55:07
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
2
Participants
Timeline (top)
labeled ×4cross-referenced ×1

Root Cause

Free models are a key entry point for users evaluating Hermes Agent. Having them easily discoverable and browsable improves the onboarding experience significantly.

Fix Action

Fixed

PR fix notes

PR #17994: feat(cli): add /free-models command to list free OpenRouter models

Description (problem / solution / changelog)

What

Adds /free-models slash command that lists every OpenRouter model with free pricing and tool-calling support, fetched live from openrouter.ai/api/v1/models.

Resolves #17923.

Why

Free models are a key entry point for users evaluating Hermes Agent, but the existing /model picker only surfaces models that are explicitly in the curated OPENROUTER_MODELS list. Free :free variants like nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free exist on OpenRouter but aren't discoverable through the CLI today.

How

  1. New helper fetch_openrouter_free_models() in hermes_cli/models.py that hits the live OpenRouter /v1/models endpoint, filters to models where pricing.prompt and pricing.completion are both zero AND supported_parameters advertises tools, then returns [(id, "free"), ...]. Reuses the existing _openrouter_model_is_free and _openrouter_model_supports_tools helpers so policy stays consistent with the curated picker.

  2. Network/parse failures fall back to the :free entries already in OPENROUTER_MODELS so the command still works offline.

  3. New /free-models CommandDef in hermes_cli/commands.py and handler _handle_free_models_command in cli.py that prints the list with a hint on how to switch.

  4. Six tests covering: free+tool filtering, tool-support filtering, permissive handling of missing supported_parameters, network-failure fallback, malformed-payload fallback, and de-duplication.

Why a separate command and not /model --free

The issue suggested either a --free flag on /model or a separate /free-models command. I went with the separate command because the /model picker pulls from a hardcoded curated list across multiple providers (OPENROUTER_MODELS, _PROVIDER_MODELS), and threading a free-only mode through parse_model_flags, switch_model, and list_authenticated_providers would be a much larger change that touches the CLI, gateway, and TUI gateway. A standalone command keeps the diff small and surface area predictable. Happy to reshape if you'd prefer the flag approach — just let me know.

Test plan

  • python3 -m py_compile on all modified files
  • Manual runtime test of fetch_openrouter_free_models with mocked OpenRouter responses (filter, fallback, dedup paths)
  • resolve_command("free-models") returns the registered CommandDef
  • CI runs the new test class on push

Followup ideas

  • Adding context-length info next to each model id (the live payload exposes context_length)
  • Sorting by context length / popularity for nicer output
  • Wiring the same source into the /model picker behind a --free flag (separate PR if the maintainer wants this)

Changed files

  • cli.py (modified, +26/-0)
  • hermes_cli/commands.py (modified, +2/-0)
  • hermes_cli/models.py (modified, +53/-0)
  • tests/hermes_cli/test_models.py (modified, +125/-0)

Code Example

/models --free

---

/free-models
RAW_BUFFERClick to expand / collapse

Problem

The /models command in Hermes Agent shows a curated list of OpenRouter models, but many free models are missing from the list. For example, nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free exists on OpenRouter (free, 256k context) but does not appear in the curated catalog.

Additionally, there is no way to filter the /models output to show only free-tier models. Users have to scan the entire list to find free options.

Proposed solution

  1. Expand the curated OpenRouter model list to include all models that have a :free variant on OpenRouter. Many are already documented in the OpenRouter API (https://openrouter.ai/api/v1/models) with pricing.prompt: "0" and pricing.completion: "0".

  2. Add a --free flag (or equivalent filter) to the /models command so users can see only free models, for example:

    /models --free

    or a separate:

    /free-models

Example models currently missing from curated list

These models exist on OpenRouter with free pricing:

  • nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free (256k context)
  • nvidia/nemotron-3-nano-30b-a3b:free (256k context)
  • nvidia/nemotron-nano-12b-v2-vl:free (128k context)
  • nvidia/nemotron-nano-9b-v2:free (128k context)

Why this matters

Free models are a key entry point for users evaluating Hermes Agent. Having them easily discoverable and browsable improves the onboarding experience significantly.

Environment

  • Hermes Agent version: latest
  • Provider: OpenRouter

extent analysis

TL;DR

The issue can be addressed by expanding the curated OpenRouter model list to include all free models and adding a filter to show only free models.

Guidance

  • Expand the curated model list by querying the OpenRouter API (https://openrouter.ai/api/v1/models) for models with pricing.prompt: "0" and pricing.completion: "0".
  • Add a --free flag or equivalent filter to the /models command to allow users to view only free models.
  • Verify the fix by checking the updated /models output with the --free flag to ensure it includes all free models from OpenRouter.
  • Consider adding a separate /free-models command as an alternative to the --free flag for better user experience.

Example

/models --free

or

/free-models

Notes

The proposed solution assumes that the OpenRouter API provides a comprehensive list of free models. If the API does not include all free models, additional steps may be necessary to ensure complete coverage.

Recommendation

Apply the workaround by expanding the curated model list and adding a filter to show only free models, as this will improve the user experience and provide easy access to free models.

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

hermes - ✅(Solved) Fix Feature request: Add free-tier filter to /models and include all free OpenRouter models in curated list [1 pull requests, 1 participants]