Skip to content

Commit 390242d

Browse files
committed
feat: implement model selection for --auto and add corresponding tests
1 parent 432014e commit 390242d

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
@@ -174,22 +174,6 @@ export const start = defineCommand({
174174
showToken: args["show-token"],
175175
})
176176

177-
if (args.auto) {
178-
try {
179-
const session = await enableAutoMode(config)
180-
consola.success(
181-
`Auto mode enabled${
182-
session.available_models?.length ?
183-
` (available models: ${session.available_models.join(", ")})`
184-
: ""
185-
}`,
186-
)
187-
} catch (error) {
188-
consola.error("Failed to enable auto mode:", error)
189-
process.exit(1)
190-
}
191-
}
192-
193177
const server = startServer(config)
194178

195179
consola.success(
@@ -300,8 +284,15 @@ export const start = defineCommand({
300284
)
301285
}
302286
}
303-
304-
const models = await fetchAvailableModels(config)
287+
288+
let models
289+
if (args.auto) {
290+
const session = await enableAutoMode(config)
291+
models = session.available_models ?? []
292+
}
293+
else {
294+
models = await fetchAvailableModels(config)
295+
}
305296
const supportedIds = new Set(
306297
MODEL_CAPABILITIES.flatMap((m) => [m.id, ...(m.aliases ?? [])]),
307298
)
@@ -316,16 +307,7 @@ export const start = defineCommand({
316307
.map((id) => getPublicModelId(id)),
317308
)
318309
: fallbackModelIds
319-
const autoAllowed =
320-
args.auto && runtimeState.autoAvailableModels?.length ?
321-
new Set(runtimeState.autoAvailableModels.map(getPublicModelId))
322-
: undefined
323-
const autoFilteredPickable =
324-
autoAllowed ? pickable.filter((id) => autoAllowed.has(id)) : pickable
325-
const finalPickable =
326-
autoFilteredPickable.length > 0 ? autoFilteredPickable
327-
: pickable.length > 0 ? pickable
328-
: fallbackModelIds
310+
const finalPickable = pickable.length > 0 ? pickable : fallbackModelIds
329311
if (models.length > 0) {
330312
consola.info(
331313
`Available models:\n${models

0 commit comments

Comments
 (0)