Skip to content

Commit c224d05

Browse files
committed
fix: use anthropic protocol for token counting when using anthropic models via Vercel AI Gateway
- Added condition in getApiProtocol to return 'anthropic' for vercel-ai-gateway when modelId starts with 'anthropic/' - Added tests for Vercel AI Gateway provider protocol detection This ensures proper token counting for Anthropic models accessed through Vercel AI Gateway, as Anthropic and OpenAI count tokens differently (Anthropic excludes cache tokens from input count, OpenAI includes them).
1 parent 11c454f commit c224d05

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

packages/types/src/__tests__/provider-settings.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,26 @@ describe("getApiProtocol", () => {
3939
})
4040
})
4141

42+
describe("Vercel AI Gateway provider", () => {
43+
it("should return 'anthropic' for vercel-ai-gateway provider with anthropic models", () => {
44+
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-3-opus")).toBe("anthropic")
45+
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-3.5-sonnet")).toBe("anthropic")
46+
expect(getApiProtocol("vercel-ai-gateway", "ANTHROPIC/claude-sonnet-4")).toBe("anthropic")
47+
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-opus-4.1")).toBe("anthropic")
48+
})
49+
50+
it("should return 'openai' for vercel-ai-gateway provider with non-anthropic models", () => {
51+
expect(getApiProtocol("vercel-ai-gateway", "openai/gpt-4")).toBe("openai")
52+
expect(getApiProtocol("vercel-ai-gateway", "google/gemini-pro")).toBe("openai")
53+
expect(getApiProtocol("vercel-ai-gateway", "meta/llama-3")).toBe("openai")
54+
expect(getApiProtocol("vercel-ai-gateway", "mistral/mixtral")).toBe("openai")
55+
})
56+
57+
it("should return 'openai' for vercel-ai-gateway provider without model", () => {
58+
expect(getApiProtocol("vercel-ai-gateway")).toBe("openai")
59+
})
60+
})
61+
4262
describe("Other providers", () => {
4363
it("should return 'openai' for non-anthropic providers regardless of model", () => {
4464
expect(getApiProtocol("openrouter", "claude-3-opus")).toBe("openai")

packages/types/src/provider-settings.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,11 @@ export const getApiProtocol = (provider: ProviderName | undefined, modelId?: str
453453
return "anthropic"
454454
}
455455

456+
// Vercel AI Gateway uses anthropic protocol for anthropic models
457+
if (provider && provider === "vercel-ai-gateway" && modelId && modelId.toLowerCase().startsWith("anthropic/")) {
458+
return "anthropic"
459+
}
460+
456461
return "openai"
457462
}
458463

0 commit comments

Comments
 (0)