Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@assistant-ui/react-data-stream

Package Overview
Dependencies
Maintainers
2
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@assistant-ui/react-data-stream - npm Package Compare versions

Comparing version
0.12.13
to
0.12.14
+8
-4
dist/converters/toLanguageModelMessages.d.ts

@@ -1,3 +0,5 @@

import type { LanguageModelV2Message } from "@ai-sdk/provider";
import type { ThreadMessage } from "@assistant-ui/core";
import { LanguageModelV2Message } from "@ai-sdk/provider";
import { ThreadMessage } from "@assistant-ui/core";
//#region src/converters/toLanguageModelMessages.d.ts
/**

@@ -7,5 +9,7 @@ * @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.

*/
export declare function toLanguageModelMessages(messages: readonly ThreadMessage[], options?: {
unstable_includeId?: boolean | undefined;
declare function toLanguageModelMessages(messages: readonly ThreadMessage[], options?: {
unstable_includeId?: boolean | undefined;
}): LanguageModelV2Message[];
//#endregion
export { toLanguageModelMessages };
//# sourceMappingURL=toLanguageModelMessages.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAiFxD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAoC1B"}
{"version":3,"file":"toLanguageModelMessages.d.ts","names":[],"sources":["../../src/converters/toLanguageModelMessages.ts"],"mappings":";;;;;;AA6FA;;iBAAgB,uBAAA,CACd,QAAA,WAAmB,aAAA,IACnB,OAAA;EAAW,kBAAA;AAAA,IACV,sBAAsB"}

@@ -1,95 +0,92 @@

import { toGenericMessages, } from "assistant-stream";
import { toGenericMessages } from "assistant-stream";
//#region src/converters/toLanguageModelMessages.ts
function toUrl(value) {
if (value instanceof URL)
return value;
try {
return new URL(value);
}
catch {
// For relative URLs, create URL with a dummy base
return new URL(value, "file://");
}
if (value instanceof URL) return value;
try {
return new URL(value);
} catch {
return new URL(value, "file://");
}
}
function convertUserContent(content) {
return content.content.map((part) => {
if (part.type === "text") {
return part;
}
return {
type: "file",
data: toUrl(part.data),
mediaType: part.mediaType,
};
});
return content.content.map((part) => {
if (part.type === "text") return part;
return {
type: "file",
data: toUrl(part.data),
mediaType: part.mediaType
};
});
}
function convertAssistantContent(content) {
return content.map((part) => {
if (part.type === "text") {
return part;
}
return {
type: "tool-call",
toolCallId: part.toolCallId,
toolName: part.toolName,
input: part.args,
};
});
return content.map((part) => {
if (part.type === "text") return part;
return {
type: "tool-call",
toolCallId: part.toolCallId,
toolName: part.toolName,
input: part.args
};
});
}
function convertToolContent(content) {
return content.map((part) => ({
type: "tool-result",
toolCallId: part.toolCallId,
toolName: part.toolName,
output: part.isError
? { type: "error-json", value: part.result }
: { type: "json", value: part.result },
}));
return content.map((part) => ({
type: "tool-result",
toolCallId: part.toolCallId,
toolName: part.toolName,
output: part.isError ? {
type: "error-json",
value: part.result
} : {
type: "json",
value: part.result
}
}));
}
function convertGenericToLanguageModel(generic) {
switch (generic.role) {
case "system":
return { role: "system", content: generic.content };
case "user":
return { role: "user", content: convertUserContent(generic) };
case "assistant":
return {
role: "assistant",
content: convertAssistantContent(generic.content),
};
case "tool":
return { role: "tool", content: convertToolContent(generic.content) };
}
switch (generic.role) {
case "system": return {
role: "system",
content: generic.content
};
case "user": return {
role: "user",
content: convertUserContent(generic)
};
case "assistant": return {
role: "assistant",
content: convertAssistantContent(generic.content)
};
case "tool": return {
role: "tool",
content: convertToolContent(generic.content)
};
}
}
/**
* @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.
* This function is kept for AI SDK compatibility.
*/
export function toLanguageModelMessages(messages, options = {}) {
const includeId = options.unstable_includeId ?? false;
const genericMessages = toGenericMessages(messages);
if (!includeId) {
return genericMessages.map(convertGenericToLanguageModel);
}
// When includeId is true, we need to map back to original message IDs
const result = [];
let messageIndex = 0;
for (const generic of genericMessages) {
const converted = convertGenericToLanguageModel(generic);
// Tool messages are synthesized from assistant message tool calls,
// they don't have a corresponding original message
if (generic.role !== "tool") {
// Find the corresponding original message for ID
while (messageIndex < messages.length &&
messages[messageIndex].role !== generic.role) {
messageIndex++;
}
if (messageIndex < messages.length) {
converted.unstable_id = messages[messageIndex].id;
messageIndex++;
}
}
result.push(converted);
}
return result;
* @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.
* This function is kept for AI SDK compatibility.
*/
function toLanguageModelMessages(messages, options = {}) {
const includeId = options.unstable_includeId ?? false;
const genericMessages = toGenericMessages(messages);
if (!includeId) return genericMessages.map(convertGenericToLanguageModel);
const result = [];
let messageIndex = 0;
for (const generic of genericMessages) {
const converted = convertGenericToLanguageModel(generic);
if (generic.role !== "tool") {
while (messageIndex < messages.length && messages[messageIndex].role !== generic.role) messageIndex++;
if (messageIndex < messages.length) {
converted.unstable_id = messages[messageIndex].id;
messageIndex++;
}
}
result.push(converted);
}
return result;
}
//#endregion
export { toLanguageModelMessages };
//# sourceMappingURL=toLanguageModelMessages.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"toLanguageModelMessages.js","names":[],"sources":["../../src/converters/toLanguageModelMessages.ts"],"sourcesContent":["import type {\n JSONValue,\n LanguageModelV2FilePart,\n LanguageModelV2Message,\n LanguageModelV2TextPart,\n LanguageModelV2ToolCallPart,\n LanguageModelV2ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport type { ThreadMessage } from \"@assistant-ui/core\";\nimport {\n toGenericMessages,\n type GenericMessage,\n type GenericTextPart,\n type GenericToolCallPart,\n type GenericToolResultPart,\n} from \"assistant-stream\";\n\nfunction toUrl(value: string | URL): URL {\n if (value instanceof URL) return value;\n try {\n return new URL(value);\n } catch {\n // For relative URLs, create URL with a dummy base\n return new URL(value, \"file://\");\n }\n}\n\nfunction convertUserContent(\n content: GenericMessage & { role: \"user\" },\n): (LanguageModelV2TextPart | LanguageModelV2FilePart)[] {\n return content.content.map((part) => {\n if (part.type === \"text\") {\n return part;\n }\n return {\n type: \"file\",\n data: toUrl(part.data),\n mediaType: part.mediaType,\n };\n });\n}\n\nfunction convertAssistantContent(\n content: (GenericTextPart | GenericToolCallPart)[],\n): (LanguageModelV2TextPart | LanguageModelV2ToolCallPart)[] {\n return content.map((part) => {\n if (part.type === \"text\") {\n return part;\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n };\n });\n}\n\nfunction convertToolContent(\n content: GenericToolResultPart[],\n): LanguageModelV2ToolResultPart[] {\n return content.map((part) => ({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.isError\n ? { type: \"error-json\", value: part.result as JSONValue }\n : { type: \"json\", value: part.result as JSONValue },\n }));\n}\n\nfunction convertGenericToLanguageModel(\n generic: GenericMessage,\n): LanguageModelV2Message {\n switch (generic.role) {\n case \"system\":\n return { role: \"system\", content: generic.content };\n case \"user\":\n return { role: \"user\", content: convertUserContent(generic) };\n case \"assistant\":\n return {\n role: \"assistant\",\n content: convertAssistantContent(generic.content),\n };\n case \"tool\":\n return { role: \"tool\", content: convertToolContent(generic.content) };\n }\n}\n\n/**\n * @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.\n * This function is kept for AI SDK compatibility.\n */\nexport function toLanguageModelMessages(\n messages: readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV2Message[] {\n const includeId = options.unstable_includeId ?? false;\n const genericMessages = toGenericMessages(messages as any);\n\n if (!includeId) {\n return genericMessages.map(convertGenericToLanguageModel);\n }\n\n // When includeId is true, we need to map back to original message IDs\n const result: LanguageModelV2Message[] = [];\n let messageIndex = 0;\n\n for (const generic of genericMessages) {\n const converted = convertGenericToLanguageModel(generic);\n\n // Tool messages are synthesized from assistant message tool calls,\n // they don't have a corresponding original message\n if (generic.role !== \"tool\") {\n // Find the corresponding original message for ID\n while (\n messageIndex < messages.length &&\n messages[messageIndex]!.role !== generic.role\n ) {\n messageIndex++;\n }\n\n if (messageIndex < messages.length) {\n (converted as any).unstable_id = messages[messageIndex]!.id;\n messageIndex++;\n }\n }\n\n result.push(converted);\n }\n\n return result;\n}\n"],"mappings":";;AAiBA,SAAS,MAAM,OAA0B;CACvC,IAAI,iBAAiB,KAAK,OAAO;CACjC,IAAI;EACF,OAAO,IAAI,IAAI,KAAK;CACtB,QAAQ;EAEN,OAAO,IAAI,IAAI,OAAO,SAAS;CACjC;AACF;AAEA,SAAS,mBACP,SACuD;CACvD,OAAO,QAAQ,QAAQ,KAAK,SAAS;EACnC,IAAI,KAAK,SAAS,QAChB,OAAO;EAET,OAAO;GACL,MAAM;GACN,MAAM,MAAM,KAAK,IAAI;GACrB,WAAW,KAAK;EAClB;CACF,CAAC;AACH;AAEA,SAAS,wBACP,SAC2D;CAC3D,OAAO,QAAQ,KAAK,SAAS;EAC3B,IAAI,KAAK,SAAS,QAChB,OAAO;EAET,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,OAAO,KAAK;EACd;CACF,CAAC;AACH;AAEA,SAAS,mBACP,SACiC;CACjC,OAAO,QAAQ,KAAK,UAAU;EAC5B,MAAM;EACN,YAAY,KAAK;EACjB,UAAU,KAAK;EACf,QAAQ,KAAK,UACT;GAAE,MAAM;GAAc,OAAO,KAAK;EAAoB,IACtD;GAAE,MAAM;GAAQ,OAAO,KAAK;EAAoB;CACtD,EAAE;AACJ;AAEA,SAAS,8BACP,SACwB;CACxB,QAAQ,QAAQ,MAAhB;EACE,KAAK,UACH,OAAO;GAAE,MAAM;GAAU,SAAS,QAAQ;EAAQ;EACpD,KAAK,QACH,OAAO;GAAE,MAAM;GAAQ,SAAS,mBAAmB,OAAO;EAAE;EAC9D,KAAK,aACH,OAAO;GACL,MAAM;GACN,SAAS,wBAAwB,QAAQ,OAAO;EAClD;EACF,KAAK,QACH,OAAO;GAAE,MAAM;GAAQ,SAAS,mBAAmB,QAAQ,OAAO;EAAE;CACxE;AACF;;;;;AAMA,SAAgB,wBACd,UACA,UAAwD,CAAC,GAC/B;CAC1B,MAAM,YAAY,QAAQ,sBAAsB;CAChD,MAAM,kBAAkB,kBAAkB,QAAe;CAEzD,IAAI,CAAC,WACH,OAAO,gBAAgB,IAAI,6BAA6B;CAI1D,MAAM,SAAmC,CAAC;CAC1C,IAAI,eAAe;CAEnB,KAAK,MAAM,WAAW,iBAAiB;EACrC,MAAM,YAAY,8BAA8B,OAAO;EAIvD,IAAI,QAAQ,SAAS,QAAQ;GAE3B,OACE,eAAe,SAAS,UACxB,SAAS,cAAe,SAAS,QAAQ,MAEzC;GAGF,IAAI,eAAe,SAAS,QAAQ;IAClC,UAAmB,cAAc,SAAS,cAAe;IACzD;GACF;EACF;EAEA,OAAO,KAAK,SAAS;CACvB;CAEA,OAAO;AACT"}

@@ -1,4 +0,4 @@

export * from "./useDataStreamRuntime.js";
export * from "./useCloudRuntime.js";
export { toLanguageModelMessages } from "./converters/toLanguageModelMessages.js";
//# sourceMappingURL=index.d.ts.map
import { toLanguageModelMessages } from "./converters/toLanguageModelMessages.js";
import { DataStreamProtocol, UseDataStreamRuntimeOptions, useDataStreamRuntime } from "./useDataStreamRuntime.js";
import { useCloudRuntime } from "./useCloudRuntime.js";
export { DataStreamProtocol, UseDataStreamRuntimeOptions, toLanguageModelMessages, useCloudRuntime, useDataStreamRuntime };

@@ -1,4 +0,4 @@

export * from "./useDataStreamRuntime.js";
export * from "./useCloudRuntime.js";
export { toLanguageModelMessages } from "./converters/toLanguageModelMessages.js";
//# sourceMappingURL=index.js.map
import { toLanguageModelMessages } from "./converters/toLanguageModelMessages.js";
import { useDataStreamRuntime } from "./useDataStreamRuntime.js";
import { useCloudRuntime } from "./useCloudRuntime.js";
export { toLanguageModelMessages, useCloudRuntime, useDataStreamRuntime };

@@ -1,6 +0,8 @@

import type { AssistantCloud } from "assistant-cloud";
import { type UseDataStreamRuntimeOptions } from "./useDataStreamRuntime.js";
import { UseDataStreamRuntimeOptions } from "./useDataStreamRuntime.js";
import { AssistantCloud } from "assistant-cloud";
//#region src/useCloudRuntime.d.ts
type UseCloudRuntimeOptions = Omit<UseDataStreamRuntimeOptions, "api"> & {
cloud: AssistantCloud;
assistantId: string;
cloud: AssistantCloud;
assistantId: string;
};

@@ -10,4 +12,5 @@ /**

*/
export declare const useCloudRuntime: (options: UseCloudRuntimeOptions) => import("@assistant-ui/core").AssistantRuntime;
export {};
declare const useCloudRuntime: (options: UseCloudRuntimeOptions) => import("@assistant-ui/core").AssistantRuntime;
//#endregion
export { useCloudRuntime };
//# sourceMappingURL=useCloudRuntime.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useCloudRuntime.d.ts","sourceRoot":"","sources":["../src/useCloudRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAEL,KAAK,2BAA2B,EACjC,kCAA+B;AAEhC,KAAK,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,GAAG;IACvE,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,sBAAsB,kDAS9D,CAAC"}
{"version":3,"file":"useCloudRuntime.d.ts","names":[],"sources":["../src/useCloudRuntime.ts"],"mappings":";;;;KAMK,sBAAA,GAAyB,IAAA,CAAK,2BAAA;EACjC,KAAA,EAAO,cAAA;EACP,WAAA;AAAA;;;;cAMW,eAAA,GAAmB,OAAA,EAAS,sBAAsB,kCAAA,gBAAA"}

@@ -1,12 +0,16 @@

import { useDataStreamRuntime, } from "./useDataStreamRuntime.js";
import { useDataStreamRuntime } from "./useDataStreamRuntime.js";
//#region src/useCloudRuntime.ts
/**
* @deprecated This is under active development and not yet ready for prod use.
*/
export const useCloudRuntime = (options) => {
const opts = options.cloud.runs.__internal_getAssistantOptions(options.assistantId);
return useDataStreamRuntime({
...options,
...opts,
});
* @deprecated This is under active development and not yet ready for prod use.
*/
const useCloudRuntime = (options) => {
const opts = options.cloud.runs.__internal_getAssistantOptions(options.assistantId);
return useDataStreamRuntime({
...options,
...opts
});
};
//#endregion
export { useCloudRuntime };
//# sourceMappingURL=useCloudRuntime.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useCloudRuntime.js","sourceRoot":"","sources":["../src/useCloudRuntime.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,GAErB,kCAA+B;AAOhC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA+B,EAAE,EAAE;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAC5D,OAAO,CAAC,WAAW,CACpB,CAAC;IAEF,OAAO,oBAAoB,CAAC;QAC1B,GAAG,OAAO;QACV,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
{"version":3,"file":"useCloudRuntime.js","names":[],"sources":["../src/useCloudRuntime.ts"],"sourcesContent":["import type { AssistantCloud } from \"assistant-cloud\";\nimport {\n useDataStreamRuntime,\n type UseDataStreamRuntimeOptions,\n} from \"./useDataStreamRuntime\";\n\ntype UseCloudRuntimeOptions = Omit<UseDataStreamRuntimeOptions, \"api\"> & {\n cloud: AssistantCloud;\n assistantId: string;\n};\n\n/**\n * @deprecated This is under active development and not yet ready for prod use.\n */\nexport const useCloudRuntime = (options: UseCloudRuntimeOptions) => {\n const opts = options.cloud.runs.__internal_getAssistantOptions(\n options.assistantId,\n );\n\n return useDataStreamRuntime({\n ...options,\n ...opts,\n });\n};\n"],"mappings":";;;;;AAcA,MAAa,mBAAmB,YAAoC;CAClE,MAAM,OAAO,QAAQ,MAAM,KAAK,+BAC9B,QAAQ,WACV;CAEA,OAAO,qBAAqB;EAC1B,GAAG;EACH,GAAG;CACL,CAAC;AACH"}

@@ -1,27 +0,28 @@

import type { AssistantRuntime, ThreadMessage } from "@assistant-ui/core";
import { type LocalRuntimeOptions } from "@assistant-ui/core/react";
import { LocalRuntimeOptions } from "@assistant-ui/core/react";
import { AssistantRuntime, ThreadMessage } from "@assistant-ui/core";
//#region src/useDataStreamRuntime.d.ts
type HeadersValue = Record<string, string> | Headers;
export type DataStreamProtocol = "ui-message-stream" | "data-stream";
export type UseDataStreamRuntimeOptions = {
api: string;
/** Defaults to "ui-message-stream". Use "data-stream" for legacy AI SDK. */
protocol?: DataStreamProtocol;
/** Callback for data-* parts (ui-message-stream only). */
onData?: (data: {
type: string;
name: string;
data: unknown;
transient?: boolean;
}) => void;
onResponse?: (response: Response) => void | Promise<void>;
onFinish?: (message: ThreadMessage) => void;
onError?: (error: Error) => void;
onCancel?: () => void;
credentials?: RequestCredentials;
headers?: HeadersValue | (() => Promise<HeadersValue>);
body?: object | (() => Promise<object | undefined>);
sendExtraMessageFields?: boolean;
type DataStreamProtocol = "ui-message-stream" | "data-stream";
type UseDataStreamRuntimeOptions = {
api: string; /** Defaults to "ui-message-stream". Use "data-stream" for legacy AI SDK. */
protocol?: DataStreamProtocol; /** Callback for data-* parts (ui-message-stream only). */
onData?: (data: {
type: string;
name: string;
data: unknown;
transient?: boolean;
}) => void;
onResponse?: (response: Response) => void | Promise<void>;
onFinish?: (message: ThreadMessage) => void;
onError?: (error: Error) => void;
onCancel?: () => void;
credentials?: RequestCredentials;
headers?: HeadersValue | (() => Promise<HeadersValue>);
body?: object | (() => Promise<object | undefined>);
sendExtraMessageFields?: boolean;
} & LocalRuntimeOptions;
export declare const useDataStreamRuntime: (options: UseDataStreamRuntimeOptions) => AssistantRuntime;
export {};
declare const useDataStreamRuntime: (options: UseDataStreamRuntimeOptions) => AssistantRuntime;
//#endregion
export { DataStreamProtocol, UseDataStreamRuntimeOptions, useDataStreamRuntime };
//# sourceMappingURL=useDataStreamRuntime.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useDataStreamRuntime.d.ts","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAGhB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAUlC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAErE,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACpD,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,mBAAmB,CAAC;AAqHxB,eAAO,MAAM,oBAAoB,GAC/B,SAAS,2BAA2B,KACnC,gBAQF,CAAC"}
{"version":3,"file":"useDataStreamRuntime.d.ts","names":[],"sources":["../src/useDataStreamRuntime.ts"],"mappings":";;;;KAuBK,YAAA,GAAe,MAAA,mBAAyB,OAAO;AAAA,KAExC,kBAAA;AAAA,KAEA,2BAAA;EACV,GAAA;EAEA,QAAA,GAAW,kBAAA,EAPuC;EASlD,MAAA,IAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,IAAA;IACA,SAAA;EAAA;EAEF,UAAA,IAAc,QAAA,EAAU,QAAA,YAAoB,OAAA;EAC5C,QAAA,IAAY,OAAA,EAAS,aAAA;EACrB,OAAA,IAAW,KAAA,EAAO,KAAA;EAClB,QAAA;EACA,WAAA,GAAc,kBAAA;EACd,OAAA,GAAU,YAAA,UAAsB,OAAA,CAAQ,YAAA;EACxC,IAAA,mBAAuB,OAAA;EACvB,sBAAA;AAAA,IACE,mBAAA;AAAA,cAqHS,oBAAA,GACX,OAAA,EAAS,2BAAA,KACR,gBAQF"}
"use client";
import { toLanguageModelMessages } from "./converters/toLanguageModelMessages.js";
import { useLocalRuntime, splitLocalRuntimeOptions, } from "@assistant-ui/core/react";
import { AssistantMessageAccumulator, DataStreamDecoder, toToolsJSONSchema, UIMessageStreamDecoder, unstable_toolResultStream, } from "assistant-stream";
import { AssistantMessageAccumulator, DataStreamDecoder, UIMessageStreamDecoder, toToolsJSONSchema, unstable_toolResultStream } from "assistant-stream";
import { splitLocalRuntimeOptions, useLocalRuntime } from "@assistant-ui/core/react";
import { asAsyncIterableStream } from "assistant-stream/utils";
class DataStreamRuntimeAdapter {
options;
constructor(options) {
this.options = options;
}
async *run({ messages, runConfig, abortSignal, context, unstable_assistantMessageId, unstable_threadId, unstable_parentId, unstable_getMessage, }) {
const headersValue = typeof this.options.headers === "function"
? await this.options.headers()
: this.options.headers;
const bodyValue = typeof this.options.body === "function"
? await this.options.body()
: this.options.body;
abortSignal.addEventListener("abort", () => {
if (!abortSignal.reason?.detach)
this.options.onCancel?.();
}, { once: true });
const headers = new Headers(headersValue);
headers.set("Content-Type", "application/json");
const result = await fetch(this.options.api, {
method: "POST",
headers,
credentials: this.options.credentials ?? "same-origin",
body: JSON.stringify({
system: context.system,
messages: toLanguageModelMessages(messages, {
unstable_includeId: this.options.sendExtraMessageFields,
}),
tools: toToolsJSONSchema(context.tools ?? {}),
...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
...(unstable_threadId ? { threadId: unstable_threadId } : {}),
...(unstable_parentId !== undefined
? { parentId: unstable_parentId }
: {}),
runConfig,
state: unstable_getMessage().metadata.unstable_state || undefined,
...context.callSettings,
...context.config,
...(bodyValue ?? {}),
}),
signal: abortSignal,
});
await this.options.onResponse?.(result);
try {
if (!result.ok) {
throw new Error(`Status ${result.status}: ${await result.text()}`);
}
if (!result.body) {
throw new Error("Response body is null");
}
const protocol = this.options.protocol ?? "ui-message-stream";
const decoder = protocol === "ui-message-stream"
? new UIMessageStreamDecoder(this.options.onData ? { onData: this.options.onData } : {})
: new DataStreamDecoder();
const stream = result.body
.pipeThrough(decoder)
.pipeThrough(unstable_toolResultStream(context.tools, abortSignal, () => {
throw new Error("Tool interrupt is not supported in data stream runtime");
}))
.pipeThrough(new AssistantMessageAccumulator());
yield* asAsyncIterableStream(stream);
this.options.onFinish?.(unstable_getMessage());
}
catch (error) {
this.options.onError?.(error);
throw error;
}
}
}
export const useDataStreamRuntime = (options) => {
const { localRuntimeOptions, otherOptions } = splitLocalRuntimeOptions(options);
return useLocalRuntime(new DataStreamRuntimeAdapter(otherOptions), localRuntimeOptions);
//#region src/useDataStreamRuntime.ts
var DataStreamRuntimeAdapter = class {
options;
constructor(options) {
this.options = options;
}
async *run({ messages, runConfig, abortSignal, context, unstable_assistantMessageId, unstable_threadId, unstable_parentId, unstable_getMessage }) {
const headersValue = typeof this.options.headers === "function" ? await this.options.headers() : this.options.headers;
const bodyValue = typeof this.options.body === "function" ? await this.options.body() : this.options.body;
abortSignal.addEventListener("abort", () => {
if (!abortSignal.reason?.detach) this.options.onCancel?.();
}, { once: true });
const headers = new Headers(headersValue);
headers.set("Content-Type", "application/json");
const result = await fetch(this.options.api, {
method: "POST",
headers,
credentials: this.options.credentials ?? "same-origin",
body: JSON.stringify({
system: context.system,
messages: toLanguageModelMessages(messages, { unstable_includeId: this.options.sendExtraMessageFields }),
tools: toToolsJSONSchema(context.tools ?? {}),
...unstable_assistantMessageId ? { unstable_assistantMessageId } : {},
...unstable_threadId ? { threadId: unstable_threadId } : {},
...unstable_parentId !== void 0 ? { parentId: unstable_parentId } : {},
runConfig,
state: unstable_getMessage().metadata.unstable_state || void 0,
...context.callSettings,
...context.config,
...bodyValue ?? {}
}),
signal: abortSignal
});
await this.options.onResponse?.(result);
try {
if (!result.ok) throw new Error(`Status ${result.status}: ${await result.text()}`);
if (!result.body) throw new Error("Response body is null");
const decoder = (this.options.protocol ?? "ui-message-stream") === "ui-message-stream" ? new UIMessageStreamDecoder(this.options.onData ? { onData: this.options.onData } : {}) : new DataStreamDecoder();
yield* asAsyncIterableStream(result.body.pipeThrough(decoder).pipeThrough(unstable_toolResultStream(context.tools, abortSignal, () => {
throw new Error("Tool interrupt is not supported in data stream runtime");
})).pipeThrough(new AssistantMessageAccumulator()));
this.options.onFinish?.(unstable_getMessage());
} catch (error) {
this.options.onError?.(error);
throw error;
}
}
};
const useDataStreamRuntime = (options) => {
const { localRuntimeOptions, otherOptions } = splitLocalRuntimeOptions(options);
return useLocalRuntime(new DataStreamRuntimeAdapter(otherOptions), localRuntimeOptions);
};
//#endregion
export { useDataStreamRuntime };
//# sourceMappingURL=useDataStreamRuntime.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useDataStreamRuntime.js","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"useDataStreamRuntime.js","names":[],"sources":["../src/useDataStreamRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { toLanguageModelMessages } from \"./converters/toLanguageModelMessages\";\nimport type {\n AssistantRuntime,\n ChatModelAdapter,\n ChatModelRunOptions,\n ThreadMessage,\n} from \"@assistant-ui/core\";\nimport {\n useLocalRuntime,\n splitLocalRuntimeOptions,\n type LocalRuntimeOptions,\n} from \"@assistant-ui/core/react\";\nimport {\n AssistantMessageAccumulator,\n DataStreamDecoder,\n toToolsJSONSchema,\n UIMessageStreamDecoder,\n unstable_toolResultStream,\n} from \"assistant-stream\";\nimport { asAsyncIterableStream } from \"assistant-stream/utils\";\n\ntype HeadersValue = Record<string, string> | Headers;\n\nexport type DataStreamProtocol = \"ui-message-stream\" | \"data-stream\";\n\nexport type UseDataStreamRuntimeOptions = {\n api: string;\n /** Defaults to \"ui-message-stream\". Use \"data-stream\" for legacy AI SDK. */\n protocol?: DataStreamProtocol;\n /** Callback for data-* parts (ui-message-stream only). */\n onData?: (data: {\n type: string;\n name: string;\n data: unknown;\n transient?: boolean;\n }) => void;\n onResponse?: (response: Response) => void | Promise<void>;\n onFinish?: (message: ThreadMessage) => void;\n onError?: (error: Error) => void;\n onCancel?: () => void;\n credentials?: RequestCredentials;\n headers?: HeadersValue | (() => Promise<HeadersValue>);\n body?: object | (() => Promise<object | undefined>);\n sendExtraMessageFields?: boolean;\n} & LocalRuntimeOptions;\n\ntype DataStreamRuntimeRequestOptions = {\n messages: any[];\n tools: any;\n system?: string | undefined;\n runConfig?: any;\n unstable_assistantMessageId?: string;\n threadId?: string;\n parentId?: string | null;\n state?: any;\n};\n\nclass DataStreamRuntimeAdapter implements ChatModelAdapter {\n constructor(\n private options: Omit<\n UseDataStreamRuntimeOptions,\n keyof LocalRuntimeOptions\n >,\n ) {}\n\n async *run({\n messages,\n runConfig,\n abortSignal,\n context,\n unstable_assistantMessageId,\n unstable_threadId,\n unstable_parentId,\n unstable_getMessage,\n }: ChatModelRunOptions) {\n const headersValue =\n typeof this.options.headers === \"function\"\n ? await this.options.headers()\n : this.options.headers;\n\n const bodyValue =\n typeof this.options.body === \"function\"\n ? await this.options.body()\n : this.options.body;\n\n abortSignal.addEventListener(\n \"abort\",\n () => {\n if (!abortSignal.reason?.detach) this.options.onCancel?.();\n },\n { once: true },\n );\n\n const headers = new Headers(headersValue);\n headers.set(\"Content-Type\", \"application/json\");\n\n const result = await fetch(this.options.api, {\n method: \"POST\",\n headers,\n credentials: this.options.credentials ?? \"same-origin\",\n body: JSON.stringify({\n system: context.system,\n messages: toLanguageModelMessages(messages, {\n unstable_includeId: this.options.sendExtraMessageFields,\n }) as DataStreamRuntimeRequestOptions[\"messages\"],\n tools: toToolsJSONSchema(\n context.tools ?? {},\n ) as unknown as DataStreamRuntimeRequestOptions[\"tools\"],\n ...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),\n ...(unstable_threadId ? { threadId: unstable_threadId } : {}),\n ...(unstable_parentId !== undefined\n ? { parentId: unstable_parentId }\n : {}),\n runConfig,\n state: unstable_getMessage().metadata.unstable_state || undefined,\n ...context.callSettings,\n ...context.config,\n ...(bodyValue ?? {}),\n } satisfies DataStreamRuntimeRequestOptions),\n signal: abortSignal,\n });\n\n await this.options.onResponse?.(result);\n\n try {\n if (!result.ok) {\n throw new Error(`Status ${result.status}: ${await result.text()}`);\n }\n if (!result.body) {\n throw new Error(\"Response body is null\");\n }\n\n const protocol = this.options.protocol ?? \"ui-message-stream\";\n const decoder =\n protocol === \"ui-message-stream\"\n ? new UIMessageStreamDecoder(\n this.options.onData ? { onData: this.options.onData } : {},\n )\n : new DataStreamDecoder();\n\n const stream = result.body\n .pipeThrough(decoder)\n .pipeThrough(\n unstable_toolResultStream(context.tools, abortSignal, () => {\n throw new Error(\n \"Tool interrupt is not supported in data stream runtime\",\n );\n }),\n )\n .pipeThrough(new AssistantMessageAccumulator());\n\n yield* asAsyncIterableStream(stream);\n\n this.options.onFinish?.(unstable_getMessage());\n } catch (error: unknown) {\n this.options.onError?.(error as Error);\n throw error;\n }\n }\n}\n\nexport const useDataStreamRuntime = (\n options: UseDataStreamRuntimeOptions,\n): AssistantRuntime => {\n const { localRuntimeOptions, otherOptions } =\n splitLocalRuntimeOptions(options);\n\n return useLocalRuntime(\n new DataStreamRuntimeAdapter(otherOptions),\n localRuntimeOptions,\n );\n};\n"],"mappings":";;;;;;AA2DA,IAAM,2BAAN,MAA2D;CAE/C;CADV,YACE,SAIA;EAJQ,KAAA,UAAA;CAIP;CAEH,OAAO,IAAI,EACT,UACA,WACA,aACA,SACA,6BACA,mBACA,mBACA,uBACsB;EACtB,MAAM,eACJ,OAAO,KAAK,QAAQ,YAAY,aAC5B,MAAM,KAAK,QAAQ,QAAQ,IAC3B,KAAK,QAAQ;EAEnB,MAAM,YACJ,OAAO,KAAK,QAAQ,SAAS,aACzB,MAAM,KAAK,QAAQ,KAAK,IACxB,KAAK,QAAQ;EAEnB,YAAY,iBACV,eACM;GACJ,IAAI,CAAC,YAAY,QAAQ,QAAQ,KAAK,QAAQ,WAAW;EAC3D,GACA,EAAE,MAAM,KAAK,CACf;EAEA,MAAM,UAAU,IAAI,QAAQ,YAAY;EACxC,QAAQ,IAAI,gBAAgB,kBAAkB;EAE9C,MAAM,SAAS,MAAM,MAAM,KAAK,QAAQ,KAAK;GAC3C,QAAQ;GACR;GACA,aAAa,KAAK,QAAQ,eAAe;GACzC,MAAM,KAAK,UAAU;IACnB,QAAQ,QAAQ;IAChB,UAAU,wBAAwB,UAAU,EAC1C,oBAAoB,KAAK,QAAQ,uBACnC,CAAC;IACD,OAAO,kBACL,QAAQ,SAAS,CAAC,CACpB;IACA,GAAI,8BAA8B,EAAE,4BAA4B,IAAI,CAAC;IACrE,GAAI,oBAAoB,EAAE,UAAU,kBAAkB,IAAI,CAAC;IAC3D,GAAI,sBAAsB,KAAA,IACtB,EAAE,UAAU,kBAAkB,IAC9B,CAAC;IACL;IACA,OAAO,oBAAoB,EAAE,SAAS,kBAAkB,KAAA;IACxD,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAI,aAAa,CAAC;GACpB,CAA2C;GAC3C,QAAQ;EACV,CAAC;EAED,MAAM,KAAK,QAAQ,aAAa,MAAM;EAEtC,IAAI;GACF,IAAI,CAAC,OAAO,IACV,MAAM,IAAI,MAAM,UAAU,OAAO,OAAO,IAAI,MAAM,OAAO,KAAK,GAAG;GAEnE,IAAI,CAAC,OAAO,MACV,MAAM,IAAI,MAAM,uBAAuB;GAIzC,MAAM,WADW,KAAK,QAAQ,YAAY,yBAE3B,sBACT,IAAI,uBACF,KAAK,QAAQ,SAAS,EAAE,QAAQ,KAAK,QAAQ,OAAO,IAAI,CAAC,CAC3D,IACA,IAAI,kBAAkB;GAa5B,OAAO,sBAXQ,OAAO,KACnB,YAAY,OAAO,EACnB,YACC,0BAA0B,QAAQ,OAAO,mBAAmB;IAC1D,MAAM,IAAI,MACR,wDACF;GACF,CAAC,CACH,EACC,YAAY,IAAI,4BAA4B,CAEb,CAAC;GAEnC,KAAK,QAAQ,WAAW,oBAAoB,CAAC;EAC/C,SAAS,OAAgB;GACvB,KAAK,QAAQ,UAAU,KAAc;GACrC,MAAM;EACR;CACF;AACF;AAEA,MAAa,wBACX,YACqB;CACrB,MAAM,EAAE,qBAAqB,iBAC3B,yBAAyB,OAAO;CAElC,OAAO,gBACL,IAAI,yBAAyB,YAAY,GACzC,mBACF;AACF"}
{
"name": "@assistant-ui/react-data-stream",
"version": "0.12.13",
"version": "0.12.14",
"description": "Data stream adapter for assistant-ui",

@@ -32,5 +32,5 @@ "keywords": [

"@ai-sdk/provider": "^3.0.10",
"@assistant-ui/core": "^0.2.0",
"@assistant-ui/core": "^0.2.5",
"assistant-cloud": "*",
"assistant-stream": "^0.3.13"
"assistant-stream": "^0.3.16"
},

@@ -48,5 +48,5 @@ "peerDependencies": {

"@types/json-schema": "^7.0.15",
"@types/react": "^19.2.14",
"react": "^19.2.5",
"@assistant-ui/x-buildutils": "0.0.7"
"@types/react": "^19.2.15",
"react": "^19.2.6",
"@assistant-ui/x-buildutils": "0.0.9"
},

@@ -53,0 +53,0 @@ "publishConfig": {

# `@assistant-ui/react-data-stream`
Data Stream protocol integration for `@assistant-ui/react`.
Data Stream protocol integration for `@assistant-ui/react`. Connects an assistant-ui runtime to any backend that speaks the AI SDK data-stream or UI-message-stream wire format.
## Installation
```bash
npm install @assistant-ui/react @assistant-ui/react-data-stream
```
## Usage
```tsx
"use client";
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
export function Provider({ children }: { children: React.ReactNode }) {
const runtime = useDataStreamRuntime({ api: "/api/chat" });
return (
<AssistantRuntimeProvider runtime={runtime}>
{children}
</AssistantRuntimeProvider>
);
}
```
## See also
- `@assistant-ui/react-ai-sdk` for direct Vercel AI SDK integration with frontend tool forwarding.
- `useCloudRuntime` (also exported from this package) for managed thread persistence backed by `assistant-cloud`.
Full API reference at [assistant-ui.com/docs/api-reference/integrations/react-data-stream](https://www.assistant-ui.com/docs/api-reference/integrations/react-data-stream).
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAuC;AACvC,qCAAkC;AAClC,OAAO,EAAE,uBAAuB,EAAE,gDAA6C"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAuC;AACvC,qCAAkC;AAClC,OAAO,EAAE,uBAAuB,EAAE,gDAA6C"}