Skip to content

Commit dc43fba

Browse files
committed
sidecar: default model gpt-5.4-mini → gpt-5.6-luna + codex-spark in search only
- Default sidecar model changed from gpt-5.4-mini to gpt-5.6-luna (web-search, vision, management API fallbacks, GUI defaults) - Dashboard: split sidecar model lists — search includes gpt-5.3-codex-spark, vision excludes it - Startup migration: auto-migrate existing gpt-5.4-mini sidecar configs to luna when current time is past KST 2026-06-10 06:00 - Tests updated for new default model Verified: 1759/1759 tests pass, tsc clean.
1 parent 07ce1c7 commit dc43fba

6 files changed

Lines changed: 31 additions & 12 deletions

File tree

gui/src/pages/Dashboard.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ interface UpdateJob {
4949
restarted?: boolean;
5050
}
5151

52-
const SIDECAR_MODELS = ["gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
52+
const SEARCH_SIDECAR_MODELS = ["gpt-5.6-luna", "gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.3-codex-spark", "gpt-5.6-sol", "gpt-5.6-terra"];
53+
const VISION_SIDECAR_MODELS = ["gpt-5.6-luna", "gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.6-sol", "gpt-5.6-terra"];
5354
const REASONING_LEVELS = ["low", "medium", "high"];
5455

5556
function defaultUpdateChannel(version: string | undefined): UpdateChannel {
@@ -440,8 +441,8 @@ export default function Dashboard({ apiBase }: { apiBase: string }) {
440441
</div>
441442
<div className="setting-controls" style={{ display: "flex", gap: 8 }}>
442443
<Select
443-
value={sidecar?.webSearch.model ?? "gpt-5.4-mini"}
444-
options={SIDECAR_MODELS.map(m => ({ value: m, label: m }))}
444+
value={sidecar?.webSearch.model ?? "gpt-5.6-luna"}
445+
options={SEARCH_SIDECAR_MODELS.map(m => ({ value: m, label: m }))}
445446
onChange={v => saveSidecar({ webSearch: { model: v, reasoning: sidecar!.webSearch.reasoning } })}
446447
disabled={!sidecar || sidecarSaving}
447448
label={t("dash.searchModel")}
@@ -464,8 +465,8 @@ export default function Dashboard({ apiBase }: { apiBase: string }) {
464465
<div className="muted setting-hint">{t("dash.visionModelHint")}</div>
465466
</div>
466467
<Select
467-
value={sidecar?.vision.model ?? "gpt-5.4-mini"}
468-
options={SIDECAR_MODELS.map(m => ({ value: m, label: m }))}
468+
value={sidecar?.vision.model ?? "gpt-5.6-luna"}
469+
options={VISION_SIDECAR_MODELS.map(m => ({ value: m, label: m }))}
469470
onChange={v => saveSidecar({ vision: { model: v } })}
470471
disabled={!sidecar || sidecarSaving}
471472
label={t("dash.visionModel")}

src/server/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,24 @@ export function startServer(port?: number) {
158158
config.subagentModels = [...DEFAULT_SUBAGENT_MODELS];
159159
saveConfig(config);
160160
}
161+
// Sidecar model migration (KST 2026-06-10 06:00 = UTC 2026-06-09 21:00): auto-migrate the old
162+
// gpt-5.4-mini default to gpt-5.6-luna for both search and vision sidecars. Only touches configs
163+
// still on the old default — explicit user choices are preserved.
164+
{
165+
const SIDECAR_MIGRATION_CUTOFF = Date.UTC(2026, 5, 9, 21, 0); // June 9 21:00 UTC = KST June 10 06:00
166+
if (Date.now() >= SIDECAR_MIGRATION_CUTOFF) {
167+
let migrated = false;
168+
if (config.webSearchSidecar?.model === "gpt-5.4-mini") {
169+
config.webSearchSidecar = { ...config.webSearchSidecar, model: "gpt-5.6-luna" };
170+
migrated = true;
171+
}
172+
if (config.visionSidecar?.model === "gpt-5.4-mini") {
173+
config.visionSidecar = { ...config.visionSidecar, model: "gpt-5.6-luna" };
174+
migrated = true;
175+
}
176+
if (migrated) saveConfig(config);
177+
}
178+
}
161179
invalidateCodexModelsCache();
162180

163181
const listenPort = port ?? config.port ?? 10100;

src/server/management-api.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ export async function handleManagementAPI(req: Request, url: URL, config: OcxCon
138138
const ws = config.webSearchSidecar ?? {};
139139
const vs = config.visionSidecar ?? {};
140140
return jsonResponse({
141-
webSearch: { model: ws.model ?? "gpt-5.4-mini", reasoning: ws.reasoning ?? "low" },
142-
vision: { model: vs.model ?? "gpt-5.4-mini" },
141+
webSearch: { model: ws.model ?? "gpt-5.6-luna", reasoning: ws.reasoning ?? "low" },
142+
vision: { model: vs.model ?? "gpt-5.6-luna" },
143143
});
144144
}
145145

@@ -160,8 +160,8 @@ export async function handleManagementAPI(req: Request, url: URL, config: OcxCon
160160
const vs = config.visionSidecar ?? {};
161161
return jsonResponse({
162162
ok: true,
163-
webSearch: { model: ws.model ?? "gpt-5.4-mini", reasoning: ws.reasoning ?? "low" },
164-
vision: { model: vs.model ?? "gpt-5.4-mini" },
163+
webSearch: { model: ws.model ?? "gpt-5.6-luna", reasoning: ws.reasoning ?? "low" },
164+
vision: { model: vs.model ?? "gpt-5.6-luna" },
165165
});
166166
}
167167

src/web-search/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { CodexAuthContext } from "../codex/auth-context";
66
export { runWithWebSearch } from "./loop";
77
export { buildWebSearchTool, extractHostedWebSearch, WEB_SEARCH_TOOL_NAME } from "./synthetic-tool";
88

9-
const DEFAULT_SIDECAR_MODEL = "gpt-5.4-mini";
9+
const DEFAULT_SIDECAR_MODEL = "gpt-5.6-luna";
1010
// "low" is the lightest effort the ChatGPT backend allows with web_search ("minimal" is rejected:
1111
// "tools cannot be used with reasoning.effort 'minimal'") — keeps the sidecar fast/cheap.
1212
const DEFAULT_SIDECAR_REASONING = "low";

tests/e2e-style/phase100-native-parity.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ describe("Phase 100 Codex-native parity smoke", () => {
112112
expect(searchPlan).toMatchObject({
113113
forwardProvider,
114114
settings: {
115-
model: "gpt-5.4-mini",
115+
model: "gpt-5.6-luna",
116116
describeImages: true,
117117
},
118118
});

tests/web-search.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ describe("web-search sidecar planning", () => {
6565
expect(plan).toBeDefined();
6666
expect(plan?.forwardProvider).toBe(forwardProvider);
6767
expect(plan?.hostedTool).toEqual(parsed._webSearch);
68-
expect(plan?.settings.model).toBe("gpt-5.4-mini");
68+
expect(plan?.settings.model).toBe("gpt-5.6-luna");
6969
});
7070

7171
test("planWebSearch activates for pool-selected headers even when raw inbound auth would be main", () => {

0 commit comments

Comments
 (0)