Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions core/llm/autodetect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ const PROVIDER_HANDLES_TEMPLATING: string[] = [
"relace",
"openrouter",
"clawrouter",
"unorouter",
"deepseek",
"xAI",
"minimax",
Expand Down Expand Up @@ -123,6 +124,7 @@ const PROVIDER_SUPPORTS_IMAGES: string[] = [
"sagemaker",
"openrouter",
"clawrouter",
"unorouter",
"venice",
"sambanova",
"vertexai",
Expand Down
6 changes: 6 additions & 0 deletions core/llm/llms/OpenAI-compatible.vitest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import OpenRouter from "./OpenRouter.js";
import xAI from "./xAI.js";
import Mistral from "./Mistral.js";
import Mimo from "./Mimo.js";
import UnoRouter from "./UnoRouter.js";
import LMStudio from "./LMStudio.js";
import Cerebras from "./Cerebras.js";
import DeepInfra from "./DeepInfra.js";
Expand Down Expand Up @@ -306,6 +307,11 @@ createOpenAISubclassTests(Mimo, {
defaultApiBase: "https://api.xiaomimimo.com/v1/",
});

createOpenAISubclassTests(UnoRouter, {
providerName: "unorouter",
defaultApiBase: "https://api.unorouter.com/v1/",
});

createOpenAISubclassTests(LMStudio, {
providerName: "lmstudio",
defaultApiBase: "http://localhost:1234/v1/",
Expand Down
13 changes: 13 additions & 0 deletions core/llm/llms/UnoRouter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { LLMOptions } from "../../index.js";

import OpenAI from "./OpenAI.js";

class UnoRouter extends OpenAI {
static providerName = "unorouter";
static defaultOptions: Partial<LLMOptions> = {
apiBase: "https://api.unorouter.com/v1/",
model: "deepseek-v4-flash:free",
};
}

export default UnoRouter;
2 changes: 2 additions & 0 deletions core/llm/llms/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import TARS from "./TARS";
import TestLLM from "./Test";
import TextGenWebUI from "./TextGenWebUI";
import Together from "./Together";
import UnoRouter from "./UnoRouter";
import Venice from "./Venice";
import VertexAI from "./VertexAI";
import Vllm from "./Vllm";
Expand Down Expand Up @@ -120,6 +121,7 @@ export const LLMClasses = [
Asksage,
Nebius,
Nous,
UnoRouter,
Venice,
VertexAI,
xAI,
Expand Down
42 changes: 42 additions & 0 deletions docs/customize/model-providers/more/unorouter.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: "How to Configure UnoRouter with Continue"
sidebarTitle: "UnoRouter"
---

<Info>
Get your API key from the [UnoRouter dashboard](https://unorouter.com/token)
</Info>

UnoRouter is an open-source OpenAI-compatible gateway serving 200+ models (Claude, GPT, Gemini, DeepSeek, Kimi, GLM, Qwen and more) behind a single API key. Models with a `:free` suffix cost nothing; browse the full catalog at [unorouter.com/models](https://unorouter.com/models).

## Configuration

<Tabs>
<Tab title="YAML">
```yaml title="config.yaml"
name: My Config
version: 0.0.1
schema: v1

models:
- name: <MODEL_NAME>
provider: unorouter
model: deepseek-v4-flash:free
apiKey: <YOUR_UNOROUTER_API_KEY>
```
</Tab>
<Tab title="JSON (Deprecated)">
```json title="config.json"
{
"models": [
{
"title": "<MODEL_NAME>",
"provider": "unorouter",
"model": "deepseek-v4-flash:free",
"apiKey": "<YOUR_UNOROUTER_API_KEY>"
}
]
}
```
</Tab>
</Tabs>
1 change: 1 addition & 0 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
"customize/model-providers/more/nvidia",
"customize/model-providers/more/tensorix",
"customize/model-providers/more/together",
"customize/model-providers/more/unorouter",
"customize/model-providers/more/xAI",
"customize/model-providers/more/zai"
]
Expand Down
1 change: 1 addition & 0 deletions gui/public/logos/unorouter.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 31 additions & 0 deletions gui/src/pages/AddNewModel/configs/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3312,6 +3312,37 @@ export const models: { [key: string]: ModelPackage } = {
isOpenSource: false,
},

// UnoRouter models
unorouterDeepseekV4FlashFree: {
title: "deepseek-v4-flash:free",
description:
"DeepSeek V4 Flash on UnoRouter's free tier; fast, long context, costs nothing",
refUrl: "https://unorouter.com/models",
params: {
title: "deepseek-v4-flash:free",
model: "deepseek-v4-flash:free",
contextLength: 128_000,
apiKey: "",
},
providerOptions: ["unorouter"],
icon: "unorouter.svg",
isOpenSource: true,
},
unorouterClaudeSonnet5: {
title: "claude-sonnet-5",
description: "Anthropic Claude Sonnet 5 served through UnoRouter",
refUrl: "https://unorouter.com/models",
params: {
title: "claude-sonnet-5",
model: "claude-sonnet-5",
contextLength: 200_000,
apiKey: "",
},
providerOptions: ["unorouter"],
icon: "unorouter.svg",
isOpenSource: false,
},

// Inception Labs models
mercury2: {
title: "Mercury 2",
Expand Down
25 changes: 25 additions & 0 deletions gui/src/pages/AddNewModel/configs/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,31 @@ export const providers: Partial<Record<string, ProviderInfo>> = {
],
},

unorouter: {
title: "UnoRouter",
provider: "unorouter",
description:
"UnoRouter is an open-source gateway serving 200+ models, most with a genuine free tier.",
longDescription: `To get started with UnoRouter, sign up at [unorouter.com](https://unorouter.com/) (Discord or GitHub, no card) and create an API key on the [token page](https://unorouter.com/token). Models with a \`:free\` suffix cost nothing.`,
icon: "unorouter.svg",
tags: [ModelProviderTags.RequiresApiKey, ModelProviderTags.OpenSource],
apiKeyUrl: "https://unorouter.com/token",
collectInputFor: [
{
inputType: "text",
key: "apiKey",
label: "API Key",
placeholder: "Enter your UnoRouter API key",
required: true,
},
...completionParamsInputsConfigs,
],
packages: [
models.unorouterDeepseekV4FlashFree,
models.unorouterClaudeSonnet5,
],
},

moonshot: {
title: "Moonshot",
provider: "moonshot",
Expand Down
Loading