Skip to content

Commit 14f7277

Browse files
committed
refactor: centralize OpenAI protocol value
1 parent abb5388 commit 14f7277

3 files changed

Lines changed: 26 additions & 24 deletions

File tree

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ANTHROPIC_API_PROTOCOL, getApiProtocol, providerIdentifiers } from "../index.js"
1+
import { ANTHROPIC_API_PROTOCOL, getApiProtocol, OPENAI_API_PROTOCOL, providerIdentifiers } from "../index.js"
22

33
describe("getApiProtocol", () => {
44
describe("Anthropic-style providers", () => {
@@ -23,13 +23,13 @@ describe("getApiProtocol", () => {
2323
})
2424

2525
it("should return 'openai' for vertex provider with non-claude models", () => {
26-
expect(getApiProtocol(providerIdentifiers.vertex, "gpt-4")).toBe("openai")
27-
expect(getApiProtocol(providerIdentifiers.vertex, "gemini-pro")).toBe("openai")
28-
expect(getApiProtocol(providerIdentifiers.vertex, "llama-2")).toBe("openai")
26+
expect(getApiProtocol(providerIdentifiers.vertex, "gpt-4")).toBe(OPENAI_API_PROTOCOL)
27+
expect(getApiProtocol(providerIdentifiers.vertex, "gemini-pro")).toBe(OPENAI_API_PROTOCOL)
28+
expect(getApiProtocol(providerIdentifiers.vertex, "llama-2")).toBe(OPENAI_API_PROTOCOL)
2929
})
3030

3131
it("should return 'openai' for vertex provider without model", () => {
32-
expect(getApiProtocol(providerIdentifiers.vertex)).toBe("openai")
32+
expect(getApiProtocol(providerIdentifiers.vertex)).toBe(OPENAI_API_PROTOCOL)
3333
})
3434
})
3535

@@ -59,14 +59,14 @@ describe("getApiProtocol", () => {
5959
})
6060

6161
it("should return 'openai' for vercel-ai-gateway provider with non-anthropic models", () => {
62-
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "openai/gpt-4")).toBe("openai")
63-
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "google/gemini-pro")).toBe("openai")
64-
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "meta/llama-3")).toBe("openai")
65-
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "mistral/mixtral")).toBe("openai")
62+
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "openai/gpt-4")).toBe(OPENAI_API_PROTOCOL)
63+
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "google/gemini-pro")).toBe(OPENAI_API_PROTOCOL)
64+
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "meta/llama-3")).toBe(OPENAI_API_PROTOCOL)
65+
expect(getApiProtocol(providerIdentifiers.vercelAiGateway, "mistral/mixtral")).toBe(OPENAI_API_PROTOCOL)
6666
})
6767

6868
it("should return 'openai' for vercel-ai-gateway provider without model", () => {
69-
expect(getApiProtocol(providerIdentifiers.vercelAiGateway)).toBe("openai")
69+
expect(getApiProtocol(providerIdentifiers.vercelAiGateway)).toBe(OPENAI_API_PROTOCOL)
7070
})
7171
})
7272

@@ -81,38 +81,38 @@ describe("getApiProtocol", () => {
8181
})
8282

8383
it("should return 'openai' for opencode-go OpenAI-format models (GLM/DeepSeek/etc.)", () => {
84-
expect(getApiProtocol(providerIdentifiers.opencodeGo, "glm-5.2")).toBe("openai")
85-
expect(getApiProtocol(providerIdentifiers.opencodeGo, "deepseek-v4-pro")).toBe("openai")
86-
expect(getApiProtocol(providerIdentifiers.opencodeGo, "kimi-k2.5")).toBe("openai")
87-
expect(getApiProtocol(providerIdentifiers.opencodeGo, "mimo-v2.5")).toBe("openai")
84+
expect(getApiProtocol(providerIdentifiers.opencodeGo, "glm-5.2")).toBe(OPENAI_API_PROTOCOL)
85+
expect(getApiProtocol(providerIdentifiers.opencodeGo, "deepseek-v4-pro")).toBe(OPENAI_API_PROTOCOL)
86+
expect(getApiProtocol(providerIdentifiers.opencodeGo, "kimi-k2.5")).toBe(OPENAI_API_PROTOCOL)
87+
expect(getApiProtocol(providerIdentifiers.opencodeGo, "mimo-v2.5")).toBe(OPENAI_API_PROTOCOL)
8888
})
8989

9090
it("should return 'openai' for opencode-go without a model", () => {
91-
expect(getApiProtocol(providerIdentifiers.opencodeGo)).toBe("openai")
91+
expect(getApiProtocol(providerIdentifiers.opencodeGo)).toBe(OPENAI_API_PROTOCOL)
9292
})
9393

9494
it("should return 'openai' for opencode-go with an unknown model id", () => {
95-
expect(getApiProtocol(providerIdentifiers.opencodeGo, "some-future-model")).toBe("openai")
95+
expect(getApiProtocol(providerIdentifiers.opencodeGo, "some-future-model")).toBe(OPENAI_API_PROTOCOL)
9696
})
9797
})
9898

9999
describe("Other providers", () => {
100100
it("should return 'openai' for non-anthropic providers regardless of model", () => {
101-
expect(getApiProtocol(providerIdentifiers.openrouter, "claude-3-opus")).toBe("openai")
102-
expect(getApiProtocol(providerIdentifiers.openai, "claude-3-sonnet")).toBe("openai")
103-
expect(getApiProtocol(providerIdentifiers.litellm, "claude-instant")).toBe("openai")
104-
expect(getApiProtocol(providerIdentifiers.ollama, "claude-model")).toBe("openai")
101+
expect(getApiProtocol(providerIdentifiers.openrouter, "claude-3-opus")).toBe(OPENAI_API_PROTOCOL)
102+
expect(getApiProtocol(providerIdentifiers.openai, "claude-3-sonnet")).toBe(OPENAI_API_PROTOCOL)
103+
expect(getApiProtocol(providerIdentifiers.litellm, "claude-instant")).toBe(OPENAI_API_PROTOCOL)
104+
expect(getApiProtocol(providerIdentifiers.ollama, "claude-model")).toBe(OPENAI_API_PROTOCOL)
105105
})
106106
})
107107

108108
describe("Edge cases", () => {
109109
it("should return 'openai' when provider is undefined", () => {
110-
expect(getApiProtocol(undefined)).toBe("openai")
111-
expect(getApiProtocol(undefined, "claude-3-opus")).toBe("openai")
110+
expect(getApiProtocol(undefined)).toBe(OPENAI_API_PROTOCOL)
111+
expect(getApiProtocol(undefined, "claude-3-opus")).toBe(OPENAI_API_PROTOCOL)
112112
})
113113

114114
it("should handle empty strings", () => {
115-
expect(getApiProtocol(providerIdentifiers.vertex, "")).toBe("openai")
115+
expect(getApiProtocol(providerIdentifiers.vertex, "")).toBe(OPENAI_API_PROTOCOL)
116116
})
117117

118118
it("should be case-insensitive for claude detection", () => {

packages/types/src/provider-settings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
ANTHROPIC_API_PROTOCOL,
3333
ANTHROPIC_MODEL_ID_PREFIX,
3434
CLAUDE_MODEL_ID_FRAGMENT,
35+
OPENAI_API_PROTOCOL,
3536
} from "./providers/index.js"
3637

3738
/**
@@ -635,7 +636,7 @@ export const getApiProtocol = (provider: ProviderName | undefined, modelId?: str
635636
return ANTHROPIC_API_PROTOCOL
636637
}
637638

638-
return "openai"
639+
return OPENAI_API_PROTOCOL
639640
}
640641

641642
/**

packages/types/src/providers/openai.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { ModelInfo } from "../model.js"
33
// https://openai.com/api/pricing/
44
export type OpenAiNativeModelId = keyof typeof openAiNativeModels
55

6+
export const OPENAI_API_PROTOCOL = "openai"
67
export const openAiNativeDefaultModelId: OpenAiNativeModelId = "gpt-5.6-sol"
78

89
export const openAiNativeModels = {

0 commit comments

Comments
 (0)