@ai-sdk/xai 3.0.113 → 3.0.115

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,19 @@
1
1
  # @ai-sdk/xai
2
2
 
3
+ ## 3.0.115
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [ee2bf30]
8
+ - @ai-sdk/provider-utils@4.0.42
9
+ - @ai-sdk/openai-compatible@2.0.64
10
+
11
+ ## 3.0.114
12
+
13
+ ### Patch Changes
14
+
15
+ - 5d0c5f4: fix(xai): video generation no longer hangs while polling status
16
+
3
17
  ## 3.0.113
4
18
 
5
19
  ### Patch Changes
package/dist/index.js CHANGED
@@ -2933,7 +2933,7 @@ var xaiTools = {
2933
2933
  };
2934
2934
 
2935
2935
  // src/version.ts
2936
- var VERSION = true ? "3.0.113" : "0.0.0-test";
2936
+ var VERSION = true ? "3.0.115" : "0.0.0-test";
2937
2937
 
2938
2938
  // src/xai-video-model.ts
2939
2939
  var import_provider6 = require("@ai-sdk/provider");
@@ -3357,13 +3357,60 @@ var xaiVideoStatusResponseSchema = import_v417.z.object({
3357
3357
  var xaiVideoStatusJsonResponseHandler = (0, import_provider_utils16.createJsonResponseHandler)(
3358
3358
  xaiVideoStatusResponseSchema
3359
3359
  );
3360
+ var MAX_PENDING_BODY_BYTES = 1024 * 1024;
3361
+ var textDecoder = new TextDecoder();
3362
+ async function readPendingBody({
3363
+ response,
3364
+ url,
3365
+ requestBodyValues
3366
+ }) {
3367
+ if (response.body == null) {
3368
+ return "";
3369
+ }
3370
+ const reader = response.body.getReader();
3371
+ const chunks = [];
3372
+ let totalBytes = 0;
3373
+ try {
3374
+ while (true) {
3375
+ const { done, value } = await reader.read();
3376
+ if (done) break;
3377
+ totalBytes += value.length;
3378
+ if (totalBytes > MAX_PENDING_BODY_BYTES) {
3379
+ throw new import_provider6.APICallError({
3380
+ message: `xAI video status response exceeded ${MAX_PENDING_BODY_BYTES} bytes`,
3381
+ url,
3382
+ requestBodyValues,
3383
+ statusCode: response.status,
3384
+ responseHeaders: (0, import_provider_utils16.extractResponseHeaders)(response)
3385
+ });
3386
+ }
3387
+ chunks.push(value);
3388
+ }
3389
+ } finally {
3390
+ reader.releaseLock();
3391
+ }
3392
+ const merged = new Uint8Array(totalBytes);
3393
+ let offset = 0;
3394
+ for (const chunk of chunks) {
3395
+ merged.set(chunk, offset);
3396
+ offset += chunk.length;
3397
+ }
3398
+ return textDecoder.decode(merged);
3399
+ }
3360
3400
  var xaiVideoStatusResponseHandler = async (options) => {
3361
3401
  if (options.response.status === 202) {
3362
3402
  const responseHeaders = (0, import_provider_utils16.extractResponseHeaders)(options.response);
3363
- await (0, import_provider_utils16.cancelResponseBody)(options.response);
3403
+ const text = await readPendingBody(options);
3404
+ if (text.trim().length === 0) {
3405
+ return { responseHeaders, value: { status: "pending" } };
3406
+ }
3407
+ const parsed = await (0, import_provider_utils16.safeParseJSON)({
3408
+ text,
3409
+ schema: xaiVideoStatusResponseSchema
3410
+ });
3364
3411
  return {
3365
3412
  responseHeaders,
3366
- value: { status: "pending" }
3413
+ value: parsed.success ? parsed.value : { status: "pending" }
3367
3414
  };
3368
3415
  }
3369
3416
  return xaiVideoStatusJsonResponseHandler(options);