@ai-sdk/openai 4.0.71 → 4.0.73

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 4.0.73
4
+
5
+ ### Patch Changes
6
+
7
+ - 6d1f881: fix(openai): expose Chat Completions audio transcripts as generated text
8
+ - 618dc11: feat: GPT-6 Sol and Luna model IDs
9
+ - Updated dependencies [ffb0e76]
10
+ - @ai-sdk/provider@4.0.18
11
+ - @ai-sdk/provider-utils@5.0.46
12
+
13
+ ## 4.0.72
14
+
15
+ ### Patch Changes
16
+
17
+ - 411b3f2: fix(openai): strip unsupported regex patterns from JSON schemas
18
+ - e13c32f: fix(openai): include speech provider options in requests
19
+
3
20
  ## 4.0.71
4
21
 
5
22
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -4,13 +4,13 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
4
4
  import { InferSchema, FetchFunction, WebSocketConstructor, WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from '@ai-sdk/provider-utils';
5
5
  import { z } from 'zod/v4';
6
6
 
7
- type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'o4-mini' | 'o4-mini-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-audio-preview-2025-06-03' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini-audio-preview' | 'gpt-4o-mini-audio-preview-2024-12-17' | 'gpt-4o-search-preview' | 'gpt-4o-search-preview-2025-03-11' | 'gpt-4o-mini-search-preview' | 'gpt-4o-mini-search-preview-2025-03-11' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-5.1' | 'gpt-5.1-2025-11-13' | 'gpt-5.1-chat-latest' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' | 'gpt-5.2-pro' | 'gpt-5.2-pro-2025-12-11' | 'gpt-5.3-chat-latest' | 'gpt-5.4' | 'gpt-5.4-2026-03-05' | 'gpt-5.4-mini' | 'gpt-5.4-mini-2026-03-17' | 'gpt-5.4-nano' | 'gpt-5.4-nano-2026-03-17' | 'gpt-5.4-pro' | 'gpt-5.4-pro-2026-03-05' | 'gpt-5.5' | 'gpt-5.5-2026-04-23' | 'gpt-5.6' | 'gpt-5.6-luna' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-6-astra' | (string & {});
7
+ type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'o4-mini' | 'o4-mini-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-audio-preview-2025-06-03' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini-audio-preview' | 'gpt-4o-mini-audio-preview-2024-12-17' | 'gpt-4o-search-preview' | 'gpt-4o-search-preview-2025-03-11' | 'gpt-4o-mini-search-preview' | 'gpt-4o-mini-search-preview-2025-03-11' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-5.1' | 'gpt-5.1-2025-11-13' | 'gpt-5.1-chat-latest' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' | 'gpt-5.2-pro' | 'gpt-5.2-pro-2025-12-11' | 'gpt-5.3-chat-latest' | 'gpt-5.4' | 'gpt-5.4-2026-03-05' | 'gpt-5.4-mini' | 'gpt-5.4-mini-2026-03-17' | 'gpt-5.4-nano' | 'gpt-5.4-nano-2026-03-17' | 'gpt-5.4-pro' | 'gpt-5.4-pro-2026-03-05' | 'gpt-5.5' | 'gpt-5.5-2026-04-23' | 'gpt-5.6' | 'gpt-5.6-luna' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-6-astra' | 'gpt-6-luna' | 'gpt-6-sol' | (string & {});
8
8
  declare const openaiLanguageModelChatOptions: _ai_sdk_provider_utils.LazySchema<{
9
9
  logitBias?: Record<number, number> | undefined;
10
10
  logprobs?: number | boolean | undefined;
11
11
  parallelToolCalls?: boolean | undefined;
12
12
  user?: string | undefined;
13
- reasoningEffort?: "low" | "medium" | "high" | "xhigh" | "max" | "none" | "minimal" | undefined;
13
+ reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "max" | "minimal" | undefined;
14
14
  maxCompletionTokens?: number | undefined;
15
15
  store?: boolean | undefined;
16
16
  metadata?: Record<string, string> | undefined;
@@ -1497,7 +1497,7 @@ interface OpenAIRealtimeFactory extends Experimental_RealtimeFactoryV4 {
1497
1497
  getToken(options: Parameters<Experimental_RealtimeFactoryV4['getToken']>[0] & OpenAIRealtimeOptions): ReturnType<Experimental_RealtimeFactoryV4['getToken']>;
1498
1498
  }
1499
1499
 
1500
- type OpenAIResponsesModelId = 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-5.1' | 'gpt-5.1-2025-11-13' | 'gpt-5.1-chat-latest' | 'gpt-5.1-codex-mini' | 'gpt-5.1-codex' | 'gpt-5.1-codex-max' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' | 'gpt-5.2-pro' | 'gpt-5.2-pro-2025-12-11' | 'gpt-5.2-codex' | 'gpt-5.3-chat-latest' | 'gpt-5.3-codex' | 'gpt-5.4' | 'gpt-5.4-2026-03-05' | 'gpt-5.4-mini' | 'gpt-5.4-mini-2026-03-17' | 'gpt-5.4-nano' | 'gpt-5.4-nano-2026-03-17' | 'gpt-5.4-pro' | 'gpt-5.4-pro-2026-03-05' | 'gpt-5.5' | 'gpt-5.5-2026-04-23' | 'gpt-5.6' | 'gpt-5.6-luna' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-6-astra' | 'gpt-5-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-5-codex' | 'gpt-5-mini-2025-08-07' | 'gpt-5-mini' | 'gpt-5-nano-2025-08-07' | 'gpt-5-nano' | 'gpt-5-pro-2025-10-06' | 'gpt-5-pro' | 'gpt-5' | 'o1-2024-12-17' | 'o1' | 'o3-2025-04-16' | 'o3-mini-2025-01-31' | 'o3-mini' | 'o3' | 'o4-mini' | 'o4-mini-2025-04-16' | (string & {});
1500
+ type OpenAIResponsesModelId = 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-5.1' | 'gpt-5.1-2025-11-13' | 'gpt-5.1-chat-latest' | 'gpt-5.1-codex-mini' | 'gpt-5.1-codex' | 'gpt-5.1-codex-max' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' | 'gpt-5.2-pro' | 'gpt-5.2-pro-2025-12-11' | 'gpt-5.2-codex' | 'gpt-5.3-chat-latest' | 'gpt-5.3-codex' | 'gpt-5.4' | 'gpt-5.4-2026-03-05' | 'gpt-5.4-mini' | 'gpt-5.4-mini-2026-03-17' | 'gpt-5.4-nano' | 'gpt-5.4-nano-2026-03-17' | 'gpt-5.4-pro' | 'gpt-5.4-pro-2026-03-05' | 'gpt-5.5' | 'gpt-5.5-2026-04-23' | 'gpt-5.6' | 'gpt-5.6-luna' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-6-astra' | 'gpt-6-luna' | 'gpt-6-sol' | 'gpt-5-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-5-codex' | 'gpt-5-mini-2025-08-07' | 'gpt-5-mini' | 'gpt-5-nano-2025-08-07' | 'gpt-5-nano' | 'gpt-5-pro-2025-10-06' | 'gpt-5-pro' | 'gpt-5' | 'o1-2024-12-17' | 'o1' | 'o3-2025-04-16' | 'o3-mini-2025-01-31' | 'o3-mini' | 'o3' | 'o4-mini' | 'o4-mini-2025-04-16' | (string & {});
1501
1501
  declare const openaiLanguageModelResponsesOptionsSchema: _ai_sdk_provider_utils.LazySchema<{
1502
1502
  conversation?: string | null | undefined;
1503
1503
  include?: ("web_search_call.results" | "file_search_call.results" | "message.output_text.logprobs" | "reasoning.encrypted_content")[] | null | undefined;
package/dist/index.js CHANGED
@@ -53,6 +53,7 @@ function getOpenAILanguageModelCapabilities(modelId) {
53
53
  const isGptChatModel = (gptVersion == null ? void 0 : gptVersion.minor) == null && ((_b = (_a2 = gptVersion == null ? void 0 : gptVersion.variant) == null ? void 0 : _a2.startsWith("chat")) != null ? _b : false);
54
54
  const isGptNanoModel = (_d = (_c = gptVersion == null ? void 0 : gptVersion.variant) == null ? void 0 : _c.startsWith("nano")) != null ? _d : false;
55
55
  const isGpt6OrLaterModel = gptVersion != null && gptVersion.major >= 6;
56
+ const isGpt6SolOrLuna = modelId === "gpt-6-sol" || modelId === "gpt-6-luna";
56
57
  const supportsFlexProcessing = oSeriesVersion != null && oSeriesVersion >= 3 || gptVersion != null && gptVersion.major >= 5 && !isGptChatModel;
57
58
  const supportsPriorityProcessing = modelId.startsWith("gpt-4") || gptVersion != null && gptVersion.major >= 5 && !isGptNanoModel && !isGptChatModel || oSeriesVersion != null && oSeriesVersion >= 3;
58
59
  const isReasoningModel = oSeriesVersion != null || gptVersion != null && gptVersion.major >= 5 && !isGptChatModel;
@@ -63,7 +64,7 @@ function getOpenAILanguageModelCapabilities(modelId) {
63
64
  supportsPriorityProcessing,
64
65
  supportsConfigurationUpdate: isGpt6OrLaterModel,
65
66
  supportsAsyncToolCalling: isGpt6OrLaterModel,
66
- supportedReasoningEfforts: isGpt6OrLaterModel ? ["low", "medium", "high", "xhigh", "max"] : void 0,
67
+ supportedReasoningEfforts: isGpt6SolOrLuna ? ["none", "low", "medium", "high", "xhigh", "max"] : isGpt6OrLaterModel ? ["low", "medium", "high", "xhigh", "max"] : void 0,
67
68
  isReasoningModel,
68
69
  systemMessageMode,
69
70
  supportsNonReasoningParameters
@@ -653,6 +654,9 @@ var openaiChatResponseSchema = lazySchema(
653
654
  message: z2.object({
654
655
  role: z2.literal("assistant").nullish(),
655
656
  content: z2.string().nullish(),
657
+ audio: z2.object({
658
+ transcript: z2.string().nullish()
659
+ }).nullish(),
656
660
  tool_calls: z2.array(
657
661
  z2.object({
658
662
  id: z2.string().nullish(),
@@ -929,16 +933,26 @@ import {
929
933
  } from "@ai-sdk/provider";
930
934
  function normalizeOpenAIJsonSchema(schema) {
931
935
  let removedPropertyNames = false;
936
+ let removedLookaroundPattern = false;
932
937
  const normalizedSchema = normalizeSchema(schema);
938
+ const warnings = [];
939
+ if (removedPropertyNames) {
940
+ warnings.push({
941
+ type: "compatibility",
942
+ feature: "JSON Schema propertyNames",
943
+ details: "OpenAI does not support JSON Schema propertyNames. It was removed before sending the schema, so OpenAI will not enforce property-name constraints."
944
+ });
945
+ }
946
+ if (removedLookaroundPattern) {
947
+ warnings.push({
948
+ type: "compatibility",
949
+ feature: "JSON Schema pattern with regex lookaround",
950
+ details: "OpenAI does not support regex lookaround in JSON Schema patterns. The pattern was removed before sending the schema, so OpenAI will not enforce that constraint."
951
+ });
952
+ }
933
953
  return {
934
954
  schema: normalizedSchema,
935
- warnings: removedPropertyNames ? [
936
- {
937
- type: "compatibility",
938
- feature: "JSON Schema propertyNames",
939
- details: "OpenAI does not support JSON Schema propertyNames. It was removed before sending the schema, so OpenAI will not enforce property-name constraints."
940
- }
941
- ] : []
955
+ warnings
942
956
  };
943
957
  function normalizeSchema(schema2) {
944
958
  const propertyNames = schema2.propertyNames;
@@ -952,6 +966,10 @@ function normalizeOpenAIJsonSchema(schema) {
952
966
  }
953
967
  const normalizedSchema2 = { ...schema2 };
954
968
  delete normalizedSchema2.propertyNames;
969
+ if (normalizedSchema2.pattern != null && containsRegexLookaround(normalizedSchema2.pattern)) {
970
+ delete normalizedSchema2.pattern;
971
+ removedLookaroundPattern = true;
972
+ }
955
973
  if (normalizedSchema2.properties != null) {
956
974
  normalizedSchema2.properties = normalizeSchemaRecord(
957
975
  normalizedSchema2.properties
@@ -1030,6 +1048,39 @@ function normalizeOpenAIJsonSchema(schema) {
1030
1048
  return typeof definition === "boolean" ? definition : normalizeSchema(definition);
1031
1049
  }
1032
1050
  }
1051
+ function containsRegexLookaround(pattern) {
1052
+ let escaped = false;
1053
+ let inCharacterClass = false;
1054
+ for (let index = 0; index < pattern.length; index++) {
1055
+ const character = pattern[index];
1056
+ if (escaped) {
1057
+ escaped = false;
1058
+ continue;
1059
+ }
1060
+ if (character === "\\") {
1061
+ escaped = true;
1062
+ continue;
1063
+ }
1064
+ if (character === "[") {
1065
+ inCharacterClass = true;
1066
+ continue;
1067
+ }
1068
+ if (character === "]") {
1069
+ inCharacterClass = false;
1070
+ continue;
1071
+ }
1072
+ if (!inCharacterClass && character === "(" && pattern[index + 1] === "?") {
1073
+ const lookaroundPrefix = pattern[index + 2];
1074
+ if (lookaroundPrefix === "=" || lookaroundPrefix === "!") {
1075
+ return true;
1076
+ }
1077
+ if (lookaroundPrefix === "<" && (pattern[index + 3] === "=" || pattern[index + 3] === "!")) {
1078
+ return true;
1079
+ }
1080
+ }
1081
+ }
1082
+ return false;
1083
+ }
1033
1084
 
1034
1085
  // src/chat/openai-chat-prepare-tools.ts
1035
1086
  function prepareChatTools({
@@ -1326,7 +1377,7 @@ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
1326
1377
  };
1327
1378
  }
1328
1379
  async doGenerate(options) {
1329
- var _a2, _b, _c, _d, _e, _f, _g;
1380
+ var _a2, _b, _c, _d, _e, _f, _g, _h;
1330
1381
  const { args: body, warnings } = await this.getArgs(options);
1331
1382
  const {
1332
1383
  responseHeaders,
@@ -1354,11 +1405,11 @@ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
1354
1405
  });
1355
1406
  }
1356
1407
  const content = [];
1357
- const text = choice.message.content;
1408
+ const text = choice.message.content != null && choice.message.content.length > 0 ? choice.message.content : (_c = choice.message.audio) == null ? void 0 : _c.transcript;
1358
1409
  if (text != null && text.length > 0) {
1359
1410
  content.push({ type: "text", text });
1360
1411
  }
1361
- for (const toolCall of (_c = choice.message.tool_calls) != null ? _c : []) {
1412
+ for (const toolCall of (_d = choice.message.tool_calls) != null ? _d : []) {
1362
1413
  content.push({
1363
1414
  type: "tool-call",
1364
1415
  toolCallId: toolCall.id || generateId(),
@@ -1366,7 +1417,7 @@ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
1366
1417
  input: toolCall.function.arguments
1367
1418
  });
1368
1419
  }
1369
- for (const annotation of (_d = choice.message.annotations) != null ? _d : []) {
1420
+ for (const annotation of (_e = choice.message.annotations) != null ? _e : []) {
1370
1421
  content.push({
1371
1422
  type: "source",
1372
1423
  sourceType: "url",
@@ -1375,7 +1426,7 @@ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
1375
1426
  title: annotation.url_citation.title
1376
1427
  });
1377
1428
  }
1378
- const completionTokenDetails = (_e = response.usage) == null ? void 0 : _e.completion_tokens_details;
1429
+ const completionTokenDetails = (_f = response.usage) == null ? void 0 : _f.completion_tokens_details;
1379
1430
  const providerMetadata = { openai: {} };
1380
1431
  if ((completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens) != null) {
1381
1432
  providerMetadata.openai.acceptedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens;
@@ -1383,14 +1434,14 @@ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
1383
1434
  if ((completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens) != null) {
1384
1435
  providerMetadata.openai.rejectedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens;
1385
1436
  }
1386
- if (((_f = choice.logprobs) == null ? void 0 : _f.content) != null) {
1437
+ if (((_g = choice.logprobs) == null ? void 0 : _g.content) != null) {
1387
1438
  providerMetadata.openai.logprobs = choice.logprobs.content;
1388
1439
  }
1389
1440
  return {
1390
1441
  content,
1391
1442
  finishReason: {
1392
1443
  unified: mapOpenAIFinishReason(choice.finish_reason),
1393
- raw: (_g = choice.finish_reason) != null ? _g : void 0
1444
+ raw: (_h = choice.finish_reason) != null ? _h : void 0
1394
1445
  },
1395
1446
  usage: convertOpenAIChatUsage(response.usage),
1396
1447
  request: { body },
@@ -6152,7 +6203,9 @@ var openaiResponsesReasoningModelIds = [
6152
6203
  "gpt-5.6-luna",
6153
6204
  "gpt-5.6-sol",
6154
6205
  "gpt-5.6-terra",
6155
- "gpt-6-astra"
6206
+ "gpt-6-astra",
6207
+ "gpt-6-luna",
6208
+ "gpt-6-sol"
6156
6209
  ];
6157
6210
  var openaiResponsesModelIds = [
6158
6211
  "gpt-4.1",
@@ -10852,7 +10905,7 @@ var openaiSpeechModelOptionsSchema = lazySchema27(
10852
10905
  () => zodSchema27(
10853
10906
  z33.object({
10854
10907
  instructions: z33.string().nullish(),
10855
- speed: z33.number().min(0.25).max(4).default(1).nullish()
10908
+ speed: z33.number().min(0.25).max(4).nullish()
10856
10909
  })
10857
10910
  )
10858
10911
  );
@@ -10885,6 +10938,7 @@ var OpenAISpeechModel = class _OpenAISpeechModel {
10885
10938
  language,
10886
10939
  providerOptions
10887
10940
  }) {
10941
+ var _a2, _b;
10888
10942
  const warnings = [];
10889
10943
  const openAIOptions = await parseProviderOptions9({
10890
10944
  provider: "openai",
@@ -10911,7 +10965,10 @@ var OpenAISpeechModel = class _OpenAISpeechModel {
10911
10965
  }
10912
10966
  }
10913
10967
  if (openAIOptions) {
10914
- const speechModelOptions = {};
10968
+ const speechModelOptions = {
10969
+ speed: (_a2 = openAIOptions.speed) != null ? _a2 : void 0,
10970
+ instructions: (_b = openAIOptions.instructions) != null ? _b : void 0
10971
+ };
10915
10972
  for (const key in speechModelOptions) {
10916
10973
  const value = speechModelOptions[key];
10917
10974
  if (value !== void 0) {
@@ -11967,7 +12024,7 @@ var OpenAISkills = class {
11967
12024
  };
11968
12025
 
11969
12026
  // src/version.ts
11970
- var VERSION = true ? "4.0.71" : "0.0.0-test";
12027
+ var VERSION = true ? "4.0.73" : "0.0.0-test";
11971
12028
 
11972
12029
  // src/openai-provider.ts
11973
12030
  function createOpenAI(options = {}) {