@ai-sdk/openai-compatible 1.0.0-canary.2 → 1.0.0-canary.3

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,17 @@
1
1
  # @ai-sdk/openai-compatible
2
2
 
3
+ ## 1.0.0-canary.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [a166433]
8
+ - Updated dependencies [abf9a79]
9
+ - Updated dependencies [9f95b35]
10
+ - Updated dependencies [0a87932]
11
+ - Updated dependencies [6dc848c]
12
+ - @ai-sdk/provider-utils@3.0.0-canary.3
13
+ - @ai-sdk/provider@2.0.0-canary.2
14
+
3
15
  ## 1.0.0-canary.2
4
16
 
5
17
  ### Patch Changes
package/dist/index.js CHANGED
@@ -30,12 +30,11 @@ module.exports = __toCommonJS(src_exports);
30
30
 
31
31
  // src/openai-compatible-chat-language-model.ts
32
32
  var import_provider3 = require("@ai-sdk/provider");
33
- var import_provider_utils2 = require("@ai-sdk/provider-utils");
33
+ var import_provider_utils = require("@ai-sdk/provider-utils");
34
34
  var import_zod2 = require("zod");
35
35
 
36
36
  // src/convert-to-openai-compatible-chat-messages.ts
37
37
  var import_provider = require("@ai-sdk/provider");
38
- var import_provider_utils = require("@ai-sdk/provider-utils");
39
38
  function getOpenAIMetadata(message) {
40
39
  var _a, _b;
41
40
  return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
@@ -61,25 +60,26 @@ function convertToOpenAICompatibleChatMessages(prompt) {
61
60
  messages.push({
62
61
  role: "user",
63
62
  content: content.map((part) => {
64
- var _a;
65
63
  const partMetadata = getOpenAIMetadata(part);
66
64
  switch (part.type) {
67
65
  case "text": {
68
66
  return { type: "text", text: part.text, ...partMetadata };
69
67
  }
70
- case "image": {
71
- return {
72
- type: "image_url",
73
- image_url: {
74
- url: part.image instanceof URL ? part.image.toString() : `data:${(_a = part.mimeType) != null ? _a : "image/jpeg"};base64,${(0, import_provider_utils.convertUint8ArrayToBase64)(part.image)}`
75
- },
76
- ...partMetadata
77
- };
78
- }
79
68
  case "file": {
80
- throw new import_provider.UnsupportedFunctionalityError({
81
- functionality: "File content parts in user messages"
82
- });
69
+ if (part.mediaType.startsWith("image/")) {
70
+ const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
71
+ return {
72
+ type: "image_url",
73
+ image_url: {
74
+ url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${part.data}`
75
+ },
76
+ ...partMetadata
77
+ };
78
+ } else {
79
+ throw new import_provider.UnsupportedFunctionalityError({
80
+ functionality: `file part media type ${part.mediaType}`
81
+ });
82
+ }
83
83
  }
84
84
  }
85
85
  }),
@@ -235,7 +235,7 @@ function prepareTools({
235
235
  default: {
236
236
  const _exhaustiveCheck = type;
237
237
  throw new import_provider2.UnsupportedFunctionalityError({
238
- functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`
238
+ functionality: `tool choice type: ${_exhaustiveCheck}`
239
239
  });
240
240
  }
241
241
  }
@@ -254,7 +254,7 @@ var OpenAICompatibleChatLanguageModel = class {
254
254
  this.chunkSchema = createOpenAICompatibleChatChunkSchema(
255
255
  errorStructure.errorSchema
256
256
  );
257
- this.failedResponseHandler = (0, import_provider_utils2.createJsonErrorResponseHandler)(errorStructure);
257
+ this.failedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)(errorStructure);
258
258
  this.supportsStructuredOutputs = (_b = config.supportsStructuredOutputs) != null ? _b : false;
259
259
  }
260
260
  get defaultObjectGenerationMode() {
@@ -341,15 +341,15 @@ var OpenAICompatibleChatLanguageModel = class {
341
341
  responseHeaders,
342
342
  value: responseBody,
343
343
  rawValue: rawResponse
344
- } = await (0, import_provider_utils2.postJsonToApi)({
344
+ } = await (0, import_provider_utils.postJsonToApi)({
345
345
  url: this.config.url({
346
346
  path: "/chat/completions",
347
347
  modelId: this.modelId
348
348
  }),
349
- headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
349
+ headers: (0, import_provider_utils.combineHeaders)(this.config.headers(), options.headers),
350
350
  body: args,
351
351
  failedResponseHandler: this.failedResponseHandler,
352
- successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)(
352
+ successfulResponseHandler: (0, import_provider_utils.createJsonResponseHandler)(
353
353
  OpenAICompatibleChatResponseSchema
354
354
  ),
355
355
  abortSignal: options.abortSignal,
@@ -384,7 +384,7 @@ var OpenAICompatibleChatLanguageModel = class {
384
384
  var _a2;
385
385
  return {
386
386
  toolCallType: "function",
387
- toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0, import_provider_utils2.generateId)(),
387
+ toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0, import_provider_utils.generateId)(),
388
388
  toolName: toolCall.function.name,
389
389
  args: toolCall.function.arguments
390
390
  };
@@ -460,18 +460,18 @@ var OpenAICompatibleChatLanguageModel = class {
460
460
  const { args, warnings } = this.getArgs({ ...options });
461
461
  const body = JSON.stringify({ ...args, stream: true });
462
462
  const metadataExtractor = (_a = this.config.metadataExtractor) == null ? void 0 : _a.createStreamExtractor();
463
- const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
463
+ const { responseHeaders, value: response } = await (0, import_provider_utils.postJsonToApi)({
464
464
  url: this.config.url({
465
465
  path: "/chat/completions",
466
466
  modelId: this.modelId
467
467
  }),
468
- headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
468
+ headers: (0, import_provider_utils.combineHeaders)(this.config.headers(), options.headers),
469
469
  body: {
470
470
  ...args,
471
471
  stream: true
472
472
  },
473
473
  failedResponseHandler: this.failedResponseHandler,
474
- successfulResponseHandler: (0, import_provider_utils2.createEventSourceResponseHandler)(
474
+ successfulResponseHandler: (0, import_provider_utils.createEventSourceResponseHandler)(
475
475
  this.chunkSchema
476
476
  ),
477
477
  abortSignal: options.abortSignal,
@@ -605,11 +605,11 @@ var OpenAICompatibleChatLanguageModel = class {
605
605
  argsTextDelta: toolCall2.function.arguments
606
606
  });
607
607
  }
608
- if ((0, import_provider_utils2.isParsableJson)(toolCall2.function.arguments)) {
608
+ if ((0, import_provider_utils.isParsableJson)(toolCall2.function.arguments)) {
609
609
  controller.enqueue({
610
610
  type: "tool-call",
611
611
  toolCallType: "function",
612
- toolCallId: (_e = toolCall2.id) != null ? _e : (0, import_provider_utils2.generateId)(),
612
+ toolCallId: (_e = toolCall2.id) != null ? _e : (0, import_provider_utils.generateId)(),
613
613
  toolName: toolCall2.function.name,
614
614
  args: toolCall2.function.arguments
615
615
  });
@@ -632,11 +632,11 @@ var OpenAICompatibleChatLanguageModel = class {
632
632
  toolName: toolCall.function.name,
633
633
  argsTextDelta: (_i = toolCallDelta.function.arguments) != null ? _i : ""
634
634
  });
635
- if (((_j = toolCall.function) == null ? void 0 : _j.name) != null && ((_k = toolCall.function) == null ? void 0 : _k.arguments) != null && (0, import_provider_utils2.isParsableJson)(toolCall.function.arguments)) {
635
+ if (((_j = toolCall.function) == null ? void 0 : _j.name) != null && ((_k = toolCall.function) == null ? void 0 : _k.arguments) != null && (0, import_provider_utils.isParsableJson)(toolCall.function.arguments)) {
636
636
  controller.enqueue({
637
637
  type: "tool-call",
638
638
  toolCallType: "function",
639
- toolCallId: (_l = toolCall.id) != null ? _l : (0, import_provider_utils2.generateId)(),
639
+ toolCallId: (_l = toolCall.id) != null ? _l : (0, import_provider_utils.generateId)(),
640
640
  toolName: toolCall.function.name,
641
641
  args: toolCall.function.arguments
642
642
  });
@@ -752,7 +752,7 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_zod2.z.union
752
752
  ]);
753
753
 
754
754
  // src/openai-compatible-completion-language-model.ts
755
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
755
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
756
756
  var import_zod3 = require("zod");
757
757
 
758
758
  // src/convert-to-openai-compatible-completion-prompt.ts
@@ -787,13 +787,8 @@ function convertToOpenAICompatibleCompletionPrompt({
787
787
  case "text": {
788
788
  return part.text;
789
789
  }
790
- case "image": {
791
- throw new import_provider4.UnsupportedFunctionalityError({
792
- functionality: "images"
793
- });
794
- }
795
790
  }
796
- }).join("");
791
+ }).filter(Boolean).join("");
797
792
  text += `${user}:
798
793
  ${userMessage}
799
794
 
@@ -853,7 +848,7 @@ var OpenAICompatibleCompletionLanguageModel = class {
853
848
  this.chunkSchema = createOpenAICompatibleCompletionChunkSchema(
854
849
  errorStructure.errorSchema
855
850
  );
856
- this.failedResponseHandler = (0, import_provider_utils3.createJsonErrorResponseHandler)(errorStructure);
851
+ this.failedResponseHandler = (0, import_provider_utils2.createJsonErrorResponseHandler)(errorStructure);
857
852
  }
858
853
  get provider() {
859
854
  return this.config.provider;
@@ -928,15 +923,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
928
923
  responseHeaders,
929
924
  value: response,
930
925
  rawValue: rawResponse
931
- } = await (0, import_provider_utils3.postJsonToApi)({
926
+ } = await (0, import_provider_utils2.postJsonToApi)({
932
927
  url: this.config.url({
933
928
  path: "/completions",
934
929
  modelId: this.modelId
935
930
  }),
936
- headers: (0, import_provider_utils3.combineHeaders)(this.config.headers(), options.headers),
931
+ headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
937
932
  body: args,
938
933
  failedResponseHandler: this.failedResponseHandler,
939
- successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
934
+ successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)(
940
935
  openaiCompatibleCompletionResponseSchema
941
936
  ),
942
937
  abortSignal: options.abortSignal,
@@ -964,15 +959,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
964
959
  ...args,
965
960
  stream: true
966
961
  };
967
- const { responseHeaders, value: response } = await (0, import_provider_utils3.postJsonToApi)({
962
+ const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
968
963
  url: this.config.url({
969
964
  path: "/completions",
970
965
  modelId: this.modelId
971
966
  }),
972
- headers: (0, import_provider_utils3.combineHeaders)(this.config.headers(), options.headers),
967
+ headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
973
968
  body,
974
969
  failedResponseHandler: this.failedResponseHandler,
975
- successfulResponseHandler: (0, import_provider_utils3.createEventSourceResponseHandler)(
970
+ successfulResponseHandler: (0, import_provider_utils2.createEventSourceResponseHandler)(
976
971
  this.chunkSchema
977
972
  ),
978
973
  abortSignal: options.abortSignal,
@@ -1079,7 +1074,7 @@ var createOpenAICompatibleCompletionChunkSchema = (errorSchema) => import_zod3.z
1079
1074
 
1080
1075
  // src/openai-compatible-embedding-model.ts
1081
1076
  var import_provider5 = require("@ai-sdk/provider");
1082
- var import_provider_utils4 = require("@ai-sdk/provider-utils");
1077
+ var import_provider_utils3 = require("@ai-sdk/provider-utils");
1083
1078
  var import_zod4 = require("zod");
1084
1079
  var OpenAICompatibleEmbeddingModel = class {
1085
1080
  constructor(modelId, settings, config) {
@@ -1113,12 +1108,12 @@ var OpenAICompatibleEmbeddingModel = class {
1113
1108
  values
1114
1109
  });
1115
1110
  }
1116
- const { responseHeaders, value: response } = await (0, import_provider_utils4.postJsonToApi)({
1111
+ const { responseHeaders, value: response } = await (0, import_provider_utils3.postJsonToApi)({
1117
1112
  url: this.config.url({
1118
1113
  path: "/embeddings",
1119
1114
  modelId: this.modelId
1120
1115
  }),
1121
- headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), headers),
1116
+ headers: (0, import_provider_utils3.combineHeaders)(this.config.headers(), headers),
1122
1117
  body: {
1123
1118
  model: this.modelId,
1124
1119
  input: values,
@@ -1126,10 +1121,10 @@ var OpenAICompatibleEmbeddingModel = class {
1126
1121
  dimensions: this.settings.dimensions,
1127
1122
  user: this.settings.user
1128
1123
  },
1129
- failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)(
1124
+ failedResponseHandler: (0, import_provider_utils3.createJsonErrorResponseHandler)(
1130
1125
  (_a = this.config.errorStructure) != null ? _a : defaultOpenAICompatibleErrorStructure
1131
1126
  ),
1132
- successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
1127
+ successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
1133
1128
  openaiTextEmbeddingResponseSchema
1134
1129
  ),
1135
1130
  abortSignal,
@@ -1148,7 +1143,7 @@ var openaiTextEmbeddingResponseSchema = import_zod4.z.object({
1148
1143
  });
1149
1144
 
1150
1145
  // src/openai-compatible-image-model.ts
1151
- var import_provider_utils5 = require("@ai-sdk/provider-utils");
1146
+ var import_provider_utils4 = require("@ai-sdk/provider-utils");
1152
1147
  var import_zod5 = require("zod");
1153
1148
  var OpenAICompatibleImageModel = class {
1154
1149
  constructor(modelId, settings, config) {
@@ -1187,12 +1182,12 @@ var OpenAICompatibleImageModel = class {
1187
1182
  warnings.push({ type: "unsupported-setting", setting: "seed" });
1188
1183
  }
1189
1184
  const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
1190
- const { value: response, responseHeaders } = await (0, import_provider_utils5.postJsonToApi)({
1185
+ const { value: response, responseHeaders } = await (0, import_provider_utils4.postJsonToApi)({
1191
1186
  url: this.config.url({
1192
1187
  path: "/images/generations",
1193
1188
  modelId: this.modelId
1194
1189
  }),
1195
- headers: (0, import_provider_utils5.combineHeaders)(this.config.headers(), headers),
1190
+ headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), headers),
1196
1191
  body: {
1197
1192
  model: this.modelId,
1198
1193
  prompt,
@@ -1202,10 +1197,10 @@ var OpenAICompatibleImageModel = class {
1202
1197
  response_format: "b64_json",
1203
1198
  ...this.settings.user ? { user: this.settings.user } : {}
1204
1199
  },
1205
- failedResponseHandler: (0, import_provider_utils5.createJsonErrorResponseHandler)(
1200
+ failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)(
1206
1201
  (_e = this.config.errorStructure) != null ? _e : defaultOpenAICompatibleErrorStructure
1207
1202
  ),
1208
- successfulResponseHandler: (0, import_provider_utils5.createJsonResponseHandler)(
1203
+ successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
1209
1204
  openaiCompatibleImageResponseSchema
1210
1205
  ),
1211
1206
  abortSignal,
@@ -1227,9 +1222,9 @@ var openaiCompatibleImageResponseSchema = import_zod5.z.object({
1227
1222
  });
1228
1223
 
1229
1224
  // src/openai-compatible-provider.ts
1230
- var import_provider_utils6 = require("@ai-sdk/provider-utils");
1225
+ var import_provider_utils5 = require("@ai-sdk/provider-utils");
1231
1226
  function createOpenAICompatible(options) {
1232
- const baseURL = (0, import_provider_utils6.withoutTrailingSlash)(options.baseURL);
1227
+ const baseURL = (0, import_provider_utils5.withoutTrailingSlash)(options.baseURL);
1233
1228
  const providerName = options.name;
1234
1229
  const getHeaders = () => ({
1235
1230
  ...options.apiKey && { Authorization: `Bearer ${options.apiKey}` },