AI SDK
Provider-agnostic inference contract and canonical stream lifecycle.
The AI SDK (packages/ai) is request-first and provider-agnostic. It does not model Conversations or persist telemetry.
Public API
createAiSdk(initialProviders?)registerProvider(provider)complete(messages, options)stream(messages, options)
Core types include:
ChatMessage:{ role: "system" | "user" | "assistant", content: string }ProviderAdapter: requiresname,defaultModel, andcomplete(...);stream(...)is optionalStreamEventcanonical types:response_startfirst_tokentext_deltausagerequest_end
Stream normalization behavior
aiSdk.stream(...) guarantees canonical lifecycle behavior even when providers are incomplete:
- If a provider lacks
stream(), SDK falls back tocomplete()and emits:response_start -> first_token? -> text_delta? -> usage({}) -> request_end - If provider streaming omits canonical events, SDK backfills missing
response_start,usage, andrequest_end. - Duplicate
first_token,usage, andrequest_endare deduplicated.
This behavior is verified in packages/ai/src/sdk.test.ts.
Raw payload hooks
CompleteOptions and stream options support telemetry hooks:
onRawRequest(payload)onRawResponse(payload)
The OpenAI-compatible adapter uses these hooks to forward provider request/chunk payloads to the caller.
OpenAI-compatible adapter
createOpenAICompatibleAdapter(...):
- uses OpenAI chat completions API
- normalizes base URL to include
/v1unless already versioned - maps
maxTokenstomax_tokens - supports buffered (
complete) and streaming (stream) inference