@ai-sdk/xai 4.0.0-beta.6 → 4.0.0-beta.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/xai",
3
- "version": "4.0.0-beta.6",
3
+ "version": "4.0.0-beta.8",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -1,17 +1,17 @@
1
1
  import {
2
- SharedV3Warning,
3
- LanguageModelV3Prompt,
2
+ SharedV4Warning,
3
+ LanguageModelV4Prompt,
4
4
  UnsupportedFunctionalityError,
5
5
  } from '@ai-sdk/provider';
6
6
  import { convertToBase64 } from '@ai-sdk/provider-utils';
7
7
  import { XaiChatPrompt } from './xai-chat-prompt';
8
8
 
9
- export function convertToXaiChatMessages(prompt: LanguageModelV3Prompt): {
9
+ export function convertToXaiChatMessages(prompt: LanguageModelV4Prompt): {
10
10
  messages: XaiChatPrompt;
11
- warnings: Array<SharedV3Warning>;
11
+ warnings: Array<SharedV4Warning>;
12
12
  } {
13
13
  const messages: XaiChatPrompt = [];
14
- const warnings: Array<SharedV3Warning> = [];
14
+ const warnings: Array<SharedV4Warning> = [];
15
15
 
16
16
  for (const { role, content } of prompt) {
17
17
  switch (role) {
@@ -1,7 +1,7 @@
1
- import { LanguageModelV3Usage } from '@ai-sdk/provider';
1
+ import { LanguageModelV4Usage } from '@ai-sdk/provider';
2
2
  import { XaiChatUsage } from './xai-chat-language-model';
3
3
 
4
- export function convertXaiChatUsage(usage: XaiChatUsage): LanguageModelV3Usage {
4
+ export function convertXaiChatUsage(usage: XaiChatUsage): LanguageModelV4Usage {
5
5
  const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;
6
6
  const reasoningTokens =
7
7
  usage.completion_tokens_details?.reasoning_tokens ?? 0;
@@ -1,8 +1,8 @@
1
- import { LanguageModelV3FinishReason } from '@ai-sdk/provider';
1
+ import { LanguageModelV4FinishReason } from '@ai-sdk/provider';
2
2
 
3
3
  export function mapXaiFinishReason(
4
4
  finishReason: string | null | undefined,
5
- ): LanguageModelV3FinishReason['unified'] {
5
+ ): LanguageModelV4FinishReason['unified'] {
6
6
  switch (finishReason) {
7
7
  case 'stop':
8
8
  return 'stop';
@@ -1,6 +1,6 @@
1
1
  import {
2
- SharedV3Warning,
3
- LanguageModelV3Message,
2
+ SharedV4Warning,
3
+ LanguageModelV4Message,
4
4
  UnsupportedFunctionalityError,
5
5
  } from '@ai-sdk/provider';
6
6
  import { convertToBase64 } from '@ai-sdk/provider-utils';
@@ -12,14 +12,14 @@ import {
12
12
  export async function convertToXaiResponsesInput({
13
13
  prompt,
14
14
  }: {
15
- prompt: LanguageModelV3Message[];
15
+ prompt: LanguageModelV4Message[];
16
16
  store?: boolean;
17
17
  }): Promise<{
18
18
  input: XaiResponsesInput;
19
- inputWarnings: SharedV3Warning[];
19
+ inputWarnings: SharedV4Warning[];
20
20
  }> {
21
21
  const input: XaiResponsesInput = [];
22
- const inputWarnings: SharedV3Warning[] = [];
22
+ const inputWarnings: SharedV4Warning[] = [];
23
23
 
24
24
  for (const message of prompt) {
25
25
  switch (message.role) {
@@ -1,9 +1,9 @@
1
- import { LanguageModelV3Usage } from '@ai-sdk/provider';
1
+ import { LanguageModelV4Usage } from '@ai-sdk/provider';
2
2
  import { XaiResponsesUsage } from './xai-responses-api';
3
3
 
4
4
  export function convertXaiResponsesUsage(
5
5
  usage: XaiResponsesUsage,
6
- ): LanguageModelV3Usage {
6
+ ): LanguageModelV4Usage {
7
7
  const cacheReadTokens = usage.input_tokens_details?.cached_tokens ?? 0;
8
8
  const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0;
9
9
 
@@ -1,8 +1,8 @@
1
- import { LanguageModelV3FinishReason } from '@ai-sdk/provider';
1
+ import { LanguageModelV4FinishReason } from '@ai-sdk/provider';
2
2
 
3
3
  export function mapXaiResponsesFinishReason(
4
4
  finishReason: string | null | undefined,
5
- ): LanguageModelV3FinishReason['unified'] {
5
+ ): LanguageModelV4FinishReason['unified'] {
6
6
  switch (finishReason) {
7
7
  case 'stop':
8
8
  case 'completed':
@@ -223,6 +223,9 @@ const outputItemSchema = z.discriminatedUnion('type', [
223
223
  type: z.literal('reasoning'),
224
224
  id: z.string(),
225
225
  summary: z.array(reasoningSummaryPartSchema),
226
+ content: z
227
+ .array(z.object({ type: z.string(), text: z.string() }))
228
+ .nullish(),
226
229
  status: z.string(),
227
230
  encrypted_content: z.string().nullish(),
228
231
  }),
@@ -1,13 +1,13 @@
1
1
  import {
2
- LanguageModelV3,
3
- LanguageModelV3CallOptions,
4
- LanguageModelV3Content,
5
- LanguageModelV3FinishReason,
6
- LanguageModelV3GenerateResult,
7
- LanguageModelV3StreamPart,
8
- LanguageModelV3StreamResult,
9
- LanguageModelV3Usage,
10
- SharedV3Warning,
2
+ LanguageModelV4,
3
+ LanguageModelV4CallOptions,
4
+ LanguageModelV4Content,
5
+ LanguageModelV4FinishReason,
6
+ LanguageModelV4GenerateResult,
7
+ LanguageModelV4StreamPart,
8
+ LanguageModelV4StreamResult,
9
+ LanguageModelV4Usage,
10
+ SharedV4Warning,
11
11
  } from '@ai-sdk/provider';
12
12
  import {
13
13
  combineHeaders,
@@ -43,8 +43,8 @@ type XaiResponsesConfig = {
43
43
  fetch?: FetchFunction;
44
44
  };
45
45
 
46
- export class XaiResponsesLanguageModel implements LanguageModelV3 {
47
- readonly specificationVersion = 'v3';
46
+ export class XaiResponsesLanguageModel implements LanguageModelV4 {
47
+ readonly specificationVersion = 'v4';
48
48
 
49
49
  readonly modelId: XaiResponsesModelId;
50
50
 
@@ -74,8 +74,8 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
74
74
  providerOptions,
75
75
  tools,
76
76
  toolChoice,
77
- }: LanguageModelV3CallOptions) {
78
- const warnings: SharedV3Warning[] = [];
77
+ }: LanguageModelV4CallOptions) {
78
+ const warnings: SharedV4Warning[] = [];
79
79
 
80
80
  const options =
81
81
  (await parseProviderOptions({
@@ -165,8 +165,16 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
165
165
  : { type: 'json_object' },
166
166
  },
167
167
  }),
168
- ...(options.reasoningEffort != null && {
169
- reasoning: { effort: options.reasoningEffort },
168
+ ...((options.reasoningEffort != null ||
169
+ options.reasoningSummary != null) && {
170
+ reasoning: {
171
+ ...(options.reasoningEffort != null && {
172
+ effort: options.reasoningEffort,
173
+ }),
174
+ ...(options.reasoningSummary != null && {
175
+ summary: options.reasoningSummary,
176
+ }),
177
+ },
170
178
  }),
171
179
  ...(options.store === false && {
172
180
  store: options.store,
@@ -199,8 +207,8 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
199
207
  }
200
208
 
201
209
  async doGenerate(
202
- options: LanguageModelV3CallOptions,
203
- ): Promise<LanguageModelV3GenerateResult> {
210
+ options: LanguageModelV4CallOptions,
211
+ ): Promise<LanguageModelV4GenerateResult> {
204
212
  const {
205
213
  args: body,
206
214
  warnings,
@@ -227,7 +235,7 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
227
235
  fetch: this.config.fetch,
228
236
  });
229
237
 
230
- const content: Array<LanguageModelV3Content> = [];
238
+ const content: Array<LanguageModelV4Content> = [];
231
239
 
232
240
  const webSearchSubTools = [
233
241
  'web_search',
@@ -360,12 +368,16 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
360
368
  }
361
369
 
362
370
  case 'reasoning': {
363
- const summaryTexts = part.summary
364
- .map(s => s.text)
365
- .filter(text => text && text.length > 0);
371
+ const texts =
372
+ part.summary.length > 0
373
+ ? part.summary.map(s => s.text)
374
+ : (part.content ?? []).map(c => c.text);
375
+
376
+ const reasoningText = texts
377
+ .filter(text => text && text.length > 0)
378
+ .join('');
366
379
 
367
- if (summaryTexts.length > 0) {
368
- const reasoningText = summaryTexts.join('');
380
+ if (reasoningText) {
369
381
  if (part.encrypted_content || part.id) {
370
382
  content.push({
371
383
  type: 'reasoning',
@@ -418,8 +430,8 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
418
430
  }
419
431
 
420
432
  async doStream(
421
- options: LanguageModelV3CallOptions,
422
- ): Promise<LanguageModelV3StreamResult> {
433
+ options: LanguageModelV4CallOptions,
434
+ ): Promise<LanguageModelV4StreamResult> {
423
435
  const {
424
436
  args,
425
437
  warnings,
@@ -446,11 +458,11 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
446
458
  fetch: this.config.fetch,
447
459
  });
448
460
 
449
- let finishReason: LanguageModelV3FinishReason = {
461
+ let finishReason: LanguageModelV4FinishReason = {
450
462
  unified: 'other',
451
463
  raw: undefined,
452
464
  };
453
- let usage: LanguageModelV3Usage | undefined = undefined;
465
+ let usage: LanguageModelV4Usage | undefined = undefined;
454
466
  let isFirstChunk = true;
455
467
  const contentBlocks: Record<string, { type: 'text' }> = {};
456
468
  const seenToolCalls = new Set<string>();
@@ -473,7 +485,7 @@ export class XaiResponsesLanguageModel implements LanguageModelV3 {
473
485
  stream: response.pipeThrough(
474
486
  new TransformStream<
475
487
  ParseResult<z.infer<typeof xaiResponsesChunkSchema>>,
476
- LanguageModelV3StreamPart
488
+ LanguageModelV4StreamPart
477
489
  >({
478
490
  start(controller) {
479
491
  controller.enqueue({ type: 'stream-start', warnings });
@@ -17,6 +17,7 @@ export const xaiLanguageModelResponsesOptions = z.object({
17
17
  * Possible values are `low` (uses fewer reasoning tokens), `medium` and `high` (uses more reasoning tokens).
18
18
  */
19
19
  reasoningEffort: z.enum(['low', 'medium', 'high']).optional(),
20
+ reasoningSummary: z.enum(['auto', 'concise', 'detailed']).optional(),
20
21
  logprobs: z.boolean().optional(),
21
22
  topLogprobs: z.number().int().min(0).max(8).optional(),
22
23
  /**
@@ -1,6 +1,6 @@
1
1
  import {
2
- LanguageModelV3CallOptions,
3
- SharedV3Warning,
2
+ LanguageModelV4CallOptions,
3
+ SharedV4Warning,
4
4
  UnsupportedFunctionalityError,
5
5
  } from '@ai-sdk/provider';
6
6
  import { validateTypes } from '@ai-sdk/provider-utils';
@@ -20,16 +20,16 @@ export async function prepareResponsesTools({
20
20
  tools,
21
21
  toolChoice,
22
22
  }: {
23
- tools: LanguageModelV3CallOptions['tools'];
24
- toolChoice?: LanguageModelV3CallOptions['toolChoice'];
23
+ tools: LanguageModelV4CallOptions['tools'];
24
+ toolChoice?: LanguageModelV4CallOptions['toolChoice'];
25
25
  }): Promise<{
26
26
  tools: Array<XaiResponsesTool> | undefined;
27
27
  toolChoice: XaiResponsesToolChoice | undefined;
28
- toolWarnings: SharedV3Warning[];
28
+ toolWarnings: SharedV4Warning[];
29
29
  }> {
30
30
  const normalizedTools = tools?.length ? tools : undefined;
31
31
 
32
- const toolWarnings: SharedV3Warning[] = [];
32
+ const toolWarnings: SharedV4Warning[] = [];
33
33
 
34
34
  if (normalizedTools == null) {
35
35
  return { tools: undefined, toolChoice: undefined, toolWarnings };
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  APICallError,
3
- LanguageModelV3,
4
- LanguageModelV3CallOptions,
5
- LanguageModelV3Content,
6
- LanguageModelV3FinishReason,
7
- LanguageModelV3GenerateResult,
8
- LanguageModelV3StreamPart,
9
- LanguageModelV3StreamResult,
10
- LanguageModelV3Usage,
11
- SharedV3Warning,
3
+ LanguageModelV4,
4
+ LanguageModelV4CallOptions,
5
+ LanguageModelV4Content,
6
+ LanguageModelV4FinishReason,
7
+ LanguageModelV4GenerateResult,
8
+ LanguageModelV4StreamPart,
9
+ LanguageModelV4StreamResult,
10
+ LanguageModelV4Usage,
11
+ SharedV4Warning,
12
12
  } from '@ai-sdk/provider';
13
13
  import {
14
14
  combineHeaders,
@@ -41,8 +41,8 @@ type XaiChatConfig = {
41
41
  fetch?: FetchFunction;
42
42
  };
43
43
 
44
- export class XaiChatLanguageModel implements LanguageModelV3 {
45
- readonly specificationVersion = 'v3';
44
+ export class XaiChatLanguageModel implements LanguageModelV4 {
45
+ readonly specificationVersion = 'v4';
46
46
 
47
47
  readonly modelId: XaiChatModelId;
48
48
 
@@ -75,8 +75,8 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
75
75
  providerOptions,
76
76
  tools,
77
77
  toolChoice,
78
- }: LanguageModelV3CallOptions) {
79
- const warnings: SharedV3Warning[] = [];
78
+ }: LanguageModelV4CallOptions) {
79
+ const warnings: SharedV4Warning[] = [];
80
80
 
81
81
  // parse xai-specific provider options
82
82
  const options =
@@ -202,8 +202,8 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
202
202
  }
203
203
 
204
204
  async doGenerate(
205
- options: LanguageModelV3CallOptions,
206
- ): Promise<LanguageModelV3GenerateResult> {
205
+ options: LanguageModelV4CallOptions,
206
+ ): Promise<LanguageModelV4GenerateResult> {
207
207
  const { args: body, warnings } = await this.getArgs(options);
208
208
 
209
209
  const url = `${this.config.baseURL ?? 'https://api.x.ai/v1'}/chat/completions`;
@@ -237,7 +237,7 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
237
237
  }
238
238
 
239
239
  const choice = response.choices![0];
240
- const content: Array<LanguageModelV3Content> = [];
240
+ const content: Array<LanguageModelV4Content> = [];
241
241
 
242
242
  // extract text content
243
243
  if (choice.message.content != null && choice.message.content.length > 0) {
@@ -312,8 +312,8 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
312
312
  }
313
313
 
314
314
  async doStream(
315
- options: LanguageModelV3CallOptions,
316
- ): Promise<LanguageModelV3StreamResult> {
315
+ options: LanguageModelV4CallOptions,
316
+ ): Promise<LanguageModelV4StreamResult> {
317
317
  const { args, warnings } = await this.getArgs(options);
318
318
  const body = {
319
319
  ...args,
@@ -375,11 +375,11 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
375
375
  fetch: this.config.fetch,
376
376
  });
377
377
 
378
- let finishReason: LanguageModelV3FinishReason = {
378
+ let finishReason: LanguageModelV4FinishReason = {
379
379
  unified: 'other',
380
380
  raw: undefined,
381
381
  };
382
- let usage: LanguageModelV3Usage | undefined = undefined;
382
+ let usage: LanguageModelV4Usage | undefined = undefined;
383
383
  let isFirstChunk = true;
384
384
  const contentBlocks: Record<
385
385
  string,
@@ -394,7 +394,7 @@ export class XaiChatLanguageModel implements LanguageModelV3 {
394
394
  stream: response.pipeThrough(
395
395
  new TransformStream<
396
396
  ParseResult<z.infer<typeof xaiChatChunkSchema>>,
397
- LanguageModelV3StreamPart
397
+ LanguageModelV4StreamPart
398
398
  >({
399
399
  start(controller) {
400
400
  controller.enqueue({ type: 'stream-start', warnings });
@@ -1,4 +1,4 @@
1
- import { ImageModelV3, SharedV3Warning } from '@ai-sdk/provider';
1
+ import { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';
2
2
  import {
3
3
  combineHeaders,
4
4
  convertImageModelFileToDataUri,
@@ -25,8 +25,8 @@ interface XaiImageModelConfig {
25
25
  };
26
26
  }
27
27
 
28
- export class XaiImageModel implements ImageModelV3 {
29
- readonly specificationVersion = 'v3';
28
+ export class XaiImageModel implements ImageModelV4 {
29
+ readonly specificationVersion = 'v4';
30
30
  readonly maxImagesPerCall = 3;
31
31
 
32
32
  get provider(): string {
@@ -49,10 +49,10 @@ export class XaiImageModel implements ImageModelV3 {
49
49
  abortSignal,
50
50
  files,
51
51
  mask,
52
- }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<
53
- Awaited<ReturnType<ImageModelV3['doGenerate']>>
52
+ }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<
53
+ Awaited<ReturnType<ImageModelV4['doGenerate']>>
54
54
  > {
55
- const warnings: Array<SharedV3Warning> = [];
55
+ const warnings: Array<SharedV4Warning> = [];
56
56
 
57
57
  if (size != null) {
58
58
  warnings.push({
@@ -1,6 +1,6 @@
1
1
  import {
2
- LanguageModelV3CallOptions,
3
- SharedV3Warning,
2
+ LanguageModelV4CallOptions,
3
+ SharedV4Warning,
4
4
  UnsupportedFunctionalityError,
5
5
  } from '@ai-sdk/provider';
6
6
  import { XaiToolChoice } from './xai-chat-prompt';
@@ -9,8 +9,8 @@ export function prepareTools({
9
9
  tools,
10
10
  toolChoice,
11
11
  }: {
12
- tools: LanguageModelV3CallOptions['tools'];
13
- toolChoice?: LanguageModelV3CallOptions['toolChoice'];
12
+ tools: LanguageModelV4CallOptions['tools'];
13
+ toolChoice?: LanguageModelV4CallOptions['toolChoice'];
14
14
  }): {
15
15
  tools:
16
16
  | Array<{
@@ -24,12 +24,12 @@ export function prepareTools({
24
24
  }>
25
25
  | undefined;
26
26
  toolChoice: XaiToolChoice | undefined;
27
- toolWarnings: SharedV3Warning[];
27
+ toolWarnings: SharedV4Warning[];
28
28
  } {
29
29
  // when the tools array is empty, change it to undefined to prevent errors
30
30
  tools = tools?.length ? tools : undefined;
31
31
 
32
- const toolWarnings: SharedV3Warning[] = [];
32
+ const toolWarnings: SharedV4Warning[] = [];
33
33
 
34
34
  if (tools == null) {
35
35
  return { tools: undefined, toolChoice: undefined, toolWarnings };
@@ -1,9 +1,9 @@
1
1
  import {
2
- type Experimental_VideoModelV3,
3
- ImageModelV3,
4
- LanguageModelV3,
2
+ type Experimental_VideoModelV4,
3
+ ImageModelV4,
4
+ LanguageModelV4,
5
5
  NoSuchModelError,
6
- ProviderV3,
6
+ ProviderV4,
7
7
  } from '@ai-sdk/provider';
8
8
  import {
9
9
  FetchFunction,
@@ -23,43 +23,43 @@ import { VERSION } from './version';
23
23
  import { XaiVideoModel } from './xai-video-model';
24
24
  import { XaiVideoModelId } from './xai-video-settings';
25
25
 
26
- export interface XaiProvider extends ProviderV3 {
27
- (modelId: XaiResponsesModelId): LanguageModelV3;
26
+ export interface XaiProvider extends ProviderV4 {
27
+ (modelId: XaiResponsesModelId): LanguageModelV4;
28
28
 
29
29
  /**
30
30
  * Creates an Xai language model for text generation.
31
31
  */
32
- languageModel(modelId: XaiResponsesModelId): LanguageModelV3;
32
+ languageModel(modelId: XaiResponsesModelId): LanguageModelV4;
33
33
 
34
34
  /**
35
35
  * Creates an Xai chat model for text generation.
36
36
  */
37
- chat: (modelId: XaiChatModelId) => LanguageModelV3;
37
+ chat: (modelId: XaiChatModelId) => LanguageModelV4;
38
38
 
39
39
  /**
40
40
  * Creates an Xai responses model for text generation.
41
41
  */
42
- responses: (modelId: XaiResponsesModelId) => LanguageModelV3;
42
+ responses: (modelId: XaiResponsesModelId) => LanguageModelV4;
43
43
 
44
44
  /**
45
45
  * Creates an Xai image model for image generation.
46
46
  */
47
- image(modelId: XaiImageModelId): ImageModelV3;
47
+ image(modelId: XaiImageModelId): ImageModelV4;
48
48
 
49
49
  /**
50
50
  * Creates an Xai image model for image generation.
51
51
  */
52
- imageModel(modelId: XaiImageModelId): ImageModelV3;
52
+ imageModel(modelId: XaiImageModelId): ImageModelV4;
53
53
 
54
54
  /**
55
55
  * Creates an Xai video model for video generation.
56
56
  */
57
- video(modelId: XaiVideoModelId): Experimental_VideoModelV3;
57
+ video(modelId: XaiVideoModelId): Experimental_VideoModelV4;
58
58
 
59
59
  /**
60
60
  * Creates an Xai video model for video generation.
61
61
  */
62
- videoModel(modelId: XaiVideoModelId): Experimental_VideoModelV3;
62
+ videoModel(modelId: XaiVideoModelId): Experimental_VideoModelV4;
63
63
 
64
64
  /**
65
65
  * Server-side agentic tools for use with the responses API.
@@ -153,7 +153,7 @@ export function createXai(options: XaiProviderSettings = {}): XaiProvider {
153
153
  const provider = (modelId: XaiResponsesModelId) =>
154
154
  createResponsesLanguageModel(modelId);
155
155
 
156
- provider.specificationVersion = 'v3' as const;
156
+ provider.specificationVersion = 'v4' as const;
157
157
  provider.languageModel = createResponsesLanguageModel;
158
158
  provider.chat = createChatLanguageModel;
159
159
  provider.responses = createResponsesLanguageModel;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AISDKError,
3
- type Experimental_VideoModelV3,
4
- type SharedV3Warning,
3
+ type Experimental_VideoModelV4,
4
+ type SharedV4Warning,
5
5
  } from '@ai-sdk/provider';
6
6
  import {
7
7
  combineHeaders,
@@ -37,8 +37,8 @@ const RESOLUTION_MAP: Record<string, string> = {
37
37
  '640x480': '480p',
38
38
  };
39
39
 
40
- export class XaiVideoModel implements Experimental_VideoModelV3 {
41
- readonly specificationVersion = 'v3';
40
+ export class XaiVideoModel implements Experimental_VideoModelV4 {
41
+ readonly specificationVersion = 'v4';
42
42
  readonly maxVideosPerCall = 1;
43
43
 
44
44
  get provider(): string {
@@ -51,10 +51,10 @@ export class XaiVideoModel implements Experimental_VideoModelV3 {
51
51
  ) {}
52
52
 
53
53
  async doGenerate(
54
- options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],
55
- ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {
54
+ options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],
55
+ ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {
56
56
  const currentDate = this.config._internal?.currentDate?.() ?? new Date();
57
- const warnings: SharedV3Warning[] = [];
57
+ const warnings: SharedV4Warning[] = [];
58
58
 
59
59
  const xaiOptions = (await parseProviderOptions({
60
60
  provider: 'xai',