feat: support GPT-5.6 model family - #907
Conversation
cosarah
left a comment
There was a problem hiding this comment.
I found one substantive gap and one smaller follow-up item.
-
The regression coverage still does not exercise the real
@ai-sdk/openaivalidation path that this PR is meant to unblock. The version bump is inpackage.json:29andpnpm-lock.yaml:17, buttests/ai/llm-thinking-options.test.ts:1mocksai.generateText, andtests/ai/openai-provider.test.ts:1mocks@ai-sdk/openai. That means the new tests verify object construction and routing decisions, but they do not prove that the upgraded SDK now actually acceptsreasoningEffort: "max"at runtime. If possible, I would add one integration-style test around the real provider options schema, since that is the core behavior this PR claims to fix. -
Smaller point:
lib/ai/providers.ts:68and the supported-model docs now expose bothgpt-5.6andgpt-5.6-solas separate built-in models. Ifgpt-5.6is just an alias ofgpt-5.6-sol, this will fragment per-model settings and usage tracking because those are keyed by raw model ID (lib/ai/thinking-config.ts:9,lib/store/settings.ts:914,lib/ai/llm.ts:280). If the alias is intentional, it may be worth normalizing one of them internally or documenting the duplication explicitly.
|
Addressed both points in
Validation: 264 test files / 2,216 tests passed in a clean environment, plus TypeScript, ESLint, Prettier, and |
|
I agree that Right now That means
So the issue is not that aliases should be forbidden. The issue is that aliasing was only applied at the catalog layer, not normalized consistently across capability lookup / settings / thinking-option injection. If the intent is to canonicalize on |
|
Addressed in The canonicalization now covers:
Regression coverage verifies the explicit Sol ID still goes through the Responses API, receives Validation: 265 test files / 2,223 tests passed in a clean environment, plus TypeScript, ESLint, Prettier, and |
|
I think there are still two alias-compatibility gaps after the canonicalization patch:
So the core alias fix looks good, but there are still a few exact-ID UI/config paths that need to use the same canonicalization helper. |
|
Addressed the remaining alias paths in The fix now:
Regression coverage includes the toolbar/PBL capability paths, token-plan metadata, managed alias metadata inheritance, and the canonical-to-alias allowlist transition. I also did a repo-wide audit of raw LLM model-ID lookups, then ran an independent pre-push review. That review found the managed metadata and directional allowlist cases; both are now covered, and the final independent pass reported no blocking findings. Validation: 265 test files / 2,229 tests passed in a clean environment, plus TypeScript, ESLint, Prettier, and |
Summary
gpt-5.6(the official GPT-5.6 Sol alias),gpt-5.6-terra, andgpt-5.6-lunato the built-in OpenAI model cataloggpt-5.6-solreferences togpt-5.6across model metadata, thinking settings, usage aggregation, toolbar/PBL capability checks, and token-plan hydration while preserving the requested wire model IDnonethroughmax, defaulting tomedium@ai-sdk/openaiwithin the existing major version so the runtime schema accepts GPT-5.6maxreasoning effortWhy
OpenAI introduced the GPT-5.6 family with Sol, Terra, and Luna tiers and added the
maxreasoning effort. The previous OpenAI SDK version rejectedmaxduring provider-option validation, so catalog-only changes would not provide complete support.The built-in catalog uses only
gpt-5.6for Sol because OpenAI documents it as an alias ofgpt-5.6-sol. This avoids duplicate per-model settings and usage tracking for the same tier.Validation
@ai-sdk/openaiintegration test verifiesreasoning.effort: "max"in the Responses API request bodypnpm exec tsc --noEmit --incremental falsegit diff --check