feat(provider): add Nous Portal (Nous Research) native provider#795
Open
iqdoctor wants to merge 11 commits into
Open
feat(provider): add Nous Portal (Nous Research) native provider#795iqdoctor wants to merge 11 commits into
iqdoctor wants to merge 11 commits into
Conversation
- Add NousSettings (base-url / api-key override) to fast-agent config
- Register NousLLM (OpenAICompatibleLLM) in model_factory
- Add Nous Portal models to model_database:
hermes-3-405b, hermes-3-70b, hermes-2-405b, hermes-2-70b, epistem-7b-hermes-2-beta, stepfun/step-3.5-flash
- Port product-attribution tags and base URL from Hermes Nous Portal plugin
- Fixes: stepfun/step-3.5-flash via Nous Portal is now a first-class model
fbc240c to
7651db7
Compare
7651db7 to
0c97c9e
Compare
- Insert Provider.NOUS after Provider.ALIYUN in PICKER_PROVIDER_ORDER - Add stepfun/step-3.5-flash as sole CATALOG_ENTRIES_BY_PROVIDER entry for NOUS - Without these, model_picker_common.build_snapshot() skipped NOUS entirely
Hermes uses https://inference-api.nousresearch.com/v1 (with -api), which is not blocked from this IP range. The bare inference.nousresearch.com drops TLS client hello (SSL_ERROR_SYSCALL). Also updates docstring to match.
Matches Hermes Agent's curated model list from inference-api.nousresearch.com.
All models use the nous.{model_id} spec format; parse_model_string strips
the nous. prefix for the API call.
Models: opus47, opus46, sonnet46, kimi26, qwen36p, haiku45, gpt55,
gpt55pro, gpt54mini, gpt54nano, gpt53codex, mimo25pro, hy3, gem3pro,
gem3flash, gem31pro, gem31fl, qwen36b, step35, minimax27, glm51,
grok43, nemotron3, dsv4pro
Contributor
Author
Aliases like opus47, sonnet46, gpt55 already exist in MODEL_PRESETS pointing to native providers. Adding a prefix avoids the assertion failure in test_curated_catalog_aliases_are_parseable.
…05b, h3-70b, h2-8b) These are available on inference-api.nousresearch.com but were missing from the curated catalog. Added at top of Nous section as native models before the third-party gateway models. Total Nous entries: 29.
Owner
|
Hey @iqdoctor -- hope you're great! Thanks for this, just taking a look through now. I've added a small patch as this gateway emits OpenAI reasoning/encryption tokens through the legacy completions API... not sure about Anthropic. Just wondering though -- are those models a front for OpenRouter? Rather than whack-a-mole with their/OpenRouters translation are there specific models we should add to the catalogue? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

What
Adds a first-class Nous Research Portal provider to
fast-agent, mirroring the Hermes Nous Portal plugin (hermes-agent/plugins/model-providers/nous/).Models now available through Nous Portal:
nous.hermes-3-405bnous.hermes-3-70bnous.hermes-2-405bnous.hermes-2-70bnous.epistem-7b-hermes-2-betanous.stepfun/step-3.5-flashDiff
__init__.py+llm_nous.pyare new)provider_types.py— addProvider.NOUSenum valuellm/provider/nous/llm_nous.py—NousLLM(OpenAICompatibleLLM): portal base URL,_prepare_api_requesttag injection, Nous-specific default modelllm/provider/nous/__init__.py— re-exportNousLLMconfig.py—NousSettings(BaseSettings)withenv_prefix = "nous"(base-url/api-key overrides)model_factory.py—Provider.NOUS → NousLLMbranch in_load_provider_classmodel_database.py— eight model constants + MODELS dict entries for all Nous Portal models (incl.stepfun/step-3.5-flash)Approach
The provider follows the same 6-file change pattern used for every other upstream addition in this fork (see
adjust_schema/type/ricfix PR references). Nobp_migration paths or extra-body construction were altered;NousLLMdelegates everything to the parentOpenAICompatibleLLMand only mutatesextra_body["tags"].Checklist
Provider.NOUSparsed correctly bymodel_factoryNousSettingsinserted, env-prefix= nousNousLLMshipped asOpenAICompatibleLLMsubclass;_prepare_api_requestoverride drops type error via parent-class cast (noDIMB/DRYccw_hack)ModelFactory+ModelDatabaseupdated; model keys are all lower-caseDEFAULT_MAX_ITERATIONSbump reverted (no tuning)mypy/ruffclean on 6 changed filesstepfun/step-3.5-flashadded toMODELSdict withdefault_provider=Provider.NOUS