Skip to content

Commit 70e4d57

Browse files
committed
restore fast mode for nightly gpt models
1 parent ba2b9cd commit 70e4d57

2 files changed

Lines changed: 66 additions & 2 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { describe, expect, it } from "vitest";
2+
import type * as CodexSchema from "effect-codex-app-server/schema";
3+
4+
import { parseCodexModelListResponse } from "./CodexProvider.ts";
5+
6+
function makeModel(
7+
overrides: Partial<CodexSchema.V2ModelListResponse__Model> = {},
8+
): CodexSchema.V2ModelListResponse__Model {
9+
return {
10+
id: "gpt-5.4",
11+
model: "gpt-5.4",
12+
upgrade: null,
13+
upgradeInfo: null,
14+
availabilityNux: null,
15+
displayName: "gpt-5.4",
16+
description: "Latest frontier agentic coding model.",
17+
hidden: false,
18+
supportedReasoningEfforts: [
19+
{
20+
reasoningEffort: "medium",
21+
description: "Balances speed and reasoning depth for everyday tasks",
22+
},
23+
],
24+
defaultReasoningEffort: "medium",
25+
inputModalities: ["text", "image"],
26+
supportsPersonality: true,
27+
isDefault: true,
28+
...overrides,
29+
};
30+
}
31+
32+
describe("parseCodexModelListResponse", () => {
33+
it("preserves fast mode for GPT-5 models when app-server omits additionalSpeedTiers", () => {
34+
const [model] = parseCodexModelListResponse({
35+
data: [makeModel()],
36+
nextCursor: null,
37+
});
38+
39+
expect(model).toBeDefined();
40+
expect(model?.capabilities).toMatchObject({
41+
supportsFastMode: true,
42+
});
43+
});
44+
45+
it("honors an explicit empty additionalSpeedTiers list", () => {
46+
const [model] = parseCodexModelListResponse({
47+
data: [
48+
makeModel({
49+
additionalSpeedTiers: [],
50+
}),
51+
],
52+
nextCursor: null,
53+
});
54+
55+
expect(model).toBeDefined();
56+
expect(model?.capabilities).toMatchObject({
57+
supportsFastMode: false,
58+
});
59+
});
60+
});

apps/server/src/provider/Layers/CodexProvider.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,17 @@ function codexAccountAuthLabel(account: CodexSchema.V2GetAccountResponse["accoun
8484
function mapCodexModelCapabilities(
8585
model: CodexSchema.V2ModelListResponse__Model,
8686
): ModelCapabilities {
87+
const supportsFastMode = globalThis.Array.isArray(model.additionalSpeedTiers)
88+
? model.additionalSpeedTiers.includes("fast")
89+
: /^gpt-5(?:[.-]|$)/.test(model.model);
90+
8791
return {
8892
reasoningEffortLevels: model.supportedReasoningEfforts.map(({ reasoningEffort }) => ({
8993
value: reasoningEffort,
9094
label: REASONING_EFFORT_LABELS[reasoningEffort],
9195
...(reasoningEffort === model.defaultReasoningEffort ? { isDefault: true } : {}),
9296
})),
93-
supportsFastMode: (model.additionalSpeedTiers ?? []).includes("fast"),
97+
supportsFastMode,
9498
supportsThinkingToggle: false,
9599
contextWindowOptions: [],
96100
promptInjectedEffortLevels: [],
@@ -104,7 +108,7 @@ const toDisplayName = (model: CodexSchema.V2ModelListResponse__Model): string =>
104108
.replace(/-([a-z])/g, (_, c) => "-" + c.toUpperCase());
105109
};
106110

107-
function parseCodexModelListResponse(
111+
export function parseCodexModelListResponse(
108112
response: CodexSchema.V2ModelListResponse,
109113
): ReadonlyArray<ServerProviderModel> {
110114
return response.data.map((model) => ({

0 commit comments

Comments
 (0)