@ai-sdk/gateway 4.0.86 → 4.0.88
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 +19 -0
- package/README.md +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +45 -1
- package/dist/index.js.map +1 -1
- package/docs/00-ai-gateway.mdx +20 -5
- package/package.json +2 -2
- package/src/gateway-batch.ts +49 -1
- package/src/gateway-language-model-settings.ts +7 -0
- package/src/gateway-provider-options.ts +3 -2
- package/src/gateway-speech-model-settings.ts +0 -3
- package/src/gateway-transcription-model-settings.ts +0 -1
package/docs/00-ai-gateway.mdx
CHANGED
|
@@ -220,7 +220,7 @@ the failure without inspecting the Gateway's serialized error payload.
|
|
|
220
220
|
</Note>
|
|
221
221
|
|
|
222
222
|
AI Gateway supports durable text batches through `experimental_startBatch`,
|
|
223
|
-
`experimental_getBatchStatus`, and `
|
|
223
|
+
`experimental_getBatchStatus`, `experimental_getBatchResults`, and `experimental_cancelBatch`. See
|
|
224
224
|
[Batch](/docs/ai-sdk-core/batch) for the provider-agnostic workflow,
|
|
225
225
|
and the [AI Gateway batch processing guide](https://vercel.com/docs/ai-gateway/models-and-providers/batch-processing)
|
|
226
226
|
for supported models, limits, and Gateway-specific behavior.
|
|
@@ -414,6 +414,19 @@ Each request specifies its `type` and `model`. AI Gateway currently requires
|
|
|
414
414
|
every text request in a batch to use the same model and throws before submission
|
|
415
415
|
when the models differ.
|
|
416
416
|
|
|
417
|
+
### Cancelling a batch
|
|
418
|
+
|
|
419
|
+
Pass the batch reference returned by `experimental_startBatch` to request cancellation:
|
|
420
|
+
|
|
421
|
+
```ts
|
|
422
|
+
import { gateway } from '@ai-sdk/gateway';
|
|
423
|
+
import { experimental_cancelBatch as cancelBatch } from 'ai';
|
|
424
|
+
|
|
425
|
+
await cancelBatch({ provider: gateway, batch });
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
Cancellation is asynchronous. Continue checking `experimental_getBatchStatus` until the batch is terminal, then read `experimental_getBatchResults` for any partial results. A batch may finish before cancellation takes effect, and successful requests remain billable. Cancellation returns acknowledgement metadata, not confirmation that provider execution has stopped.
|
|
429
|
+
|
|
417
430
|
## Reranking Models
|
|
418
431
|
|
|
419
432
|
You can create reranking models using the `rerankingModel` method on the provider instance:
|
|
@@ -736,7 +749,7 @@ import { generateText, tool } from 'ai';
|
|
|
736
749
|
import { z } from 'zod';
|
|
737
750
|
|
|
738
751
|
const { text } = await generateText({
|
|
739
|
-
model: 'xai/grok-4.
|
|
752
|
+
model: 'xai/grok-4.7',
|
|
740
753
|
prompt: 'What is the weather like in San Francisco?',
|
|
741
754
|
tools: {
|
|
742
755
|
getWeather: tool({
|
|
@@ -1377,15 +1390,17 @@ The following gateway provider options are available:
|
|
|
1377
1390
|
|
|
1378
1391
|
The unique identifier for the entity against which quota is tracked. Used for quota management and enforcement purposes.
|
|
1379
1392
|
|
|
1380
|
-
- **has** _Array<'implicit-caching' | 'vision'>_
|
|
1393
|
+
- **has** _Array<'implicit-caching' | 'reasoning' | 'tool-use' | 'vision'>_
|
|
1381
1394
|
|
|
1382
1395
|
Restricts routing to provider models that have all of the specified capabilities. Applies to both BYOK and system credentials, since the capability is a property of the model rather than the credential. If no provider model for the requested model satisfies the capabilities, the request fails. Unsupported values are rejected.
|
|
1383
1396
|
|
|
1384
1397
|
Supported capabilities:
|
|
1385
1398
|
- `'implicit-caching'` — models that perform automatic (implicit) prompt caching.
|
|
1399
|
+
- `'reasoning'` — models that support reasoning.
|
|
1400
|
+
- `'tool-use'` — models that support tool calling.
|
|
1386
1401
|
- `'vision'` — models that accept image input.
|
|
1387
1402
|
|
|
1388
|
-
Example: `has: ['implicit-caching']` will only route to models that support implicit caching. Example: `has: ['vision']` will only route to models that accept image input.
|
|
1403
|
+
Example: `has: ['implicit-caching']` will only route to models that support implicit caching. Example: `has: ['vision']` will only route to models that accept image input. Example: `has: ['tool-use']` will only route to models that support tool calling.
|
|
1389
1404
|
|
|
1390
1405
|
- **providerTimeouts** _object_
|
|
1391
1406
|
|
|
@@ -1523,7 +1538,7 @@ const { text } = await generateText({
|
|
|
1523
1538
|
|
|
1524
1539
|
#### Filtering by Model Capability
|
|
1525
1540
|
|
|
1526
|
-
Set `has` to restrict routing to provider models that have the specified capabilities. This applies to both BYOK and system credentials, since the capability is a property of the model rather than the credential. `'implicit-caching'` limits routing to models that perform automatic prompt caching,
|
|
1541
|
+
Set `has` to restrict routing to provider models that have the specified capabilities. This applies to both BYOK and system credentials, since the capability is a property of the model rather than the credential. `'implicit-caching'` limits routing to models that perform automatic prompt caching, `'vision'` limits routing to models that accept image input, `'reasoning'` limits routing to models that support reasoning, and `'tool-use'` limits routing to models that support tool calling. If no provider model for the requested model satisfies the capabilities, the request fails.
|
|
1527
1542
|
|
|
1528
1543
|
```ts
|
|
1529
1544
|
import type { GatewayProviderOptions } from '@ai-sdk/gateway';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/gateway",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.88",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@ai-sdk/provider": "4.0.17",
|
|
34
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
34
|
+
"@ai-sdk/provider-utils": "5.0.45",
|
|
35
35
|
"@vercel/oidc": "3.2.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
package/src/gateway-batch.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
InvalidArgumentError,
|
|
3
3
|
UnsupportedFunctionalityError,
|
|
4
4
|
type Experimental_BatchV4 as BatchV4,
|
|
5
|
+
type Experimental_BatchV4CancelResult as BatchV4CancelResult,
|
|
5
6
|
type Experimental_BatchV4ItemResult as BatchV4ItemResult,
|
|
6
7
|
type Experimental_BatchV4OperationOptions as BatchV4OperationOptions,
|
|
7
8
|
type Experimental_BatchV4StartResult as BatchV4StartResult,
|
|
@@ -213,7 +214,54 @@ export class GatewayBatch implements BatchV4<{ text: GatewayModelId }> {
|
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
/** Requests cancellation; status and partial results remain separate reads. */
|
|
218
|
+
async doCancelBatch({
|
|
219
|
+
batchId,
|
|
220
|
+
headers,
|
|
221
|
+
abortSignal,
|
|
222
|
+
}: BatchV4OperationOptions): Promise<BatchV4CancelResult> {
|
|
223
|
+
const resolvedHeaders = this.config.headers
|
|
224
|
+
? await resolve(this.config.headers)
|
|
225
|
+
: undefined;
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
const { value: responseBody } = await postJsonToApi({
|
|
229
|
+
url: this.getBatchUrl('cancel'),
|
|
230
|
+
headers: combineHeaders(
|
|
231
|
+
resolvedHeaders,
|
|
232
|
+
headers,
|
|
233
|
+
await resolve(this.config.o11yHeaders),
|
|
234
|
+
),
|
|
235
|
+
body: { batchId },
|
|
236
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
237
|
+
gatewayBatchStatusResponseSchema,
|
|
238
|
+
),
|
|
239
|
+
failedResponseHandler: createJsonErrorResponseHandler({
|
|
240
|
+
errorSchema: z.any(),
|
|
241
|
+
errorToMessage: data => getErrorMessage(data) ?? 'unknown error',
|
|
242
|
+
}),
|
|
243
|
+
...(abortSignal && { abortSignal }),
|
|
244
|
+
fetch: this.config.fetch,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
return {
|
|
248
|
+
...(responseBody.providerMetadata != null && {
|
|
249
|
+
providerMetadata:
|
|
250
|
+
responseBody.providerMetadata as SharedV4ProviderMetadata,
|
|
251
|
+
}),
|
|
252
|
+
};
|
|
253
|
+
} catch (error) {
|
|
254
|
+
if (isAbortOrTimeoutError(error)) {
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
257
|
+
throw await asGatewayError(
|
|
258
|
+
error,
|
|
259
|
+
await parseAuthMethod(resolvedHeaders ?? {}),
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private getBatchUrl(path: 'cancel' | 'results' | 'start' | 'status') {
|
|
217
265
|
return `${this.config.baseURL}/batch/${path}`;
|
|
218
266
|
}
|
|
219
267
|
}
|
|
@@ -29,6 +29,7 @@ export type GatewayModelId =
|
|
|
29
29
|
| 'alibaba/qwen3.8-flash'
|
|
30
30
|
| 'alibaba/qwen3.8-max'
|
|
31
31
|
| 'alibaba/qwen3.8-max-0902'
|
|
32
|
+
| 'alibaba/qwen3.8-omni-flash'
|
|
32
33
|
| 'amazon/nova-2-lite'
|
|
33
34
|
| 'amazon/nova-lite'
|
|
34
35
|
| 'amazon/nova-micro'
|
|
@@ -124,6 +125,7 @@ export type GatewayModelId =
|
|
|
124
125
|
| 'mistral/mistral-medium-3.5'
|
|
125
126
|
| 'mistral/mistral-nemo'
|
|
126
127
|
| 'mistral/mistral-small'
|
|
128
|
+
| 'mixedbread/toast-1'
|
|
127
129
|
| 'moonshotai/kimi-k2'
|
|
128
130
|
| 'moonshotai/kimi-k2-thinking'
|
|
129
131
|
| 'moonshotai/kimi-k2.5'
|
|
@@ -203,6 +205,8 @@ export type GatewayModelId =
|
|
|
203
205
|
| 'perplexity/sonar-reasoning-pro'
|
|
204
206
|
| 'poolside/laguna-s-2.1'
|
|
205
207
|
| 'poolside/laguna-s-2.1-free'
|
|
208
|
+
| 'quiverai/arrow-2'
|
|
209
|
+
| 'quiverai/arrow-2-telos'
|
|
206
210
|
| 'sakana/fugu-max'
|
|
207
211
|
| 'sakana/fugu-ultra'
|
|
208
212
|
| 'sakana/fugu-ultra-v2'
|
|
@@ -218,9 +222,11 @@ export type GatewayModelId =
|
|
|
218
222
|
| 'spacexai/grok-4.3'
|
|
219
223
|
| 'spacexai/grok-4.5'
|
|
220
224
|
| 'spacexai/grok-4.6'
|
|
225
|
+
| 'spacexai/grok-4.7'
|
|
221
226
|
| 'spacexai/grok-build-0.1'
|
|
222
227
|
| 'stepfun/step-3.5-flash'
|
|
223
228
|
| 'stepfun/step-3.7-flash'
|
|
229
|
+
| 'stepfun/step-5-preview'
|
|
224
230
|
| 'tencent/hy-mt2-lite'
|
|
225
231
|
| 'tencent/hy-mt2-plus'
|
|
226
232
|
| 'tencent/hy-mt2-pro'
|
|
@@ -245,5 +251,6 @@ export type GatewayModelId =
|
|
|
245
251
|
| 'zai/glm-5.3'
|
|
246
252
|
| 'zai/glm-5.3-fast'
|
|
247
253
|
| 'zai/glm-5.3-flash'
|
|
254
|
+
| 'zai/glm-5.3-flashx'
|
|
248
255
|
| 'zai/glm-5v-turbo'
|
|
249
256
|
| (string & {});
|
|
@@ -17,9 +17,10 @@ export type GatewayProviderOptions = {
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Restrict routing to models that have all of the given capabilities.
|
|
20
|
-
* Currently supports `'implicit-caching'`
|
|
20
|
+
* Currently supports `'implicit-caching'`, `'reasoning'`, `'tool-use'`, and
|
|
21
|
+
* `'vision'` (image input).
|
|
21
22
|
*/
|
|
22
|
-
has?: Array<'implicit-caching' | 'vision'>;
|
|
23
|
+
has?: Array<'implicit-caching' | 'reasoning' | 'tool-use' | 'vision'>;
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Idempotency key for `experimental_startBatch`: retries with the same
|