From 3bc7d42e9cd11c9f206759f77432624f629ffbb9 Mon Sep 17 00:00:00 2001 From: zsanig22-dotcom Date: Sun, 30 Aug 2026 01:25:45 +0000 Subject: [PATCH] feat: add OrcaRouter as a first-class model provider Wire OrcaRouter into the existing well-known provider registry as an OpenAI-compatible gateway: core adapter case, manifest schema with a default base URL, shipped catalog presets, and docs entry. Co-Authored-By: Claude --- .changeset/orcarouter-provider.md | 6 +++ docs/models.mdx | 1 + .../src/core/llm/VercelAILLM.ts | 8 ++-- packages/trueforge/catalog/model-catalog.yaml | 37 +++++++++++++++++++ .../trueforge/src/schemas/modelProvider.ts | 6 +++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 .changeset/orcarouter-provider.md diff --git a/.changeset/orcarouter-provider.md b/.changeset/orcarouter-provider.md new file mode 100644 index 000000000..68e166b66 --- /dev/null +++ b/.changeset/orcarouter-provider.md @@ -0,0 +1,6 @@ +--- +"@truefoundry/trueforge": minor +"@truefoundry/trueforge-core": minor +--- + +Add OrcaRouter as a first-class model provider: an OpenAI-compatible AI gateway covering model routing, failover, guardrails and agent tool governance behind one endpoint. Mirrors the existing well-known provider wiring (`buildLanguageModel` compatible-adapter case, manifest schema with a default base URL, and shipped catalog presets). diff --git a/docs/models.mdx b/docs/models.mdx index a5a9fa01d..2c0612990 100644 --- a/docs/models.mdx +++ b/docs/models.mdx @@ -18,6 +18,7 @@ TrueForge works with the major model providers and any OpenAI-compatible endpoin | `moonshot` | Moonshot AI (Kimi) | | `zai` | Z.ai (GLM) | | `alibaba` | Alibaba (Qwen) | +| `orcarouter` | [OrcaRouter](https://www.orcarouter.ai) — OpenAI-compatible AI gateway | | `custom` | Any OpenAI-compatible endpoint — self-hosted models, gateways, proxies | ## Configuring a standard provider diff --git a/packages/trueforge-core/src/core/llm/VercelAILLM.ts b/packages/trueforge-core/src/core/llm/VercelAILLM.ts index 7860baa57..094beffd7 100644 --- a/packages/trueforge-core/src/core/llm/VercelAILLM.ts +++ b/packages/trueforge-core/src/core/llm/VercelAILLM.ts @@ -62,6 +62,7 @@ export const VERCEL_AI_PROVIDER_NAMES = [ 'moonshot', 'alibaba', 'together', + 'orcarouter', 'custom', ] as const; @@ -121,9 +122,9 @@ function isFunctionToolCall(toolCall: T): toolCall i /** * Shared by every OpenAI-compatible provider, which differ only by endpoint. The provider type - * doubles as the `providerOptions` key. Fireworks, Together and Z AI stay here rather than on their - * own packages: those drop `json_schema`, and Fireworks also clamps efforts its models do accept. - * TODO: move Z AI to @ai-sdk/zai once https://github.com/vercel/ai/pull/17340 ships. + * doubles as the `providerOptions` key. Fireworks, Together, Z AI and OrcaRouter stay here rather + * than on their own packages: those drop `json_schema`, and Fireworks also clamps efforts its + * models do accept. TODO: move Z AI to @ai-sdk/zai once https://github.com/vercel/ai/pull/17340 ships. */ function compatibleModel(config: VercelAIProviderConfig): LanguageModel { const { provider, model, apiKey, headers, baseUrl } = config; @@ -195,6 +196,7 @@ export function buildLanguageModel(config: VercelAIProviderConfig): LanguageMode case 'fireworks': case 'zai': case 'together': + case 'orcarouter': case 'custom': { return compatibleModel(config); } diff --git a/packages/trueforge/catalog/model-catalog.yaml b/packages/trueforge/catalog/model-catalog.yaml index 90415d7f7..1a9f1d044 100644 --- a/packages/trueforge/catalog/model-catalog.yaml +++ b/packages/trueforge/catalog/model-catalog.yaml @@ -366,3 +366,40 @@ providers: reasoning_efforts: - high - max + - type: orcarouter + models: + - model_id: orcarouter/auto + name: auto + properties: + reasoning_efforts: + - none + - low + - medium + - high + - model_id: orcarouter/fusion + name: fusion + properties: + context_length: 1000000 + reasoning_efforts: + - none + - low + - medium + - high + - model_id: orcarouter/fusion-mini + name: fusion-mini + properties: + context_length: 1000000 + reasoning_efforts: + - none + - low + - medium + - high + - model_id: orcarouter/fusion-flash + name: fusion-flash + properties: + context_length: 200000 + reasoning_efforts: + - none + - low + - medium + - high diff --git a/packages/trueforge/src/schemas/modelProvider.ts b/packages/trueforge/src/schemas/modelProvider.ts index 56e1d6983..497ba2c9b 100644 --- a/packages/trueforge/src/schemas/modelProvider.ts +++ b/packages/trueforge/src/schemas/modelProvider.ts @@ -127,6 +127,11 @@ const TogetherAIModelProviderSchema = wellKnownProviderSchema({ base_url: 'https://api.together.xyz/v1', }).openapi('TogetherAIModelProvider'); +const OrcaRouterModelProviderSchema = wellKnownProviderSchema({ + type: 'orcarouter', + base_url: 'https://api.orcarouter.ai/v1', +}).openapi('OrcaRouterModelProvider'); + const AlibabaModelProviderSchema = wellKnownProviderSchema({ type: 'alibaba', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1', @@ -165,6 +170,7 @@ const ModelProviderBodySchema = z MoonshotModelProviderSchema, TogetherAIModelProviderSchema, AlibabaModelProviderSchema, + OrcaRouterModelProviderSchema, CustomModelProviderSchema, ]) .superRefine(refineModelProviderManifest);