From e481dd235d2fb9380830ab6c41f1d700291e164f Mon Sep 17 00:00:00 2001 From: Christiaan Arnoldus Date: Thu, 10 Sep 2026 11:40:07 +0200 Subject: [PATCH 1/3] fix(ai-gateway): prefer Vertex for Claude models --- .../providers/apply-provider-specific-logic.test.ts | 12 ++++++++---- .../providers/apply-provider-specific-logic.ts | 5 ++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts index 8688ecb38a..4a21d297d9 100644 --- a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts +++ b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts @@ -367,12 +367,14 @@ describe('applyPreferredProvider', () => { expect(request.body.provider).toBeUndefined(); }); - it('does not set a provider order for Fable', () => { + it('prefers Vertex for Fable', () => { const request = makeRequest('anthropic/claude-fable-5'); applyPreferredProvider('anthropic/claude-fable-5', request.body); - expect(request.body.provider).toBeUndefined(); + expect(request.body.provider).toEqual({ + order: ['google-vertex', 'amazon-bedrock', 'anthropic'], + }); }); it('preserves valid provider options when adding order', () => { @@ -383,7 +385,7 @@ describe('applyPreferredProvider', () => { expect(request.body.provider).toEqual({ zdr: true, - order: ['amazon-bedrock', 'anthropic'], + order: ['google-vertex', 'amazon-bedrock', 'anthropic'], }); }); @@ -409,6 +411,8 @@ describe('applyPreferredProvider', () => { applyPreferredProvider('anthropic/claude-sonnet-4.5', request.body); - expect(request.body.provider).toEqual({ order: ['amazon-bedrock', 'anthropic'] }); + expect(request.body.provider).toEqual({ + order: ['google-vertex', 'amazon-bedrock', 'anthropic'], + }); }); }); diff --git a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts index dfa5b49a2f..d67aabf4a7 100644 --- a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts +++ b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts @@ -135,10 +135,9 @@ export function getPreferredProviderOrder(requestedModel: string): string[] { if (isOpenAiModel(requestedModel)) { return [OpenRouterInferenceProviderIdSchema.enum.openai]; } - if (isClaudeModel(requestedModel) && !isFableModel(requestedModel)) { - // fable is not available on bedrock on vercel - // and specifying bedrock breaks the opus fallback + if (isClaudeModel(requestedModel)) { return [ + OpenRouterInferenceProviderIdSchema.enum['google-vertex'], OpenRouterInferenceProviderIdSchema.enum['amazon-bedrock'], OpenRouterInferenceProviderIdSchema.enum.anthropic, ]; From 01ea1f5e7e14438f2d844b6f47851fc386bedbdb Mon Sep 17 00:00:00 2001 From: Christiaan Arnoldus Date: Thu, 10 Sep 2026 12:36:32 +0200 Subject: [PATCH 2/3] fix(ai-gateway): preserve Fable provider fallback --- .../providers/apply-provider-specific-logic.test.ts | 6 ++---- .../ai-gateway/providers/apply-provider-specific-logic.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts index 4a21d297d9..08fe2f81bd 100644 --- a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts +++ b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.test.ts @@ -367,14 +367,12 @@ describe('applyPreferredProvider', () => { expect(request.body.provider).toBeUndefined(); }); - it('prefers Vertex for Fable', () => { + it('does not set a provider order for Fable', () => { const request = makeRequest('anthropic/claude-fable-5'); applyPreferredProvider('anthropic/claude-fable-5', request.body); - expect(request.body.provider).toEqual({ - order: ['google-vertex', 'amazon-bedrock', 'anthropic'], - }); + expect(request.body.provider).toBeUndefined(); }); it('preserves valid provider options when adding order', () => { diff --git a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts index d67aabf4a7..e854f8072e 100644 --- a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts +++ b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts @@ -135,7 +135,7 @@ export function getPreferredProviderOrder(requestedModel: string): string[] { if (isOpenAiModel(requestedModel)) { return [OpenRouterInferenceProviderIdSchema.enum.openai]; } - if (isClaudeModel(requestedModel)) { + if (isClaudeModel(requestedModel) && !isFableModel(requestedModel)) { return [ OpenRouterInferenceProviderIdSchema.enum['google-vertex'], OpenRouterInferenceProviderIdSchema.enum['amazon-bedrock'], From cd571854d2b36c9f8033bdcdcd43b86d49ab02ec Mon Sep 17 00:00:00 2001 From: Christiaan Arnoldus Date: Thu, 10 Sep 2026 13:16:43 +0200 Subject: [PATCH 3/3] Apply suggestion from @chrarnoldus --- .../lib/ai-gateway/providers/apply-provider-specific-logic.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts index e854f8072e..7a5a31a03b 100644 --- a/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts +++ b/apps/web/src/lib/ai-gateway/providers/apply-provider-specific-logic.ts @@ -136,6 +136,7 @@ export function getPreferredProviderOrder(requestedModel: string): string[] { return [OpenRouterInferenceProviderIdSchema.enum.openai]; } if (isClaudeModel(requestedModel) && !isFableModel(requestedModel)) { + // specifying this for fable breaks the opus fallback on vercel return [ OpenRouterInferenceProviderIdSchema.enum['google-vertex'], OpenRouterInferenceProviderIdSchema.enum['amazon-bedrock'],