@ai-sdk/openai-compatible 3.0.81 → 3.0.83

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,30 @@
1
1
  # @ai-sdk/openai-compatible
2
2
 
3
+ ## 3.0.83
4
+
5
+ ### Patch Changes
6
+
7
+ - 4ae6986: fix(openai-compatible): preserve string tool call arguments and safely serialize BigInt and circular structures in tool calls and outputs
8
+ - 5006d83: fix(openai-compatible): send `reasoningEffort: null` as `"reasoning_effort": null`, and stop an unset `reasoningEffort` from overwriting a raw `reasoning_effort` provider option
9
+ - Updated dependencies [51ca5b7]
10
+ - Updated dependencies [dc6f1c3]
11
+ - Updated dependencies [4ae6986]
12
+ - @ai-sdk/provider-utils@5.0.73
13
+
14
+ ## 3.0.82
15
+
16
+ ### Patch Changes
17
+
18
+ - 7716e18: Support promises and synchronous or asynchronous callbacks in provider API key and token settings. Resolve credentials per authenticated request while preserving existing authentication behavior and synchronous credential serialization.
19
+
20
+ The experimental OpenAI Live `getServerWebSocketConfig()` method can now resolve asynchronously. Await its result before using the connection settings.
21
+
22
+ - Updated dependencies [7716e18]
23
+ - Updated dependencies [5c247e9]
24
+ - Updated dependencies [dcd2f8d]
25
+ - @ai-sdk/provider-utils@5.0.72
26
+ - @ai-sdk/provider@4.0.35
27
+
3
28
  ## 3.0.81
4
29
 
5
30
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { EmbeddingModelV4, ImageModelV4, LanguageModelV4, LanguageModelV4CallOptions, LanguageModelV4GenerateResult, LanguageModelV4StreamResult, LanguageModelV4Usage, ProviderV4, SharedV4ProviderMetadata, SharedV4Warning } from "@ai-sdk/provider";
2
- import { FetchFunction, InferSchema, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@ai-sdk/provider-utils";
2
+ import { FetchFunction, InferSchema, Resolvable, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@ai-sdk/provider-utils";
3
3
  import { ZodType, z } from "zod/v4";
4
4
  //#region src/openai-compatible-error.d.ts
5
5
  declare const openaiCompatibleErrorDataSchema: z.ZodObject<{
@@ -21,7 +21,7 @@ type ProviderErrorStructure<T> = {
21
21
  type OpenAICompatibleChatModelId = string;
22
22
  declare const openaiCompatibleLanguageModelChatOptions: z.ZodObject<{
23
23
  user: z.ZodOptional<z.ZodString>;
24
- reasoningEffort: z.ZodOptional<z.ZodString>;
24
+ reasoningEffort: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
25
  textVerbosity: z.ZodOptional<z.ZodString>;
26
26
  strictJsonSchema: z.ZodOptional<z.ZodBoolean>;
27
27
  }, z.core.$strip>;
@@ -74,7 +74,7 @@ type MetadataExtractor = {
74
74
  //#region src/chat/openai-compatible-chat-language-model.d.ts
75
75
  type OpenAICompatibleChatConfig = {
76
76
  provider: string;
77
- headers?: () => Record<string, string | undefined>;
77
+ headers?: Resolvable<Record<string, string | undefined>>;
78
78
  url: (options: {
79
79
  modelId: string;
80
80
  path: string;
@@ -171,7 +171,7 @@ type OpenAICompatibleLanguageModelCompletionOptions = InferSchema<typeof openaiC
171
171
  type OpenAICompatibleCompletionConfig = {
172
172
  provider: string;
173
173
  includeUsage?: boolean;
174
- headers?: () => Record<string, string | undefined>;
174
+ headers?: Resolvable<Record<string, string | undefined>>;
175
175
  url: (options: {
176
176
  modelId: string;
177
177
  path: string;
@@ -229,7 +229,7 @@ type OpenAICompatibleEmbeddingConfig = {
229
229
  modelId: string;
230
230
  path: string;
231
231
  }) => string;
232
- headers?: () => Record<string, string | undefined>;
232
+ headers?: Resolvable<Record<string, string | undefined>>;
233
233
  fetch?: FetchFunction;
234
234
  errorStructure?: ProviderErrorStructure<any>;
235
235
  };
@@ -259,7 +259,7 @@ type OpenAICompatibleImageModelId = string;
259
259
  //#region src/image/openai-compatible-image-model.d.ts
260
260
  type OpenAICompatibleImageModelConfig = {
261
261
  provider: string;
262
- headers?: () => Record<string, string | undefined>;
262
+ headers?: Resolvable<Record<string, string | undefined>>;
263
263
  url: (options: {
264
264
  modelId: string;
265
265
  path: string;
@@ -338,8 +338,9 @@ interface OpenAICompatibleProviderSettings {
338
338
  * API key for authenticating requests. If specified, adds an `Authorization`
339
339
  * header to request headers with the value `Bearer <apiKey>`. This will be added
340
340
  * before any headers potentially specified in the `headers` option.
341
+ * A function is called before each request and may return a promise.
341
342
  */
342
- apiKey?: string;
343
+ apiKey?: Resolvable<string>;
343
344
  /**
344
345
  * Optional custom headers to include in requests. These will be added to request headers
345
346
  * after any headers potentially added by use of the `apiKey` option.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/openai-compatible-error.ts","../src/chat/openai-compatible-chat-language-model-options.ts","../src/chat/openai-compatible-metadata-extractor.ts","../src/chat/openai-compatible-chat-language-model.ts","../src/completion/openai-compatible-completion-language-model-options.ts","../src/completion/openai-compatible-completion-language-model.ts","../src/embedding/openai-compatible-embedding-model-options.ts","../src/embedding/openai-compatible-embedding-model.ts","../src/image/openai-compatible-image-settings.ts","../src/image/openai-compatible-image-model.ts","../src/image/openai-compatible-image-model-options.ts","../src/openai-compatible-provider.ts","../src/version.ts"],"mappings":";;;;cACa,iCAA+B,EAAA;;;;;;;GAW1C,EAAA,KAAA;KAEU,4BAA4B,EAAE,aACjC;KAGG,uBAAuB;EACjC,aAAa,QAAQ;EACrB,iBAAiB,OAAO;EACxB,eAAe,UAAU,UAAU,QAAQ;;;;KCnBjC;cAEC,0CAAwC,EAAA;;;;;GAyBnD,EAAA,KAAA;KAEU,2CAA2C,EAAE,aAChD;;;;;;;;KCzBG;;;;;;;;;EASV,oBACE;IAEA;QACI,QAAQ;;;;;;;;EASd;;;;;;;IAOE,aAAa;;;;;;;;IASb,iBAAiB;;;;;KCkBT;EACV;EACA,gBAAgB;EAChB,MAAM;IAAW;IAAiB;;EAClC,QAAQ;EACR;EACA,iBAAiB;EACjB,oBAAoB;;;;EAKpB;;;;EAKA;;;;EAKA,sBAAsB;;;;;;;EAQtB,wBACE,MAAM,qBACN,WAAW,sBACR;;;;;;;EAQL,gBAAgB;IACd,WAAW,QACT;IAGF,UAAU;;;;;;EAOZ,gBACE,OAAO,EAAE,MAAM,kBAAkB,uCAC9B;;qBASM,6CAA6C;WAC/C;WAEA;WAEA,SAAS;qBACC,QAAQ;mBACV;mBACA;UAET,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B;IACA,QAAQ;MACT;EAQC,YAAA,SAAS,6BACT,QAAQ;MAgBN;cAIQ;MAIR,iBAAa,eAAA,YAAA,YAAA,eAAA;UAIT;UAOA;UASM;EAkKR,WACJ,SAAS,6BACR,QAAQ;EAwGL,SACJ,SAAS,6BACR,QAAQ;;cAqVP,wCAAgC,EAAA,YAAA,EAAA,YAAA,EAAA;;;;;;;;;;;;GAmBxB,EAAA,KAAA;;;KCvzBF;cAEC,iFAA8C;;cAA9C;;;;KA8BD,iDAAiD,mBACpD;;;KCIJ;EACH;EACA;EACA,gBAAgB;EAChB,MAAM;IAAW;IAAiB;;EAClC,QAAQ;EACR,iBAAiB;;;;EAKjB,sBAAsB;;qBAGX,mDAAmD;WACrD;WAEA,SAAS;mBACD;mBACA;mBACA;UAET,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B;IACA,QAAQ;MACT;EAQC,YAAA,SAAS,mCACT,QAAQ;MAcN;cAIQ;MAIR,iBAAa,eAAA,YAAA,YAAA,eAAA;UAIH;EA8FR,WACJ,SAAS,6BACR,QAAQ;EA+CL,SACJ,SAAS,6BACR,QAAQ;;;;KCzPD;cAEC,wEAAqC;;;;KAkBtC,wCAAwC,mBAC3C;;;KCCJ;;;;EAIH;;;;EAKA;EAEA;EACA,MAAM;IAAW;IAAiB;;EAClC,gBAAgB;EAChB,QAAQ;EACR,iBAAiB;;qBAGN,0CAA0C;WAC5C;WACA,SAAS;mBAED;MAEb;MAIA;MAIA;UAII,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B;IACA,QAAQ;MACT;EAKC,YAAA,SAAS,kCACT,QAAQ;cAME;EAIN,UACJ,QACA,YACA,SACA,aACA,mBACC,WAAW,kCAAkC,QAC9C,QAAQ,WAAW;;;;KClGX;;;KCuCA;EACV;EACA,gBAAgB;EAChB,MAAM;IAAW;IAAiB;;EAClC,QAAQ;EACR,iBAAiB;EACjB;IACE,oBAAoB;;;qBAIX,sCAAsC;WAgCtC,SAAS;mBACD;WAhCV;WACA;WACA;WACA;MAEL;;;;cAOQ;UAIJ,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B;IACA,QAAQ;MACT;EAKU,YAAA,SAAS,8BACD,QAAQ;UAGnB;EAeF,aACJ,QACA,GACA,MACA,aACA,MACA,iBACA,SACA,aACA,OACA,QACC,WAAW,iCAAiC,QAC7C,QAAQ,WAAW;UAwGP;;;;;;;;;cC7MH,oEAAiC;;;;;;;;KAuClC,oCAAoC,mBACvC;;;UC/BQ,yBACf,wCACA,8CACA,6CACA,iDACQ;GACP,SAAS,iBAAiB;EAE3B,cACE,SAAS,gBACT,SAAS,QAAQ,8BAChB;EAEH,UAAU,SAAS,iBAAiB;EAEpC,gBAAgB,SAAS,uBAAuB;EAEhD,eAAe,SAAS,sBAAsB;;;;EAK9C,mBAAmB,SAAS,sBAAsB;EAElD,WAAW,SAAS,kBAAkB;;UAGvB;;;;EAIf;;;;EAKA;;;;;;EAOA;;;;;EAMA,UAAU;;;;EAKV,cAAc;;;;;EAMd,QAAQ;;;;EAKR;;;;EAKA;;;;;;;EAQA;;;;;;;EAQA,uBAAuB;;;;;;EAOvB,oBAAoB;;;;EAKpB,gBAAgB;;;;;EAMhB,eAAe;;;;;wBAMD,uBACd,+BACA,qCACA,oCACA,gCAEA,SAAS,mCACR,yBACD,gBACA,sBACA,qBACA;;;qBC7IW"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/openai-compatible-error.ts","../src/chat/openai-compatible-chat-language-model-options.ts","../src/chat/openai-compatible-metadata-extractor.ts","../src/chat/openai-compatible-chat-language-model.ts","../src/completion/openai-compatible-completion-language-model-options.ts","../src/completion/openai-compatible-completion-language-model.ts","../src/embedding/openai-compatible-embedding-model-options.ts","../src/embedding/openai-compatible-embedding-model.ts","../src/image/openai-compatible-image-settings.ts","../src/image/openai-compatible-image-model.ts","../src/image/openai-compatible-image-model-options.ts","../src/openai-compatible-provider.ts","../src/version.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InvalidPromptError, InvalidResponseDataError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
2
- import { StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, convertToFormData, createBinaryResponseHandler, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createStatusCodeErrorResponseHandler, downloadBlob, generateId, getFromApi, getTopLevelMediaType, isCustomReasoning, lazySchema, parseProviderOptions, postFormDataToApi, postJsonToApi, resolveFullMediaType, resolveProviderReference, serializeModelOptions, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
2
+ import { StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, convertToFormData, createBinaryResponseHandler, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createStatusCodeErrorResponseHandler, downloadBlob, generateId, getFromApi, getTopLevelMediaType, isCustomReasoning, lazySchema, parseProviderOptions, postFormDataToApi, postJsonToApi, resolve, resolveFullMediaType, resolveProviderReference, resolveWith, secureJsonParse, serializeModelOptions, stringifyWithBigIntAndCycles, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
4
  //#region src/utils/to-camel-case.ts
5
5
  function toCamelCase(str) {
@@ -143,6 +143,15 @@ function convertToolContentPart(part, provider) {
143
143
  if (part.type === "custom") throw new UnsupportedFunctionalityError({ functionality: "custom tool content parts" });
144
144
  return convertToOpenAICompatibleContentPart(part, provider);
145
145
  }
146
+ function serializeToolCallArguments(input) {
147
+ if (typeof input === "string") try {
148
+ secureJsonParse(input);
149
+ return input;
150
+ } catch {
151
+ return JSON.stringify(input);
152
+ }
153
+ return stringifyWithBigIntAndCycles(input);
154
+ }
146
155
  function convertToOpenAICompatibleChatMessages(prompt, { provider = "openaiCompatible", providerOptionsKey = "google", supportsMultiPartToolContent = false } = {}) {
147
156
  const messages = [];
148
157
  for (const { role, content, ...message } of prompt) {
@@ -190,7 +199,7 @@ function convertToOpenAICompatibleChatMessages(prompt, { provider = "openaiCompa
190
199
  type: "function",
191
200
  function: {
192
201
  name: part.toolName,
193
- arguments: JSON.stringify(part.input)
202
+ arguments: serializeToolCallArguments(part.input)
194
203
  },
195
204
  ...partMetadata,
196
205
  ...thoughtSignature ? { extra_content: { google: { thought_signature: String(thoughtSignature) } } } : {}
@@ -223,9 +232,9 @@ function convertToOpenAICompatibleChatMessages(prompt, { provider = "openaiCompa
223
232
  break;
224
233
  case "json":
225
234
  case "error-json":
226
- contentValue = JSON.stringify(output.value);
235
+ contentValue = stringifyWithBigIntAndCycles(output.value);
227
236
  break;
228
- case "content": contentValue = supportsMultiPartToolContent ? output.value.map((part) => convertToolContentPart(part, provider)) : JSON.stringify(output.value);
237
+ case "content": contentValue = supportsMultiPartToolContent ? output.value.map((part) => convertToolContentPart(part, provider)) : stringifyWithBigIntAndCycles(output.value);
229
238
  }
230
239
  const toolResponseMetadata = getOpenAIMetadata(toolResponse);
231
240
  messages.push({
@@ -272,8 +281,11 @@ const openaiCompatibleLanguageModelChatOptions = z.object({
272
281
  user: z.string().optional(),
273
282
  /**
274
283
  * Reasoning effort for reasoning models. Defaults to `medium`.
284
+ *
285
+ * Set to `null` to send `"reasoning_effort": null`, for providers that treat
286
+ * an explicit `null` differently from an omitted field.
275
287
  */
276
- reasoningEffort: z.string().optional(),
288
+ reasoningEffort: z.string().nullish(),
277
289
  /**
278
290
  * Controls the verbosity of the generated text. Defaults to `medium`.
279
291
  */
@@ -417,6 +429,10 @@ var OpenAICompatibleChatLanguageModel = class OpenAICompatibleChatLanguageModel
417
429
  toolChoice
418
430
  });
419
431
  const metadataKey = resolveProviderOptionsKey(this.providerOptionsName, providerOptions);
432
+ const reasoningEffort = compatibleOptions.reasoningEffort !== void 0 ? compatibleOptions.reasoningEffort : isCustomReasoning(reasoning) ? this.config.mapReasoning != null ? this.config.mapReasoning({
433
+ reasoning,
434
+ warnings
435
+ }) : reasoning : void 0;
420
436
  return {
421
437
  metadataKey,
422
438
  args: {
@@ -442,10 +458,7 @@ var OpenAICompatibleChatLanguageModel = class OpenAICompatibleChatLanguageModel
442
458
  ...providerOptions?.[this.providerOptionsName],
443
459
  ...providerOptions?.[toCamelCase(this.providerOptionsName)]
444
460
  }).filter(([key]) => !Object.keys(openaiCompatibleLanguageModelChatOptions.shape).includes(key))),
445
- reasoning_effort: compatibleOptions.reasoningEffort ?? (isCustomReasoning(reasoning) ? this.config.mapReasoning != null ? this.config.mapReasoning({
446
- reasoning,
447
- warnings
448
- }) : reasoning : void 0),
461
+ ...reasoningEffort !== void 0 ? { reasoning_effort: reasoningEffort } : {},
449
462
  verbosity: compatibleOptions.textVerbosity,
450
463
  messages: convertToOpenAICompatibleChatMessages(prompt, {
451
464
  provider: this.providerOptionsName,
@@ -467,7 +480,7 @@ var OpenAICompatibleChatLanguageModel = class OpenAICompatibleChatLanguageModel
467
480
  path: "/chat/completions",
468
481
  modelId: this.modelId
469
482
  }),
470
- headers: combineHeaders(this.config.headers?.(), options.headers),
483
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
471
484
  body: transformedBody,
472
485
  failedResponseHandler: this.failedResponseHandler,
473
486
  successfulResponseHandler: createJsonResponseHandler(OpenAICompatibleChatResponseSchema),
@@ -533,7 +546,7 @@ var OpenAICompatibleChatLanguageModel = class OpenAICompatibleChatLanguageModel
533
546
  path: "/chat/completions",
534
547
  modelId: this.modelId
535
548
  }),
536
- headers: combineHeaders(this.config.headers?.(), options.headers),
549
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
537
550
  body,
538
551
  failedResponseHandler: this.failedResponseHandler,
539
552
  successfulResponseHandler: createEventSourceResponseHandler(this.chunkSchema),
@@ -1025,7 +1038,7 @@ var OpenAICompatibleCompletionLanguageModel = class OpenAICompatibleCompletionLa
1025
1038
  path: "/completions",
1026
1039
  modelId: this.modelId
1027
1040
  }),
1028
- headers: combineHeaders(this.config.headers?.(), options.headers),
1041
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
1029
1042
  body: args,
1030
1043
  failedResponseHandler: this.failedResponseHandler,
1031
1044
  successfulResponseHandler: createJsonResponseHandler(openaiCompatibleCompletionResponseSchema),
@@ -1066,7 +1079,7 @@ var OpenAICompatibleCompletionLanguageModel = class OpenAICompatibleCompletionLa
1066
1079
  path: "/completions",
1067
1080
  modelId: this.modelId
1068
1081
  }),
1069
- headers: combineHeaders(this.config.headers?.(), options.headers),
1082
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
1070
1083
  body,
1071
1084
  failedResponseHandler: this.failedResponseHandler,
1072
1085
  successfulResponseHandler: createEventSourceResponseHandler(this.chunkSchema),
@@ -1261,7 +1274,7 @@ var OpenAICompatibleEmbeddingModel = class OpenAICompatibleEmbeddingModel {
1261
1274
  path: "/embeddings",
1262
1275
  modelId: this.modelId
1263
1276
  }),
1264
- headers: combineHeaders(this.config.headers?.(), headers),
1277
+ headers: combineHeaders(await resolve(this.config.headers), headers),
1265
1278
  body: {
1266
1279
  model: this.modelId,
1267
1280
  input: values,
@@ -1349,7 +1362,7 @@ var OpenAICompatibleImageModel = class OpenAICompatibleImageModel {
1349
1362
  path: isEditing ? "/images/edits" : "/images/generations",
1350
1363
  modelId: this.modelId
1351
1364
  });
1352
- const requestHeaders = combineHeaders(this.config.headers?.(), headers);
1365
+ const requestHeaders = combineHeaders(await resolve(this.config.headers), headers);
1353
1366
  if (isEditing) {
1354
1367
  const { value: response, responseHeaders } = await postFormDataToApi({
1355
1368
  url,
@@ -1371,7 +1384,7 @@ var OpenAICompatibleImageModel = class OpenAICompatibleImageModel {
1371
1384
  return {
1372
1385
  images: await this.getImages(response.data, {
1373
1386
  url,
1374
- headers: requestHeaders,
1387
+ headers,
1375
1388
  abortSignal
1376
1389
  }),
1377
1390
  warnings,
@@ -1401,7 +1414,7 @@ var OpenAICompatibleImageModel = class OpenAICompatibleImageModel {
1401
1414
  return {
1402
1415
  images: await this.getImages(response.data, {
1403
1416
  url,
1404
- headers: requestHeaders,
1417
+ headers,
1405
1418
  abortSignal
1406
1419
  }),
1407
1420
  warnings,
@@ -1426,7 +1439,7 @@ var OpenAICompatibleImageModel = class OpenAICompatibleImageModel {
1426
1439
  validateUrl: true,
1427
1440
  trustedOrigin: options.url,
1428
1441
  credentialedOrigin: options.url,
1429
- headers: options.headers,
1442
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
1430
1443
  abortSignal: options.abortSignal,
1431
1444
  fetch: this.config.fetch,
1432
1445
  successfulResponseHandler: createBinaryResponseHandler(),
@@ -1461,7 +1474,7 @@ async function fileToBlob(file) {
1461
1474
  }
1462
1475
  //#endregion
1463
1476
  //#region src/version.ts
1464
- const VERSION = "3.0.81";
1477
+ const VERSION = "3.0.83";
1465
1478
  //#endregion
1466
1479
  //#region src/openai-compatible-provider.ts
1467
1480
  /**
@@ -1470,11 +1483,12 @@ const VERSION = "3.0.81";
1470
1483
  function createOpenAICompatible(options) {
1471
1484
  const baseURL = withoutTrailingSlash(options.baseURL);
1472
1485
  const providerName = options.name;
1473
- const headers = {
1474
- ...options.apiKey && { Authorization: `Bearer ${options.apiKey}` },
1475
- ...options.headers
1476
- };
1477
- const getHeaders = () => withUserAgentSuffix(headers, `ai-sdk-openai-compatible/${VERSION}`);
1486
+ const configuredApiKey = options.apiKey;
1487
+ const headers = { ...options.headers };
1488
+ const getHeaders = () => resolveWith(configuredApiKey, (apiKey) => withUserAgentSuffix({
1489
+ ...apiKey && { Authorization: `Bearer ${apiKey}` },
1490
+ ...headers
1491
+ }, `ai-sdk-openai-compatible/${VERSION}`));
1478
1492
  const getCommonModelConfig = (modelType) => ({
1479
1493
  provider: `${providerName}.${modelType}`,
1480
1494
  url: ({ path }) => {