@ai-sdk/openai 3.0.115 → 3.0.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -206,9 +206,9 @@ The following provider options are available:
206
206
  Reasoning effort for reasoning models. Defaults to `medium`. If you use `providerOptions` to set the `reasoningEffort` option, this model setting will be ignored.
207
207
 
208
208
  <Note>
209
- Supported reasoning efforts vary by model. GPT-5.6 supports `'none'`, `'low'`,
210
- `'medium'`, `'high'`, `'xhigh'`, and `'max'`. GPT-6 and later models support
211
- `'low'`, `'medium'`, `'high'`, `'xhigh'`, and `'max'`.
209
+ Supported reasoning efforts vary by model. GPT-5.6 and GPT-6 support `'none'`,
210
+ `'low'`, `'medium'`, `'high'`, `'xhigh'`, and `'max'`. GPT-6 Astra does not
211
+ support `'none'`.
212
212
  </Note>
213
213
 
214
214
  <Note>
@@ -2510,6 +2510,8 @@ The following optional provider options are available for OpenAI completion mode
2510
2510
  | Model | Image Input | Audio Input | Object Generation | Tool Usage |
2511
2511
  | --------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
2512
2512
  | `gpt-6-astra` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
2513
+ | `gpt-6-luna` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
2514
+ | `gpt-6-sol` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
2513
2515
  | `gpt-5.6` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
2514
2516
  | `gpt-5.6-luna` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
2515
2517
  | `gpt-5.6-sol` | <Check size={18} /> | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/openai",
3
- "version": "3.0.115",
3
+ "version": "3.0.117",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -36,8 +36,8 @@
36
36
  }
37
37
  },
38
38
  "dependencies": {
39
- "@ai-sdk/provider": "3.0.16",
40
- "@ai-sdk/provider-utils": "4.0.52"
39
+ "@ai-sdk/provider": "3.0.17",
40
+ "@ai-sdk/provider-utils": "4.0.54"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "20.17.24",
@@ -36,6 +36,11 @@ export const openaiChatResponseSchema = lazySchema(() =>
36
36
  message: z.object({
37
37
  role: z.literal('assistant').nullish(),
38
38
  content: z.string().nullish(),
39
+ audio: z
40
+ .object({
41
+ transcript: z.string().nullish(),
42
+ })
43
+ .nullish(),
39
44
  tool_calls: z
40
45
  .array(
41
46
  z.object({
@@ -380,7 +380,10 @@ export class OpenAIChatLanguageModel implements LanguageModelV3 {
380
380
  const content: Array<LanguageModelV3Content> = [];
381
381
 
382
382
  // text content:
383
- const text = choice.message.content;
383
+ const text =
384
+ choice.message.content != null && choice.message.content.length > 0
385
+ ? choice.message.content
386
+ : choice.message.audio?.transcript;
384
387
  if (text != null && text.length > 0) {
385
388
  content.push({ type: 'text', text });
386
389
  }
@@ -71,6 +71,8 @@ export type OpenAIChatModelId =
71
71
  | 'gpt-5.6-sol'
72
72
  | 'gpt-5.6-terra'
73
73
  | 'gpt-6-astra'
74
+ | 'gpt-6-luna'
75
+ | 'gpt-6-sol'
74
76
  | (string & {});
75
77
 
76
78
  export const openaiLanguageModelChatOptions = lazySchema(() =>
@@ -24,6 +24,8 @@ export function getOpenAILanguageModelCapabilities(
24
24
  const isGptNanoModel = gptVersion?.variant?.startsWith('nano') ?? false;
25
25
  const isGpt6OrLaterModel = gptVersion != null && gptVersion.major >= 6;
26
26
 
27
+ const isGpt6SolOrLuna = modelId === 'gpt-6-sol' || modelId === 'gpt-6-luna';
28
+
27
29
  const supportsFlexProcessing =
28
30
  (oSeriesVersion != null && oSeriesVersion >= 3) ||
29
31
  (gptVersion != null && gptVersion.major >= 5 && !isGptChatModel);
@@ -57,9 +59,11 @@ export function getOpenAILanguageModelCapabilities(
57
59
  supportsPriorityProcessing,
58
60
  supportsConfigurationUpdate: isGpt6OrLaterModel,
59
61
  supportsAsyncToolCalling: isGpt6OrLaterModel,
60
- supportedReasoningEfforts: isGpt6OrLaterModel
61
- ? ['low', 'medium', 'high', 'xhigh', 'max']
62
- : undefined,
62
+ supportedReasoningEfforts: isGpt6SolOrLuna
63
+ ? ['none', 'low', 'medium', 'high', 'xhigh', 'max']
64
+ : isGpt6OrLaterModel
65
+ ? ['low', 'medium', 'high', 'xhigh', 'max']
66
+ : undefined,
63
67
  isReasoningModel,
64
68
  systemMessageMode,
65
69
  supportsNonReasoningParameters,
@@ -118,6 +118,10 @@ function createOpenAIStreamError({
118
118
  responseHeaders,
119
119
  responseBody: JSON.stringify(frame),
120
120
  data: frame,
121
+ isRetryable:
122
+ streamError == null
123
+ ? true
124
+ : isRetryableStreamError(streamError, getStatusCode(streamError)),
121
125
  });
122
126
  }
123
127
 
@@ -937,7 +937,7 @@ export const openaiResponsesChunkSchema = lazySchema(() =>
937
937
  name: z.string(),
938
938
  arguments: z.string(),
939
939
  async: z.boolean().nullish(),
940
- status: z.literal('completed'),
940
+ status: z.enum(['in_progress', 'completed', 'incomplete']),
941
941
  namespace: z.string().nullish(),
942
942
  }),
943
943
  z.object({
@@ -947,7 +947,7 @@ export const openaiResponsesChunkSchema = lazySchema(() =>
947
947
  name: z.string(),
948
948
  input: z.string(),
949
949
  async: z.boolean().nullish(),
950
- status: z.literal('completed'),
950
+ status: z.enum(['in_progress', 'completed', 'incomplete']),
951
951
  }),
952
952
  z.object({
953
953
  type: z.literal('code_interpreter_call'),
@@ -1517,7 +1517,7 @@ export class OpenAIResponsesLanguageModel implements LanguageModelV3 {
1517
1517
  } else if (value.item.type === 'shell_call_output') {
1518
1518
  // shell_call_output is handled in output_item.done
1519
1519
  } else if (value.item.type === 'message') {
1520
- ongoingAnnotations.splice(0, ongoingAnnotations.length);
1520
+ ongoingAnnotations.splice(0);
1521
1521
  activeMessagePhase = value.item.phase ?? undefined;
1522
1522
  controller.enqueue({
1523
1523
  type: 'text-start',
@@ -58,6 +58,8 @@ export const openaiResponsesReasoningModelIds = [
58
58
  'gpt-5.6-sol',
59
59
  'gpt-5.6-terra',
60
60
  'gpt-6-astra',
61
+ 'gpt-6-luna',
62
+ 'gpt-6-sol',
61
63
  ] as const;
62
64
 
63
65
  export const openaiResponsesModelIds = [
@@ -131,6 +133,8 @@ export type OpenAIResponsesModelId =
131
133
  | 'gpt-5.6-sol'
132
134
  | 'gpt-5.6-terra'
133
135
  | 'gpt-6-astra'
136
+ | 'gpt-6-luna'
137
+ | 'gpt-6-sol'
134
138
  | 'gpt-5-2025-08-07'
135
139
  | 'gpt-5-chat-latest'
136
140
  | 'gpt-5-codex'