fix(copilot): honor advertised model endpoints (#34958)
This commit is contained in:
@@ -12,10 +12,12 @@ export const id = ProviderID.make("github-copilot")
|
||||
export type ModelOptions = Omit<RouteDefaultsInput, "providerOptions"> &
|
||||
ProviderAuthOption<"optional"> & {
|
||||
readonly baseURL: string
|
||||
readonly endpoint?: "chat" | "responses"
|
||||
readonly providerOptions?: OpenAIProviderOptionsInput
|
||||
}
|
||||
|
||||
export const shouldUseResponsesApi = (modelID: string | ModelID) => {
|
||||
export const shouldUseResponsesApi = (modelID: string | ModelID, endpoint?: ModelOptions["endpoint"]) => {
|
||||
if (endpoint) return endpoint === "responses"
|
||||
const model = String(modelID)
|
||||
const match = /^gpt-(\d+)/.exec(model)
|
||||
if (!match) return false
|
||||
@@ -28,7 +30,7 @@ const chatRoute = OpenAIChat.route.with({ provider: id })
|
||||
const responsesRoute = OpenAIResponses.route.with({ provider: id })
|
||||
|
||||
const defaults = (options: ModelOptions) => {
|
||||
const { apiKey: _, auth: _auth, baseURL: _baseURL, ...rest } = options
|
||||
const { apiKey: _, auth: _auth, baseURL: _baseURL, endpoint: _endpoint, ...rest } = options
|
||||
return rest
|
||||
}
|
||||
|
||||
@@ -53,7 +55,8 @@ export const configure = (options: ModelOptions) => {
|
||||
chatRoute.with(withOpenAIOptions(modelID, defaults(options))).model({ id: modelID })
|
||||
return {
|
||||
id,
|
||||
model: (modelID: string | ModelID) => (shouldUseResponsesApi(modelID) ? responses(modelID) : chat(modelID)),
|
||||
model: (modelID: string | ModelID) =>
|
||||
shouldUseResponsesApi(modelID, options.endpoint) ? responses(modelID) : chat(modelID),
|
||||
responses,
|
||||
chat,
|
||||
configure,
|
||||
|
||||
@@ -50,6 +50,20 @@ describe("public exports", () => {
|
||||
expect(
|
||||
GitHubCopilot.configure({ baseURL: "https://api.githubcopilot.test", apiKey: "fixture" }).model,
|
||||
).toBeFunction()
|
||||
expect(
|
||||
GitHubCopilot.configure({
|
||||
baseURL: "https://api.githubcopilot.test",
|
||||
apiKey: "fixture",
|
||||
endpoint: "responses",
|
||||
}).model("mai-code-1-flash-picker").route.id,
|
||||
).toBe("openai-responses")
|
||||
expect(
|
||||
GitHubCopilot.configure({
|
||||
baseURL: "https://api.githubcopilot.test",
|
||||
apiKey: "fixture",
|
||||
endpoint: "chat",
|
||||
}).model("gpt-5").route.id,
|
||||
).toBe("openai-chat")
|
||||
})
|
||||
|
||||
test("protocol barrels expose supported low-level routes", () => {
|
||||
|
||||
Reference in New Issue
Block a user