@ai-sdk/gateway 4.0.0-beta.10 → 4.0.0-beta.108

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +738 -4
  2. package/dist/index.d.ts +314 -42
  3. package/dist/index.js +1369 -397
  4. package/dist/index.js.map +1 -1
  5. package/docs/00-ai-gateway.mdx +447 -61
  6. package/package.json +14 -14
  7. package/src/errors/as-gateway-error.ts +2 -1
  8. package/src/errors/create-gateway-error.ts +17 -3
  9. package/src/errors/gateway-authentication-error.ts +8 -5
  10. package/src/errors/gateway-error.ts +8 -0
  11. package/src/errors/gateway-failed-dependency-error.ts +35 -0
  12. package/src/errors/gateway-forbidden-error.ts +34 -0
  13. package/src/errors/gateway-response-error.ts +1 -1
  14. package/src/errors/index.ts +2 -0
  15. package/src/errors/parse-auth-method.ts +1 -2
  16. package/src/gateway-config.ts +1 -1
  17. package/src/gateway-embedding-model-settings.ts +1 -0
  18. package/src/gateway-embedding-model.ts +62 -15
  19. package/src/gateway-fetch-metadata.ts +51 -38
  20. package/src/gateway-generation-info.ts +149 -0
  21. package/src/gateway-headers.ts +3 -0
  22. package/src/gateway-image-model-settings.ts +8 -1
  23. package/src/gateway-image-model.ts +46 -21
  24. package/src/gateway-language-model-settings.ts +44 -26
  25. package/src/gateway-language-model.ts +72 -42
  26. package/src/gateway-model-entry.ts +15 -3
  27. package/src/gateway-provider-options.ts +50 -78
  28. package/src/gateway-provider.ts +239 -35
  29. package/src/gateway-realtime-auth.ts +126 -0
  30. package/src/gateway-realtime-model-settings.ts +1 -0
  31. package/src/gateway-realtime-model.ts +107 -0
  32. package/src/gateway-reranking-model-settings.ts +7 -0
  33. package/src/gateway-reranking-model.ts +142 -0
  34. package/src/gateway-speech-model-settings.ts +1 -0
  35. package/src/gateway-speech-model.ts +145 -0
  36. package/src/gateway-spend-report.ts +193 -0
  37. package/src/gateway-transcription-model-settings.ts +1 -0
  38. package/src/gateway-transcription-model.ts +155 -0
  39. package/src/gateway-video-model-settings.ts +4 -0
  40. package/src/gateway-video-model.ts +29 -19
  41. package/src/index.ts +30 -5
  42. package/src/tool/parallel-search.ts +10 -11
  43. package/src/tool/perplexity-search.ts +10 -11
  44. package/dist/index.d.mts +0 -602
  45. package/dist/index.mjs +0 -1539
  46. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,193 @@
1
+ import {
2
+ createJsonErrorResponseHandler,
3
+ createJsonResponseHandler,
4
+ getFromApi,
5
+ lazySchema,
6
+ resolve,
7
+ zodSchema,
8
+ } from '@ai-sdk/provider-utils';
9
+ import { z } from 'zod/v4';
10
+ import { asGatewayError } from './errors';
11
+ import type { GatewayConfig } from './gateway-config';
12
+
13
+ export interface GatewaySpendReportParams {
14
+ /** Start date in YYYY-MM-DD format (inclusive) */
15
+ startDate: string;
16
+ /** End date in YYYY-MM-DD format (inclusive) */
17
+ endDate: string;
18
+ /** Primary aggregation dimension. Defaults to 'day'. */
19
+ groupBy?: 'day' | 'user' | 'model' | 'tag' | 'provider' | 'credential_type';
20
+ /** Time granularity when groupBy is 'day'. */
21
+ datePart?: 'day' | 'hour';
22
+ /** Filter to a specific user's spend. */
23
+ userId?: string;
24
+ /** Filter to a specific model (e.g. 'anthropic/claude-sonnet-4.5'). */
25
+ model?: string;
26
+ /** Filter to a specific provider (e.g. 'anthropic'). */
27
+ provider?: string;
28
+ /** Filter to BYOK or system credentials. */
29
+ credentialType?: 'byok' | 'system';
30
+ /** Filter to requests with these tags. */
31
+ tags?: string[];
32
+ }
33
+
34
+ export interface GatewaySpendReportRow {
35
+ /** Date string (present when groupBy is 'day') */
36
+ day?: string;
37
+ /** Hour timestamp (present when groupBy is 'day' and datePart is 'hour') */
38
+ hour?: string;
39
+ /** User identifier (present when groupBy is 'user') */
40
+ user?: string;
41
+ /** Model identifier (present when groupBy is 'model') */
42
+ model?: string;
43
+ /** Tag value (present when groupBy is 'tag') */
44
+ tag?: string;
45
+ /** Provider name (present when groupBy is 'provider') */
46
+ provider?: string;
47
+ /** Credential type (present when groupBy is 'credential_type') */
48
+ credentialType?: 'byok' | 'system';
49
+
50
+ /** Total cost in USD */
51
+ totalCost: number;
52
+ /** Market cost in USD */
53
+ marketCost?: number;
54
+ /** Number of input tokens */
55
+ inputTokens?: number;
56
+ /** Number of output tokens */
57
+ outputTokens?: number;
58
+ /** Number of cached input tokens */
59
+ cachedInputTokens?: number;
60
+ /** Number of cache creation input tokens */
61
+ cacheCreationInputTokens?: number;
62
+ /** Number of reasoning tokens */
63
+ reasoningTokens?: number;
64
+ /** Number of requests */
65
+ requestCount?: number;
66
+ }
67
+
68
+ export interface GatewaySpendReportResponse {
69
+ results: GatewaySpendReportRow[];
70
+ }
71
+
72
+ export class GatewaySpendReport {
73
+ constructor(private readonly config: GatewayConfig) {}
74
+
75
+ async getSpendReport(
76
+ params: GatewaySpendReportParams,
77
+ ): Promise<GatewaySpendReportResponse> {
78
+ try {
79
+ const baseUrl = new URL(this.config.baseURL);
80
+
81
+ const searchParams = new URLSearchParams();
82
+ searchParams.set('start_date', params.startDate);
83
+ searchParams.set('end_date', params.endDate);
84
+
85
+ if (params.groupBy) {
86
+ searchParams.set('group_by', params.groupBy);
87
+ }
88
+ if (params.datePart) {
89
+ searchParams.set('date_part', params.datePart);
90
+ }
91
+ if (params.userId) {
92
+ searchParams.set('user_id', params.userId);
93
+ }
94
+ if (params.model) {
95
+ searchParams.set('model', params.model);
96
+ }
97
+ if (params.provider) {
98
+ searchParams.set('provider', params.provider);
99
+ }
100
+ if (params.credentialType) {
101
+ searchParams.set('credential_type', params.credentialType);
102
+ }
103
+ if (params.tags && params.tags.length > 0) {
104
+ searchParams.set('tags', params.tags.join(','));
105
+ }
106
+
107
+ const { value } = await getFromApi({
108
+ url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`,
109
+ headers: this.config.headers
110
+ ? await resolve(this.config.headers)
111
+ : undefined,
112
+ successfulResponseHandler: createJsonResponseHandler(
113
+ gatewaySpendReportResponseSchema,
114
+ ),
115
+ failedResponseHandler: createJsonErrorResponseHandler({
116
+ errorSchema: z.any(),
117
+ errorToMessage: data => data,
118
+ }),
119
+ fetch: this.config.fetch,
120
+ });
121
+
122
+ return value;
123
+ } catch (error) {
124
+ throw await asGatewayError(error);
125
+ }
126
+ }
127
+ }
128
+
129
+ const gatewaySpendReportResponseSchema = lazySchema(() =>
130
+ zodSchema(
131
+ z.object({
132
+ results: z.array(
133
+ z
134
+ .object({
135
+ day: z.string().optional(),
136
+ hour: z.string().optional(),
137
+ user: z.string().optional(),
138
+ model: z.string().optional(),
139
+ tag: z.string().optional(),
140
+ provider: z.string().optional(),
141
+ credential_type: z.enum(['byok', 'system']).optional(),
142
+ total_cost: z.number(),
143
+ market_cost: z.number().optional(),
144
+ input_tokens: z.number().optional(),
145
+ output_tokens: z.number().optional(),
146
+ cached_input_tokens: z.number().optional(),
147
+ cache_creation_input_tokens: z.number().optional(),
148
+ reasoning_tokens: z.number().optional(),
149
+ request_count: z.number().optional(),
150
+ })
151
+ .transform(
152
+ ({
153
+ credential_type,
154
+ total_cost,
155
+ market_cost,
156
+ input_tokens,
157
+ output_tokens,
158
+ cached_input_tokens,
159
+ cache_creation_input_tokens,
160
+ reasoning_tokens,
161
+ request_count,
162
+ ...rest
163
+ }) => ({
164
+ ...rest,
165
+ ...(credential_type !== undefined
166
+ ? { credentialType: credential_type }
167
+ : {}),
168
+ totalCost: total_cost,
169
+ ...(market_cost !== undefined ? { marketCost: market_cost } : {}),
170
+ ...(input_tokens !== undefined
171
+ ? { inputTokens: input_tokens }
172
+ : {}),
173
+ ...(output_tokens !== undefined
174
+ ? { outputTokens: output_tokens }
175
+ : {}),
176
+ ...(cached_input_tokens !== undefined
177
+ ? { cachedInputTokens: cached_input_tokens }
178
+ : {}),
179
+ ...(cache_creation_input_tokens !== undefined
180
+ ? { cacheCreationInputTokens: cache_creation_input_tokens }
181
+ : {}),
182
+ ...(reasoning_tokens !== undefined
183
+ ? { reasoningTokens: reasoning_tokens }
184
+ : {}),
185
+ ...(request_count !== undefined
186
+ ? { requestCount: request_count }
187
+ : {}),
188
+ }),
189
+ ),
190
+ ),
191
+ }),
192
+ ),
193
+ );
@@ -0,0 +1 @@
1
+ export type GatewayTranscriptionModelId = string & {};
@@ -0,0 +1,155 @@
1
+ import type {
2
+ SharedV4ProviderMetadata,
3
+ SharedV4Warning,
4
+ TranscriptionModelV4,
5
+ } from '@ai-sdk/provider';
6
+ import {
7
+ combineHeaders,
8
+ convertUint8ArrayToBase64,
9
+ createJsonErrorResponseHandler,
10
+ createJsonResponseHandler,
11
+ postJsonToApi,
12
+ resolve,
13
+ type Resolvable,
14
+ } from '@ai-sdk/provider-utils';
15
+ import { z } from 'zod/v4';
16
+ import { asGatewayError } from './errors';
17
+ import { parseAuthMethod } from './errors/parse-auth-method';
18
+ import type { GatewayConfig } from './gateway-config';
19
+
20
+ export class GatewayTranscriptionModel implements TranscriptionModelV4 {
21
+ readonly specificationVersion = 'v4' as const;
22
+
23
+ constructor(
24
+ readonly modelId: string,
25
+ private readonly config: GatewayConfig & {
26
+ provider: string;
27
+ o11yHeaders: Resolvable<Record<string, string>>;
28
+ },
29
+ ) {}
30
+
31
+ get provider(): string {
32
+ return this.config.provider;
33
+ }
34
+
35
+ async doGenerate({
36
+ audio,
37
+ mediaType,
38
+ providerOptions,
39
+ headers,
40
+ abortSignal,
41
+ }: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<
42
+ Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>
43
+ > {
44
+ const resolvedHeaders = this.config.headers
45
+ ? await resolve(this.config.headers)
46
+ : undefined;
47
+ try {
48
+ const {
49
+ responseHeaders,
50
+ value: responseBody,
51
+ rawValue,
52
+ } = await postJsonToApi({
53
+ url: this.getUrl(),
54
+ headers: combineHeaders(
55
+ resolvedHeaders,
56
+ headers ?? {},
57
+ this.getModelConfigHeaders(),
58
+ await resolve(this.config.o11yHeaders),
59
+ ),
60
+ body: {
61
+ audio:
62
+ audio instanceof Uint8Array
63
+ ? convertUint8ArrayToBase64(audio)
64
+ : audio,
65
+ mediaType,
66
+ ...(providerOptions && { providerOptions }),
67
+ },
68
+ successfulResponseHandler: createJsonResponseHandler(
69
+ gatewayTranscriptionResponseSchema,
70
+ ),
71
+ failedResponseHandler: createJsonErrorResponseHandler({
72
+ errorSchema: z.any(),
73
+ errorToMessage: data => data,
74
+ }),
75
+ ...(abortSignal && { abortSignal }),
76
+ fetch: this.config.fetch,
77
+ });
78
+
79
+ return {
80
+ text: responseBody.text,
81
+ segments: responseBody.segments ?? [],
82
+ language: responseBody.language ?? undefined,
83
+ durationInSeconds: responseBody.durationInSeconds ?? undefined,
84
+ warnings: (responseBody.warnings ?? []) as Array<SharedV4Warning>,
85
+ providerMetadata:
86
+ responseBody.providerMetadata as SharedV4ProviderMetadata,
87
+ response: {
88
+ timestamp: new Date(),
89
+ modelId: this.modelId,
90
+ headers: responseHeaders,
91
+ body: rawValue,
92
+ },
93
+ };
94
+ } catch (error) {
95
+ throw await asGatewayError(
96
+ error,
97
+ await parseAuthMethod(resolvedHeaders ?? {}),
98
+ );
99
+ }
100
+ }
101
+
102
+ private getUrl() {
103
+ return `${this.config.baseURL}/transcription-model`;
104
+ }
105
+
106
+ private getModelConfigHeaders() {
107
+ return {
108
+ 'ai-transcription-model-specification-version': '4',
109
+ 'ai-model-id': this.modelId,
110
+ };
111
+ }
112
+ }
113
+
114
+ const providerMetadataEntrySchema = z.object({}).catchall(z.unknown());
115
+
116
+ const gatewayTranscriptionWarningSchema = z.discriminatedUnion('type', [
117
+ z.object({
118
+ type: z.literal('unsupported'),
119
+ feature: z.string(),
120
+ details: z.string().optional(),
121
+ }),
122
+ z.object({
123
+ type: z.literal('compatibility'),
124
+ feature: z.string(),
125
+ details: z.string().optional(),
126
+ }),
127
+ z.object({
128
+ type: z.literal('deprecated'),
129
+ setting: z.string(),
130
+ message: z.string(),
131
+ }),
132
+ z.object({
133
+ type: z.literal('other'),
134
+ message: z.string(),
135
+ }),
136
+ ]);
137
+
138
+ const gatewayTranscriptionResponseSchema = z.object({
139
+ text: z.string(),
140
+ segments: z
141
+ .array(
142
+ z.object({
143
+ text: z.string(),
144
+ startSecond: z.number(),
145
+ endSecond: z.number(),
146
+ }),
147
+ )
148
+ .optional(),
149
+ language: z.string().nullish(),
150
+ durationInSeconds: z.number().nullish(),
151
+ warnings: z.array(gatewayTranscriptionWarningSchema).optional(),
152
+ providerMetadata: z
153
+ .record(z.string(), providerMetadataEntrySchema)
154
+ .optional(),
155
+ });
@@ -5,6 +5,8 @@ export type GatewayVideoModelId =
5
5
  | 'alibaba/wan-v2.6-r2v'
6
6
  | 'alibaba/wan-v2.6-r2v-flash'
7
7
  | 'alibaba/wan-v2.6-t2v'
8
+ | 'bytedance/seedance-2.0'
9
+ | 'bytedance/seedance-2.0-fast'
8
10
  | 'bytedance/seedance-v1.0-lite-i2v'
9
11
  | 'bytedance/seedance-v1.0-lite-t2v'
10
12
  | 'bytedance/seedance-v1.0-pro'
@@ -20,6 +22,8 @@ export type GatewayVideoModelId =
20
22
  | 'klingai/kling-v2.6-motion-control'
21
23
  | 'klingai/kling-v2.6-t2v'
22
24
  | 'klingai/kling-v3.0-i2v'
25
+ | 'klingai/kling-v3.0-motion-control'
23
26
  | 'klingai/kling-v3.0-t2v'
24
27
  | 'xai/grok-imagine-video'
28
+ | 'xai/grok-imagine-video-1.5-preview'
25
29
  | (string & {});
@@ -1,12 +1,12 @@
1
- import type {
2
- Experimental_VideoModelV3,
3
- Experimental_VideoModelV3CallOptions,
4
- Experimental_VideoModelV3File,
5
- Experimental_VideoModelV3VideoData,
6
- SharedV3ProviderMetadata,
7
- SharedV3Warning,
1
+ import {
2
+ APICallError,
3
+ type Experimental_VideoModelV4,
4
+ type Experimental_VideoModelV4CallOptions,
5
+ type Experimental_VideoModelV4File,
6
+ type Experimental_VideoModelV4VideoData,
7
+ type SharedV4ProviderMetadata,
8
+ type SharedV4Warning,
8
9
  } from '@ai-sdk/provider';
9
- import { APICallError } from '@ai-sdk/provider';
10
10
  import {
11
11
  combineHeaders,
12
12
  convertUint8ArrayToBase64,
@@ -21,8 +21,8 @@ import type { GatewayConfig } from './gateway-config';
21
21
  import { asGatewayError } from './errors';
22
22
  import { parseAuthMethod } from './errors/parse-auth-method';
23
23
 
24
- export class GatewayVideoModel implements Experimental_VideoModelV3 {
25
- readonly specificationVersion = 'v3' as const;
24
+ export class GatewayVideoModel implements Experimental_VideoModelV4 {
25
+ readonly specificationVersion = 'v4' as const;
26
26
  // Set a very large number to prevent client-side splitting of requests
27
27
  readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;
28
28
 
@@ -50,17 +50,19 @@ export class GatewayVideoModel implements Experimental_VideoModelV3 {
50
50
  providerOptions,
51
51
  headers,
52
52
  abortSignal,
53
- }: Experimental_VideoModelV3CallOptions): Promise<{
54
- videos: Array<Experimental_VideoModelV3VideoData>;
55
- warnings: Array<SharedV3Warning>;
56
- providerMetadata?: SharedV3ProviderMetadata;
53
+ }: Experimental_VideoModelV4CallOptions): Promise<{
54
+ videos: Array<Experimental_VideoModelV4VideoData>;
55
+ warnings: Array<SharedV4Warning>;
56
+ providerMetadata?: SharedV4ProviderMetadata;
57
57
  response: {
58
58
  timestamp: Date;
59
59
  modelId: string;
60
60
  headers: Record<string, string> | undefined;
61
61
  };
62
62
  }> {
63
- const resolvedHeaders = await resolve(this.config.headers());
63
+ const resolvedHeaders = this.config.headers
64
+ ? await resolve(this.config.headers)
65
+ : undefined;
64
66
  try {
65
67
  const { responseHeaders, value: responseBody } = await postJsonToApi({
66
68
  url: this.getUrl(),
@@ -170,7 +172,7 @@ export class GatewayVideoModel implements Experimental_VideoModelV3 {
170
172
  videos: responseBody.videos,
171
173
  warnings: responseBody.warnings ?? [],
172
174
  providerMetadata:
173
- responseBody.providerMetadata as SharedV3ProviderMetadata,
175
+ responseBody.providerMetadata as SharedV4ProviderMetadata,
174
176
  response: {
175
177
  timestamp: new Date(),
176
178
  modelId: this.modelId,
@@ -178,7 +180,10 @@ export class GatewayVideoModel implements Experimental_VideoModelV3 {
178
180
  },
179
181
  };
180
182
  } catch (error) {
181
- throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));
183
+ throw await asGatewayError(
184
+ error,
185
+ await parseAuthMethod(resolvedHeaders ?? {}),
186
+ );
182
187
  }
183
188
  }
184
189
 
@@ -188,13 +193,13 @@ export class GatewayVideoModel implements Experimental_VideoModelV3 {
188
193
 
189
194
  private getModelConfigHeaders() {
190
195
  return {
191
- 'ai-video-model-specification-version': '3',
196
+ 'ai-video-model-specification-version': '4',
192
197
  'ai-model-id': this.modelId,
193
198
  };
194
199
  }
195
200
  }
196
201
 
197
- function maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {
202
+ function maybeEncodeVideoFile(file: Experimental_VideoModelV4File) {
198
203
  if (file.type === 'file' && file.data instanceof Uint8Array) {
199
204
  return {
200
205
  ...file,
@@ -234,6 +239,11 @@ const gatewayVideoWarningSchema = z.discriminatedUnion('type', [
234
239
  feature: z.string(),
235
240
  details: z.string().optional(),
236
241
  }),
242
+ z.object({
243
+ type: z.literal('deprecated'),
244
+ setting: z.string(),
245
+ message: z.string(),
246
+ }),
237
247
  z.object({
238
248
  type: z.literal('other'),
239
249
  message: z.string(),
package/src/index.ts CHANGED
@@ -1,14 +1,36 @@
1
1
  export type { GatewayModelId } from './gateway-language-model-settings';
2
+ export {
3
+ GATEWAY_AUTH_SUBPROTOCOL_PREFIX,
4
+ GATEWAY_REALTIME_SUBPROTOCOL,
5
+ GATEWAY_TEAM_SUBPROTOCOL_PREFIX,
6
+ getGatewayRealtimeAuthToken,
7
+ getGatewayRealtimeProtocols,
8
+ getGatewayRealtimeTeamIdOrSlug,
9
+ } from './gateway-realtime-auth';
10
+ export type { GatewayRealtimeModelId } from './gateway-realtime-model-settings';
11
+ export type { GatewayRerankingModelId } from './gateway-reranking-model-settings';
12
+ export type { GatewaySpeechModelId } from './gateway-speech-model-settings';
13
+ export type { GatewayTranscriptionModelId } from './gateway-transcription-model-settings';
2
14
  export type { GatewayVideoModelId } from './gateway-video-model-settings';
3
15
  export type {
4
16
  GatewayLanguageModelEntry,
5
17
  GatewayLanguageModelSpecification,
6
18
  } from './gateway-model-entry';
7
19
  export type { GatewayCreditsResponse } from './gateway-fetch-metadata';
20
+ export type {
21
+ GatewaySpendReportParams,
22
+ GatewaySpendReportRow,
23
+ GatewaySpendReportResponse,
24
+ } from './gateway-spend-report';
25
+ export type {
26
+ GatewayGenerationInfoParams,
27
+ GatewayGenerationInfo,
28
+ } from './gateway-generation-info';
8
29
  export type { GatewayLanguageModelEntry as GatewayModelEntry } from './gateway-model-entry';
9
30
  export {
10
- createGatewayProvider,
11
- createGatewayProvider as createGateway,
31
+ createGateway,
32
+ /** @deprecated Use `createGateway` instead. */
33
+ createGateway as createGatewayProvider,
12
34
  gateway,
13
35
  } from './gateway-provider';
14
36
  export type {
@@ -16,13 +38,15 @@ export type {
16
38
  GatewayProviderSettings,
17
39
  } from './gateway-provider';
18
40
  export type {
19
- GatewayLanguageModelOptions,
20
- /** @deprecated Use `GatewayLanguageModelOptions` instead. */
21
- GatewayLanguageModelOptions as GatewayProviderOptions,
41
+ GatewayProviderOptions,
42
+ /** @deprecated Use `GatewayProviderOptions` instead. */
43
+ GatewayProviderOptions as GatewayLanguageModelOptions,
22
44
  } from './gateway-provider-options';
23
45
  export {
24
46
  GatewayError,
25
47
  GatewayAuthenticationError,
48
+ GatewayFailedDependencyError,
49
+ GatewayForbiddenError,
26
50
  GatewayInvalidRequestError,
27
51
  GatewayRateLimitError,
28
52
  GatewayModelNotFoundError,
@@ -30,3 +54,4 @@ export {
30
54
  GatewayResponseError,
31
55
  } from './errors';
32
56
  export type { GatewayErrorResponse } from './errors';
57
+ export { VERSION } from './version';
@@ -1,5 +1,5 @@
1
1
  import {
2
- createProviderToolFactoryWithOutputSchema,
2
+ createProviderExecutedToolFactory,
3
3
  lazySchema,
4
4
  zodSchema,
5
5
  } from '@ai-sdk/provider-utils';
@@ -278,16 +278,15 @@ const parallelSearchOutputSchema = lazySchema(() =>
278
278
  ),
279
279
  );
280
280
 
281
- export const parallelSearchToolFactory =
282
- createProviderToolFactoryWithOutputSchema<
283
- ParallelSearchInput,
284
- ParallelSearchOutput,
285
- ParallelSearchConfig
286
- >({
287
- id: 'gateway.parallel_search',
288
- inputSchema: parallelSearchInputSchema,
289
- outputSchema: parallelSearchOutputSchema,
290
- });
281
+ export const parallelSearchToolFactory = createProviderExecutedToolFactory<
282
+ ParallelSearchInput,
283
+ ParallelSearchOutput,
284
+ ParallelSearchConfig
285
+ >({
286
+ id: 'gateway.parallel_search',
287
+ inputSchema: parallelSearchInputSchema,
288
+ outputSchema: parallelSearchOutputSchema,
289
+ });
291
290
 
292
291
  export const parallelSearch = (
293
292
  config: ParallelSearchConfig = {},
@@ -1,5 +1,5 @@
1
1
  import {
2
- createProviderToolFactoryWithOutputSchema,
2
+ createProviderExecutedToolFactory,
3
3
  lazySchema,
4
4
  zodSchema,
5
5
  } from '@ai-sdk/provider-utils';
@@ -277,16 +277,15 @@ const perplexitySearchOutputSchema = lazySchema(() =>
277
277
  ),
278
278
  );
279
279
 
280
- export const perplexitySearchToolFactory =
281
- createProviderToolFactoryWithOutputSchema<
282
- PerplexitySearchInput,
283
- PerplexitySearchOutput,
284
- PerplexitySearchConfig
285
- >({
286
- id: 'gateway.perplexity_search',
287
- inputSchema: perplexitySearchInputSchema,
288
- outputSchema: perplexitySearchOutputSchema,
289
- });
280
+ export const perplexitySearchToolFactory = createProviderExecutedToolFactory<
281
+ PerplexitySearchInput,
282
+ PerplexitySearchOutput,
283
+ PerplexitySearchConfig
284
+ >({
285
+ id: 'gateway.perplexity_search',
286
+ inputSchema: perplexitySearchInputSchema,
287
+ outputSchema: perplexitySearchOutputSchema,
288
+ });
290
289
 
291
290
  export const perplexitySearch = (
292
291
  config: PerplexitySearchConfig = {},