mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-13 08:29:04 +02:00
feat: model taxonomy gains gpt-5.6-sol + per-host generation defaults
Adds 'gpt-5.6-sol' to the model taxonomy with exact-match-only resolution (Terra/Luna/suffixed IDs deliberately fall back to generic gpt) and replaces the hardcoded 'claude' generation default with a validated HostConfig.defaultModel: codex renders the gpt profile when --model is absent, every other host keeps claude. Codex ship golden regenerated accordingly; ADDING_A_HOST documents the new field.
This commit is contained in:
+15
-5
@@ -2,13 +2,17 @@
|
||||
* Model taxonomy — neutral module with no imports from hosts/ or resolvers/.
|
||||
*
|
||||
* Model families supported by model overlays in model-overlays/{family}.md.
|
||||
* Host configs can reference these as `defaultModel` strings (validated at
|
||||
* Host configs reference these as `defaultModel` strings (validated at
|
||||
* generation time), but the model axis is independent of the host axis.
|
||||
*
|
||||
* IMPORTANT: host ≠ model. Claude Code can run any Claude model (Opus, Sonnet,
|
||||
* Haiku, future). Codex CLI runs GPT/o-series models. Cursor and OpenCode can
|
||||
* front multiple providers. We do NOT auto-detect the model from the host —
|
||||
* users pass --model explicitly. Default is 'claude'.
|
||||
* front multiple providers. The generator does NOT auto-detect the model from
|
||||
* the host — users can pass --model explicitly, otherwise each host supplies
|
||||
* its own generation default. Exception outside this module: ./setup detects
|
||||
* the Codex model from ${CODEX_HOME:-~/.codex}/config.toml
|
||||
* (scripts/resolve-codex-generation-model.ts) and passes it as an explicit
|
||||
* --model.
|
||||
*/
|
||||
|
||||
export const ALL_MODEL_NAMES = [
|
||||
@@ -19,6 +23,7 @@ export const ALL_MODEL_NAMES = [
|
||||
'sonnet-5',
|
||||
'gpt',
|
||||
'gpt-5.4',
|
||||
'gpt-5.6-sol',
|
||||
'gemini',
|
||||
'o-series',
|
||||
] as const;
|
||||
@@ -29,10 +34,11 @@ export type Model = (typeof ALL_MODEL_NAMES)[number];
|
||||
* Resolve a model argument from CLI input to a known Model family.
|
||||
*
|
||||
* Precedence rules:
|
||||
* 1. Exact match against ALL_MODEL_NAMES → return as-is.
|
||||
* 1. Exact match against ALL_MODEL_NAMES → return as-is. This is the ONLY
|
||||
* path that selects `gpt-5.6-sol` — Sol is intentionally exact-only.
|
||||
* 2. Family heuristics for common variants:
|
||||
* - `gpt-5.4-mini`, `gpt-5.4-turbo`, `gpt-5.4-*` → `gpt-5.4`
|
||||
* - `gpt-*` (anything else GPT) → `gpt`
|
||||
* - `gpt-*` (anything else GPT, including other 5.6 variants) → `gpt`
|
||||
* - `o3`, `o4`, `o4-mini`, `o1`, `o1-mini`, `o1-pro` → `o-series`
|
||||
* - `claude-*` (sonnet, opus, haiku, any version) → `claude`
|
||||
* - `gemini-*` (2.5-pro, flash, etc.) → `gemini`
|
||||
@@ -52,6 +58,10 @@ export function resolveModel(input: string): Model | null {
|
||||
}
|
||||
|
||||
// Family heuristics
|
||||
// Sol never reaches here — the exact match above already returned it. Do
|
||||
// not add a Sol family pattern: Terra, Luna, future 5.6 variants, and
|
||||
// suffixed model IDs must NOT inherit Sol's behavioral profile; they fall
|
||||
// through to the generic `gpt` family below.
|
||||
if (/^gpt-5\.4(-|$)/.test(s)) return 'gpt-5.4';
|
||||
if (/^gpt(-|$)/.test(s)) return 'gpt';
|
||||
if (/^o[0-9]+(-|$)/.test(s)) return 'o-series';
|
||||
|
||||
Reference in New Issue
Block a user