Skip to content

feat(provider): add Nous Portal (Nous Research) native provider#795

Open
iqdoctor wants to merge 11 commits into
evalstate:mainfrom
strato-space:feat/stepfun-nous
Open

feat(provider): add Nous Portal (Nous Research) native provider#795
iqdoctor wants to merge 11 commits into
evalstate:mainfrom
strato-space:feat/stepfun-nous

Conversation

@iqdoctor
Copy link
Copy Markdown
Contributor

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:

Key Model
nous.hermes-3-405b Hermes 3 405B
nous.hermes-3-70b Hermes 3 70B
nous.hermes-2-405b Hermes 2 405B
nous.hermes-2-70b Hermes 2 70B
nous.epistem-7b-hermes-2-beta Epistem 7B Hermes 2 beta
nous.stepfun/step-3.5-flash StepFun Step 3.5 Flash (WorkflowGuru)

Diff

  • 6 files changed, 197 insertions (+), 0 deletions (7 files total; __init__.py + llm_nous.py are new)
  • provider_types.py — add Provider.NOUS enum value
  • llm/provider/nous/llm_nous.pyNousLLM(OpenAICompatibleLLM): portal base URL, _prepare_api_request tag injection, Nous-specific default model
  • llm/provider/nous/__init__.py — re-export NousLLM
  • config.pyNousSettings(BaseSettings) with env_prefix = "nous" (base-url/api-key overrides)
  • model_factory.pyProvider.NOUS → NousLLM branch in _load_provider_class
  • model_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/ric fix PR references). No bp_ migration paths or extra-body construction were altered; NousLLM delegates everything to the parent OpenAICompatibleLLM and only mutates extra_body["tags"].

Checklist

  • Provider.NOUS parsed correctly by model_factory
  • NousSettings inserted, env-prefix= nous
  • NousLLM shipped as OpenAICompatibleLLM subclass; _prepare_api_request override drops type error via parent-class cast (no DIMB/DRYccw_ hack)
  • ModelFactory + ModelDatabase updated; model keys are all lower-case
  • DEFAULT_MAX_ITERATIONS bump reverted (no tuning)
  • mypy / ruff clean on 6 changed files
  • Diff sieved before push — no sandbox / debug artefacts
  • stepfun/step-3.5-flash added to MODELS dict with default_provider=Provider.NOUS

- 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
@iqdoctor iqdoctor force-pushed the feat/stepfun-nous branch from fbc240c to 7651db7 Compare May 16, 2026 21:53
@iqdoctor iqdoctor force-pushed the feat/stepfun-nous branch from 7651db7 to 0c97c9e Compare May 16, 2026 22:23
iqdoctor added 3 commits May 17, 2026 01:41
- 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
@iqdoctor
Copy link
Copy Markdown
Contributor Author

image

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.
iqdoctor and others added 5 commits May 17, 2026 03:31
…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.
@evalstate
Copy link
Copy Markdown
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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants