fix: use anthropic protocol for token counting when using anthropic models via Vercel AI Gateway (#7433)

- 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).
This commit is contained in:
Daniel 2025-08-26 19:22:37 -05:00 committed by GitHub
parent 11c454ffa2
commit ff1f4f0398
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 0 deletions

View file

@ -39,6 +39,26 @@ describe("getApiProtocol", () => {
})
})
describe("Vercel AI Gateway provider", () => {
it("should return 'anthropic' for vercel-ai-gateway provider with anthropic models", () => {
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-3-opus")).toBe("anthropic")
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-3.5-sonnet")).toBe("anthropic")
expect(getApiProtocol("vercel-ai-gateway", "ANTHROPIC/claude-sonnet-4")).toBe("anthropic")
expect(getApiProtocol("vercel-ai-gateway", "anthropic/claude-opus-4.1")).toBe("anthropic")
})
it("should return 'openai' for vercel-ai-gateway provider with non-anthropic models", () => {
expect(getApiProtocol("vercel-ai-gateway", "openai/gpt-4")).toBe("openai")
expect(getApiProtocol("vercel-ai-gateway", "google/gemini-pro")).toBe("openai")
expect(getApiProtocol("vercel-ai-gateway", "meta/llama-3")).toBe("openai")
expect(getApiProtocol("vercel-ai-gateway", "mistral/mixtral")).toBe("openai")
})
it("should return 'openai' for vercel-ai-gateway provider without model", () => {
expect(getApiProtocol("vercel-ai-gateway")).toBe("openai")
})
})
describe("Other providers", () => {
it("should return 'openai' for non-anthropic providers regardless of model", () => {
expect(getApiProtocol("openrouter", "claude-3-opus")).toBe("openai")

View file

@ -453,6 +453,11 @@ export const getApiProtocol = (provider: ProviderName | undefined, modelId?: str
return "anthropic"
}
// Vercel AI Gateway uses anthropic protocol for anthropic models
if (provider && provider === "vercel-ai-gateway" && modelId && modelId.toLowerCase().startsWith("anthropic/")) {
return "anthropic"
}
return "openai"
}