Skip to content

fix: add deepseek- dash-prefix routing to UPSTREAM_ROUTES#406

Merged
BYK merged 2 commits into
BYK:mainfrom
rgutzen:fix/deepseek-dash-route
May 20, 2026
Merged

fix: add deepseek- dash-prefix routing to UPSTREAM_ROUTES#406
BYK merged 2 commits into
BYK:mainfrom
rgutzen:fix/deepseek-dash-route

Conversation

@rgutzen
Copy link
Copy Markdown
Contributor

@rgutzen rgutzen commented May 19, 2026

  • Add { prefix: 'deepseek-', url: 'https://api.deepseek.com', protocol: 'openai' } to UPSTREAM_ROUTES in config.ts for direct DeepSeek API access
  • Models like deepseek-v4-pro now correctly route to api.deepseek.com instead of falling back to OpenAI with a DeepSeek API key (401 error)
  • Add upstream-routes.test.ts with 16 tests covering all route prefixes including DeepSeek dash-prefix (deepseek-v4-pro, deepseek-chat) and slash-prefix (deepseek/deepseek-r1 to Nvidia NIM)

- Add { prefix: 'deepseek-', url: 'https://api.deepseek.com', protocol: 'openai' }
  to UPSTREAM_ROUTES in config.ts for direct DeepSeek API access
- Models like deepseek-v4-pro now correctly route to api.deepseek.com
  instead of falling back to OpenAI with a DeepSeek API key (401 error)
- Add upstream-routes.test.ts with 16 tests covering all route prefixes
  including DeepSeek dash-prefix (deepseek-v4-pro, deepseek-chat) and
  slash-prefix (deepseek/deepseek-r1 to Nvidia NIM)
Copilot AI review requested due to automatic review settings May 19, 2026 21:23
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds DeepSeek “dash-prefix” (deepseek-…) model routing to the gateway’s upstream resolver and introduces a Bun test suite to validate routing behavior across providers.

Changes:

  • Added a new UPSTREAM_ROUTES entry routing deepseek- models to https://api.deepseek.com.
  • Added resolveUpstreamRoute unit tests covering multiple providers, DeepSeek variants, Nvidia NIM slash-prefix routes, and unknown-model behavior.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
packages/gateway/src/config.ts Adds DeepSeek direct API routing via deepseek- prefix.
packages/gateway/test/upstream-routes.test.ts Introduces unit tests to verify upstream route resolution across model prefixes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +102 to +114
expect(result!.url).toBe("https://integrate.api.nvidia.com");
});

test("routes meta/ models to Nvidia NIM", () => {
const result = resolveUpstreamRoute("meta/llama-4-maverick");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://integrate.api.nvidia.com");
});

test("routes qwen/ models to Nvidia NIM", () => {
const result = resolveUpstreamRoute("qwen/qwen3-235b-a22b");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://integrate.api.nvidia.com");
Comment on lines +12 to +64
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.anthropic.com");
expect(result!.protocol).toBe("anthropic");
});
});

describe("OpenAI", () => {
test("routes gpt- models to OpenAI API", () => {
const result = resolveUpstreamRoute("gpt-4o");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.openai.com");
expect(result!.protocol).toBe("openai");
});

test("routes o1- models to OpenAI API", () => {
const result = resolveUpstreamRoute("o1-pro");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.openai.com");
expect(result!.protocol).toBe("openai");
});
});

describe("xAI", () => {
test("routes grok- models to xAI API", () => {
const result = resolveUpstreamRoute("grok-3-beta");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.x.ai");
expect(result!.protocol).toBe("openai");
});
});

describe("Mistral (direct)", () => {
test("routes mistral- models to Mistral API", () => {
const result = resolveUpstreamRoute("mistral-large-latest");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.mistral.ai");
expect(result!.protocol).toBe("openai");
});

test("routes codestral- models to Mistral API", () => {
const result = resolveUpstreamRoute("codestral-latest");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://api.mistral.ai");
expect(result!.protocol).toBe("openai");
});
});

describe("Google (direct)", () => {
test("routes gemini- models to Google API", () => {
const result = resolveUpstreamRoute("gemini-2.5-pro");
expect(result).not.toBeNull();
expect(result!.url).toBe("https://generativelanguage.googleapis.com");
expect(result!.protocol).toBe("openai");
- Replace result! non-null assertions with toEqual() for safer assertions
- Add protocol assertions to Nvidia NIM tests for consistency
- Add missing test cases for o3-, o4-, mistralai/, and google/ prefixes
- Addresses Copilot review comments
@BYK BYK merged commit 5abbd42 into BYK:main May 20, 2026
@BYK
Copy link
Copy Markdown
Owner

BYK commented May 20, 2026

Thanks for the contribution @rgutzen! The DeepSeek dash-prefix route is a great catch — this was a real gap in the routing table.

I addressed the Copilot review comments and added a few extra test cases (o3-, o4-, mistralai/, google/ prefixes) while I was at it. Merged!

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.

3 participants