@assistant-ui/react-data-stream
Advanced tools
@@ -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"} |
+4
-4
@@ -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 }; |
+4
-4
@@ -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":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,uBAAuB,EAAE,gDAA6C;AAO/E,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAsC/D,MAAM,wBAAwB;IAElB;IADV,YACU,OAGP;QAHO,YAAO,GAAP,OAAO,CAGd;IACA,CAAC;IAEJ,KAAK,CAAC,CAAC,GAAG,CAAC,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACC;QACpB,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU;YACxC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAE3B,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;YACrC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAExB,WAAW,CAAC,gBAAgB,CAC1B,OAAO,EACP,GAAG,EAAE;YACH,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7D,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,aAAa;YACtD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;oBAC1C,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB;iBACxD,CAAgD;gBACjD,KAAK,EAAE,iBAAiB,CACtB,OAAO,CAAC,KAAK,IAAI,EAAE,CACmC;gBACxD,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,iBAAiB,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE;oBACjC,CAAC,CAAC,EAAE,CAAC;gBACP,SAAS;gBACT,KAAK,EAAE,mBAAmB,EAAE,CAAC,QAAQ,CAAC,cAAc,IAAI,SAAS;gBACjE,GAAG,OAAO,CAAC,YAAY;gBACvB,GAAG,OAAO,CAAC,MAAM;gBACjB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;aACqB,CAAC;YAC5C,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,MAAM,KAAK,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,mBAAmB,CAAC;YAC9D,MAAM,OAAO,GACX,QAAQ,KAAK,mBAAmB;gBAC9B,CAAC,CAAC,IAAI,sBAAsB,CACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3D;gBACH,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI;iBACvB,WAAW,CAAC,OAAO,CAAC;iBACpB,WAAW,CACV,yBAAyB,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;gBACzD,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;YACJ,CAAC,CAAC,CACH;iBACA,WAAW,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAC;YAElD,KAAK,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;YACvC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAoC,EAClB,EAAE;IACpB,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,GACzC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAEpC,OAAO,eAAe,CACpB,IAAI,wBAAwB,CAAC,YAAY,CAAC,EAC1C,mBAAmB,CACpB,CAAC;AACJ,CAAC,CAAC"} | ||
| {"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"} |
+6
-6
| { | ||
| "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": { |
+33
-1
| # `@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"} |
36344
18.07%36
800%21
-8.7%520
-2.44%Updated
Updated