Skip to content

Commit 5656d83

Browse files
committed
feat: implement model selection for --auto and add corresponding tests
1 parent 4e673a6 commit 5656d83

3 files changed

Lines changed: 348 additions & 35 deletions

File tree

src/providers/copilot/client.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const shouldRetryResponse = (response: Response): boolean =>
3636

3737
const buildHeaders = (
3838
provider: CopilotProviderContext,
39+
path: string,
3940
init: RequestInit,
4041
options: FetchCopilotOptions,
4142
): Headers => {
@@ -47,10 +48,7 @@ const buildHeaders = (
4748
headers.set("editor-plugin-version", EDITOR_PLUGIN_VERSION)
4849
headers.set("user-agent", USER_AGENT)
4950
headers.set("openai-intent", "conversation-panel")
50-
headers.set(
51-
"x-github-api-version",
52-
runtimeState.autoSessionToken ? AUTO_MODE_API_VERSION : API_VERSION,
53-
)
51+
headers.set("x-github-api-version", API_VERSION)
5452
headers.set("x-request-id", randomUUID())
5553
headers.set("x-vscode-user-agent-library-version", "electron-fetch")
5654

@@ -62,8 +60,9 @@ const buildHeaders = (
6260
headers.set("x-initiator", options.initiator)
6361
}
6462

65-
if (runtimeState.autoSessionToken) {
66-
headers.set("copilot-session-token", runtimeState.autoSessionToken)
63+
if (runtimeState.autoSessionToken && (path.startsWith("/chat/completions") || path.startsWith("/responses"))) {
64+
headers.set("copilot-session-token", runtimeState.autoSessionToken),
65+
headers.set("x-github-api-version", AUTO_MODE_API_VERSION)
6766
}
6867

6968
if (!headers.has("content-type") && init.body !== undefined) {
@@ -132,7 +131,7 @@ export const fetchCopilot = async (
132131
await traceCopilotRequest(path, init, options, attempt)
133132
const response = await fetch(`${provider.baseUrl}${path}`, {
134133
...init,
135-
headers: buildHeaders(provider, init, options),
134+
headers: buildHeaders(provider, path, init, options),
136135
})
137136

138137
if (!shouldRetryResponse(response) || attempt === MAX_FETCH_ATTEMPTS) {

src/start.ts

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -197,22 +197,6 @@ export const start = defineCommand({
197197
showToken: args["show-token"],
198198
})
199199

200-
if (args.auto) {
201-
try {
202-
const session = await enableAutoMode(config)
203-
consola.success(
204-
`Auto mode enabled${
205-
session.available_models?.length ?
206-
` (available models: ${session.available_models.join(", ")})`
207-
: ""
208-
}`,
209-
)
210-
} catch (error) {
211-
consola.error("Failed to enable auto mode:", error)
212-
process.exit(1)
213-
}
214-
}
215-
216200
const server = startServer(config)
217201

218202
consola.info(`copilot-bridge version: ${BRIDGE_VERSION}`)
@@ -333,8 +317,15 @@ export const start = defineCommand({
333317
)
334318
}
335319
}
336-
337-
const models = await fetchAvailableModels(config)
320+
321+
let models
322+
if (args.auto) {
323+
const session = await enableAutoMode(config)
324+
models = session.available_models ?? []
325+
}
326+
else {
327+
models = await fetchAvailableModels(config)
328+
}
338329
const supportedIds = new Set(
339330
MODEL_CAPABILITIES.flatMap((m) => [m.id, ...(m.aliases ?? [])]),
340331
)
@@ -349,16 +340,7 @@ export const start = defineCommand({
349340
.map((id) => getPublicModelId(id)),
350341
)
351342
: fallbackModelIds
352-
const autoAllowed =
353-
args.auto && runtimeState.autoAvailableModels?.length ?
354-
new Set(runtimeState.autoAvailableModels.map(getPublicModelId))
355-
: undefined
356-
const autoFilteredPickable =
357-
autoAllowed ? pickable.filter((id) => autoAllowed.has(id)) : pickable
358-
const finalPickable =
359-
autoFilteredPickable.length > 0 ? autoFilteredPickable
360-
: pickable.length > 0 ? pickable
361-
: fallbackModelIds
343+
const finalPickable = pickable.length > 0 ? pickable : fallbackModelIds
362344
if (models.length > 0) {
363345
consola.info(
364346
`Available models:\n${models

0 commit comments

Comments
 (0)