npm.io
0.3.26 • Published 5d ago

assistant-stream

Licence
MIT
Version
0.3.26
Deps
3
Size
890 kB
Vulns
0
Weekly
0
Stars
11.2K

assistant-stream

npm version npm downloads bundle size GitHub stars

Framework-agnostic streaming primitives for AI assistant backends. Defines a chunked stream of typed events (text, tool calls, tool results, data parts, message metadata), encoders/decoders for several wire formats, and a server-side tool execution pipeline. Runs in any standard JavaScript runtime; no React or DOM dependencies.

Most apps reach assistant-stream indirectly through @assistant-ui/react-ai-sdk or @assistant-ui/react-data-stream, which handle the wire format for you. Install it directly when you are building a custom backend or a new integration package.

Installation

npm install assistant-stream

Usage

import { createAssistantStreamResponse } from "assistant-stream";

export async function POST(request: Request) {
  return createAssistantStreamResponse(async (controller) => {
    controller.appendText("Hello, ");
    controller.appendText("world!");
  });
}

createAssistantStreamResponse returns a standard Web Response, so it works out of the box with any Fetch-style route (Next.js App Router, Hono, Bun.serve, Deno, Cloudflare Workers). Frameworks that use their own response objects (Express, Fastify) need a small adapter: copy status and headers, then pipe response.body into the framework's writable stream. Avoid sending the Response body into a res object whose lifecycle is already controlled by the framework (that is the ERR_INVALID_STATE: Controller is already closed failure mode).

createAssistantStreamResponse emits the data stream wire format and sets the x-vercel-ai-data-stream: v1 response header. On the frontend, useDataStreamRuntime({ api }) detects that marker automatically; pass protocol: "data-stream" only if a custom proxy strips or hides the header.

For tool execution, pipe through ToolExecutionStream; for resumable streams (clients can reconnect and replay), import from the assistant-stream/resumable sub-path with a redis or ioredis adapter.

Sub-paths

., ./utils, ./resumable, ./resumable/redis, ./resumable/ioredis. The two Redis adapters are optional peer dependencies; install whichever client your stack already uses.

Full reference for encoders, tool execution, message conversion, and resumable streams at assistant-ui.com/docs/architecture.

Keywords