@ai-sdk/openai-compatible 3.0.0-beta.3 → 3.0.0-beta.31

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,232 @@
1
1
  # @ai-sdk/openai-compatible
2
2
 
3
+ ## 3.0.0-beta.31
4
+
5
+ ### Patch Changes
6
+
7
+ - bfb756d: patch - send content: null instead of empty string for tool-only assistant messages
8
+ - Updated dependencies [2e98477]
9
+ - @ai-sdk/provider-utils@5.0.0-beta.26
10
+
11
+ ## 3.0.0-beta.30
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [eea8d98]
16
+ - @ai-sdk/provider-utils@5.0.0-beta.25
17
+
18
+ ## 3.0.0-beta.29
19
+
20
+ ### Patch Changes
21
+
22
+ - f807e45: Extract shared `StreamingToolCallTracker` class into `@ai-sdk/provider-utils` to deduplicate streaming tool call handling across OpenAI-compatible providers. Also adds missing `generateId()` fallback for `toolCallId` in Alibaba's `doGenerate` path and ensures all providers finalize unfinished tool calls during stream flush.
23
+ - Updated dependencies [f807e45]
24
+ - @ai-sdk/provider-utils@5.0.0-beta.24
25
+
26
+ ## 3.0.0-beta.28
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [350ea38]
31
+ - @ai-sdk/provider-utils@5.0.0-beta.23
32
+
33
+ ## 3.0.0-beta.27
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [083947b]
38
+ - @ai-sdk/provider-utils@5.0.0-beta.22
39
+
40
+ ## 3.0.0-beta.26
41
+
42
+ ### Patch Changes
43
+
44
+ - Updated dependencies [add1126]
45
+ - @ai-sdk/provider-utils@5.0.0-beta.21
46
+
47
+ ## 3.0.0-beta.25
48
+
49
+ ### Patch Changes
50
+
51
+ - b3976a2: Add workflow serialization support to all provider models.
52
+
53
+ **`@ai-sdk/provider-utils`:** New `serializeModel()` helper that extracts only serializable properties from a model instance, filtering out functions and objects containing functions. Third-party provider authors can use this to add workflow support to their own models.
54
+
55
+ **All providers:** `headers` is now optional in provider config types. This is non-breaking — existing code that passes `headers` continues to work. Custom provider implementations that construct model configs manually can now omit `headers`, which is useful when models are deserialized from a workflow step boundary where auth is provided separately.
56
+
57
+ All provider model classes now include `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` static methods, enabling them to cross workflow step boundaries without serialization errors.
58
+
59
+ - Updated dependencies [b3976a2]
60
+ - Updated dependencies [ff5eba1]
61
+ - @ai-sdk/provider-utils@5.0.0-beta.20
62
+ - @ai-sdk/provider@4.0.0-beta.12
63
+
64
+ ## 3.0.0-beta.24
65
+
66
+ ### Major Changes
67
+
68
+ - ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
69
+
70
+ ### Patch Changes
71
+
72
+ - Updated dependencies [ef992f8]
73
+ - @ai-sdk/provider@4.0.0-beta.11
74
+ - @ai-sdk/provider-utils@5.0.0-beta.19
75
+
76
+ ## 3.0.0-beta.23
77
+
78
+ ### Patch Changes
79
+
80
+ - 90e2d8a: chore: fix unused vars not being flagged by our lint tooling
81
+ - Updated dependencies [90e2d8a]
82
+ - @ai-sdk/provider-utils@5.0.0-beta.18
83
+
84
+ ## 3.0.0-beta.22
85
+
86
+ ### Patch Changes
87
+
88
+ - Updated dependencies [3ae1786]
89
+ - @ai-sdk/provider-utils@5.0.0-beta.17
90
+
91
+ ## 3.0.0-beta.21
92
+
93
+ ### Patch Changes
94
+
95
+ - Updated dependencies [176466a]
96
+ - @ai-sdk/provider@4.0.0-beta.10
97
+ - @ai-sdk/provider-utils@5.0.0-beta.16
98
+
99
+ ## 3.0.0-beta.20
100
+
101
+ ### Patch Changes
102
+
103
+ - Updated dependencies [e311194]
104
+ - @ai-sdk/provider@4.0.0-beta.9
105
+ - @ai-sdk/provider-utils@5.0.0-beta.15
106
+
107
+ ## 3.0.0-beta.19
108
+
109
+ ### Patch Changes
110
+
111
+ - 008271d: feat(openai-compatible): emit warning when using kebab-case instead of camelCase
112
+ - Updated dependencies [34bd95d]
113
+ - Updated dependencies [008271d]
114
+ - @ai-sdk/provider@4.0.0-beta.8
115
+ - @ai-sdk/provider-utils@5.0.0-beta.14
116
+
117
+ ## 3.0.0-beta.18
118
+
119
+ ### Patch Changes
120
+
121
+ - Updated dependencies [b0c2869]
122
+ - Updated dependencies [7e26e81]
123
+ - @ai-sdk/provider-utils@5.0.0-beta.13
124
+
125
+ ## 3.0.0-beta.17
126
+
127
+ ### Patch Changes
128
+
129
+ - 816ff67: fix(openai-compatible): honor camelCase providerOptions key in chat and completion models
130
+
131
+ ## 3.0.0-beta.16
132
+
133
+ ### Patch Changes
134
+
135
+ - Updated dependencies [46d1149]
136
+ - @ai-sdk/provider-utils@5.0.0-beta.12
137
+
138
+ ## 3.0.0-beta.15
139
+
140
+ ### Patch Changes
141
+
142
+ - 6fd51c0: fix(provider): preserve error type prefix in getErrorMessage
143
+ - Updated dependencies [6fd51c0]
144
+ - @ai-sdk/provider-utils@5.0.0-beta.11
145
+ - @ai-sdk/provider@4.0.0-beta.7
146
+
147
+ ## 3.0.0-beta.14
148
+
149
+ ### Patch Changes
150
+
151
+ - c29a26f: feat(provider): add support for provider references and uploading files as supported per provider
152
+ - Updated dependencies [c29a26f]
153
+ - @ai-sdk/provider-utils@5.0.0-beta.10
154
+ - @ai-sdk/provider@4.0.0-beta.6
155
+
156
+ ## 3.0.0-beta.13
157
+
158
+ ### Patch Changes
159
+
160
+ - 38fc777: Add AI Gateway hint to provider READMEs
161
+
162
+ ## 3.0.0-beta.12
163
+
164
+ ### Patch Changes
165
+
166
+ - Updated dependencies [2e17091]
167
+ - @ai-sdk/provider-utils@5.0.0-beta.9
168
+
169
+ ## 3.0.0-beta.11
170
+
171
+ ### Patch Changes
172
+
173
+ - Updated dependencies [986c6fd]
174
+ - Updated dependencies [493295c]
175
+ - @ai-sdk/provider-utils@5.0.0-beta.8
176
+
177
+ ## 3.0.0-beta.10
178
+
179
+ ### Patch Changes
180
+
181
+ - Updated dependencies [1f509d4]
182
+ - @ai-sdk/provider-utils@5.0.0-beta.7
183
+ - @ai-sdk/provider@4.0.0-beta.5
184
+
185
+ ## 3.0.0-beta.9
186
+
187
+ ### Patch Changes
188
+
189
+ - 74d520f: feat: migrate providers to support new top-level `reasoning` parameter
190
+
191
+ ## 3.0.0-beta.8
192
+
193
+ ### Patch Changes
194
+
195
+ - Updated dependencies [3887c70]
196
+ - @ai-sdk/provider-utils@5.0.0-beta.6
197
+ - @ai-sdk/provider@4.0.0-beta.4
198
+
199
+ ## 3.0.0-beta.7
200
+
201
+ ### Patch Changes
202
+
203
+ - Updated dependencies [776b617]
204
+ - @ai-sdk/provider-utils@5.0.0-beta.5
205
+ - @ai-sdk/provider@4.0.0-beta.3
206
+
207
+ ## 3.0.0-beta.6
208
+
209
+ ### Patch Changes
210
+
211
+ - Updated dependencies [61753c3]
212
+ - @ai-sdk/provider-utils@5.0.0-beta.4
213
+
214
+ ## 3.0.0-beta.5
215
+
216
+ ### Patch Changes
217
+
218
+ - Updated dependencies [f7d4f01]
219
+ - @ai-sdk/provider-utils@5.0.0-beta.3
220
+ - @ai-sdk/provider@4.0.0-beta.2
221
+
222
+ ## 3.0.0-beta.4
223
+
224
+ ### Patch Changes
225
+
226
+ - Updated dependencies [5c2a5a2]
227
+ - @ai-sdk/provider@4.0.0-beta.1
228
+ - @ai-sdk/provider-utils@5.0.0-beta.2
229
+
3
230
  ## 3.0.0-beta.3
4
231
 
5
232
  ### Patch Changes
@@ -293,13 +520,13 @@
293
520
  Before
294
521
 
295
522
  ```ts
296
- model.textEmbeddingModel('my-model-id');
523
+ model.textEmbeddingModel("my-model-id");
297
524
  ```
298
525
 
299
526
  After
300
527
 
301
528
  ```ts
302
- model.embeddingModel('my-model-id');
529
+ model.embeddingModel("my-model-id");
303
530
  ```
304
531
 
305
532
  - 2625a04: feat(openai); update spec for mcp approval
@@ -514,13 +741,13 @@
514
741
  Before
515
742
 
516
743
  ```ts
517
- model.textEmbeddingModel('my-model-id');
744
+ model.textEmbeddingModel("my-model-id");
518
745
  ```
519
746
 
520
747
  After
521
748
 
522
749
  ```ts
523
- model.embeddingModel('my-model-id');
750
+ model.embeddingModel("my-model-id");
524
751
  ```
525
752
 
526
753
  - Updated dependencies [8d9e8ad]
@@ -956,7 +1183,7 @@
956
1183
 
957
1184
  ```js
958
1185
  await generateImage({
959
- model: luma.image('photon-flash-1', {
1186
+ model: luma.image("photon-flash-1", {
960
1187
  maxImagesPerCall: 5,
961
1188
  pollIntervalMillis: 500,
962
1189
  }),
@@ -969,7 +1196,7 @@
969
1196
 
970
1197
  ```js
971
1198
  await generateImage({
972
- model: luma.image('photon-flash-1'),
1199
+ model: luma.image("photon-flash-1"),
973
1200
  prompt,
974
1201
  n: 10,
975
1202
  maxImagesPerCall: 5,
@@ -1238,7 +1465,7 @@
1238
1465
 
1239
1466
  ```js
1240
1467
  await generateImage({
1241
- model: luma.image('photon-flash-1', {
1468
+ model: luma.image("photon-flash-1", {
1242
1469
  maxImagesPerCall: 5,
1243
1470
  pollIntervalMillis: 500,
1244
1471
  }),
@@ -1251,7 +1478,7 @@
1251
1478
 
1252
1479
  ```js
1253
1480
  await generateImage({
1254
- model: luma.image('photon-flash-1'),
1481
+ model: luma.image("photon-flash-1"),
1255
1482
  prompt,
1256
1483
  n: 10,
1257
1484
  maxImagesPerCall: 5,
package/README.md CHANGED
@@ -4,6 +4,8 @@ This package provides a foundation for implementing providers that expose an Ope
4
4
 
5
5
  The primary [OpenAI provider](../openai/README.md) is more feature-rich, including OpenAI-specific experimental and legacy features. This package offers a lighter-weight alternative focused on core OpenAI-compatible functionality.
6
6
 
7
+ > **Deploying to Vercel?** With Vercel's AI Gateway you can access hundreds of models from any provider — no additional packages, API keys, or extra cost. [Get started with AI Gateway](https://vercel.com/ai-gateway).
8
+
7
9
  ## Setup
8
10
 
9
11
  The provider is available in the `@ai-sdk/openai-compatible` module. You can install it with
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import * as _ai_sdk_provider from '@ai-sdk/provider';
1
2
  import { SharedV4ProviderMetadata, LanguageModelV4, LanguageModelV4CallOptions, LanguageModelV4GenerateResult, LanguageModelV4StreamResult, EmbeddingModelV4, ImageModelV4, ProviderV4 } from '@ai-sdk/provider';
2
- import { FetchFunction } from '@ai-sdk/provider-utils';
3
+ import { FetchFunction, WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from '@ai-sdk/provider-utils';
3
4
  import { ZodType, z } from 'zod/v4';
4
5
 
5
6
  declare const openaiCompatibleErrorDataSchema: z.ZodObject<{
@@ -71,7 +72,7 @@ type MetadataExtractor = {
71
72
 
72
73
  type OpenAICompatibleChatConfig = {
73
74
  provider: string;
74
- headers: () => Record<string, string | undefined>;
75
+ headers?: () => Record<string, string | undefined>;
75
76
  url: (options: {
76
77
  modelId: string;
77
78
  path: string;
@@ -99,9 +100,17 @@ declare class OpenAICompatibleChatLanguageModel implements LanguageModelV4 {
99
100
  readonly specificationVersion = "v4";
100
101
  readonly supportsStructuredOutputs: boolean;
101
102
  readonly modelId: OpenAICompatibleChatModelId;
102
- private readonly config;
103
+ protected readonly config: OpenAICompatibleChatConfig;
103
104
  private readonly failedResponseHandler;
104
105
  private readonly chunkSchema;
106
+ static [WORKFLOW_SERIALIZE](model: OpenAICompatibleChatLanguageModel): {
107
+ modelId: string;
108
+ config: _ai_sdk_provider.JSONObject;
109
+ };
110
+ static [WORKFLOW_DESERIALIZE](options: {
111
+ modelId: string;
112
+ config: OpenAICompatibleChatConfig;
113
+ }): OpenAICompatibleChatLanguageModel;
105
114
  constructor(modelId: OpenAICompatibleChatModelId, config: OpenAICompatibleChatConfig);
106
115
  get provider(): string;
107
116
  private get providerOptionsName();
@@ -124,7 +133,7 @@ type OpenAICompatibleLanguageModelCompletionOptions = z.infer<typeof openaiCompa
124
133
  type OpenAICompatibleCompletionConfig = {
125
134
  provider: string;
126
135
  includeUsage?: boolean;
127
- headers: () => Record<string, string | undefined>;
136
+ headers?: () => Record<string, string | undefined>;
128
137
  url: (options: {
129
138
  modelId: string;
130
139
  path: string;
@@ -142,6 +151,14 @@ declare class OpenAICompatibleCompletionLanguageModel implements LanguageModelV4
142
151
  private readonly config;
143
152
  private readonly failedResponseHandler;
144
153
  private readonly chunkSchema;
154
+ static [WORKFLOW_SERIALIZE](model: OpenAICompatibleCompletionLanguageModel): {
155
+ modelId: string;
156
+ config: _ai_sdk_provider.JSONObject;
157
+ };
158
+ static [WORKFLOW_DESERIALIZE](options: {
159
+ modelId: string;
160
+ config: OpenAICompatibleCompletionConfig;
161
+ }): OpenAICompatibleCompletionLanguageModel;
145
162
  constructor(modelId: OpenAICompatibleCompletionModelId, config: OpenAICompatibleCompletionConfig);
146
163
  get provider(): string;
147
164
  private get providerOptionsName();
@@ -172,7 +189,7 @@ type OpenAICompatibleEmbeddingConfig = {
172
189
  modelId: string;
173
190
  path: string;
174
191
  }) => string;
175
- headers: () => Record<string, string | undefined>;
192
+ headers?: () => Record<string, string | undefined>;
176
193
  fetch?: FetchFunction;
177
194
  errorStructure?: ProviderErrorStructure<any>;
178
195
  };
@@ -183,6 +200,14 @@ declare class OpenAICompatibleEmbeddingModel implements EmbeddingModelV4 {
183
200
  get provider(): string;
184
201
  get maxEmbeddingsPerCall(): number;
185
202
  get supportsParallelCalls(): boolean;
203
+ static [WORKFLOW_SERIALIZE](model: OpenAICompatibleEmbeddingModel): {
204
+ modelId: string;
205
+ config: _ai_sdk_provider.JSONObject;
206
+ };
207
+ static [WORKFLOW_DESERIALIZE](options: {
208
+ modelId: string;
209
+ config: OpenAICompatibleEmbeddingConfig;
210
+ }): OpenAICompatibleEmbeddingModel;
186
211
  constructor(modelId: OpenAICompatibleEmbeddingModelId, config: OpenAICompatibleEmbeddingConfig);
187
212
  private get providerOptionsName();
188
213
  doEmbed({ values, headers, abortSignal, providerOptions, }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>>;
@@ -192,7 +217,7 @@ type OpenAICompatibleImageModelId = string;
192
217
 
193
218
  type OpenAICompatibleImageModelConfig = {
194
219
  provider: string;
195
- headers: () => Record<string, string | undefined>;
220
+ headers?: () => Record<string, string | undefined>;
196
221
  url: (options: {
197
222
  modelId: string;
198
223
  path: string;
@@ -213,6 +238,14 @@ declare class OpenAICompatibleImageModel implements ImageModelV4 {
213
238
  * The provider options key used to extract provider-specific options.
214
239
  */
215
240
  private get providerOptionsKey();
241
+ static [WORKFLOW_SERIALIZE](model: OpenAICompatibleImageModel): {
242
+ modelId: string;
243
+ config: _ai_sdk_provider.JSONObject;
244
+ };
245
+ static [WORKFLOW_DESERIALIZE](options: {
246
+ modelId: string;
247
+ config: OpenAICompatibleImageModelConfig;
248
+ }): OpenAICompatibleImageModel;
216
249
  constructor(modelId: OpenAICompatibleImageModelId, config: OpenAICompatibleImageModelConfig);
217
250
  private getArgs;
218
251
  doGenerate({ prompt, n, size, aspectRatio, seed, providerOptions, headers, abortSignal, files, mask, }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>>;