Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/openai-gpt-5-6-models.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/ai-openai': minor
---

Add OpenAI GPT-5.6 family models: `gpt-5.6` (alias → Sol), `gpt-5.6-sol`, `gpt-5.6-terra`, and `gpt-5.6-luna`.
9 changes: 9 additions & 0 deletions examples/ts-react-chat/src/lib/model-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ export interface ModelOption {

export const MODEL_OPTIONS: Array<ModelOption> = [
// OpenAI
{ provider: 'openai', model: 'gpt-5.6', label: 'OpenAI - GPT-5.6' },
{ provider: 'openai', model: 'gpt-5.6-sol', label: 'OpenAI - GPT-5.6 Sol' },
{
provider: 'openai',
model: 'gpt-5.6-terra',
label: 'OpenAI - GPT-5.6 Terra',
},
{ provider: 'openai', model: 'gpt-5.6-luna', label: 'OpenAI - GPT-5.6 Luna' },
{ provider: 'openai', model: 'gpt-5.5', label: 'OpenAI - GPT-5.5' },
{ provider: 'openai', model: 'gpt-5.2', label: 'OpenAI - GPT-5.2' },
{ provider: 'openai', model: 'gpt-5.2-pro', label: 'OpenAI - GPT-5.2 Pro' },
{ provider: 'openai', model: 'gpt-5.1', label: 'OpenAI - GPT-5.1' },
Expand Down
8 changes: 8 additions & 0 deletions examples/ts-svelte-chat/src/lib/model-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ export interface ModelOption {

export const MODEL_OPTIONS: Array<ModelOption> = [
// OpenAI
{ provider: 'openai', model: 'gpt-5.6', label: 'OpenAI - GPT-5.6' },
{ provider: 'openai', model: 'gpt-5.6-sol', label: 'OpenAI - GPT-5.6 Sol' },
{
provider: 'openai',
model: 'gpt-5.6-terra',
label: 'OpenAI - GPT-5.6 Terra',
},
{ provider: 'openai', model: 'gpt-5.6-luna', label: 'OpenAI - GPT-5.6 Luna' },
{ provider: 'openai', model: 'gpt-4o', label: 'OpenAI - GPT-4o' },
{ provider: 'openai', model: 'gpt-4o-mini', label: 'OpenAI - GPT-4o Mini' },
{ provider: 'openai', model: 'gpt-5', label: 'OpenAI - GPT-5' },
Expand Down
8 changes: 8 additions & 0 deletions examples/ts-vue-chat/src/lib/model-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ export interface ModelOption {

export const MODEL_OPTIONS: Array<ModelOption> = [
// OpenAI
{ provider: 'openai', model: 'gpt-5.6', label: 'OpenAI - GPT-5.6' },
{ provider: 'openai', model: 'gpt-5.6-sol', label: 'OpenAI - GPT-5.6 Sol' },
{
provider: 'openai',
model: 'gpt-5.6-terra',
label: 'OpenAI - GPT-5.6 Terra',
},
{ provider: 'openai', model: 'gpt-5.6-luna', label: 'OpenAI - GPT-5.6 Luna' },
{ provider: 'openai', model: 'gpt-4o', label: 'OpenAI - GPT-4o' },
{ provider: 'openai', model: 'gpt-4o-mini', label: 'OpenAI - GPT-4o Mini' },
{ provider: 'openai', model: 'gpt-5', label: 'OpenAI - GPT-5' },
Expand Down
216 changes: 216 additions & 0 deletions packages/ai-openai/src/model-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2043,6 +2043,190 @@ const GPT_5_4_IMAGE_2 = {
OpenAIMetadataOptions
>

const GPT_5_6 = {
name: 'gpt-5.6',
context_window: 1_050_000,
max_output_tokens: 128_000,
knowledge_cutoff: '2026-02-16',
supports: {
input: ['image', 'text'],
output: ['text'],
endpoints: ['chat', 'chat-completions'],
features: [
'streaming',
'function_calling',
'structured_outputs',
'distillation',
],
tools: [
'web_search',
'web_search_preview',
'file_search',
'image_generation',
'code_interpreter',
'mcp',
'computer_use',
'local_shell',
'shell',
'apply_patch',
],
},
pricing: {
input: {
normal: 5,
cached: 0.5,
},
output: {
normal: 30,
},
},
} as const satisfies ModelMeta<
OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
>

const GPT_5_6_SOL = {
name: 'gpt-5.6-sol',
context_window: 1_050_000,
max_output_tokens: 128_000,
knowledge_cutoff: '2026-02-16',
supports: {
input: ['image', 'text'],
output: ['text'],
endpoints: ['chat', 'chat-completions'],
features: [
'streaming',
'function_calling',
'structured_outputs',
'distillation',
],
tools: [
'web_search',
'web_search_preview',
'file_search',
'image_generation',
'code_interpreter',
'mcp',
'computer_use',
'local_shell',
'shell',
'apply_patch',
],
},
pricing: {
input: {
normal: 5,
cached: 0.5,
},
output: {
normal: 30,
},
},
} as const satisfies ModelMeta<
OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
>

const GPT_5_6_TERRA = {
name: 'gpt-5.6-terra',
context_window: 1_050_000,
max_output_tokens: 128_000,
knowledge_cutoff: '2026-02-16',
supports: {
input: ['image', 'text'],
output: ['text'],
endpoints: ['chat', 'chat-completions'],
features: [
'streaming',
'function_calling',
'structured_outputs',
'distillation',
],
tools: [
'web_search',
'web_search_preview',
'file_search',
'image_generation',
'code_interpreter',
'mcp',
'computer_use',
'local_shell',
'shell',
'apply_patch',
],
},
pricing: {
input: {
normal: 2,
cached: 0.2,
},
output: {
normal: 12,
},
},
} as const satisfies ModelMeta<
OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
>

const GPT_5_6_LUNA = {
name: 'gpt-5.6-luna',
context_window: 1_050_000,
max_output_tokens: 128_000,
knowledge_cutoff: '2026-02-16',
supports: {
input: ['image', 'text'],
output: ['text'],
endpoints: ['chat', 'chat-completions'],
features: [
'streaming',
'function_calling',
'structured_outputs',
'distillation',
],
tools: [
'web_search',
'web_search_preview',
'file_search',
'image_generation',
'code_interpreter',
'mcp',
'computer_use',
'local_shell',
'shell',
'apply_patch',
],
},
pricing: {
input: {
normal: 0.2,
cached: 0.02,
},
output: {
normal: 1.2,
},
},
} as const satisfies ModelMeta<
OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
>

const GPT_5_5 = {
name: 'gpt-5.5',
context_window: 1_050_000,
Expand Down Expand Up @@ -2230,6 +2414,10 @@ export const OPENAI_CHAT_MODELS = [
GPT_5_4_NANO.name,

GPT_5_4_IMAGE_2.name,
GPT_5_6.name,
GPT_5_6_SOL.name,
GPT_5_6_TERRA.name,
GPT_5_6_LUNA.name,
GPT_5_5.name,
GPT_5_5_PRO.name,
GPT_CHAT_LATEST.name,
Expand Down Expand Up @@ -2522,6 +2710,30 @@ export type OpenAIChatModelProviderOptionsByName = {
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
[GPT_5_6.name]: OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
[GPT_5_6_SOL.name]: OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
[GPT_5_6_TERRA.name]: OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
[GPT_5_6_LUNA.name]: OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
OpenAIToolsOptions &
OpenAIStreamingOptions &
OpenAIMetadataOptions
[GPT_5_5.name]: OpenAIBaseOptions &
OpenAIReasoningOptions &
OpenAIStructuredOutputOptions &
Expand Down Expand Up @@ -2646,6 +2858,10 @@ export type OpenAIModelInputModalitiesByName = {
[GPT_5_4_MINI.name]: typeof GPT_5_4_MINI.supports.input
[GPT_5_4_NANO.name]: typeof GPT_5_4_NANO.supports.input
[GPT_5_4_IMAGE_2.name]: typeof GPT_5_4_IMAGE_2.supports.input
[GPT_5_6.name]: typeof GPT_5_6.supports.input
[GPT_5_6_SOL.name]: typeof GPT_5_6_SOL.supports.input
[GPT_5_6_TERRA.name]: typeof GPT_5_6_TERRA.supports.input
[GPT_5_6_LUNA.name]: typeof GPT_5_6_LUNA.supports.input
[GPT_5_5.name]: typeof GPT_5_5.supports.input
[GPT_5_5_PRO.name]: typeof GPT_5_5_PRO.supports.input
[GPT_CHAT_LATEST.name]: typeof GPT_CHAT_LATEST.supports.input
Expand Down
44 changes: 44 additions & 0 deletions packages/ai-openai/tests/model-meta.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,46 @@ describe('OpenAI Chat Model Provider Options Type Assertions', () => {
expectTypeOf<Options>().toExtend<OpenAIStreamingOptions>()
expectTypeOf<Options>().toExtend<BaseOptions>()
})

it('gpt-5.6 should support all features', () => {
type Options = OpenAIChatModelProviderOptionsByName['gpt-5.6']

expectTypeOf<Options>().toExtend<OpenAIReasoningOptions>()
expectTypeOf<Options>().toExtend<OpenAIStructuredOutputOptions>()
expectTypeOf<Options>().toExtend<OpenAIToolsOptions>()
expectTypeOf<Options>().toExtend<OpenAIStreamingOptions>()
expectTypeOf<Options>().toExtend<BaseOptions>()
})

it('gpt-5.6-sol should support all features', () => {
type Options = OpenAIChatModelProviderOptionsByName['gpt-5.6-sol']

expectTypeOf<Options>().toExtend<OpenAIReasoningOptions>()
expectTypeOf<Options>().toExtend<OpenAIStructuredOutputOptions>()
expectTypeOf<Options>().toExtend<OpenAIToolsOptions>()
expectTypeOf<Options>().toExtend<OpenAIStreamingOptions>()
expectTypeOf<Options>().toExtend<BaseOptions>()
})

it('gpt-5.6-terra should support all features', () => {
type Options = OpenAIChatModelProviderOptionsByName['gpt-5.6-terra']

expectTypeOf<Options>().toExtend<OpenAIReasoningOptions>()
expectTypeOf<Options>().toExtend<OpenAIStructuredOutputOptions>()
expectTypeOf<Options>().toExtend<OpenAIToolsOptions>()
expectTypeOf<Options>().toExtend<OpenAIStreamingOptions>()
expectTypeOf<Options>().toExtend<BaseOptions>()
})

it('gpt-5.6-luna should support all features', () => {
type Options = OpenAIChatModelProviderOptionsByName['gpt-5.6-luna']

expectTypeOf<Options>().toExtend<OpenAIReasoningOptions>()
expectTypeOf<Options>().toExtend<OpenAIStructuredOutputOptions>()
expectTypeOf<Options>().toExtend<OpenAIToolsOptions>()
expectTypeOf<Options>().toExtend<OpenAIStreamingOptions>()
expectTypeOf<Options>().toExtend<BaseOptions>()
})
})

describe('Models WITH reasoning AND structured output AND tools (gpt-5-mini/nano)', () => {
Expand Down Expand Up @@ -475,6 +515,10 @@ describe('OpenAI Chat Model Provider Options Type Assertions', () => {
expectTypeOf<'gpt-5.1-codex'>().toExtend<Keys>()
expectTypeOf<'gpt-5'>().toExtend<Keys>()
expectTypeOf<'gpt-5-pro'>().toExtend<Keys>()
expectTypeOf<'gpt-5.6'>().toExtend<Keys>()
expectTypeOf<'gpt-5.6-sol'>().toExtend<Keys>()
expectTypeOf<'gpt-5.6-terra'>().toExtend<Keys>()
expectTypeOf<'gpt-5.6-luna'>().toExtend<Keys>()

// Standard models (structured output + tools, no reasoning)
expectTypeOf<'gpt-5-mini'>().toExtend<Keys>()
Expand Down
4 changes: 4 additions & 0 deletions packages/ai-openai/tests/model-sampling-support.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ describe('openAIModelRejectsSamplingParams', () => {
'gpt-5.2-pro',
'gpt-5.5',
'gpt-5.5-pro',
'gpt-5.6',
'gpt-5.6-sol',
'gpt-5.6-terra',
'gpt-5.6-luna',
'gpt-5.1-codex-mini',
'codex-mini-latest',
]) {
Expand Down