@ai-sdk/openai-compatible 1.0.0-canary.7 → 1.0.0-canary.9
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 +21 -0
- package/dist/index.d.mts +11 -9
- package/dist/index.d.ts +11 -9
- package/dist/index.js +54 -36
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +54 -36
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +5 -7
- package/dist/internal/index.d.ts +5 -7
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# @ai-sdk/openai-compatible
|
2
2
|
|
3
|
+
## 1.0.0-canary.9
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- Updated dependencies [95857aa]
|
8
|
+
- Updated dependencies [7ea4132]
|
9
|
+
- @ai-sdk/provider@2.0.0-canary.8
|
10
|
+
- @ai-sdk/provider-utils@3.0.0-canary.9
|
11
|
+
|
12
|
+
## 1.0.0-canary.8
|
13
|
+
|
14
|
+
### Patch Changes
|
15
|
+
|
16
|
+
- b9a6121: fix (provider/openai-compatible): change tool_call type schema to nullish
|
17
|
+
- Updated dependencies [5d142ab]
|
18
|
+
- Updated dependencies [b6b43c7]
|
19
|
+
- Updated dependencies [8aa9e20]
|
20
|
+
- Updated dependencies [3795467]
|
21
|
+
- @ai-sdk/provider-utils@3.0.0-canary.8
|
22
|
+
- @ai-sdk/provider@2.0.0-canary.7
|
23
|
+
|
3
24
|
## 1.0.0-canary.7
|
4
25
|
|
5
26
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { SharedV2ProviderMetadata, LanguageModelV2,
|
1
|
+
import { SharedV2ProviderMetadata, LanguageModelV2, EmbeddingModelV2, ImageModelV1, ProviderV2 } from '@ai-sdk/provider';
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
3
3
|
import { z, ZodSchema } from 'zod';
|
4
4
|
|
@@ -109,15 +109,13 @@ type OpenAICompatibleChatConfig = {
|
|
109
109
|
errorStructure?: ProviderErrorStructure<any>;
|
110
110
|
metadataExtractor?: MetadataExtractor;
|
111
111
|
/**
|
112
|
-
Default object generation mode that should be used with this model when
|
113
|
-
no mode is specified. Should be the mode with the best results for this
|
114
|
-
model. `undefined` can be specified if object generation is not supported.
|
115
|
-
*/
|
116
|
-
defaultObjectGenerationMode?: LanguageModelV2ObjectGenerationMode;
|
117
|
-
/**
|
118
112
|
* Whether the model supports structured outputs.
|
119
113
|
*/
|
120
114
|
supportsStructuredOutputs?: boolean;
|
115
|
+
/**
|
116
|
+
* The supported URLs for the model.
|
117
|
+
*/
|
118
|
+
getSupportedUrls?: () => Promise<Record<string, RegExp[]>>;
|
121
119
|
};
|
122
120
|
declare class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
|
123
121
|
readonly specificationVersion = "v2";
|
@@ -127,9 +125,9 @@ declare class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
|
|
127
125
|
private readonly failedResponseHandler;
|
128
126
|
private readonly chunkSchema;
|
129
127
|
constructor(modelId: OpenAICompatibleChatModelId, config: OpenAICompatibleChatConfig);
|
130
|
-
get defaultObjectGenerationMode(): 'json' | 'tool' | undefined;
|
131
128
|
get provider(): string;
|
132
129
|
private get providerOptionsName();
|
130
|
+
getSupportedUrls(): Promise<Record<string, RegExp[]>>;
|
133
131
|
private getArgs;
|
134
132
|
doGenerate(options: Parameters<LanguageModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
|
135
133
|
doStream(options: Parameters<LanguageModelV2['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
|
@@ -179,10 +177,13 @@ type OpenAICompatibleCompletionConfig = {
|
|
179
177
|
}) => string;
|
180
178
|
fetch?: FetchFunction;
|
181
179
|
errorStructure?: ProviderErrorStructure<any>;
|
180
|
+
/**
|
181
|
+
* The supported URLs for the model.
|
182
|
+
*/
|
183
|
+
getSupportedUrls?: () => Promise<Record<string, RegExp[]>>;
|
182
184
|
};
|
183
185
|
declare class OpenAICompatibleCompletionLanguageModel implements LanguageModelV2 {
|
184
186
|
readonly specificationVersion = "v2";
|
185
|
-
readonly defaultObjectGenerationMode: undefined;
|
186
187
|
readonly modelId: OpenAICompatibleCompletionModelId;
|
187
188
|
private readonly config;
|
188
189
|
private readonly failedResponseHandler;
|
@@ -190,6 +191,7 @@ declare class OpenAICompatibleCompletionLanguageModel implements LanguageModelV2
|
|
190
191
|
constructor(modelId: OpenAICompatibleCompletionModelId, config: OpenAICompatibleCompletionConfig);
|
191
192
|
get provider(): string;
|
192
193
|
private get providerOptionsName();
|
194
|
+
getSupportedUrls(): Promise<Record<string, RegExp[]>>;
|
193
195
|
private getArgs;
|
194
196
|
doGenerate(options: Parameters<LanguageModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
|
195
197
|
doStream(options: Parameters<LanguageModelV2['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
|
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { SharedV2ProviderMetadata, LanguageModelV2,
|
1
|
+
import { SharedV2ProviderMetadata, LanguageModelV2, EmbeddingModelV2, ImageModelV1, ProviderV2 } from '@ai-sdk/provider';
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
3
3
|
import { z, ZodSchema } from 'zod';
|
4
4
|
|
@@ -109,15 +109,13 @@ type OpenAICompatibleChatConfig = {
|
|
109
109
|
errorStructure?: ProviderErrorStructure<any>;
|
110
110
|
metadataExtractor?: MetadataExtractor;
|
111
111
|
/**
|
112
|
-
Default object generation mode that should be used with this model when
|
113
|
-
no mode is specified. Should be the mode with the best results for this
|
114
|
-
model. `undefined` can be specified if object generation is not supported.
|
115
|
-
*/
|
116
|
-
defaultObjectGenerationMode?: LanguageModelV2ObjectGenerationMode;
|
117
|
-
/**
|
118
112
|
* Whether the model supports structured outputs.
|
119
113
|
*/
|
120
114
|
supportsStructuredOutputs?: boolean;
|
115
|
+
/**
|
116
|
+
* The supported URLs for the model.
|
117
|
+
*/
|
118
|
+
getSupportedUrls?: () => Promise<Record<string, RegExp[]>>;
|
121
119
|
};
|
122
120
|
declare class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
|
123
121
|
readonly specificationVersion = "v2";
|
@@ -127,9 +125,9 @@ declare class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
|
|
127
125
|
private readonly failedResponseHandler;
|
128
126
|
private readonly chunkSchema;
|
129
127
|
constructor(modelId: OpenAICompatibleChatModelId, config: OpenAICompatibleChatConfig);
|
130
|
-
get defaultObjectGenerationMode(): 'json' | 'tool' | undefined;
|
131
128
|
get provider(): string;
|
132
129
|
private get providerOptionsName();
|
130
|
+
getSupportedUrls(): Promise<Record<string, RegExp[]>>;
|
133
131
|
private getArgs;
|
134
132
|
doGenerate(options: Parameters<LanguageModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
|
135
133
|
doStream(options: Parameters<LanguageModelV2['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
|
@@ -179,10 +177,13 @@ type OpenAICompatibleCompletionConfig = {
|
|
179
177
|
}) => string;
|
180
178
|
fetch?: FetchFunction;
|
181
179
|
errorStructure?: ProviderErrorStructure<any>;
|
180
|
+
/**
|
181
|
+
* The supported URLs for the model.
|
182
|
+
*/
|
183
|
+
getSupportedUrls?: () => Promise<Record<string, RegExp[]>>;
|
182
184
|
};
|
183
185
|
declare class OpenAICompatibleCompletionLanguageModel implements LanguageModelV2 {
|
184
186
|
readonly specificationVersion = "v2";
|
185
|
-
readonly defaultObjectGenerationMode: undefined;
|
186
187
|
readonly modelId: OpenAICompatibleCompletionModelId;
|
187
188
|
private readonly config;
|
188
189
|
private readonly failedResponseHandler;
|
@@ -190,6 +191,7 @@ declare class OpenAICompatibleCompletionLanguageModel implements LanguageModelV2
|
|
190
191
|
constructor(modelId: OpenAICompatibleCompletionModelId, config: OpenAICompatibleCompletionConfig);
|
191
192
|
get provider(): string;
|
192
193
|
private get providerOptionsName();
|
194
|
+
getSupportedUrls(): Promise<Record<string, RegExp[]>>;
|
193
195
|
private getArgs;
|
194
196
|
doGenerate(options: Parameters<LanguageModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
|
195
197
|
doStream(options: Parameters<LanguageModelV2['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
|
package/dist/index.js
CHANGED
@@ -266,15 +266,16 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
266
266
|
this.failedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)(errorStructure);
|
267
267
|
this.supportsStructuredOutputs = (_b = config.supportsStructuredOutputs) != null ? _b : false;
|
268
268
|
}
|
269
|
-
get defaultObjectGenerationMode() {
|
270
|
-
return this.config.defaultObjectGenerationMode;
|
271
|
-
}
|
272
269
|
get provider() {
|
273
270
|
return this.config.provider;
|
274
271
|
}
|
275
272
|
get providerOptionsName() {
|
276
273
|
return this.config.provider.split(".")[0].trim();
|
277
274
|
}
|
275
|
+
async getSupportedUrls() {
|
276
|
+
var _a, _b, _c;
|
277
|
+
return (_c = (_b = (_a = this.config).getSupportedUrls) == null ? void 0 : _b.call(_a)) != null ? _c : {};
|
278
|
+
}
|
278
279
|
getArgs({
|
279
280
|
prompt,
|
280
281
|
maxOutputTokens,
|
@@ -376,16 +377,39 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
376
377
|
abortSignal: options.abortSignal,
|
377
378
|
fetch: this.config.fetch
|
378
379
|
});
|
379
|
-
const { messages: rawPrompt, ...rawSettings } = args;
|
380
380
|
const choice = responseBody.choices[0];
|
381
|
+
const content = [];
|
382
|
+
const text = choice.message.content;
|
383
|
+
if (text != null && text.length > 0) {
|
384
|
+
content.push({ type: "text", text });
|
385
|
+
}
|
386
|
+
const reasoning = choice.message.reasoning_content;
|
387
|
+
if (reasoning != null && reasoning.length > 0) {
|
388
|
+
content.push({
|
389
|
+
type: "reasoning",
|
390
|
+
reasoningType: "text",
|
391
|
+
text: reasoning
|
392
|
+
});
|
393
|
+
}
|
394
|
+
if (choice.message.tool_calls != null) {
|
395
|
+
for (const toolCall of choice.message.tool_calls) {
|
396
|
+
content.push({
|
397
|
+
type: "tool-call",
|
398
|
+
toolCallType: "function",
|
399
|
+
toolCallId: (_a = toolCall.id) != null ? _a : (0, import_provider_utils.generateId)(),
|
400
|
+
toolName: toolCall.function.name,
|
401
|
+
args: toolCall.function.arguments
|
402
|
+
});
|
403
|
+
}
|
404
|
+
}
|
381
405
|
const providerMetadata = {
|
382
406
|
[this.providerOptionsName]: {},
|
383
|
-
...(
|
407
|
+
...(_c = (_b = this.config.metadataExtractor) == null ? void 0 : _b.extractMetadata) == null ? void 0 : _c.call(_b, {
|
384
408
|
parsedBody: rawResponse
|
385
409
|
})
|
386
410
|
};
|
387
|
-
const completionTokenDetails = (
|
388
|
-
const promptTokenDetails = (
|
411
|
+
const completionTokenDetails = (_d = responseBody.usage) == null ? void 0 : _d.completion_tokens_details;
|
412
|
+
const promptTokenDetails = (_e = responseBody.usage) == null ? void 0 : _e.prompt_tokens_details;
|
389
413
|
if ((completionTokenDetails == null ? void 0 : completionTokenDetails.reasoning_tokens) != null) {
|
390
414
|
providerMetadata[this.providerOptionsName].reasoningTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.reasoning_tokens;
|
391
415
|
}
|
@@ -399,24 +423,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
399
423
|
providerMetadata[this.providerOptionsName].cachedPromptTokens = promptTokenDetails == null ? void 0 : promptTokenDetails.cached_tokens;
|
400
424
|
}
|
401
425
|
return {
|
402
|
-
|
403
|
-
reasoning: choice.message.reasoning_content ? [
|
404
|
-
{
|
405
|
-
type: "reasoning",
|
406
|
-
reasoningType: "text",
|
407
|
-
text: choice.message.reasoning_content
|
408
|
-
}
|
409
|
-
] : void 0,
|
410
|
-
toolCalls: (_e = choice.message.tool_calls) == null ? void 0 : _e.map((toolCall) => {
|
411
|
-
var _a2;
|
412
|
-
return {
|
413
|
-
type: "tool-call",
|
414
|
-
toolCallType: "function",
|
415
|
-
toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0, import_provider_utils.generateId)(),
|
416
|
-
toolName: toolCall.function.name,
|
417
|
-
args: toolCall.function.arguments
|
418
|
-
};
|
419
|
-
}),
|
426
|
+
content,
|
420
427
|
finishReason: mapOpenAICompatibleFinishReason(choice.finish_reason),
|
421
428
|
usage: {
|
422
429
|
inputTokens: (_g = (_f = responseBody.usage) == null ? void 0 : _f.prompt_tokens) != null ? _g : void 0,
|
@@ -473,6 +480,9 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
473
480
|
return {
|
474
481
|
stream: response.pipeThrough(
|
475
482
|
new TransformStream({
|
483
|
+
start(controller) {
|
484
|
+
controller.enqueue({ type: "stream-start", warnings });
|
485
|
+
},
|
476
486
|
// TODO we lost type safety on Chunk, most likely due to the error schema. MUST FIX
|
477
487
|
transform(chunk, controller) {
|
478
488
|
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
@@ -653,8 +663,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
653
663
|
})
|
654
664
|
),
|
655
665
|
request: { body },
|
656
|
-
response: { headers: responseHeaders }
|
657
|
-
warnings
|
666
|
+
response: { headers: responseHeaders }
|
658
667
|
};
|
659
668
|
}
|
660
669
|
};
|
@@ -711,7 +720,7 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_zod3.z.union
|
|
711
720
|
import_zod3.z.object({
|
712
721
|
index: import_zod3.z.number(),
|
713
722
|
id: import_zod3.z.string().nullish(),
|
714
|
-
type: import_zod3.z.literal("function").
|
723
|
+
type: import_zod3.z.literal("function").nullish(),
|
715
724
|
function: import_zod3.z.object({
|
716
725
|
name: import_zod3.z.string().nullish(),
|
717
726
|
arguments: import_zod3.z.string().nullish()
|
@@ -840,7 +849,6 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
840
849
|
// type inferred via constructor
|
841
850
|
constructor(modelId, config) {
|
842
851
|
this.specificationVersion = "v2";
|
843
|
-
this.defaultObjectGenerationMode = void 0;
|
844
852
|
var _a;
|
845
853
|
this.modelId = modelId;
|
846
854
|
this.config = config;
|
@@ -856,6 +864,10 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
856
864
|
get providerOptionsName() {
|
857
865
|
return this.config.provider.split(".")[0].trim();
|
858
866
|
}
|
867
|
+
async getSupportedUrls() {
|
868
|
+
var _a, _b, _c;
|
869
|
+
return (_c = (_b = (_a = this.config).getSupportedUrls) == null ? void 0 : _b.call(_a)) != null ? _c : {};
|
870
|
+
}
|
859
871
|
getArgs({
|
860
872
|
inputFormat,
|
861
873
|
prompt,
|
@@ -944,8 +956,12 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
944
956
|
fetch: this.config.fetch
|
945
957
|
});
|
946
958
|
const choice = response.choices[0];
|
959
|
+
const content = [];
|
960
|
+
if (choice.text != null && choice.text.length > 0) {
|
961
|
+
content.push({ type: "text", text: choice.text });
|
962
|
+
}
|
947
963
|
return {
|
948
|
-
|
964
|
+
content,
|
949
965
|
usage: {
|
950
966
|
inputTokens: (_b = (_a = response.usage) == null ? void 0 : _a.prompt_tokens) != null ? _b : void 0,
|
951
967
|
outputTokens: (_d = (_c = response.usage) == null ? void 0 : _c.completion_tokens) != null ? _d : void 0
|
@@ -989,6 +1005,9 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
989
1005
|
return {
|
990
1006
|
stream: response.pipeThrough(
|
991
1007
|
new TransformStream({
|
1008
|
+
start(controller) {
|
1009
|
+
controller.enqueue({ type: "stream-start", warnings });
|
1010
|
+
},
|
992
1011
|
transform(chunk, controller) {
|
993
1012
|
var _a, _b;
|
994
1013
|
if (!chunk.success) {
|
@@ -1036,8 +1055,7 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
1036
1055
|
})
|
1037
1056
|
),
|
1038
1057
|
request: { body },
|
1039
|
-
response: { headers: responseHeaders }
|
1040
|
-
warnings
|
1058
|
+
response: { headers: responseHeaders }
|
1041
1059
|
};
|
1042
1060
|
}
|
1043
1061
|
};
|
@@ -1283,10 +1301,10 @@ function createOpenAICompatible(options) {
|
|
1283
1301
|
fetch: options.fetch
|
1284
1302
|
});
|
1285
1303
|
const createLanguageModel = (modelId) => createChatModel(modelId);
|
1286
|
-
const createChatModel = (modelId) => new OpenAICompatibleChatLanguageModel(
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1304
|
+
const createChatModel = (modelId) => new OpenAICompatibleChatLanguageModel(
|
1305
|
+
modelId,
|
1306
|
+
getCommonModelConfig("chat")
|
1307
|
+
);
|
1290
1308
|
const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(
|
1291
1309
|
modelId,
|
1292
1310
|
getCommonModelConfig("completion")
|