feat: add orcarouter as a built-in model provider - #898
Conversation
Add orcarouter to PREDEFINED_PROVIDERS and PREDEFINED_PROVIDERS_MODEL_MAP, mirroring the existing openrouter wiring, with pre-configured aliases for text, reasoning, vision, and embedding. Update the default-model-settings docs and README quick-start so the new provider is discoverable. Fixes NVIDIA-NeMo#897
|
All contributors have signed the DCO ✍️ ✅ |
Linked Issue CheckIssue #897 has not been triaged yet. A maintainer needs to review You can continue working on the PR in the meantime. The check will |
|
I have read the DCO document and I hereby sign the DCO. |
Greptile SummaryAdds OrcaRouter as an OpenAI-compatible built-in provider with text, reasoning, vision, and embedding aliases, along with tests and user documentation.
|
| Filename | Overview |
|---|---|
| packages/data-designer-config/src/data_designer/config/utils/constants.py | Adds the OrcaRouter provider and model aliases, but the persisted-default lifecycle prevents existing installations from receiving them. |
| packages/data-designer-config/tests/config/test_default_model_settings.py | Updates fresh built-in counts and validates the new provider and aliases, without covering upgrade behavior for existing settings files. |
| fern/versions/latest/pages/concepts/models/default-model-settings.mdx | Documents the OrcaRouter provider, aliases, endpoint, and required API-key environment variable. |
| README.md | Adds OrcaRouter to the provider setup instructions. |
Prompt To Fix All With AI
### Issue 1
packages/data-designer-config/src/data_designer/config/utils/constants.py:333-339
**Built-ins bypass existing settings**
When an existing installation already has `model_configs.yaml` and `model_providers.yaml`, initialization neither rewrites nor merges those files, so the new OrcaRouter provider and aliases are never registered; selecting `orcarouter-text` then fails with a missing-model or unknown-provider error.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "feat: add orcarouter as a built-in model..." | Re-trigger Greptile
| "provider_type": "openai", | ||
| "api_key": OPENROUTER_API_KEY_ENV_VAR_NAME, | ||
| }, | ||
| { | ||
| "name": ORCAROUTER_PROVIDER_NAME, | ||
| "endpoint": "https://api.orcarouter.ai/v1", | ||
| "provider_type": "openai", |
There was a problem hiding this comment.
Built-ins bypass existing settings
When an existing installation already has model_configs.yaml and model_providers.yaml, initialization neither rewrites nor merges those files, so the new OrcaRouter provider and aliases are never registered; selecting orcarouter-text then fails with a missing-model or unknown-provider error.
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/data-designer-config/src/data_designer/config/utils/constants.py
Line: 333-339
Comment:
**Built-ins bypass existing settings**
When an existing installation already has `model_configs.yaml` and `model_providers.yaml`, initialization neither rewrites nor merges those files, so the new OrcaRouter provider and aliases are never registered; selecting `orcarouter-text` then fails with a missing-model or unknown-provider error.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
📋 Summary
This PR adds OrcaRouter as a built-in model provider, fully parallel to the existing OpenRouter wiring. Data Designer is a framework for generating high-quality synthetic datasets, and its model configs already ship NVIDIA, OpenAI, and OpenRouter as first-class providers; OrcaRouter now joins them as a named
orcarouterprovider instead of being used through an anonymous custom base URL.OrcaRouter is an OpenAI-compatible AI gateway built for both models and agents. Like OpenRouter, it exposes a provider/model namespace across many models — but it also combines adaptive routing, automatic failover, zero-markup inference, observability, guardrails, and agent-tool governance behind the same endpoint. Adding
orcarouteras a first-class provider means this project's users can use that stack directly, without treating OrcaRouter as an anonymous custom base URL. It also runs gateway-level, zero-trust security for AI agents on the same endpoint — screening every prompt/response and governing every tool call on a default-deny basis, with no application code changes.🔗 Related Issue
Fixes #897
🔄 Changes
The change mirrors the existing
openrouterprovider block-for-block across the same files:packages/data-designer-config/src/data_designer/config/utils/constants.pyORCAROUTER_PROVIDER_NAME = "orcarouter"andORCAROUTER_API_KEY_ENV_VAR_NAME = "ORCAROUTER_API_KEY"next to theirOPENROUTER_*counterparts.orcarouterinPREDEFINED_PROVIDERSwithendpoint=https://api.orcarouter.ai/v1,provider_type="openai", andapi_key=ORCAROUTER_API_KEY— the exact shape of theopenrouterentry.ORCAROUTER_PROVIDER_NAMEblock toPREDEFINED_PROVIDERS_MODEL_MAPwithorcarouter-text,orcarouter-reasoning,orcarouter-vision, andorcarouter-embeddingaliases, mirroring theopenrouterkey.packages/data-designer-config/tests/config/test_default_model_settings.py3 → 4providers,12 → 16model configs) and asserts the neworcarouterprovider + aliases, exactly as theopenrouterassertions are written.Docs
README.md— adds OrcaRouter to the default providers list and theORCAROUTER_API_KEYenv var example.fern/versions/latest/pages/concepts/models/default-model-settings.mdx— adds the OrcaRouter provider section and OrcaRouter models table (mirroring the OpenRouter sections), plus the env-var mentions in the API-key warning/tip.fern/versions/latest/pages/index.mdx,concepts/models/model-providers.mdx, andconcepts/models/custom-model-settings.mdx— mention OrcaRouter alongside the existing default providers.Models chosen
Each alias was validated against OrcaRouter's live model catalog (all return HTTP 200 through the new provider wiring):
orcarouter-textopenai/gpt-4.1orcarouter-reasoningdeepseek/deepseek-v4-pro-0813orcarouter-visionopenai/gpt-4oorcarouter-embeddingopenai/text-embedding-3-large🧪 Testing
make check-all-fixequivalent:ruff checkandruff format --checkpass across all three packages.pytest packages/data-designer-config/tests/→ 644 passed.pytest packages/data-designer-engine/tests/engine/models/test_facade.py→ 91 passed (OpenRouter-specific attribution tests unaffected).orcarouterprovider through the realModelFacade→create_model_clientpath (ModelProviderRegistry+EnvironmentResolver) againstapi.orcarouter.ai:orcarouter-textchat →200, returnedhelloorcarouter-reasoningchat →200, returnedhelloorcarouter-embedding→200, 3072-dim vectormake test) are sandbox-environment artifacts (themakebinary and tiktoken cache are unavailable) and fail identically on the pristine baseline.✅ Checklist
I'm an engineer on the OrcaRouter team.
Discord: discord.gg/YEubt8enRA · X: https://x.com/OrcaRouter