feat(providers): add Requesty, MiniMax and Forge - #159
Merged
Conversation
Ports three provider contributions that could not merge as submitted: #138 and #130 also touched new_ui/ and nanobot/, and #116 targeted nanobot/ only. Those trees were removed in the v2.0 refactor. The provider work itself applies unchanged to core/providers. ProvidersConfig reads each provider via getattr(providers, spec.name), so a ProviderSpec without a matching field is silently skipped — all three get both halves, as the ProvidersConfig docstring requires. Endpoints verified reachable: router.requesty.ai (200), api.minimax.io (401), api.forge.tensorblock.co (401). Also fixes a gateway bug #116 found in nanobot's provider that core had only half-fixed: spec.env_key was forced for gateways, but env_extras still used setdefault, so a stale ambient variable outranked the gateway the user picked. Dropped from the originals: the tests covering new_ui's requesty_models service and nanobot's registry. One of those imported "nanobot.config.schema", which now resolves to an unrelated PyPI package (nanobot-ai) when installed — it fails locally and skips in CI, testing nothing either way. Co-authored-by: Thibault Jaigu <thibault.jaigu@gmail.com> Co-authored-by: Yiiii0 <yiqiaozhou@outlook.com> Co-authored-by: octo-patch <octo-patch@github.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Zongwei9888
force-pushed
the
feat/b-tier-providers
branch
from
August 6, 2026 10:04
b69d684 to
b737060
Compare
This was referenced Aug 6, 2026
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.
Description
Ports three provider contributions that could not merge as submitted. #138 and #130 also touched
new_ui/andnanobot/; #116 targetednanobot/only. Those trees were removed in the v2.0 refactor — but the provider work itself applies unchanged tocore/providers.Supersedes #138, #130 and #116.
Why a dedicated ProviderSpec, rather than telling users to use
customEach spec unlocks behaviour
customcannot express:strip_model_prefix=Truecustom, a habitualanthropic/claude-3would be sent verbatim and fail.supports_prompt_caching=Truecache_controlfor Claude models routed through it. Throughcustomthere is no caching — a real cost difference for an agent replaying long contexts.keywords,default_api_baseMiniMax-M2selects the provider automatically and the base URL is preset. Lowest marginal value of the three;customworks.Both halves, not just the registry
config.pyresolves providers withgetattr(self.providers, spec.name, None), so aProviderSpecwithout a matchingProvidersConfigfield is silently skipped everywhere. All three get the registry entry and the config field, as theProvidersConfigdocstring requires.zhipuis the reference for the minimal-complete shape.Endpoints verified reachable:
router.requesty.ai(200),api.minimax.io(401),api.forge.tensorblock.co(401).Bonus: a gateway bug #116 found, which core had half-fixed
_setup_env()forcedspec.env_keyfor gateways but still usedsetdefaultforenv_extras:A stale ambient variable therefore outranked the gateway the user had selected. #116 fixed exactly this in nanobot's provider; the same rule now applies to
env_extrashere. Latent onmaintoday (onlyzhipuusesenv_extras, and it is not a gateway), but it would bite the first gateway that needs one.What was dropped from the originals
The tests covering
new_ui'srequesty_modelsservice and nanobot's registry. One of them didpytest.importorskip("nanobot.config.schema"), which now resolves to an unrelated PyPI package (nanobot-ai) when that happens to be installed — so it fails locally and skips in CI, testing nothing either way.Testing
mainbaseline 1131; +23 = Requesty 5, MiniMax 12, Forge 6)pre-commit run --from-ref origin/main --to-ref HEAD— cleanenv_extrasfix is verified in reverse: reverting it failstest_gateway_env_extras_override_ambient_valuesNot verified:
strip_model_prefix=Truefor Forge. Confirming it needs a Forge API key. The value is carried over from the author's nanobot spec and matches how AiHubMix was handled in that registry. It only affects users who explicitly configure Forge.Unrelated flake spotted while validating
tests/application/test_automation_goal_runs.py::test_legacy_unreserved_turn_is_never_adopted_as_automation_initial_turnfails intermittently withtimed out waiting for Run ... to become completed. Measured in isolation: 2/20 on cleanmain, 0/20 on this branch. Pre-existing, not from this PR — but it will redden CI at random and deserves its own issue.