@langchain/svelte 0.2.0 → 0.3.1
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/dist/index.cjs +144 -438
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +54 -30
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +54 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +144 -438
- package/dist/index.js.map +1 -1
- package/dist/stream.custom.cjs +34 -160
- package/dist/stream.custom.cjs.map +1 -1
- package/dist/stream.custom.js +36 -162
- package/dist/stream.custom.js.map +1 -1
- package/package.json +3 -3
- package/dist/context.cjs +0 -86
- package/dist/context.cjs.map +0 -1
- package/dist/context.d.cts +0 -77
- package/dist/context.d.cts.map +0 -1
- package/dist/context.d.ts +0 -77
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -85
- package/dist/context.js.map +0 -1
package/dist/stream.custom.js
CHANGED
|
@@ -1,167 +1,30 @@
|
|
|
1
|
-
import { derived, fromStore,
|
|
1
|
+
import { derived, fromStore, writable } from "svelte/store";
|
|
2
2
|
import { onDestroy } from "svelte";
|
|
3
|
-
import {
|
|
4
|
-
import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
|
|
3
|
+
import { CustomStreamOrchestrator } from "@langchain/langgraph-sdk/ui";
|
|
5
4
|
//#region src/stream.custom.ts
|
|
6
|
-
function createCustomTransportThreadState(values, threadId) {
|
|
7
|
-
return {
|
|
8
|
-
values,
|
|
9
|
-
next: [],
|
|
10
|
-
tasks: [],
|
|
11
|
-
metadata: void 0,
|
|
12
|
-
created_at: null,
|
|
13
|
-
checkpoint: {
|
|
14
|
-
thread_id: threadId,
|
|
15
|
-
checkpoint_id: null,
|
|
16
|
-
checkpoint_ns: "",
|
|
17
|
-
checkpoint_map: null
|
|
18
|
-
},
|
|
19
|
-
parent_checkpoint: null
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
5
|
function useStreamCustom(options) {
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
throttle: options.throttle ?? false,
|
|
26
|
-
subagentToolNames: options.subagentToolNames,
|
|
27
|
-
filterSubagentMessages: options.filterSubagentMessages,
|
|
28
|
-
toMessage: toMessageClass
|
|
29
|
-
});
|
|
30
|
-
let threadId = options.threadId ?? null;
|
|
6
|
+
const orchestrator = new CustomStreamOrchestrator(options);
|
|
7
|
+
const version = writable(0);
|
|
31
8
|
const branch = writable("");
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
const isLoading = writable(stream.isLoading);
|
|
35
|
-
const subagentVersion = writable(0);
|
|
36
|
-
const unsubscribe = stream.subscribe(() => {
|
|
37
|
-
streamValues.set(stream.values);
|
|
38
|
-
streamError.set(stream.error);
|
|
39
|
-
isLoading.set(stream.isLoading);
|
|
40
|
-
subagentVersion.update((v) => v + 1);
|
|
9
|
+
const unsubscribe = orchestrator.subscribe(() => {
|
|
10
|
+
version.update((v) => v + 1);
|
|
41
11
|
});
|
|
42
12
|
onDestroy(() => {
|
|
43
13
|
unsubscribe();
|
|
14
|
+
orchestrator.dispose();
|
|
44
15
|
});
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
...current,
|
|
53
|
-
[messagesKey]: messages
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
const historyValues = options.initialValues ?? {};
|
|
57
|
-
const historyMessages = getMessages(historyValues);
|
|
58
|
-
if (options.filterSubagentMessages && !stream.isLoading && historyMessages.length > 0) stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });
|
|
59
|
-
function switchThread(newThreadId) {
|
|
60
|
-
if (newThreadId !== threadId) {
|
|
61
|
-
threadId = newThreadId;
|
|
62
|
-
stream.clear();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function stop() {
|
|
66
|
-
return stream.stop(historyValues, { onStop: options.onStop });
|
|
67
|
-
}
|
|
68
|
-
async function submitDirect(values, submitOptions) {
|
|
69
|
-
const currentThreadId = options.threadId ?? null;
|
|
70
|
-
if (currentThreadId !== threadId) {
|
|
71
|
-
threadId = currentThreadId;
|
|
72
|
-
stream.clear();
|
|
73
|
-
}
|
|
74
|
-
let usableThreadId = threadId ?? submitOptions?.threadId;
|
|
75
|
-
stream.setStreamValues(() => {
|
|
76
|
-
if (submitOptions?.optimisticValues != null) return {
|
|
77
|
-
...historyValues,
|
|
78
|
-
...typeof submitOptions.optimisticValues === "function" ? submitOptions.optimisticValues(historyValues) : submitOptions.optimisticValues
|
|
79
|
-
};
|
|
80
|
-
return { ...historyValues };
|
|
81
|
-
});
|
|
82
|
-
await stream.start(async (signal) => {
|
|
83
|
-
if (!usableThreadId) {
|
|
84
|
-
usableThreadId = crypto.randomUUID();
|
|
85
|
-
threadId = usableThreadId;
|
|
86
|
-
options.onThreadId?.(usableThreadId);
|
|
87
|
-
}
|
|
88
|
-
if (!usableThreadId) throw new Error("Failed to obtain valid thread ID.");
|
|
89
|
-
return options.transport.stream({
|
|
90
|
-
input: values,
|
|
91
|
-
context: submitOptions?.context,
|
|
92
|
-
command: submitOptions?.command,
|
|
93
|
-
streamSubgraphs: submitOptions?.streamSubgraphs,
|
|
94
|
-
signal,
|
|
95
|
-
config: {
|
|
96
|
-
...submitOptions?.config,
|
|
97
|
-
configurable: {
|
|
98
|
-
thread_id: usableThreadId,
|
|
99
|
-
...submitOptions?.config?.configurable
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}, {
|
|
104
|
-
getMessages,
|
|
105
|
-
setMessages,
|
|
106
|
-
initialValues: {},
|
|
107
|
-
callbacks: options,
|
|
108
|
-
onSuccess: () => {
|
|
109
|
-
if (!usableThreadId) return void 0;
|
|
110
|
-
const finalValues = stream.values ?? historyValues;
|
|
111
|
-
options.onFinish?.(createCustomTransportThreadState(finalValues, usableThreadId), void 0);
|
|
112
|
-
},
|
|
113
|
-
onError(error) {
|
|
114
|
-
options.onError?.(error, void 0);
|
|
115
|
-
submitOptions?.onError?.(error, void 0);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
async function submit(values, submitOptions) {
|
|
120
|
-
await submitDirect(values, submitOptions);
|
|
121
|
-
}
|
|
122
|
-
const valuesStore = derived([streamValues], ([$streamValues]) => $streamValues ?? {});
|
|
123
|
-
const messagesStore = derived([streamValues], ([$streamValues]) => {
|
|
124
|
-
if (!$streamValues) return [];
|
|
125
|
-
return ensureMessageInstances(getMessages($streamValues));
|
|
126
|
-
});
|
|
127
|
-
const toolCallsStore = derived([streamValues], ([$streamValues]) => {
|
|
128
|
-
if (!$streamValues) return [];
|
|
129
|
-
return getToolCallsWithResults(getMessages($streamValues));
|
|
130
|
-
});
|
|
131
|
-
const interruptStore = derived([streamValues], ([$streamValues]) => extractInterrupts($streamValues));
|
|
132
|
-
const interruptsStore = derived([streamValues], ([$streamValues]) => {
|
|
133
|
-
if ($streamValues != null && "__interrupt__" in $streamValues && Array.isArray($streamValues.__interrupt__)) {
|
|
134
|
-
const valueInterrupts = $streamValues.__interrupt__;
|
|
135
|
-
if (valueInterrupts.length === 0) return [{ when: "breakpoint" }];
|
|
136
|
-
return valueInterrupts;
|
|
137
|
-
}
|
|
138
|
-
return [];
|
|
139
|
-
});
|
|
140
|
-
function getToolCalls(message) {
|
|
141
|
-
const $streamValues = get(streamValues);
|
|
142
|
-
if (!$streamValues) return [];
|
|
143
|
-
return getToolCallsWithResults(getMessages($streamValues)).filter((tc) => tc.aiMessage.id === message.id);
|
|
144
|
-
}
|
|
145
|
-
function setBranch(value) {
|
|
146
|
-
branch.set(value);
|
|
147
|
-
}
|
|
148
|
-
function getMessagesMetadata(message, index) {
|
|
149
|
-
const streamMetadata = messageManager.get(message.id)?.metadata;
|
|
150
|
-
if (streamMetadata != null) return {
|
|
151
|
-
messageId: message.id ?? String(index),
|
|
152
|
-
firstSeenState: void 0,
|
|
153
|
-
branch: void 0,
|
|
154
|
-
branchOptions: void 0,
|
|
155
|
-
streamMetadata
|
|
156
|
-
};
|
|
157
|
-
}
|
|
16
|
+
const valuesStore = derived(version, () => orchestrator.values);
|
|
17
|
+
const messagesStore = derived(version, () => orchestrator.messages);
|
|
18
|
+
const toolCallsStore = derived(version, () => orchestrator.toolCalls);
|
|
19
|
+
const interruptStore = derived(version, () => orchestrator.interrupt);
|
|
20
|
+
const interruptsStore = derived(version, () => orchestrator.interrupts);
|
|
21
|
+
const subagentsStore = derived(version, () => orchestrator.subagents);
|
|
22
|
+
const activeSubagentsStore = derived(version, () => orchestrator.activeSubagents);
|
|
158
23
|
const emptyEntries = writable([]);
|
|
159
24
|
const emptySize = writable(0);
|
|
160
|
-
const subagentsStore = derived(subagentVersion, () => stream.getSubagents());
|
|
161
|
-
const activeSubagentsStore = derived(subagentVersion, () => stream.getActiveSubagents());
|
|
162
25
|
const valuesRef = fromStore(valuesStore);
|
|
163
|
-
const errorRef = fromStore(
|
|
164
|
-
const isLoadingRef = fromStore(isLoading);
|
|
26
|
+
const errorRef = fromStore(derived(version, () => orchestrator.error));
|
|
27
|
+
const isLoadingRef = fromStore(derived(version, () => orchestrator.isLoading));
|
|
165
28
|
const branchRef = fromStore(branch);
|
|
166
29
|
const messagesRef = fromStore(messagesStore);
|
|
167
30
|
const toolCallsRef = fromStore(toolCallsStore);
|
|
@@ -181,14 +44,23 @@ function useStreamCustom(options) {
|
|
|
181
44
|
get isLoading() {
|
|
182
45
|
return isLoadingRef.current;
|
|
183
46
|
},
|
|
184
|
-
stop,
|
|
185
|
-
submit,
|
|
186
|
-
|
|
47
|
+
stop: () => orchestrator.stop(),
|
|
48
|
+
async submit(values, submitOptions) {
|
|
49
|
+
await orchestrator.submit(values, submitOptions);
|
|
50
|
+
},
|
|
51
|
+
switchThread(newThreadId) {
|
|
52
|
+
orchestrator.switchThread(newThreadId);
|
|
53
|
+
},
|
|
187
54
|
get branch() {
|
|
188
55
|
return branchRef.current;
|
|
189
56
|
},
|
|
190
|
-
setBranch
|
|
191
|
-
|
|
57
|
+
setBranch(value) {
|
|
58
|
+
branch.set(value);
|
|
59
|
+
orchestrator.setBranch(value);
|
|
60
|
+
},
|
|
61
|
+
getMessagesMetadata(message, index) {
|
|
62
|
+
return orchestrator.getMessagesMetadata(message, index);
|
|
63
|
+
},
|
|
192
64
|
queue: {
|
|
193
65
|
get entries() {
|
|
194
66
|
return emptyEntriesRef.current;
|
|
@@ -213,7 +85,9 @@ function useStreamCustom(options) {
|
|
|
213
85
|
get toolCalls() {
|
|
214
86
|
return toolCallsRef.current;
|
|
215
87
|
},
|
|
216
|
-
getToolCalls
|
|
88
|
+
getToolCalls(message) {
|
|
89
|
+
return orchestrator.getToolCalls(message);
|
|
90
|
+
},
|
|
217
91
|
get subagents() {
|
|
218
92
|
return subagentsRef.current;
|
|
219
93
|
},
|
|
@@ -221,13 +95,13 @@ function useStreamCustom(options) {
|
|
|
221
95
|
return activeSubagentsRef.current;
|
|
222
96
|
},
|
|
223
97
|
getSubagent(toolCallId) {
|
|
224
|
-
return
|
|
98
|
+
return orchestrator.getSubagent(toolCallId);
|
|
225
99
|
},
|
|
226
100
|
getSubagentsByType(type) {
|
|
227
|
-
return
|
|
101
|
+
return orchestrator.getSubagentsByType(type);
|
|
228
102
|
},
|
|
229
103
|
getSubagentsByMessage(messageId) {
|
|
230
|
-
return
|
|
104
|
+
return orchestrator.getSubagentsByMessage(messageId);
|
|
231
105
|
}
|
|
232
106
|
};
|
|
233
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { writable, derived, get, fromStore } from \"svelte/store\";\nimport { onDestroy } from \"svelte\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetConfigurableType,\n type GetToolCallsType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type {\n BagTemplate,\n Message,\n Interrupt,\n ThreadState,\n} from \"@langchain/langgraph-sdk\";\n\nfunction createCustomTransportThreadState<\n StateType extends Record<string, unknown>,\n>(values: StateType, threadId: string): ThreadState<StateType> {\n return {\n values,\n next: [],\n tasks: [],\n metadata: undefined,\n created_at: null,\n checkpoint: {\n thread_id: threadId,\n checkpoint_id: null,\n checkpoint_ns: \"\",\n checkpoint_map: null,\n },\n parent_checkpoint: null,\n };\n}\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<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 messageManager = new MessageTupleManager();\n const stream = new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: toMessageClass,\n });\n\n let threadId: string | null = options.threadId ?? null;\n\n const branch = writable<string>(\"\");\n\n const streamValues = writable<StateType | null>(stream.values);\n const streamError = writable<unknown>(stream.error);\n const isLoading = writable(stream.isLoading);\n\n const subagentVersion = writable(0);\n\n const unsubscribe = stream.subscribe(() => {\n streamValues.set(stream.values);\n streamError.set(stream.error);\n isLoading.set(stream.isLoading);\n subagentVersion.update((v) => v + 1);\n });\n\n onDestroy(() => {\n unsubscribe();\n });\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n if (shouldReconstructSubagents) {\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n\n function switchThread(newThreadId: string | null) {\n if (newThreadId !== threadId) {\n threadId = newThreadId;\n stream.clear();\n }\n }\n\n function stop() {\n return stream.stop(historyValues, { onStop: options.onStop });\n }\n\n async function submitDirect(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n const currentThreadId = options.threadId ?? null;\n if (currentThreadId !== threadId) {\n threadId = currentThreadId;\n stream.clear();\n }\n\n let usableThreadId = threadId ?? submitOptions?.threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadId = usableThreadId;\n options.onThreadId?.(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n streamSubgraphs: submitOptions?.streamSubgraphs,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => {\n if (!usableThreadId) return undefined;\n\n const finalValues = stream.values ?? historyValues;\n options.onFinish?.(\n createCustomTransportThreadState(finalValues, usableThreadId),\n undefined,\n );\n\n return undefined;\n },\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n }\n\n async function submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await submitDirect(values, submitOptions);\n }\n\n const valuesStore = derived(\n [streamValues],\n ([$streamValues]) => $streamValues ?? ({} as StateType),\n );\n\n const messagesStore = derived([streamValues], ([$streamValues]) => {\n if (!$streamValues) return [];\n return ensureMessageInstances(getMessages($streamValues));\n });\n\n const toolCallsStore = derived([streamValues], ([$streamValues]) => {\n if (!$streamValues) return [];\n const msgs = getMessages($streamValues);\n return getToolCallsWithResults<ToolCallType>(msgs);\n });\n\n const interruptStore = derived([streamValues], ([$streamValues]) =>\n extractInterrupts<InterruptType>($streamValues),\n );\n\n const interruptsStore = derived(\n [streamValues],\n ([$streamValues]): Interrupt<InterruptType>[] => {\n if (\n $streamValues != null &&\n \"__interrupt__\" in $streamValues &&\n Array.isArray($streamValues.__interrupt__)\n ) {\n const valueInterrupts = $streamValues.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n );\n\n function getToolCalls(message: Message) {\n const $streamValues = get(streamValues);\n if (!$streamValues) return [];\n const msgs = getMessages($streamValues);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n }\n\n function setBranch(value: string) {\n branch.set(value);\n }\n\n function getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n }\n\n const emptyEntries = writable<never[]>([]);\n const emptySize = writable(0);\n\n const subagentsStore = derived(subagentVersion, () => stream.getSubagents());\n const activeSubagentsStore = derived(subagentVersion, () =>\n stream.getActiveSubagents(),\n );\n\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(streamError);\n const isLoadingRef = fromStore(isLoading);\n const branchRef = fromStore(branch);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const emptyEntriesRef = fromStore(emptyEntries);\n const emptySizeRef = fromStore(emptySize);\n\n return {\n get values() {\n return valuesRef.current;\n },\n get error() {\n return errorRef.current;\n },\n get isLoading() {\n return isLoadingRef.current;\n },\n\n stop,\n submit,\n switchThread,\n\n get branch() {\n return branchRef.current;\n },\n setBranch,\n getMessagesMetadata,\n\n queue: {\n get entries() {\n return emptyEntriesRef.current;\n },\n get size() {\n return emptySizeRef.current;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n get interrupt() {\n return interruptRef.current;\n },\n get interrupts() {\n return interruptsRef.current;\n },\n\n get messages() {\n return messagesRef.current;\n },\n get toolCalls() {\n return toolCallsRef.current;\n },\n getToolCalls,\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\n },\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.ts"],"sourcesContent":["import { writable, derived, fromStore } from \"svelte/store\";\nimport { onDestroy } from \"svelte\";\nimport {\n CustomStreamOrchestrator,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type GetUpdateType,\n type GetInterruptType,\n type GetConfigurableType,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(options: AnyStreamCustomOptions<StateType, Bag>) {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n const orchestrator = new CustomStreamOrchestrator<StateType, Bag>(options);\n\n const version = writable(0);\n const branch = writable<string>(\"\");\n\n const unsubscribe = orchestrator.subscribe(() => {\n version.update((v) => v + 1);\n });\n\n onDestroy(() => {\n unsubscribe();\n orchestrator.dispose();\n });\n\n const valuesStore = derived(version, () => orchestrator.values);\n\n const messagesStore = derived(version, () => orchestrator.messages);\n\n const toolCallsStore = derived(version, () => orchestrator.toolCalls);\n\n const interruptStore = derived(\n version,\n () => orchestrator.interrupt as Interrupt<InterruptType> | undefined,\n );\n\n const interruptsStore = derived(\n version,\n () => orchestrator.interrupts as Interrupt<InterruptType>[],\n );\n\n const subagentsStore = derived(version, () => orchestrator.subagents);\n const activeSubagentsStore = derived(\n version,\n () => orchestrator.activeSubagents,\n );\n\n const emptyEntries = writable<never[]>([]);\n const emptySize = writable(0);\n\n const valuesRef = fromStore(valuesStore);\n const errorRef = fromStore(derived(version, () => orchestrator.error));\n const isLoadingRef = fromStore(\n derived(version, () => orchestrator.isLoading),\n );\n const branchRef = fromStore(branch);\n const messagesRef = fromStore(messagesStore);\n const toolCallsRef = fromStore(toolCallsStore);\n const interruptRef = fromStore(interruptStore);\n const interruptsRef = fromStore(interruptsStore);\n const subagentsRef = fromStore(subagentsStore);\n const activeSubagentsRef = fromStore(activeSubagentsStore);\n const emptyEntriesRef = fromStore(emptyEntries);\n const emptySizeRef = fromStore(emptySize);\n\n return {\n get values() {\n return valuesRef.current;\n },\n get error() {\n return errorRef.current;\n },\n get isLoading() {\n return isLoadingRef.current;\n },\n\n stop: () => orchestrator.stop(),\n\n async submit(\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) {\n await orchestrator.submit(values, submitOptions);\n },\n\n switchThread(newThreadId: string | null) {\n orchestrator.switchThread(newThreadId);\n },\n\n get branch() {\n return branchRef.current;\n },\n setBranch(value: string) {\n branch.set(value);\n orchestrator.setBranch(value);\n },\n\n getMessagesMetadata(\n message: Message,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n return orchestrator.getMessagesMetadata(message, index);\n },\n\n queue: {\n get entries() {\n return emptyEntriesRef.current;\n },\n get size() {\n return emptySizeRef.current;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n\n get interrupt() {\n return interruptRef.current;\n },\n get interrupts() {\n return interruptsRef.current;\n },\n\n get messages() {\n return messagesRef.current;\n },\n get toolCalls() {\n return toolCallsRef.current;\n },\n getToolCalls(message: Message) {\n return orchestrator.getToolCalls(message);\n },\n\n get subagents() {\n return subagentsRef.current;\n },\n get activeSubagents() {\n return activeSubagentsRef.current;\n },\n getSubagent(toolCallId: string) {\n return orchestrator.getSubagent(toolCallId);\n },\n getSubagentsByType(type: string) {\n return orchestrator.getSubagentsByType(type);\n },\n getSubagentsByMessage(messageId: string) {\n return orchestrator.getSubagentsByMessage(messageId);\n },\n };\n}\n"],"mappings":";;;;AAaA,SAAgB,gBAGd,SAAiD;CAIjD,MAAM,eAAe,IAAI,yBAAyC,QAAQ;CAE1E,MAAM,UAAU,SAAS,EAAE;CAC3B,MAAM,SAAS,SAAiB,GAAG;CAEnC,MAAM,cAAc,aAAa,gBAAgB;AAC/C,UAAQ,QAAQ,MAAM,IAAI,EAAE;GAC5B;AAEF,iBAAgB;AACd,eAAa;AACb,eAAa,SAAS;GACtB;CAEF,MAAM,cAAc,QAAQ,eAAe,aAAa,OAAO;CAE/D,MAAM,gBAAgB,QAAQ,eAAe,aAAa,SAAS;CAEnE,MAAM,iBAAiB,QAAQ,eAAe,aAAa,UAAU;CAErE,MAAM,iBAAiB,QACrB,eACM,aAAa,UACpB;CAED,MAAM,kBAAkB,QACtB,eACM,aAAa,WACpB;CAED,MAAM,iBAAiB,QAAQ,eAAe,aAAa,UAAU;CACrE,MAAM,uBAAuB,QAC3B,eACM,aAAa,gBACpB;CAED,MAAM,eAAe,SAAkB,EAAE,CAAC;CAC1C,MAAM,YAAY,SAAS,EAAE;CAE7B,MAAM,YAAY,UAAU,YAAY;CACxC,MAAM,WAAW,UAAU,QAAQ,eAAe,aAAa,MAAM,CAAC;CACtE,MAAM,eAAe,UACnB,QAAQ,eAAe,aAAa,UAAU,CAC/C;CACD,MAAM,YAAY,UAAU,OAAO;CACnC,MAAM,cAAc,UAAU,cAAc;CAC5C,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,gBAAgB,UAAU,gBAAgB;CAChD,MAAM,eAAe,UAAU,eAAe;CAC9C,MAAM,qBAAqB,UAAU,qBAAqB;CAC1D,MAAM,kBAAkB,UAAU,aAAa;CAC/C,MAAM,eAAe,UAAU,UAAU;AAEzC,QAAO;EACL,IAAI,SAAS;AACX,UAAO,UAAU;;EAEnB,IAAI,QAAQ;AACV,UAAO,SAAS;;EAElB,IAAI,YAAY;AACd,UAAO,aAAa;;EAGtB,YAAY,aAAa,MAAM;EAE/B,MAAM,OACJ,QACA,eACA;AACA,SAAM,aAAa,OAAO,QAAQ,cAAc;;EAGlD,aAAa,aAA4B;AACvC,gBAAa,aAAa,YAAY;;EAGxC,IAAI,SAAS;AACX,UAAO,UAAU;;EAEnB,UAAU,OAAe;AACvB,UAAO,IAAI,MAAM;AACjB,gBAAa,UAAU,MAAM;;EAG/B,oBACE,SACA,OACwC;AACxC,UAAO,aAAa,oBAAoB,SAAS,MAAM;;EAGzD,OAAO;GACL,IAAI,UAAU;AACZ,WAAO,gBAAgB;;GAEzB,IAAI,OAAO;AACT,WAAO,aAAa;;GAEtB,MAAM,SAAS;AACb,WAAO;;GAET,MAAM,QAAQ;GACf;EAED,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,IAAI,aAAa;AACf,UAAO,cAAc;;EAGvB,IAAI,WAAW;AACb,UAAO,YAAY;;EAErB,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,aAAa,SAAkB;AAC7B,UAAO,aAAa,aAAa,QAAQ;;EAG3C,IAAI,YAAY;AACd,UAAO,aAAa;;EAEtB,IAAI,kBAAkB;AACpB,UAAO,mBAAmB;;EAE5B,YAAY,YAAoB;AAC9B,UAAO,aAAa,YAAY,WAAW;;EAE7C,mBAAmB,MAAc;AAC/B,UAAO,aAAa,mBAAmB,KAAK;;EAE9C,sBAAsB,WAAmB;AACvC,UAAO,aAAa,sBAAsB,UAAU;;EAEvD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Svelte integration for LangGraph & LangChain",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"directory": "libs/sdk-svelte"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@langchain/langgraph-sdk": "^1.
|
|
13
|
+
"@langchain/langgraph-sdk": "^1.8.1"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@hono/node-server": "^1.19.11",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"vitest-browser-svelte": "^2.0.2",
|
|
38
38
|
"webdriverio": "^9.25.0",
|
|
39
39
|
"zod": "^4.3.6",
|
|
40
|
-
"@langchain/langgraph": "^1.2.
|
|
40
|
+
"@langchain/langgraph": "^1.2.6",
|
|
41
41
|
"@langchain/langgraph-api": "^1.1.16",
|
|
42
42
|
"@langchain/langgraph-checkpoint": "^1.0.1"
|
|
43
43
|
},
|
package/dist/context.cjs
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
const require_index = require("./index.cjs");
|
|
2
|
-
let svelte = require("svelte");
|
|
3
|
-
//#region src/context.ts
|
|
4
|
-
const STREAM_CONTEXT_KEY = Symbol("langchain-stream");
|
|
5
|
-
/**
|
|
6
|
-
* Creates a shared `useStream` instance and makes it available to all
|
|
7
|
-
* descendant components via Svelte's `setContext`/`getContext`.
|
|
8
|
-
*
|
|
9
|
-
* Call this in a parent component's `<script>` block. Children access
|
|
10
|
-
* the shared stream via `getStream()`.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```svelte
|
|
14
|
-
* <!-- ChatContainer.svelte -->
|
|
15
|
-
* <script lang="ts">
|
|
16
|
-
* import { provideStream } from "@langchain/svelte";
|
|
17
|
-
*
|
|
18
|
-
* provideStream({
|
|
19
|
-
* assistantId: "agent",
|
|
20
|
-
* apiUrl: "http://localhost:2024",
|
|
21
|
-
* });
|
|
22
|
-
* <\/script>
|
|
23
|
-
*
|
|
24
|
-
* <ChatHeader />
|
|
25
|
-
* <MessageList />
|
|
26
|
-
* <MessageInput />
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* @returns The stream instance (same as calling `useStream` directly).
|
|
30
|
-
*/
|
|
31
|
-
function provideStream(options) {
|
|
32
|
-
const stream = require_index.useStream(options);
|
|
33
|
-
(0, svelte.setContext)(STREAM_CONTEXT_KEY, stream);
|
|
34
|
-
return stream;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Retrieves the shared stream instance from the nearest ancestor that
|
|
38
|
-
* called `provideStream()`.
|
|
39
|
-
*
|
|
40
|
-
* Throws if no ancestor has provided a stream.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```svelte
|
|
44
|
-
* <!-- MessageList.svelte -->
|
|
45
|
-
* <script lang="ts">
|
|
46
|
-
* import { getStream } from "@langchain/svelte";
|
|
47
|
-
*
|
|
48
|
-
* const stream = getStream();
|
|
49
|
-
* <\/script>
|
|
50
|
-
*
|
|
51
|
-
* {#each stream.messages as msg (msg.id)}
|
|
52
|
-
* <div>{msg.content}</div>
|
|
53
|
-
* {/each}
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```svelte
|
|
58
|
-
* <!-- MessageInput.svelte -->
|
|
59
|
-
* <script lang="ts">
|
|
60
|
-
* import { getStream } from "@langchain/svelte";
|
|
61
|
-
*
|
|
62
|
-
* const stream = getStream();
|
|
63
|
-
* let input = $state("");
|
|
64
|
-
*
|
|
65
|
-
* function send() {
|
|
66
|
-
* stream.submit({ messages: [{ type: "human", content: input }] });
|
|
67
|
-
* input = "";
|
|
68
|
-
* }
|
|
69
|
-
* <\/script>
|
|
70
|
-
*
|
|
71
|
-
* <form onsubmit={send}>
|
|
72
|
-
* <textarea bind:value={input}></textarea>
|
|
73
|
-
* <button disabled={stream.isLoading} type="submit">Send</button>
|
|
74
|
-
* </form>
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
function getStream() {
|
|
78
|
-
const context = (0, svelte.getContext)(STREAM_CONTEXT_KEY);
|
|
79
|
-
if (context == null) throw new Error("getStream() requires a parent component to call provideStream(). Add provideStream({ assistantId: '...' }) in an ancestor component.");
|
|
80
|
-
return context;
|
|
81
|
-
}
|
|
82
|
-
//#endregion
|
|
83
|
-
exports.getStream = getStream;
|
|
84
|
-
exports.provideStream = provideStream;
|
|
85
|
-
|
|
86
|
-
//# sourceMappingURL=context.cjs.map
|
package/dist/context.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.cjs","names":["useStream"],"sources":["../src/context.ts"],"sourcesContent":["import { setContext, getContext } from \"svelte\";\nimport type { BagTemplate } from \"@langchain/langgraph-sdk\";\nimport type {\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n UseStreamCustomOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStream } from \"./index.js\";\n\nconst STREAM_CONTEXT_KEY = Symbol(\"langchain-stream\");\n\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via `getStream()`.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called `provideStream()`.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n *\n * @example\n * ```svelte\n * <!-- MessageInput.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * let input = $state(\"\");\n *\n * function send() {\n * stream.submit({ messages: [{ type: \"human\", content: input }] });\n * input = \"\";\n * }\n * </script>\n *\n * <form onsubmit={send}>\n * <textarea bind:value={input}></textarea>\n * <button disabled={stream.isLoading} type=\"submit\">Send</button>\n * </form>\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\",\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n"],"mappings":";;;AAUA,MAAM,qBAAqB,OAAO,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BrD,SAAgB,cAId,SAGsC;CAEtC,MAAM,SAASA,cAAAA,UAAkB,QAAe;AAChD,EAAA,GAAA,OAAA,YAAW,oBAAoB,OAAO;AACtC,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,SAAgB,YAG0B;CACxC,MAAM,WAAA,GAAA,OAAA,YAAqB,mBAAmB;AAC9C,KAAI,WAAW,KACb,OAAM,IAAI,MACR,uIAED;AAGH,QAAO"}
|
package/dist/context.d.cts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { useStream } from "./index.cjs";
|
|
2
|
-
import { InferBag, InferStateType, ResolveStreamOptions, UseStreamCustomOptions } from "@langchain/langgraph-sdk/ui";
|
|
3
|
-
import { BagTemplate } from "@langchain/langgraph-sdk";
|
|
4
|
-
|
|
5
|
-
//#region src/context.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* Creates a shared `useStream` instance and makes it available to all
|
|
8
|
-
* descendant components via Svelte's `setContext`/`getContext`.
|
|
9
|
-
*
|
|
10
|
-
* Call this in a parent component's `<script>` block. Children access
|
|
11
|
-
* the shared stream via `getStream()`.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```svelte
|
|
15
|
-
* <!-- ChatContainer.svelte -->
|
|
16
|
-
* <script lang="ts">
|
|
17
|
-
* import { provideStream } from "@langchain/svelte";
|
|
18
|
-
*
|
|
19
|
-
* provideStream({
|
|
20
|
-
* assistantId: "agent",
|
|
21
|
-
* apiUrl: "http://localhost:2024",
|
|
22
|
-
* });
|
|
23
|
-
* </script>
|
|
24
|
-
*
|
|
25
|
-
* <ChatHeader />
|
|
26
|
-
* <MessageList />
|
|
27
|
-
* <MessageInput />
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* @returns The stream instance (same as calling `useStream` directly).
|
|
31
|
-
*/
|
|
32
|
-
declare function provideStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: ResolveStreamOptions<T, InferBag<T, Bag>> | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>): ReturnType<typeof useStream<T, Bag>>;
|
|
33
|
-
/**
|
|
34
|
-
* Retrieves the shared stream instance from the nearest ancestor that
|
|
35
|
-
* called `provideStream()`.
|
|
36
|
-
*
|
|
37
|
-
* Throws if no ancestor has provided a stream.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```svelte
|
|
41
|
-
* <!-- MessageList.svelte -->
|
|
42
|
-
* <script lang="ts">
|
|
43
|
-
* import { getStream } from "@langchain/svelte";
|
|
44
|
-
*
|
|
45
|
-
* const stream = getStream();
|
|
46
|
-
* </script>
|
|
47
|
-
*
|
|
48
|
-
* {#each stream.messages as msg (msg.id)}
|
|
49
|
-
* <div>{msg.content}</div>
|
|
50
|
-
* {/each}
|
|
51
|
-
* ```
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```svelte
|
|
55
|
-
* <!-- MessageInput.svelte -->
|
|
56
|
-
* <script lang="ts">
|
|
57
|
-
* import { getStream } from "@langchain/svelte";
|
|
58
|
-
*
|
|
59
|
-
* const stream = getStream();
|
|
60
|
-
* let input = $state("");
|
|
61
|
-
*
|
|
62
|
-
* function send() {
|
|
63
|
-
* stream.submit({ messages: [{ type: "human", content: input }] });
|
|
64
|
-
* input = "";
|
|
65
|
-
* }
|
|
66
|
-
* </script>
|
|
67
|
-
*
|
|
68
|
-
* <form onsubmit={send}>
|
|
69
|
-
* <textarea bind:value={input}></textarea>
|
|
70
|
-
* <button disabled={stream.isLoading} type="submit">Send</button>
|
|
71
|
-
* </form>
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
declare function getStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): ReturnType<typeof useStream<T, Bag>>;
|
|
75
|
-
//#endregion
|
|
76
|
-
export { getStream, provideStream };
|
|
77
|
-
//# sourceMappingURL=context.d.cts.map
|
package/dist/context.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.cts","names":[],"sources":["../src/context.ts"],"mappings":";;;;;;;AAsCA;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KACpC,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;;AAgDlC;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA"}
|
package/dist/context.d.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { useStream } from "./index.js";
|
|
2
|
-
import { InferBag, InferStateType, ResolveStreamOptions, UseStreamCustomOptions } from "@langchain/langgraph-sdk/ui";
|
|
3
|
-
import { BagTemplate } from "@langchain/langgraph-sdk";
|
|
4
|
-
|
|
5
|
-
//#region src/context.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* Creates a shared `useStream` instance and makes it available to all
|
|
8
|
-
* descendant components via Svelte's `setContext`/`getContext`.
|
|
9
|
-
*
|
|
10
|
-
* Call this in a parent component's `<script>` block. Children access
|
|
11
|
-
* the shared stream via `getStream()`.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```svelte
|
|
15
|
-
* <!-- ChatContainer.svelte -->
|
|
16
|
-
* <script lang="ts">
|
|
17
|
-
* import { provideStream } from "@langchain/svelte";
|
|
18
|
-
*
|
|
19
|
-
* provideStream({
|
|
20
|
-
* assistantId: "agent",
|
|
21
|
-
* apiUrl: "http://localhost:2024",
|
|
22
|
-
* });
|
|
23
|
-
* </script>
|
|
24
|
-
*
|
|
25
|
-
* <ChatHeader />
|
|
26
|
-
* <MessageList />
|
|
27
|
-
* <MessageInput />
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* @returns The stream instance (same as calling `useStream` directly).
|
|
31
|
-
*/
|
|
32
|
-
declare function provideStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: ResolveStreamOptions<T, InferBag<T, Bag>> | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>): ReturnType<typeof useStream<T, Bag>>;
|
|
33
|
-
/**
|
|
34
|
-
* Retrieves the shared stream instance from the nearest ancestor that
|
|
35
|
-
* called `provideStream()`.
|
|
36
|
-
*
|
|
37
|
-
* Throws if no ancestor has provided a stream.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```svelte
|
|
41
|
-
* <!-- MessageList.svelte -->
|
|
42
|
-
* <script lang="ts">
|
|
43
|
-
* import { getStream } from "@langchain/svelte";
|
|
44
|
-
*
|
|
45
|
-
* const stream = getStream();
|
|
46
|
-
* </script>
|
|
47
|
-
*
|
|
48
|
-
* {#each stream.messages as msg (msg.id)}
|
|
49
|
-
* <div>{msg.content}</div>
|
|
50
|
-
* {/each}
|
|
51
|
-
* ```
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```svelte
|
|
55
|
-
* <!-- MessageInput.svelte -->
|
|
56
|
-
* <script lang="ts">
|
|
57
|
-
* import { getStream } from "@langchain/svelte";
|
|
58
|
-
*
|
|
59
|
-
* const stream = getStream();
|
|
60
|
-
* let input = $state("");
|
|
61
|
-
*
|
|
62
|
-
* function send() {
|
|
63
|
-
* stream.submit({ messages: [{ type: "human", content: input }] });
|
|
64
|
-
* input = "";
|
|
65
|
-
* }
|
|
66
|
-
* </script>
|
|
67
|
-
*
|
|
68
|
-
* <form onsubmit={send}>
|
|
69
|
-
* <textarea bind:value={input}></textarea>
|
|
70
|
-
* <button disabled={stream.isLoading} type="submit">Send</button>
|
|
71
|
-
* </form>
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
declare function getStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(): ReturnType<typeof useStream<T, Bag>>;
|
|
75
|
-
//#endregion
|
|
76
|
-
export { getStream, provideStream };
|
|
77
|
-
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","names":[],"sources":["../src/context.ts"],"mappings":";;;;;;;AAsCA;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,aAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EACI,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KACpC,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KACzD,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;;;;;;AAgDlC;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAAA,GACvB,UAAA,QAAkB,SAAA,CAAU,CAAA,EAAG,GAAA"}
|
package/dist/context.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { useStream } from "./index.js";
|
|
2
|
-
import { getContext, setContext } from "svelte";
|
|
3
|
-
//#region src/context.ts
|
|
4
|
-
const STREAM_CONTEXT_KEY = Symbol("langchain-stream");
|
|
5
|
-
/**
|
|
6
|
-
* Creates a shared `useStream` instance and makes it available to all
|
|
7
|
-
* descendant components via Svelte's `setContext`/`getContext`.
|
|
8
|
-
*
|
|
9
|
-
* Call this in a parent component's `<script>` block. Children access
|
|
10
|
-
* the shared stream via `getStream()`.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```svelte
|
|
14
|
-
* <!-- ChatContainer.svelte -->
|
|
15
|
-
* <script lang="ts">
|
|
16
|
-
* import { provideStream } from "@langchain/svelte";
|
|
17
|
-
*
|
|
18
|
-
* provideStream({
|
|
19
|
-
* assistantId: "agent",
|
|
20
|
-
* apiUrl: "http://localhost:2024",
|
|
21
|
-
* });
|
|
22
|
-
* <\/script>
|
|
23
|
-
*
|
|
24
|
-
* <ChatHeader />
|
|
25
|
-
* <MessageList />
|
|
26
|
-
* <MessageInput />
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* @returns The stream instance (same as calling `useStream` directly).
|
|
30
|
-
*/
|
|
31
|
-
function provideStream(options) {
|
|
32
|
-
const stream = useStream(options);
|
|
33
|
-
setContext(STREAM_CONTEXT_KEY, stream);
|
|
34
|
-
return stream;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Retrieves the shared stream instance from the nearest ancestor that
|
|
38
|
-
* called `provideStream()`.
|
|
39
|
-
*
|
|
40
|
-
* Throws if no ancestor has provided a stream.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```svelte
|
|
44
|
-
* <!-- MessageList.svelte -->
|
|
45
|
-
* <script lang="ts">
|
|
46
|
-
* import { getStream } from "@langchain/svelte";
|
|
47
|
-
*
|
|
48
|
-
* const stream = getStream();
|
|
49
|
-
* <\/script>
|
|
50
|
-
*
|
|
51
|
-
* {#each stream.messages as msg (msg.id)}
|
|
52
|
-
* <div>{msg.content}</div>
|
|
53
|
-
* {/each}
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```svelte
|
|
58
|
-
* <!-- MessageInput.svelte -->
|
|
59
|
-
* <script lang="ts">
|
|
60
|
-
* import { getStream } from "@langchain/svelte";
|
|
61
|
-
*
|
|
62
|
-
* const stream = getStream();
|
|
63
|
-
* let input = $state("");
|
|
64
|
-
*
|
|
65
|
-
* function send() {
|
|
66
|
-
* stream.submit({ messages: [{ type: "human", content: input }] });
|
|
67
|
-
* input = "";
|
|
68
|
-
* }
|
|
69
|
-
* <\/script>
|
|
70
|
-
*
|
|
71
|
-
* <form onsubmit={send}>
|
|
72
|
-
* <textarea bind:value={input}></textarea>
|
|
73
|
-
* <button disabled={stream.isLoading} type="submit">Send</button>
|
|
74
|
-
* </form>
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
function getStream() {
|
|
78
|
-
const context = getContext(STREAM_CONTEXT_KEY);
|
|
79
|
-
if (context == null) throw new Error("getStream() requires a parent component to call provideStream(). Add provideStream({ assistantId: '...' }) in an ancestor component.");
|
|
80
|
-
return context;
|
|
81
|
-
}
|
|
82
|
-
//#endregion
|
|
83
|
-
export { getStream, provideStream };
|
|
84
|
-
|
|
85
|
-
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../src/context.ts"],"sourcesContent":["import { setContext, getContext } from \"svelte\";\nimport type { BagTemplate } from \"@langchain/langgraph-sdk\";\nimport type {\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n UseStreamCustomOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStream } from \"./index.js\";\n\nconst STREAM_CONTEXT_KEY = Symbol(\"langchain-stream\");\n\n/**\n * Creates a shared `useStream` instance and makes it available to all\n * descendant components via Svelte's `setContext`/`getContext`.\n *\n * Call this in a parent component's `<script>` block. Children access\n * the shared stream via `getStream()`.\n *\n * @example\n * ```svelte\n * <!-- ChatContainer.svelte -->\n * <script lang=\"ts\">\n * import { provideStream } from \"@langchain/svelte\";\n *\n * provideStream({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n * </script>\n *\n * <ChatHeader />\n * <MessageList />\n * <MessageInput />\n * ```\n *\n * @returns The stream instance (same as calling `useStream` directly).\n */\nexport function provideStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | ResolveStreamOptions<T, InferBag<T, Bag>>\n | UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): ReturnType<typeof useStream<T, Bag>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stream = useStream<T, Bag>(options as any);\n setContext(STREAM_CONTEXT_KEY, stream);\n return stream;\n}\n\n/**\n * Retrieves the shared stream instance from the nearest ancestor that\n * called `provideStream()`.\n *\n * Throws if no ancestor has provided a stream.\n *\n * @example\n * ```svelte\n * <!-- MessageList.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * </script>\n *\n * {#each stream.messages as msg (msg.id)}\n * <div>{msg.content}</div>\n * {/each}\n * ```\n *\n * @example\n * ```svelte\n * <!-- MessageInput.svelte -->\n * <script lang=\"ts\">\n * import { getStream } from \"@langchain/svelte\";\n *\n * const stream = getStream();\n * let input = $state(\"\");\n *\n * function send() {\n * stream.submit({ messages: [{ type: \"human\", content: input }] });\n * input = \"\";\n * }\n * </script>\n *\n * <form onsubmit={send}>\n * <textarea bind:value={input}></textarea>\n * <button disabled={stream.isLoading} type=\"submit\">Send</button>\n * </form>\n * ```\n */\nexport function getStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(): ReturnType<typeof useStream<T, Bag>> {\n const context = getContext(STREAM_CONTEXT_KEY);\n if (context == null) {\n throw new Error(\n \"getStream() requires a parent component to call provideStream(). \" +\n \"Add provideStream({ assistantId: '...' }) in an ancestor component.\",\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return context as any;\n}\n"],"mappings":";;;AAUA,MAAM,qBAAqB,OAAO,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BrD,SAAgB,cAId,SAGsC;CAEtC,MAAM,SAAS,UAAkB,QAAe;AAChD,YAAW,oBAAoB,OAAO;AACtC,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,SAAgB,YAG0B;CACxC,MAAM,UAAU,WAAW,mBAAmB;AAC9C,KAAI,WAAW,KACb,OAAM,IAAI,MACR,uIAED;AAGH,QAAO"}
|