@langchain/react 0.3.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -523
- package/dist/context.cjs +12 -30
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts +22 -39
- package/dist/context.d.cts.map +1 -1
- package/dist/context.d.ts +22 -39
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +11 -29
- package/dist/context.js.map +1 -1
- package/dist/index.cjs +29 -30
- package/dist/index.d.cts +10 -7
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/selectors.cjs +178 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/selectors.d.cts +183 -0
- package/dist/selectors.d.cts.map +1 -0
- package/dist/selectors.d.ts +183 -0
- package/dist/selectors.d.ts.map +1 -0
- package/dist/selectors.js +168 -0
- package/dist/selectors.js.map +1 -0
- package/dist/suspense-stream.cjs +34 -159
- package/dist/suspense-stream.cjs.map +1 -1
- package/dist/suspense-stream.d.cts +15 -71
- package/dist/suspense-stream.d.cts.map +1 -1
- package/dist/suspense-stream.d.ts +15 -71
- package/dist/suspense-stream.d.ts.map +1 -1
- package/dist/suspense-stream.js +35 -158
- package/dist/suspense-stream.js.map +1 -1
- package/dist/use-audio-player.cjs +679 -0
- package/dist/use-audio-player.cjs.map +1 -0
- package/dist/use-audio-player.d.cts +161 -0
- package/dist/use-audio-player.d.cts.map +1 -0
- package/dist/use-audio-player.d.ts +161 -0
- package/dist/use-audio-player.d.ts.map +1 -0
- package/dist/use-audio-player.js +679 -0
- package/dist/use-audio-player.js.map +1 -0
- package/dist/use-media-url.cjs +49 -0
- package/dist/use-media-url.cjs.map +1 -0
- package/dist/use-media-url.d.cts +28 -0
- package/dist/use-media-url.d.cts.map +1 -0
- package/dist/use-media-url.d.ts +28 -0
- package/dist/use-media-url.d.ts.map +1 -0
- package/dist/use-media-url.js +49 -0
- package/dist/use-media-url.js.map +1 -0
- package/dist/use-projection.cjs +41 -0
- package/dist/use-projection.cjs.map +1 -0
- package/dist/use-projection.d.cts +27 -0
- package/dist/use-projection.d.cts.map +1 -0
- package/dist/use-projection.d.ts +27 -0
- package/dist/use-projection.d.ts.map +1 -0
- package/dist/use-projection.js +41 -0
- package/dist/use-projection.js.map +1 -0
- package/dist/use-stream.cjs +185 -0
- package/dist/use-stream.cjs.map +1 -0
- package/dist/use-stream.d.cts +184 -0
- package/dist/use-stream.d.cts.map +1 -0
- package/dist/use-stream.d.ts +184 -0
- package/dist/use-stream.d.ts.map +1 -0
- package/dist/use-stream.js +183 -0
- package/dist/use-stream.js.map +1 -0
- package/dist/use-video-player.cjs +218 -0
- package/dist/use-video-player.cjs.map +1 -0
- package/dist/use-video-player.d.cts +65 -0
- package/dist/use-video-player.d.cts.map +1 -0
- package/dist/use-video-player.d.ts +65 -0
- package/dist/use-video-player.d.ts.map +1 -0
- package/dist/use-video-player.js +218 -0
- package/dist/use-video-player.js.map +1 -0
- package/package.json +9 -8
- package/dist/stream.cjs +0 -18
- package/dist/stream.cjs.map +0 -1
- package/dist/stream.custom.cjs +0 -209
- package/dist/stream.custom.cjs.map +0 -1
- package/dist/stream.custom.d.cts +0 -3
- package/dist/stream.custom.d.ts +0 -3
- package/dist/stream.custom.js +0 -209
- package/dist/stream.custom.js.map +0 -1
- package/dist/stream.d.cts +0 -174
- package/dist/stream.d.cts.map +0 -1
- package/dist/stream.d.ts +0 -174
- package/dist/stream.d.ts.map +0 -1
- package/dist/stream.js +0 -18
- package/dist/stream.js.map +0 -1
- package/dist/stream.lgp.cjs +0 -671
- package/dist/stream.lgp.cjs.map +0 -1
- package/dist/stream.lgp.js +0 -671
- package/dist/stream.lgp.js.map +0 -1
- package/dist/thread.cjs +0 -18
- package/dist/thread.cjs.map +0 -1
- package/dist/thread.js +0 -18
- package/dist/thread.js.map +0 -1
- package/dist/types.d.cts +0 -109
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.ts +0 -109
- package/dist/types.d.ts.map +0 -1
package/dist/stream.lgp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.lgp.js","names":[],"sources":["../src/stream.lgp.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type {\n Message,\n ThreadState,\n Interrupt,\n StreamMode,\n StreamEvent,\n BagTemplate,\n ToolProgress,\n ToolsStreamEvent,\n} from \"@langchain/langgraph-sdk\";\nimport { Client, getClientConfigHash } from \"@langchain/langgraph-sdk/client\";\nimport {\n filterStream,\n unique,\n StreamError,\n getBranchContext,\n getMessagesMetadataMap,\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n userFacingInterruptsFromThreadTasks,\n userFacingInterruptsFromValuesArray,\n toMessageClass,\n ensureMessageInstances,\n ensureHistoryMessageInstances,\n onFinishRequiresThreadState,\n PendingRunsTracker,\n type EventStreamEvent,\n type AnyStreamOptions,\n type UseStreamOptions,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type RunCallbackMeta,\n type MessageMetadata,\n type UseStreamThread,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport { flushPendingHeadlessToolInterrupts } from \"@langchain/langgraph-sdk\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { UseStream, SubmitOptions } from \"./types.js\";\n\nfunction getFetchHistoryKey(\n client: Client,\n threadId: string | undefined | null,\n limit: boolean | number\n) {\n return [getClientConfigHash(client), threadId, limit].join(\":\");\n}\n\nfunction fetchHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string,\n options?: { limit?: boolean | number }\n) {\n if (options?.limit === false) {\n return client.threads.getState<StateType>(threadId).then((state) => {\n if (state.checkpoint == null) return [];\n return [state];\n });\n }\n\n const limit = typeof options?.limit === \"number\" ? options.limit : 10;\n return client.threads.getHistory<StateType>(threadId, { limit });\n}\n\nfunction useThreadHistory<StateType extends Record<string, unknown>>(\n client: Client,\n threadId: string | undefined | null,\n limit: boolean | number,\n options: {\n passthrough: boolean;\n submittingRef: RefObject<string | null>;\n onError?: (error: unknown, run?: RunCallbackMeta) => void;\n }\n): UseStreamThread<StateType> {\n const key = getFetchHistoryKey(client, threadId, limit);\n const [state, setState] = useState<{\n key: string | undefined;\n data: ThreadState<StateType>[] | undefined;\n error: unknown | undefined;\n isLoading: boolean;\n }>(() => ({\n key: undefined,\n data: undefined,\n error: undefined,\n isLoading: threadId != null,\n }));\n\n const clientRef = useRef(client);\n clientRef.current = client;\n\n const onErrorRef = useRef(options?.onError);\n onErrorRef.current = options?.onError;\n\n const fetcher = useCallback(\n (\n threadId: string | undefined | null,\n limit: boolean | number\n ): Promise<ThreadState<StateType>[]> => {\n // If only passthrough is enabled, don't fetch history\n if (options.passthrough) return Promise.resolve([]);\n\n const client = clientRef.current;\n const key = getFetchHistoryKey(client, threadId, limit);\n\n if (threadId != null) {\n setState((state) => {\n if (state.key === key) return { ...state, isLoading: true };\n return { key, data: undefined, error: undefined, isLoading: true };\n });\n return fetchHistory<StateType>(client, threadId, { limit }).then(\n (data) => {\n setState((state) => {\n if (state.key !== key) return state;\n return { key, data, error: undefined, isLoading: false };\n });\n return data;\n },\n (error) => {\n setState((state) => {\n if (state.key !== key) return state;\n return { key, data: state.data, error, isLoading: false };\n });\n onErrorRef.current?.(error);\n return Promise.reject(error);\n }\n );\n }\n\n setState({ key, data: undefined, error: undefined, isLoading: false });\n return Promise.resolve([]);\n },\n [options.passthrough]\n );\n\n useEffect(() => {\n // Skip if a stream is already in progress, no need to fetch history\n if (\n options.submittingRef.current != null &&\n options.submittingRef.current === threadId\n ) {\n return;\n }\n\n void fetcher(threadId, limit);\n // The `threadId` and `limit` arguments are already present in `key`\n // Thus we don't need to include them in the dependency array\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fetcher, key]);\n\n return {\n data: state.data,\n error: state.error,\n isLoading: state.isLoading,\n mutate: (mutateId?: string) => fetcher(mutateId ?? threadId, limit),\n };\n}\n\nfunction useTrackStreamMode() {\n const trackStreamModeRef = useRef<Exclude<StreamMode, \"messages\">[]>([]);\n\n const trackStreamMode = useCallback(\n (...mode: Exclude<StreamMode, \"messages\">[]) => {\n const ref = trackStreamModeRef.current;\n for (const m of mode) {\n if (!ref.includes(m)) ref.push(m);\n }\n },\n []\n );\n\n return [trackStreamModeRef, trackStreamMode] as [\n typeof trackStreamModeRef,\n typeof trackStreamMode,\n ];\n}\n\nfunction useCallbackStreamMode<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: UseStreamOptions<StateType, Bag>) {\n const hasUpdateListener = options.onUpdateEvent != null;\n const hasCustomListener = options.onCustomEvent != null;\n const hasLangChainListener = options.onLangChainEvent != null;\n const hasDebugListener = options.onDebugEvent != null;\n const hasCheckpointListener = options.onCheckpointEvent != null;\n const hasTaskListener = options.onTaskEvent != null;\n\n return useMemo(() => {\n const modes: Exclude<StreamMode, \"messages\">[] = [];\n if (hasUpdateListener) modes.push(\"updates\");\n if (hasCustomListener) modes.push(\"custom\");\n if (hasLangChainListener) modes.push(\"events\");\n if (hasDebugListener) modes.push(\"debug\");\n if (hasCheckpointListener) modes.push(\"checkpoints\");\n if (hasTaskListener) modes.push(\"tasks\");\n return modes;\n }, [\n hasUpdateListener,\n hasCustomListener,\n hasLangChainListener,\n hasDebugListener,\n hasCheckpointListener,\n hasTaskListener,\n ]);\n}\n\nexport function useStreamLGP<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamOptions<StateType, Bag>): UseStream<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const reconnectOnMountRef = useRef(options.reconnectOnMount);\n const runMetadataStorage = useMemo(() => {\n if (typeof window === \"undefined\") return null;\n const storage = reconnectOnMountRef.current;\n if (storage === true) return window.sessionStorage;\n if (typeof storage === \"function\") return storage();\n return null;\n }, []);\n\n const client = useMemo(\n () =>\n options.client ??\n new Client({\n apiUrl: options.apiUrl,\n apiKey: options.apiKey,\n callerOptions: options.callerOptions,\n defaultHeaders: options.defaultHeaders,\n }),\n [\n options.client,\n options.apiKey,\n options.apiUrl,\n options.callerOptions,\n options.defaultHeaders,\n ]\n );\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: options.toMessage ?? toMessageClass,\n })\n );\n\n const [pendingRuns] = useState(\n () =>\n new PendingRunsTracker<\n StateType,\n SubmitOptions<StateType, ConfigurableType>\n >()\n );\n\n useSyncExternalStore(\n pendingRuns.subscribe,\n pendingRuns.getSnapshot,\n pendingRuns.getSnapshot\n );\n\n const [trackStreamModeRef, trackStreamMode] = useTrackStreamMode();\n const callbackStreamMode = useCallbackStreamMode(options);\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot\n );\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n\n const threadIdRef = useRef<string | null>(threadId);\n const threadIdStreamingRef = useRef<string | null>(null);\n const threadIdPromiseRef = useRef<Promise<string> | null>(null);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n const prevThreadId = threadIdRef.current;\n threadIdRef.current = newThreadId;\n stream.clear();\n\n const removed = pendingRuns.removeAll();\n if (prevThreadId && removed.length > 0) {\n void Promise.all(\n removed.map((e) => client.runs.cancel(prevThreadId, e.id))\n );\n }\n\n onThreadId(newThreadId);\n }\n },\n [stream, pendingRuns, onThreadId, client]\n );\n\n const historyLimit =\n typeof options.fetchStateHistory === \"object\" &&\n options.fetchStateHistory != null\n ? (options.fetchStateHistory.limit ?? false)\n : (options.fetchStateHistory ?? false);\n\n const builtInHistory = useThreadHistory<StateType>(\n client,\n threadId,\n historyLimit,\n {\n passthrough: options.thread != null,\n submittingRef: threadIdStreamingRef,\n onError: options.onError,\n }\n );\n const history = options.thread ?? builtInHistory;\n\n const [branch, setBranch] = useState<string>(\"\");\n const branchContext = getBranchContext(branch, history.data ?? undefined);\n\n const [toolProgressMap, setToolProgressMap] = useState<\n Map<string, ToolProgress>\n >(new Map());\n\n const handleToolEvent = useCallback((data: ToolsStreamEvent[\"data\"]) => {\n setToolProgressMap((prev) => {\n const next = new Map(prev);\n const key = data.toolCallId ?? data.name;\n const existing = next.get(key);\n\n switch (data.event) {\n case \"on_tool_start\": {\n next.set(key, {\n toolCallId: data.toolCallId,\n name: data.name,\n state: \"starting\",\n input: data.input,\n });\n break;\n }\n case \"on_tool_event\": {\n if (existing) {\n next.set(key, { ...existing, state: \"running\", data: data.data });\n }\n break;\n }\n case \"on_tool_end\": {\n if (existing) {\n next.set(key, {\n ...existing,\n state: \"completed\",\n result: data.output,\n });\n }\n break;\n }\n case \"on_tool_error\": {\n if (existing) {\n next.set(key, { ...existing, state: \"error\", error: data.error });\n }\n break;\n }\n default: {\n throw new Error(\n `Unexpected tool event: ${(data as { event: string }).event}`\n );\n }\n }\n\n return next;\n });\n }, []);\n\n const historyValues =\n branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType);\n\n // Reconstruct subagents from history when:\n // 1. History is loaded (not loading, has data)\n // 2. No active stream is running\n // 3. Subagent filtering is enabled (otherwise subagents aren't tracked)\n // This ensures subagent visualization persists after page refresh or stream completion\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n !history.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n // Fetch internal messages for each subagent from their subgraph checkpoints.\n // These messages are not in the main thread state but are persisted in the\n // checkpointer under a subgraph-specific checkpoint_ns (e.g. tools:call_abc123).\n // We use an AbortController so React Strict Mode's effect cleanup can cancel\n // the in-flight fetch before the effect re-runs (preventing stale updates).\n if (historyLimit !== false && threadId) {\n const controller = new AbortController();\n void stream.fetchSubagentHistory(client.threads, threadId, {\n messagesKey: options.messagesKey ?? \"messages\",\n historyLimit:\n typeof historyLimit === \"number\" ? historyLimit : undefined,\n signal: controller.signal,\n });\n return () => controller.abort();\n }\n }\n return undefined;\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const historyError = (() => {\n const error = branchContext.threadHead?.tasks?.at(-1)?.error;\n if (error == null) return undefined;\n try {\n const parsed = JSON.parse(error) as unknown;\n if (StreamError.isStructuredError(parsed)) return new StreamError(parsed);\n return parsed;\n } catch {\n // do nothing\n }\n return error;\n })();\n\n const messageMetadata = getMessagesMetadataMap({\n initialValues: options.initialValues,\n history: history.data,\n getMessages,\n branchContext,\n });\n\n const stop = () =>\n stream.stop(historyValues, {\n onStop: (args) => {\n if (runMetadataStorage && threadId) {\n const runId = runMetadataStorage.getItem(`lg:stream:${threadId}`);\n if (runId) void client.runs.cancel(threadId, runId);\n runMetadataStorage.removeItem(`lg:stream:${threadId}`);\n }\n\n options.onStop?.(args);\n },\n });\n\n // --- TRANSPORT ---\n const submitDirect = async (\n values: UpdateType | null | undefined,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>\n ) => {\n setToolProgressMap(new Map());\n\n // Unbranch things\n const checkpointId = submitOptions?.checkpoint?.checkpoint_id;\n setBranch(\n checkpointId != null\n ? (branchContext.branchByCheckpoint[checkpointId]?.branch ?? \"\")\n : \"\"\n );\n\n // When `fetchStateHistory` is requested, thus we assume that branching\n // is enabled. We then need to include the implicit branch.\n const includeImplicitBranch =\n historyLimit === true || typeof historyLimit === \"number\";\n\n const shouldRefetch =\n // Latest checkpoint head for branching / onFinish(state, …)\n includeImplicitBranch || onFinishRequiresThreadState(options.onFinish);\n\n let callbackMeta: RunCallbackMeta | undefined;\n let rejoinKey: `lg:stream:${string}` | undefined;\n let usableThreadId = threadId;\n\n const shouldAbortPrevious =\n (submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\") &&\n stream.isLoading;\n\n await stream.start(\n async (signal: AbortSignal) => {\n stream.setStreamValues((values) => {\n const prev = { ...historyValues, ...values };\n if (submitOptions?.optimisticValues != null) {\n return {\n ...prev,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(prev)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...prev };\n });\n\n if (!usableThreadId) {\n const threadPromise = client.threads.create({\n threadId: submitOptions?.threadId,\n metadata: submitOptions?.metadata,\n signal,\n });\n\n threadIdPromiseRef.current = threadPromise.then((t) => t.thread_id);\n\n const thread = await threadPromise;\n\n usableThreadId = thread.thread_id;\n\n // Pre-emptively update the thread ID before\n // stream cancellation is kicked off and thread\n // is being refetched\n threadIdRef.current = usableThreadId;\n threadIdStreamingRef.current = usableThreadId;\n\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n threadIdStreamingRef.current = usableThreadId;\n\n const streamMode = unique([\n ...(submitOptions?.streamMode ?? []),\n ...trackStreamModeRef.current,\n ...callbackStreamMode,\n ]);\n\n let checkpoint =\n submitOptions?.checkpoint ??\n (includeImplicitBranch\n ? branchContext.threadHead?.checkpoint\n : undefined) ??\n undefined;\n\n // Avoid specifying a checkpoint if user explicitly set it to null\n if (submitOptions?.checkpoint === null) checkpoint = undefined;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (checkpoint != null) delete checkpoint.thread_id;\n const streamResumable =\n submitOptions?.streamResumable ?? !!runMetadataStorage;\n\n return client.runs.stream(usableThreadId, options.assistantId, {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: submitOptions?.multitaskStrategy,\n onCompletion: submitOptions?.onCompletion,\n onDisconnect:\n submitOptions?.onDisconnect ??\n (streamResumable ? \"continue\" : \"cancel\"),\n\n signal,\n\n checkpoint,\n streamMode,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n streamResumable,\n durability: submitOptions?.durability,\n onRunCreated(params) {\n callbackMeta = {\n run_id: params.run_id,\n thread_id: params.thread_id ?? usableThreadId!,\n };\n\n if (runMetadataStorage) {\n rejoinKey = `lg:stream:${usableThreadId}`;\n runMetadataStorage.setItem(rejoinKey, callbackMeta.run_id);\n }\n\n options.onCreated?.(callbackMeta);\n },\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues,\n callbacks: {\n ...options,\n onToolEvent: (data, opts) => {\n handleToolEvent(data);\n options.onToolEvent?.(data, opts);\n },\n },\n\n async onSuccess() {\n if (rejoinKey) runMetadataStorage?.removeItem(rejoinKey);\n\n if (shouldRefetch) {\n const newHistory = await history.mutate(usableThreadId!);\n const lastHead = newHistory?.at(0);\n if (lastHead) {\n // We now have the latest update from /history\n // Thus we can clear the local stream state\n options.onFinish?.(lastHead, callbackMeta);\n return null;\n }\n } else if (\n options.onFinish != null &&\n !onFinishRequiresThreadState(options.onFinish)\n ) {\n options.onFinish(\n undefined as unknown as ThreadState<StateType>,\n callbackMeta\n );\n }\n\n return undefined;\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n submitOptions?.onError?.(error, callbackMeta);\n },\n onFinish() {\n threadIdStreamingRef.current = null;\n },\n },\n { abortPrevious: shouldAbortPrevious }\n );\n };\n\n const submitDirectRef = useRef(submitDirect);\n submitDirectRef.current = submitDirect;\n\n const submittingRef = useRef(false);\n const drainQueueRef = useRef<() => void>(() => {});\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: SubmitOptions<StateType, ConfigurableType>\n ) => {\n if (stream.isLoading || submittingRef.current) {\n const shouldAbort =\n submitOptions?.multitaskStrategy === \"interrupt\" ||\n submitOptions?.multitaskStrategy === \"rollback\";\n\n if (shouldAbort) {\n submittingRef.current = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submittingRef.current = false;\n }\n return;\n }\n\n let usableThreadId = threadIdRef.current ?? threadId;\n if (!usableThreadId && threadIdPromiseRef.current) {\n usableThreadId = await threadIdPromiseRef.current;\n }\n if (usableThreadId) {\n try {\n const run = await client.runs.create(\n usableThreadId,\n options.assistantId,\n {\n input: values as Record<string, unknown>,\n config: submitOptions?.config,\n context: submitOptions?.context,\n command: submitOptions?.command,\n interruptBefore: submitOptions?.interruptBefore,\n interruptAfter: submitOptions?.interruptAfter,\n metadata: submitOptions?.metadata,\n multitaskStrategy: \"enqueue\",\n streamResumable: true,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n durability: submitOptions?.durability,\n }\n );\n\n pendingRuns.add({\n id: run.run_id,\n values: values as Partial<StateType> | null | undefined,\n options: submitOptions,\n createdAt: new Date(run.created_at),\n });\n } catch (error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n }\n return;\n }\n }\n\n submittingRef.current = true;\n try {\n await submitDirect(values, submitOptions);\n } finally {\n submittingRef.current = false;\n drainQueueRef.current();\n }\n };\n\n const joinStream = async (\n runId: string,\n lastEventId?: string,\n joinOptions?: {\n streamMode?: StreamMode | StreamMode[];\n filter?: (event: {\n id?: string;\n event: StreamEvent;\n data: unknown;\n }) => boolean;\n }\n ) => {\n setToolProgressMap(new Map());\n\n // eslint-disable-next-line no-param-reassign\n lastEventId ??= \"-1\";\n if (!threadId) return;\n\n const callbackMeta: RunCallbackMeta = {\n thread_id: threadId,\n run_id: runId,\n };\n\n const includeImplicitBranchJoin =\n historyLimit === true || typeof historyLimit === \"number\";\n const shouldRefetchJoin =\n includeImplicitBranchJoin ||\n onFinishRequiresThreadState(options.onFinish);\n\n await stream.start(\n async (signal: AbortSignal) => {\n threadIdStreamingRef.current = threadId;\n const stream = client.runs.joinStream(threadId, runId, {\n signal,\n lastEventId,\n streamMode: joinOptions?.streamMode,\n }) as AsyncGenerator<\n EventStreamEvent<StateType, UpdateType, CustomType>\n >;\n\n return joinOptions?.filter != null\n ? filterStream(stream, joinOptions.filter)\n : stream;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: historyValues,\n callbacks: {\n ...options,\n onToolEvent: (data, opts) => {\n handleToolEvent(data);\n options.onToolEvent?.(data, opts);\n },\n },\n async onSuccess() {\n runMetadataStorage?.removeItem(`lg:stream:${threadId}`);\n if (!shouldRefetchJoin) {\n if (\n options.onFinish != null &&\n !onFinishRequiresThreadState(options.onFinish)\n ) {\n options.onFinish(\n undefined as unknown as ThreadState<StateType>,\n callbackMeta\n );\n }\n return;\n }\n const newHistory = await history.mutate(threadId);\n const lastHead = newHistory?.at(0);\n if (lastHead) options.onFinish?.(lastHead, callbackMeta);\n },\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n onFinish() {\n threadIdStreamingRef.current = null;\n },\n }\n );\n };\n\n const joinStreamRef = useRef<typeof joinStream>(joinStream);\n joinStreamRef.current = joinStream;\n\n const drainQueue = () => {\n if (!stream.isLoading && !submittingRef.current && pendingRuns.size > 0) {\n const next = pendingRuns.shift();\n if (next) {\n submittingRef.current = true;\n void joinStreamRef.current(next.id).finally(() => {\n submittingRef.current = false;\n drainQueue();\n });\n }\n }\n };\n\n drainQueueRef.current = drainQueue;\n\n // Drain pending server-side runs when the stream finishes\n useEffect(() => {\n drainQueueRef.current();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stream.isLoading, pendingRuns.size]);\n\n const reconnectKey = useMemo(() => {\n if (!runMetadataStorage || stream.isLoading) return undefined;\n if (typeof window === \"undefined\") return undefined;\n const runId = runMetadataStorage?.getItem(`lg:stream:${threadId}`);\n if (!runId) return undefined;\n return { runId, threadId };\n }, [runMetadataStorage, stream.isLoading, threadId]);\n\n const shouldReconnect = !!runMetadataStorage;\n const reconnectRef = useRef({ threadId, shouldReconnect });\n\n useEffect(() => {\n // reset shouldReconnect when switching threads\n if (reconnectRef.current.threadId !== threadId) {\n reconnectRef.current = { threadId, shouldReconnect };\n }\n }, [threadId, shouldReconnect]);\n\n useEffect(() => {\n if (reconnectKey && reconnectRef.current.shouldReconnect) {\n reconnectRef.current.shouldReconnect = false;\n void joinStreamRef.current?.(reconnectKey.runId);\n }\n }, [reconnectKey]);\n\n const error = stream.error ?? historyError ?? history.error;\n const values = stream.values ?? historyValues;\n\n const handledToolsRef = useRef<Set<string>>(new Set());\n useEffect(() => {\n handledToolsRef.current.clear();\n }, [threadId]);\n\n useEffect(() => {\n flushPendingHeadlessToolInterrupts(\n values as Record<string, unknown>,\n options.tools,\n handledToolsRef.current,\n {\n onTool: options.onTool,\n defer: (run) => {\n void Promise.resolve().then(run);\n },\n resumeSubmit: (command) =>\n submit(null, {\n multitaskStrategy: \"interrupt\",\n command,\n }),\n }\n );\n }, [options.onTool, options.tools, submit, values]);\n\n return {\n get values() {\n trackStreamMode(\"values\");\n return values;\n },\n\n client,\n assistantId: options.assistantId,\n\n error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n joinStream,\n\n branch,\n setBranch,\n\n get history() {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `history`\"\n );\n }\n\n return ensureHistoryMessageInstances(\n branchContext.flatHistory,\n options.messagesKey ?? \"messages\"\n );\n },\n\n isThreadLoading: history.isLoading && history.data == null,\n\n get experimental_branchTree() {\n if (historyLimit === false) {\n throw new Error(\n \"`fetchStateHistory` must be set to `true` to use `experimental_branchTree`\"\n );\n }\n\n return branchContext.branchTree;\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n values != null &&\n \"__interrupt__\" in values &&\n Array.isArray(values.__interrupt__)\n ) {\n return userFacingInterruptsFromValuesArray<InterruptType>(\n values.__interrupt__ as Interrupt<InterruptType>[]\n );\n }\n\n // If we're deferring to old interrupt detection logic, don't show the interrupt if the stream is loading\n if (stream.isLoading) return [];\n\n // Collect interrupts from ALL tasks (not just the last one)\n const allTasks = branchContext.threadHead?.tasks ?? [];\n const allInterrupts = allTasks.flatMap((t) => t.interrupts ?? []);\n\n const taskInterrupts = userFacingInterruptsFromThreadTasks<InterruptType>(\n allInterrupts as Interrupt<InterruptType>[]\n );\n if (taskInterrupts != null) return taskInterrupts;\n\n // check if there's a next task present (breakpoint-style interrupt)\n const next = branchContext.threadHead?.next ?? [];\n if (!next.length || error != null) return [];\n return [{ when: \"breakpoint\" }];\n },\n\n get interrupt() {\n return extractInterrupts<InterruptType>(values, {\n error,\n isLoading: stream.isLoading,\n threadState: branchContext.threadHead,\n });\n },\n\n get messages(): BaseMessage[] {\n trackStreamMode(\"messages-tuple\", \"values\");\n return ensureMessageInstances(getMessages(values)) as BaseMessage[];\n },\n\n get toolCalls() {\n trackStreamMode(\"messages-tuple\", \"values\");\n const msgs = getMessages(values) as Message<ToolCallType>[];\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n get toolProgress(): ToolProgress[] {\n trackStreamMode(\"tools\");\n return Array.from(toolProgressMap.values());\n },\n\n getToolCalls(message) {\n trackStreamMode(\"messages-tuple\", \"values\");\n const msgs = getMessages(values) as Message<ToolCallType>[];\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n getMessagesMetadata(\n message: BaseMessage,\n index?: number\n ): MessageMetadata<StateType> | undefined {\n trackStreamMode(\"values\");\n\n const streamMetadata = messageManager.get(message.id)?.metadata;\n const historyMetadata = messageMetadata?.find(\n (m) => m.messageId === (message.id ?? index)\n );\n\n if (streamMetadata != null || historyMetadata != null) {\n return {\n ...historyMetadata,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n\n return undefined;\n },\n\n get subagents() {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n trackStreamMode(\"updates\", \"messages-tuple\");\n return stream.getSubagentsByMessage(messageId);\n },\n\n queue: {\n get entries() {\n return pendingRuns.entries;\n },\n get size() {\n return pendingRuns.size;\n },\n async cancel(id: string) {\n const usableThreadId = threadIdRef.current ?? threadId;\n const removed = pendingRuns.remove(id);\n if (removed && usableThreadId) {\n await client.runs.cancel(usableThreadId, id);\n }\n return removed;\n },\n async clear() {\n const usableThreadId = threadIdRef.current ?? threadId;\n const removed = pendingRuns.removeAll();\n if (usableThreadId && removed.length > 0) {\n await Promise.all(\n removed.map((e) => client.runs.cancel(usableThreadId!, e.id))\n );\n }\n },\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/thread.cjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
let react = require("react");
|
|
3
|
-
//#region src/thread.tsx
|
|
4
|
-
const useControllableThreadId = (options) => {
|
|
5
|
-
const [localThreadId, _setLocalThreadId] = (0, react.useState)(options?.threadId ?? null);
|
|
6
|
-
const onThreadIdRef = (0, react.useRef)(options?.onThreadId);
|
|
7
|
-
onThreadIdRef.current = options?.onThreadId;
|
|
8
|
-
const setThreadId = (0, react.useCallback)((threadId) => {
|
|
9
|
-
_setLocalThreadId(threadId);
|
|
10
|
-
if (threadId != null) onThreadIdRef.current?.(threadId);
|
|
11
|
-
}, []);
|
|
12
|
-
if (!options || !("threadId" in options)) return [localThreadId, setThreadId];
|
|
13
|
-
return [options.threadId ?? null, setThreadId];
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
exports.useControllableThreadId = useControllableThreadId;
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=thread.cjs.map
|
package/dist/thread.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread.cjs","names":[],"sources":["../src/thread.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useRef, useCallback } from \"react\";\n\nexport const useControllableThreadId = (options?: {\n threadId?: string | null;\n onThreadId?: (threadId: string) => void;\n}): [string | null, (threadId: string | null) => void] => {\n const [localThreadId, _setLocalThreadId] = useState<string | null>(\n options?.threadId ?? null\n );\n\n const onThreadIdRef = useRef(options?.onThreadId);\n onThreadIdRef.current = options?.onThreadId;\n\n const setThreadId = useCallback((threadId: string | null) => {\n _setLocalThreadId(threadId);\n if (threadId != null) onThreadIdRef.current?.(threadId);\n }, []);\n\n if (!options || !(\"threadId\" in options)) {\n return [localThreadId, setThreadId];\n }\n\n return [options.threadId ?? null, setThreadId];\n};\n"],"mappings":";;;AAIA,MAAa,2BAA2B,YAGkB;CACxD,MAAM,CAAC,eAAe,sBAAA,GAAA,MAAA,UACpB,SAAS,YAAY,KACtB;CAED,MAAM,iBAAA,GAAA,MAAA,QAAuB,SAAS,WAAW;AACjD,eAAc,UAAU,SAAS;CAEjC,MAAM,eAAA,GAAA,MAAA,cAA2B,aAA4B;AAC3D,oBAAkB,SAAS;AAC3B,MAAI,YAAY,KAAM,eAAc,UAAU,SAAS;IACtD,EAAE,CAAC;AAEN,KAAI,CAAC,WAAW,EAAE,cAAc,SAC9B,QAAO,CAAC,eAAe,YAAY;AAGrC,QAAO,CAAC,QAAQ,YAAY,MAAM,YAAY"}
|
package/dist/thread.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useCallback, useRef, useState } from "react";
|
|
3
|
-
//#region src/thread.tsx
|
|
4
|
-
const useControllableThreadId = (options) => {
|
|
5
|
-
const [localThreadId, _setLocalThreadId] = useState(options?.threadId ?? null);
|
|
6
|
-
const onThreadIdRef = useRef(options?.onThreadId);
|
|
7
|
-
onThreadIdRef.current = options?.onThreadId;
|
|
8
|
-
const setThreadId = useCallback((threadId) => {
|
|
9
|
-
_setLocalThreadId(threadId);
|
|
10
|
-
if (threadId != null) onThreadIdRef.current?.(threadId);
|
|
11
|
-
}, []);
|
|
12
|
-
if (!options || !("threadId" in options)) return [localThreadId, setThreadId];
|
|
13
|
-
return [options.threadId ?? null, setThreadId];
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
export { useControllableThreadId };
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=thread.js.map
|
package/dist/thread.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread.js","names":[],"sources":["../src/thread.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useRef, useCallback } from \"react\";\n\nexport const useControllableThreadId = (options?: {\n threadId?: string | null;\n onThreadId?: (threadId: string) => void;\n}): [string | null, (threadId: string | null) => void] => {\n const [localThreadId, _setLocalThreadId] = useState<string | null>(\n options?.threadId ?? null\n );\n\n const onThreadIdRef = useRef(options?.onThreadId);\n onThreadIdRef.current = options?.onThreadId;\n\n const setThreadId = useCallback((threadId: string | null) => {\n _setLocalThreadId(threadId);\n if (threadId != null) onThreadIdRef.current?.(threadId);\n }, []);\n\n if (!options || !(\"threadId\" in options)) {\n return [localThreadId, setThreadId];\n }\n\n return [options.threadId ?? null, setThreadId];\n};\n"],"mappings":";;;AAIA,MAAa,2BAA2B,YAGkB;CACxD,MAAM,CAAC,eAAe,qBAAqB,SACzC,SAAS,YAAY,KACtB;CAED,MAAM,gBAAgB,OAAO,SAAS,WAAW;AACjD,eAAc,UAAU,SAAS;CAEjC,MAAM,cAAc,aAAa,aAA4B;AAC3D,oBAAkB,SAAS;AAC3B,MAAI,YAAY,KAAM,eAAc,UAAU,SAAS;IACtD,EAAE,CAAC;AAEN,KAAI,CAAC,WAAW,EAAE,cAAc,SAC9B,QAAO,CAAC,eAAe,YAAY;AAGrC,QAAO,CAAC,QAAQ,YAAY,MAAM,YAAY"}
|
package/dist/types.d.cts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { BaseMessage } from "@langchain/core/messages";
|
|
2
|
-
import { BagTemplate, Client, StreamEvent, StreamMode, ThreadState, ToolProgress } from "@langchain/langgraph-sdk";
|
|
3
|
-
import { CustomSubmitOptions, DefaultSubagentStates, GetConfigurableType, GetInterruptType, GetToolCallsType, GetUpdateType, MessageMetadata, QueueInterface, Sequence, StreamBase, SubagentStream, SubagentStreamInterface, SubmitOptions, UseStreamCustomOptions as UseStreamCustomOptions$1 } from "@langchain/langgraph-sdk/ui";
|
|
4
|
-
|
|
5
|
-
//#region src/types.d.ts
|
|
6
|
-
interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> extends Omit<StreamBase<StateType, GetToolCallsType<StateType>, GetInterruptType<Bag>, SubagentStates>, "messages"> {
|
|
7
|
-
/**
|
|
8
|
-
* Messages accumulated during the stream as @langchain/core class instances.
|
|
9
|
-
*/
|
|
10
|
-
messages: BaseMessage[];
|
|
11
|
-
/**
|
|
12
|
-
* Whether the thread is currently being loaded.
|
|
13
|
-
*/
|
|
14
|
-
isThreadLoading: boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Stops the stream.
|
|
17
|
-
*/
|
|
18
|
-
stop: () => Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Create and stream a run to the thread.
|
|
21
|
-
*/
|
|
22
|
-
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* The current branch of the thread.
|
|
25
|
-
*/
|
|
26
|
-
branch: string;
|
|
27
|
-
/**
|
|
28
|
-
* Set the branch of the thread.
|
|
29
|
-
*/
|
|
30
|
-
setBranch: (branch: string) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Flattened history of thread states of a thread.
|
|
33
|
-
*/
|
|
34
|
-
history: ThreadState<StateType>[];
|
|
35
|
-
/**
|
|
36
|
-
* Tree of all branches for the thread.
|
|
37
|
-
* @experimental
|
|
38
|
-
*/
|
|
39
|
-
experimental_branchTree: Sequence<StateType>;
|
|
40
|
-
/**
|
|
41
|
-
* Get the metadata for a message, such as first thread state the message
|
|
42
|
-
* was seen in and branch information.
|
|
43
|
-
*
|
|
44
|
-
* @param message - The message to get the metadata for.
|
|
45
|
-
* @param index - The index of the message in the thread.
|
|
46
|
-
* @returns The metadata for the message.
|
|
47
|
-
*/
|
|
48
|
-
getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<StateType> | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* Progress of tool executions during streaming.
|
|
51
|
-
*/
|
|
52
|
-
toolProgress: ToolProgress[];
|
|
53
|
-
/**
|
|
54
|
-
* LangGraph SDK client used to send request and receive responses.
|
|
55
|
-
*/
|
|
56
|
-
client: Client;
|
|
57
|
-
/**
|
|
58
|
-
* The ID of the assistant to use.
|
|
59
|
-
*/
|
|
60
|
-
assistantId: string;
|
|
61
|
-
/**
|
|
62
|
-
* Join an active stream.
|
|
63
|
-
*/
|
|
64
|
-
joinStream: (runId: string, lastEventId?: string, options?: {
|
|
65
|
-
streamMode?: StreamMode | StreamMode[];
|
|
66
|
-
filter?: (event: {
|
|
67
|
-
id?: string;
|
|
68
|
-
event: StreamEvent;
|
|
69
|
-
data: unknown;
|
|
70
|
-
}) => boolean;
|
|
71
|
-
}) => Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Switch to a different thread, clearing the current stream state.
|
|
74
|
-
* Pass `null` to reset to no thread (a new thread will be created on next submit).
|
|
75
|
-
*/
|
|
76
|
-
switchThread: (newThreadId: string | null) => void;
|
|
77
|
-
/**
|
|
78
|
-
* Server-side submission queue. Pending runs created via
|
|
79
|
-
* `multitaskStrategy: "enqueue"` when submitting while the agent is busy.
|
|
80
|
-
*/
|
|
81
|
-
queue: QueueInterface<StateType, SubmitOptions<StateType, GetConfigurableType<Bag>>>;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Return type for {@link useSuspenseStream}.
|
|
85
|
-
*
|
|
86
|
-
* Identical to {@link UseStream} but without `isLoading`, `error`, and
|
|
87
|
-
* `isThreadLoading` (those states are handled by Suspense / Error Boundaries).
|
|
88
|
-
* An `isStreaming` flag is provided instead to indicate whether tokens are
|
|
89
|
-
* currently being received from the server.
|
|
90
|
-
*/
|
|
91
|
-
type UseSuspenseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Omit<UseStream<StateType, Bag, SubagentStates>, "isLoading" | "error" | "isThreadLoading"> & {
|
|
92
|
-
/**
|
|
93
|
-
* Whether the stream is currently receiving data from the server.
|
|
94
|
-
* Unlike Suspense-based loading, streaming is incremental and the
|
|
95
|
-
* component stays rendered throughout.
|
|
96
|
-
*/
|
|
97
|
-
isStreaming: boolean;
|
|
98
|
-
};
|
|
99
|
-
type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Pick<UseStream<StateType, Bag, SubagentStates>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "interrupts" | "messages" | "toolCalls" | "getToolCalls" | "getMessagesMetadata" | "branch" | "setBranch" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
100
|
-
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
101
|
-
switchThread: (newThreadId: string | null) => void;
|
|
102
|
-
/**
|
|
103
|
-
* Server-side submission queue. Always empty for custom transport hooks.
|
|
104
|
-
*/
|
|
105
|
-
queue: QueueInterface<StateType, CustomSubmitOptions<StateType, GetConfigurableType<Bag>>>;
|
|
106
|
-
};
|
|
107
|
-
//#endregion
|
|
108
|
-
export { type SubagentStream, type SubagentStreamInterface, UseStream, UseStreamCustom, type UseStreamCustomOptions$1 as UseStreamCustomOptions, UseSuspenseStream };
|
|
109
|
-
//# sourceMappingURL=types.d.cts.map
|
package/dist/types.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.tsx"],"mappings":";;;;;UAgFiB,SAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,UACzC,IAAA,CACR,UAAA,CACE,SAAA,EACA,gBAAA,CAAiB,SAAA,GACjB,gBAAA,CAAiB,GAAA,GACjB,cAAA;EATa;;;EAgBf,QAAA,EAAU,WAAA;EAfkC;;;EAoB5C,eAAA;EAlBiD;;;EAuBjD,IAAA,QAAY,OAAA;EAlBO;;;EAuBnB,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA,OACpD,OAAA;EAlBK;;;EAuBV,MAAA;EAPU;;;EAYV,SAAA,GAAY,MAAA;EAXA;;;EAgBZ,OAAA,EAAS,WAAA,CAAY,SAAA;EAMa;;;;EAAlC,uBAAA,EAAyB,QAAA,CAAS,SAAA;EAkBpB;;;;;;;;EARd,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,SAAA;EA6CM;;;EAxC3B,YAAA,EAAc,YAAA;EArEF;;;EA0EZ,MAAA,EAAQ,MAAA;EA7EoC;;;EAkF5C,WAAA;EAhFA;;;EAqFA,UAAA,GACE,KAAA,UACA,WAAA,WACA,OAAA;IACE,UAAA,GAAa,UAAA,GAAa,UAAA;IAC1B,MAAA,IAAU,KAAA;MACR,EAAA;MACA,KAAA,EAAO,WAAA;MACP,IAAA;IAAA;EAAA,MAGD,OAAA;EAnFL;;;;EAyFA,YAAA,GAAe,WAAA;EA1Ef;;;;EAgFA,KAAA,EAAO,cAAA,CACL,SAAA,EACA,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA;AAAA;;;;;;;;;KAYrC,iBAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAjFjB;;;;;EAyFT,WAAA;AAAA;AAAA,KAGU,eAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAmB1B,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA,OAC1D,OAAA;EAEL,YAAA,GAAe,WAAA;EAtGM;;;EA2GrB,KAAA,EAAO,cAAA,CACL,SAAA,EACA,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA;AAAA"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { CustomSubmitOptions, DefaultSubagentStates, GetConfigurableType, GetInterruptType, GetToolCallsType, GetUpdateType, MessageMetadata, QueueInterface, Sequence, StreamBase, SubagentStream, SubagentStreamInterface, SubmitOptions, UseStreamCustomOptions as UseStreamCustomOptions$1 } from "@langchain/langgraph-sdk/ui";
|
|
2
|
-
import { BagTemplate, Client, StreamEvent, StreamMode, ThreadState, ToolProgress } from "@langchain/langgraph-sdk";
|
|
3
|
-
import { BaseMessage } from "@langchain/core/messages";
|
|
4
|
-
|
|
5
|
-
//#region src/types.d.ts
|
|
6
|
-
interface UseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> extends Omit<StreamBase<StateType, GetToolCallsType<StateType>, GetInterruptType<Bag>, SubagentStates>, "messages"> {
|
|
7
|
-
/**
|
|
8
|
-
* Messages accumulated during the stream as @langchain/core class instances.
|
|
9
|
-
*/
|
|
10
|
-
messages: BaseMessage[];
|
|
11
|
-
/**
|
|
12
|
-
* Whether the thread is currently being loaded.
|
|
13
|
-
*/
|
|
14
|
-
isThreadLoading: boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Stops the stream.
|
|
17
|
-
*/
|
|
18
|
-
stop: () => Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Create and stream a run to the thread.
|
|
21
|
-
*/
|
|
22
|
-
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: SubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* The current branch of the thread.
|
|
25
|
-
*/
|
|
26
|
-
branch: string;
|
|
27
|
-
/**
|
|
28
|
-
* Set the branch of the thread.
|
|
29
|
-
*/
|
|
30
|
-
setBranch: (branch: string) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Flattened history of thread states of a thread.
|
|
33
|
-
*/
|
|
34
|
-
history: ThreadState<StateType>[];
|
|
35
|
-
/**
|
|
36
|
-
* Tree of all branches for the thread.
|
|
37
|
-
* @experimental
|
|
38
|
-
*/
|
|
39
|
-
experimental_branchTree: Sequence<StateType>;
|
|
40
|
-
/**
|
|
41
|
-
* Get the metadata for a message, such as first thread state the message
|
|
42
|
-
* was seen in and branch information.
|
|
43
|
-
*
|
|
44
|
-
* @param message - The message to get the metadata for.
|
|
45
|
-
* @param index - The index of the message in the thread.
|
|
46
|
-
* @returns The metadata for the message.
|
|
47
|
-
*/
|
|
48
|
-
getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<StateType> | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* Progress of tool executions during streaming.
|
|
51
|
-
*/
|
|
52
|
-
toolProgress: ToolProgress[];
|
|
53
|
-
/**
|
|
54
|
-
* LangGraph SDK client used to send request and receive responses.
|
|
55
|
-
*/
|
|
56
|
-
client: Client;
|
|
57
|
-
/**
|
|
58
|
-
* The ID of the assistant to use.
|
|
59
|
-
*/
|
|
60
|
-
assistantId: string;
|
|
61
|
-
/**
|
|
62
|
-
* Join an active stream.
|
|
63
|
-
*/
|
|
64
|
-
joinStream: (runId: string, lastEventId?: string, options?: {
|
|
65
|
-
streamMode?: StreamMode | StreamMode[];
|
|
66
|
-
filter?: (event: {
|
|
67
|
-
id?: string;
|
|
68
|
-
event: StreamEvent;
|
|
69
|
-
data: unknown;
|
|
70
|
-
}) => boolean;
|
|
71
|
-
}) => Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Switch to a different thread, clearing the current stream state.
|
|
74
|
-
* Pass `null` to reset to no thread (a new thread will be created on next submit).
|
|
75
|
-
*/
|
|
76
|
-
switchThread: (newThreadId: string | null) => void;
|
|
77
|
-
/**
|
|
78
|
-
* Server-side submission queue. Pending runs created via
|
|
79
|
-
* `multitaskStrategy: "enqueue"` when submitting while the agent is busy.
|
|
80
|
-
*/
|
|
81
|
-
queue: QueueInterface<StateType, SubmitOptions<StateType, GetConfigurableType<Bag>>>;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Return type for {@link useSuspenseStream}.
|
|
85
|
-
*
|
|
86
|
-
* Identical to {@link UseStream} but without `isLoading`, `error`, and
|
|
87
|
-
* `isThreadLoading` (those states are handled by Suspense / Error Boundaries).
|
|
88
|
-
* An `isStreaming` flag is provided instead to indicate whether tokens are
|
|
89
|
-
* currently being received from the server.
|
|
90
|
-
*/
|
|
91
|
-
type UseSuspenseStream<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Omit<UseStream<StateType, Bag, SubagentStates>, "isLoading" | "error" | "isThreadLoading"> & {
|
|
92
|
-
/**
|
|
93
|
-
* Whether the stream is currently receiving data from the server.
|
|
94
|
-
* Unlike Suspense-based loading, streaming is incremental and the
|
|
95
|
-
* component stays rendered throughout.
|
|
96
|
-
*/
|
|
97
|
-
isStreaming: boolean;
|
|
98
|
-
};
|
|
99
|
-
type UseStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate, SubagentStates extends Record<string, unknown> = DefaultSubagentStates> = Pick<UseStream<StateType, Bag, SubagentStates>, "values" | "error" | "isLoading" | "stop" | "interrupt" | "interrupts" | "messages" | "toolCalls" | "getToolCalls" | "getMessagesMetadata" | "branch" | "setBranch" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
100
|
-
submit: (values: GetUpdateType<Bag, StateType> | null | undefined, options?: CustomSubmitOptions<StateType, GetConfigurableType<Bag>>) => Promise<void>;
|
|
101
|
-
switchThread: (newThreadId: string | null) => void;
|
|
102
|
-
/**
|
|
103
|
-
* Server-side submission queue. Always empty for custom transport hooks.
|
|
104
|
-
*/
|
|
105
|
-
queue: QueueInterface<StateType, CustomSubmitOptions<StateType, GetConfigurableType<Bag>>>;
|
|
106
|
-
};
|
|
107
|
-
//#endregion
|
|
108
|
-
export { type SubagentStream, type SubagentStreamInterface, UseStream, UseStreamCustom, type UseStreamCustomOptions$1 as UseStreamCustomOptions, UseSuspenseStream };
|
|
109
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.tsx"],"mappings":";;;;;UAgFiB,SAAA,mBACG,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,UACzC,IAAA,CACR,UAAA,CACE,SAAA,EACA,gBAAA,CAAiB,SAAA,GACjB,gBAAA,CAAiB,GAAA,GACjB,cAAA;EATa;;;EAgBf,QAAA,EAAU,WAAA;EAfkC;;;EAoB5C,eAAA;EAlBiD;;;EAuBjD,IAAA,QAAY,OAAA;EAlBO;;;EAuBnB,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA,OACpD,OAAA;EAlBK;;;EAuBV,MAAA;EAPU;;;EAYV,SAAA,GAAY,MAAA;EAXA;;;EAgBZ,OAAA,EAAS,WAAA,CAAY,SAAA;EAMa;;;;EAAlC,uBAAA,EAAyB,QAAA,CAAS,SAAA;EAkBpB;;;;;;;;EARd,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,SAAA;EA6CM;;;EAxC3B,YAAA,EAAc,YAAA;EArEF;;;EA0EZ,MAAA,EAAQ,MAAA;EA7EoC;;;EAkF5C,WAAA;EAhFA;;;EAqFA,UAAA,GACE,KAAA,UACA,WAAA,WACA,OAAA;IACE,UAAA,GAAa,UAAA,GAAa,UAAA;IAC1B,MAAA,IAAU,KAAA;MACR,EAAA;MACA,KAAA,EAAO,WAAA;MACP,IAAA;IAAA;EAAA,MAGD,OAAA;EAnFL;;;;EAyFA,YAAA,GAAe,WAAA;EA1Ef;;;;EAgFA,KAAA,EAAO,cAAA,CACL,SAAA,EACA,aAAA,CAAc,SAAA,EAAW,mBAAA,CAAoB,GAAA;AAAA;;;;;;;;;KAYrC,iBAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAjFjB;;;;;EAyFT,WAAA;AAAA;AAAA,KAGU,eAAA,mBACQ,MAAA,oBAA0B,MAAA,+BAChC,WAAA,GAAc,WAAA,yBACH,MAAA,oBAA0B,qBAAA,IAC/C,IAAA,CACF,SAAA,CAAU,SAAA,EAAW,GAAA,EAAK,cAAA;EAmB1B,MAAA,GACE,MAAA,EAAQ,aAAA,CAAc,GAAA,EAAK,SAAA,sBAC3B,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA,OAC1D,OAAA;EAEL,YAAA,GAAe,WAAA;EAtGM;;;EA2GrB,KAAA,EAAO,cAAA,CACL,SAAA,EACA,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,GAAA;AAAA"}
|