# Vercel AI SDK adds server-side realtime support and video upload delivery in @ai-sdk/xai 5.0.39

published: 2026-11-05T04:05:23.999Z
topic: frameworks
source: https://github.com/vercel/ai/releases/tag/%40ai-sdk%2Fxai%405.0.39
url: https://aiagentnews.io/stories/vercel-ai-sdk-adds-server-side-realtime-support-and-video-upload-delivery-in-ai

Vercel's AI SDK released @ai-sdk/xai 5.0.39, which adds server-side realtime extensions for xAI's voice models and other patch-level changes. The release also updates the OpenAI transcription timing options and video generation output handling.

The xAI provider's XaiRealtimeModel now implements getServerWebSocketConfig(), which returns the upstream voice realtime WebSocket URL with the model query parameter and header authentication taken from the model's configured credentials. Endpoint intents the model does not support are rejected. The event mapper also fills in normalized usage on response-done and input-transcription-completed events, using xAI's OpenAI-compatible realtime format.

Transcription word timings are now exposed separately from segments, and the shared timestampGranularities option is accepted. Explicit provider timing settings take precedence. OpenAI requests send timestamp_granularities only with verbose_json and emit a warning when a requested timing is unavailable or excluded.

Video generation, editing and extension accept a typed output.uploadUrl option, and polling returns an explicit uploaded outcome without downloading the file or exposing the signed destination in errors. The camelCase output.uploadUrl replaces the raw output.upload_url passthrough, and it rejects null values and requires an HTTPS URL. The release also bumps @ai-sdk/provider to 4.0.36 and @ai-sdk/provider-utils to 5.0.75.

## Why it matters if you build agents

Developers using the xAI provider for voice agents can open a server-side realtime WebSocket with the SDK's configured credentials instead of wiring the connection by hand.

Code that passes output.upload_url to video generation must switch to output.uploadUrl, and the value must be an HTTPS URL since null is now rejected.
