Repository navigation
Description
Before submitting
- I searched existing issues and pull requests and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server Codex provider/model manifest and text generation, with visible effects in the web and mobile model pickers.
Summary
Codex authenticated through Amazon Bedrock reports provider-qualified model IDs such as openai.gpt-5.6-sol, but T3 compares them against unqualified IDs such as gpt-5.6-sol. Exact string matching incorrectly classifies current Bedrock models as legacy and leaves T3’s generated-text defaults pointing at model IDs that are absent from the live catalog.
Steps to reproduce
- Configure the Codex provider using a Codex CLI authenticated through Amazon Bedrock.
- Refresh the provider model catalog.
- Observe that the live catalog contains:
openai.gpt-5.6-solopenai.gpt-5.6-terraopenai.gpt-5.6-luna
- Open the model picker.
- Leave
textGenerationModelSelectionat its server default and start a thread or request “Regenerate title.”
Expected behavior
- Bedrock’s qualified 5.6 model IDs should match the corresponding current model families in T3’s manifest.
- Current models should not appear under Legacy.
- Preferred/default model selection should resolve to an ID present in the live provider catalog.
- Automatic thread titles and other generated text should execute with the provider-qualified model ID required by Bedrock.
Actual behavior
All of the observed Bedrock models are stored with isLegacy: true, including the three 5.6 models that are explicitly listed as current in T3’s manifest under their unqualified names.
The relevant paths currently use exact model-string comparisons:
isLegacyModelcheckscurrentModels.includes(slug):
https://github.com/pingdotgg/t3code/blob/main/apps/server/src/provider/ModelManifest.tsapplyPreferredCodexDefaultModelcompares live slugs directly withPREFERRED_DEFAULT_CODEX_MODELS:
https://github.com/pingdotgg/t3code/blob/main/apps/server/src/provider/Layers/CodexProvider.ts
T3’s default text-generation model is the unqualified gpt-5.6-luna:
CodexTextGeneration then passes modelSelection.model directly to codex exec --model:
Consequently, automatic naming/regeneration targets an ID that is not present in the Bedrock-backed live catalog unless the user explicitly selects the qualified openai.gpt-5.6-luna.
Impact
- Current Codex models are hidden or de-prioritized as Legacy.
- Mobile rejects legacy models for implicit defaults.
- T3’s preferred Codex default ranking cannot match provider-qualified IDs.
- Automatic thread titles, title regeneration, generated branch names, and other generated text can fail when using the unqualified default.
Environment
- T3 Code Alpha 0.0.38
- macOS 26.6.2, arm64
- Codex CLI 0.153.0-alpha.5
- Authentication: Amazon Bedrock
- No ChatGPT authentication
Suggested fix
Introduce a provider-aware canonical model-family comparison:
openai.gpt-5.6-sol -> gpt-5.6-sol
openai.gpt-5.6-luna -> gpt-5.6-luna
Use the canonical family only for manifest classification, aliases, and preference matching. Preserve the full provider-qualified ID for dispatch.
For stored/default model selections, resolve the generic default against the live catalog before invoking the CLI, selecting the qualified catalog entry when present.
Regression tests should cover:
- Bedrock-qualified current models are not legacy.
- Preferred defaults match qualified IDs.
- Text-generation defaults resolve to a live qualified ID.
- The original qualified ID is retained in
codex exec --model.
Disclosure
I used AI assistance to organize and cross-check the local T3 cache and current source. I reviewed the report, and no prompts, credentials, local paths, or thread identifiers are included.
Activity