@assistant-ui/react 0.10.24 → 0.10.26
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/api/{ContentPartRuntime.d.ts → MessagePartRuntime.d.ts} +14 -14
- package/dist/api/{ContentPartRuntime.d.ts.map → MessagePartRuntime.d.ts.map} +1 -1
- package/dist/api/{ContentPartRuntime.js → MessagePartRuntime.js} +6 -6
- package/dist/api/{ContentPartRuntime.js.map → MessagePartRuntime.js.map} +1 -1
- package/dist/api/MessageRuntime.d.ts +8 -8
- package/dist/api/MessageRuntime.js +17 -17
- package/dist/api/MessageRuntime.js.map +1 -1
- package/dist/api/RuntimePathTypes.d.ts +2 -2
- package/dist/api/ThreadListRuntime.d.ts +3 -0
- package/dist/api/ThreadListRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListRuntime.js +5 -1
- package/dist/api/ThreadListRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.d.ts +5 -0
- package/dist/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +1 -0
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/index.d.ts +2 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/cloud/auiV0.d.ts +2 -2
- package/dist/cloud/auiV0.js +1 -1
- package/dist/cloud/auiV0.js.map +1 -1
- package/dist/context/providers/MessagePartRuntimeProvider.d.ts +9 -0
- package/dist/context/providers/{ContentPartRuntimeProvider.d.ts.map → MessagePartRuntimeProvider.d.ts.map} +1 -1
- package/dist/context/providers/{ContentPartRuntimeProvider.js → MessagePartRuntimeProvider.js} +9 -9
- package/dist/context/providers/MessagePartRuntimeProvider.js.map +1 -0
- package/dist/context/providers/{TextContentPartProvider.d.ts → TextMessagePartProvider.d.ts} +3 -3
- package/dist/context/providers/{TextContentPartProvider.d.ts.map → TextMessagePartProvider.d.ts.map} +1 -1
- package/dist/context/providers/{TextContentPartProvider.js → TextMessagePartProvider.js} +19 -19
- package/dist/context/providers/{TextContentPartProvider.js.map → TextMessagePartProvider.js.map} +1 -1
- package/dist/context/providers/index.d.ts +2 -1
- package/dist/context/providers/index.d.ts.map +1 -1
- package/dist/context/providers/index.js +4 -2
- package/dist/context/providers/index.js.map +1 -1
- package/dist/context/react/AttachmentContext.d.ts +72 -72
- package/dist/context/react/MessagePartContext.d.ts +41 -0
- package/dist/context/react/{ContentPartContext.d.ts.map → MessagePartContext.d.ts.map} +1 -1
- package/dist/context/react/MessagePartContext.js +25 -0
- package/dist/context/react/MessagePartContext.js.map +1 -0
- package/dist/context/react/index.d.ts +1 -1
- package/dist/context/react/index.js +3 -3
- package/dist/context/react/index.js.map +1 -1
- package/dist/context/stores/AssistantToolUIs.d.ts +3 -3
- package/dist/context/stores/AssistantToolUIs.js.map +1 -1
- package/dist/model-context/useAssistantTool.d.ts +2 -2
- package/dist/model-context/useAssistantTool.js.map +1 -1
- package/dist/model-context/useAssistantToolUI.d.ts +2 -2
- package/dist/model-context/useAssistantToolUI.js.map +1 -1
- package/dist/model-context/useInlineRender.d.ts +2 -2
- package/dist/model-context/useInlineRender.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -0
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
- package/dist/primitives/index.d.ts +12 -6
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +23 -11
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/message/MessageParts.d.ts +116 -0
- package/dist/primitives/message/MessageParts.d.ts.map +1 -0
- package/dist/primitives/message/MessageParts.js +208 -0
- package/dist/primitives/message/MessageParts.js.map +1 -0
- package/dist/primitives/message/index.d.ts +2 -1
- package/dist/primitives/message/index.d.ts.map +1 -1
- package/dist/primitives/message/index.js +4 -2
- package/dist/primitives/message/index.js.map +1 -1
- package/dist/primitives/{contentPart/ContentPartImage.d.ts → messagePart/MessagePartImage.d.ts} +8 -8
- package/dist/primitives/{contentPart/ContentPartImage.d.ts.map → messagePart/MessagePartImage.d.ts.map} +1 -1
- package/dist/primitives/messagePart/MessagePartImage.js +16 -0
- package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts +6 -0
- package/dist/primitives/{contentPart/ContentPartInProgress.d.ts.map → messagePart/MessagePartInProgress.d.ts.map} +1 -1
- package/dist/primitives/messagePart/MessagePartInProgress.js +13 -0
- package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -0
- package/dist/primitives/{contentPart/ContentPartText.d.ts → messagePart/MessagePartText.d.ts} +6 -6
- package/dist/primitives/{contentPart/ContentPartText.d.ts.map → messagePart/MessagePartText.d.ts.map} +1 -1
- package/dist/primitives/messagePart/MessagePartText.js +18 -0
- package/dist/primitives/{contentPart/ContentPartText.js.map → messagePart/MessagePartText.js.map} +1 -1
- package/dist/primitives/messagePart/index.d.ts +4 -0
- package/dist/primitives/{contentPart → messagePart}/index.d.ts.map +1 -1
- package/dist/primitives/messagePart/index.js +10 -0
- package/dist/primitives/messagePart/index.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts +5 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.js +18 -0
- package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts +5 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.js +18 -0
- package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +5 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js +18 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts +5 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.js +18 -0
- package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts +7 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.js +18 -0
- package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +1 -0
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +1 -0
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -0
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +2 -0
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +3 -0
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +1 -0
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +3 -8
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.d.ts +3 -3
- package/dist/runtimes/external-store/ThreadMessageLike.js +4 -4
- package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
- package/dist/runtimes/external-store/createMessageConverter.js +3 -3
- package/dist/runtimes/external-store/createMessageConverter.js.map +1 -1
- package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
- package/dist/runtimes/local/ChatModelAdapter.d.ts +4 -4
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +1 -0
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js +3 -0
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +2 -0
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js +12 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +1 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +3 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +3 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/utils/MessageRepository.js +1 -1
- package/dist/runtimes/utils/MessageRepository.js.map +1 -1
- package/dist/tests/setup.js +8 -8
- package/dist/tests/setup.js.map +1 -1
- package/dist/types/AssistantTypes.d.ts +15 -15
- package/dist/types/AttachmentTypes.d.ts +3 -3
- package/dist/types/MessagePartComponentTypes.d.ts +25 -0
- package/dist/types/{ContentPartComponentTypes.d.ts.map → MessagePartComponentTypes.d.ts.map} +1 -1
- package/dist/types/MessagePartComponentTypes.js +1 -0
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/getThreadMessageText.js.map +1 -1
- package/dist/utils/smooth/SmoothContext.js +3 -3
- package/dist/utils/smooth/SmoothContext.js.map +1 -1
- package/dist/utils/smooth/useSmooth.d.ts +3 -3
- package/dist/utils/smooth/useSmooth.js.map +1 -1
- package/dist/utils/useToolArgsFieldStatus.js +3 -3
- package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
- package/package.json +8 -8
- package/src/api/{ContentPartRuntime.ts → MessagePartRuntime.ts} +20 -20
- package/src/api/MessageRuntime.ts +32 -32
- package/src/api/RuntimePathTypes.ts +2 -2
- package/src/api/ThreadListRuntime.ts +8 -0
- package/src/api/ThreadRuntime.ts +6 -0
- package/src/api/index.ts +11 -3
- package/src/cloud/auiV0.ts +3 -3
- package/src/context/providers/MessagePartRuntimeProvider.tsx +42 -0
- package/src/context/providers/{TextContentPartProvider.tsx → TextMessagePartProvider.tsx} +27 -27
- package/src/context/providers/index.ts +4 -1
- package/src/context/react/MessagePartContext.ts +37 -0
- package/src/context/react/index.ts +1 -1
- package/src/context/stores/AssistantToolUIs.ts +4 -4
- package/src/model-context/useAssistantTool.tsx +2 -2
- package/src/model-context/useAssistantToolUI.tsx +2 -2
- package/src/model-context/useInlineRender.tsx +3 -3
- package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -1
- package/src/primitives/index.ts +14 -6
- package/src/primitives/message/MessageParts.tsx +423 -0
- package/src/primitives/message/index.ts +2 -1
- package/src/primitives/messagePart/MessagePartImage.tsx +39 -0
- package/src/primitives/messagePart/MessagePartInProgress.tsx +19 -0
- package/src/primitives/{contentPart/ContentPartText.tsx → messagePart/MessagePartText.tsx} +10 -10
- package/src/primitives/messagePart/index.ts +3 -0
- package/src/primitives/messagePart/useMessagePartFile.tsx +18 -0
- package/src/primitives/messagePart/useMessagePartImage.tsx +18 -0
- package/src/primitives/messagePart/useMessagePartReasoning.tsx +18 -0
- package/src/primitives/messagePart/useMessagePartSource.tsx +18 -0
- package/src/primitives/messagePart/useMessagePartText.tsx +18 -0
- package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -0
- package/src/runtimes/core/ThreadListRuntimeCore.tsx +1 -0
- package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -0
- package/src/runtimes/external-store/ExternalStoreAdapter.tsx +2 -0
- package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +4 -0
- package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -8
- package/src/runtimes/external-store/ThreadMessageLike.tsx +21 -21
- package/src/runtimes/external-store/createMessageConverter.tsx +3 -3
- package/src/runtimes/external-store/external-message-converter.tsx +2 -2
- package/src/runtimes/local/ChatModelAdapter.tsx +13 -13
- package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +4 -0
- package/src/runtimes/local/LocalThreadRuntimeCore.tsx +30 -15
- package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +1 -0
- package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +4 -0
- package/src/runtimes/utils/MessageRepository.tsx +1 -1
- package/src/tests/MessageRepository.test.ts +6 -6
- package/src/types/AssistantTypes.ts +24 -24
- package/src/types/AttachmentTypes.ts +3 -3
- package/src/types/MessagePartComponentTypes.tsx +52 -0
- package/src/types/index.ts +69 -28
- package/src/utils/getThreadMessageText.tsx +2 -2
- package/src/utils/smooth/SmoothContext.tsx +7 -7
- package/src/utils/smooth/useSmooth.tsx +7 -7
- package/src/utils/useToolArgsFieldStatus.tsx +3 -3
- package/dist/context/providers/ContentPartRuntimeProvider.d.ts +0 -9
- package/dist/context/providers/ContentPartRuntimeProvider.js.map +0 -1
- package/dist/context/react/ContentPartContext.d.ts +0 -41
- package/dist/context/react/ContentPartContext.js +0 -25
- package/dist/context/react/ContentPartContext.js.map +0 -1
- package/dist/primitives/contentPart/ContentPartImage.js +0 -16
- package/dist/primitives/contentPart/ContentPartImage.js.map +0 -1
- package/dist/primitives/contentPart/ContentPartInProgress.d.ts +0 -6
- package/dist/primitives/contentPart/ContentPartInProgress.js +0 -13
- package/dist/primitives/contentPart/ContentPartInProgress.js.map +0 -1
- package/dist/primitives/contentPart/ContentPartText.js +0 -18
- package/dist/primitives/contentPart/index.d.ts +0 -4
- package/dist/primitives/contentPart/index.js +0 -10
- package/dist/primitives/contentPart/index.js.map +0 -1
- package/dist/primitives/contentPart/useContentPartFile.d.ts +0 -5
- package/dist/primitives/contentPart/useContentPartFile.d.ts.map +0 -1
- package/dist/primitives/contentPart/useContentPartFile.js +0 -18
- package/dist/primitives/contentPart/useContentPartFile.js.map +0 -1
- package/dist/primitives/contentPart/useContentPartImage.d.ts +0 -5
- package/dist/primitives/contentPart/useContentPartImage.d.ts.map +0 -1
- package/dist/primitives/contentPart/useContentPartImage.js +0 -18
- package/dist/primitives/contentPart/useContentPartImage.js.map +0 -1
- package/dist/primitives/contentPart/useContentPartReasoning.d.ts +0 -5
- package/dist/primitives/contentPart/useContentPartReasoning.d.ts.map +0 -1
- package/dist/primitives/contentPart/useContentPartReasoning.js +0 -18
- package/dist/primitives/contentPart/useContentPartReasoning.js.map +0 -1
- package/dist/primitives/contentPart/useContentPartSource.d.ts +0 -5
- package/dist/primitives/contentPart/useContentPartSource.d.ts.map +0 -1
- package/dist/primitives/contentPart/useContentPartSource.js +0 -18
- package/dist/primitives/contentPart/useContentPartSource.js.map +0 -1
- package/dist/primitives/contentPart/useContentPartText.d.ts +0 -7
- package/dist/primitives/contentPart/useContentPartText.d.ts.map +0 -1
- package/dist/primitives/contentPart/useContentPartText.js +0 -18
- package/dist/primitives/contentPart/useContentPartText.js.map +0 -1
- package/dist/primitives/message/MessageContent.d.ts +0 -64
- package/dist/primitives/message/MessageContent.d.ts.map +0 -1
- package/dist/primitives/message/MessageContent.js +0 -141
- package/dist/primitives/message/MessageContent.js.map +0 -1
- package/dist/types/ContentPartComponentTypes.d.ts +0 -25
- package/dist/types/ContentPartComponentTypes.js +0 -1
- package/src/context/providers/ContentPartRuntimeProvider.tsx +0 -42
- package/src/context/react/ContentPartContext.ts +0 -37
- package/src/primitives/contentPart/ContentPartImage.tsx +0 -39
- package/src/primitives/contentPart/ContentPartInProgress.tsx +0 -19
- package/src/primitives/contentPart/index.ts +0 -3
- package/src/primitives/contentPart/useContentPartFile.tsx +0 -18
- package/src/primitives/contentPart/useContentPartImage.tsx +0 -18
- package/src/primitives/contentPart/useContentPartReasoning.tsx +0 -18
- package/src/primitives/contentPart/useContentPartSource.tsx +0 -18
- package/src/primitives/contentPart/useContentPartText.tsx +0 -18
- package/src/primitives/message/MessageContent.tsx +0 -277
- package/src/types/ContentPartComponentTypes.tsx +0 -52
- /package/dist/types/{ContentPartComponentTypes.js.map → MessagePartComponentTypes.js.map} +0 -0
@@ -24,6 +24,10 @@ export class ExternalStoreThreadListRuntimeCore
|
|
24
24
|
private _threads: readonly string[] = DEFAULT_THREADS;
|
25
25
|
private _archivedThreads: readonly string[] = EMPTY_ARRAY;
|
26
26
|
|
27
|
+
public get isLoading() {
|
28
|
+
return this.adapter.isLoading ?? false;
|
29
|
+
}
|
30
|
+
|
27
31
|
public get newThreadId() {
|
28
32
|
return undefined;
|
29
33
|
}
|
@@ -53,6 +53,9 @@ export class ExternalStoreThreadRuntimeCore
|
|
53
53
|
|
54
54
|
private _messages!: readonly ThreadMessage[];
|
55
55
|
public isDisabled!: boolean;
|
56
|
+
public get isLoading() {
|
57
|
+
return this._store.isLoading ?? false;
|
58
|
+
}
|
56
59
|
|
57
60
|
public override get messages() {
|
58
61
|
return this._messages;
|
@@ -249,14 +252,6 @@ export class ExternalStoreThreadRuntimeCore
|
|
249
252
|
public addToolResult(options: AddToolResultOptions) {
|
250
253
|
if (!this._store.onAddToolResult && !this._store.onAddToolResult)
|
251
254
|
throw new Error("Runtime does not support tool results.");
|
252
|
-
this._store.onAddToolResult?.({
|
253
|
-
messageId: options.messageId,
|
254
|
-
toolName: options.toolName,
|
255
|
-
toolCallId: options.toolCallId,
|
256
|
-
result: options.result,
|
257
|
-
isError: options.isError,
|
258
|
-
artifact: options.artifact,
|
259
|
-
});
|
260
255
|
this._store.onAddToolResult?.(options);
|
261
256
|
}
|
262
257
|
|
@@ -1,22 +1,22 @@
|
|
1
1
|
import { parsePartialJsonObject } from "assistant-stream/utils";
|
2
|
-
import { generateId } from "../../
|
2
|
+
import { generateId } from "../../utils/idUtils";
|
3
3
|
import {
|
4
4
|
MessageStatus,
|
5
|
-
|
6
|
-
|
5
|
+
TextMessagePart,
|
6
|
+
ImageMessagePart,
|
7
7
|
ThreadMessage,
|
8
|
-
|
8
|
+
ThreadAssistantMessagePart,
|
9
9
|
ThreadAssistantMessage,
|
10
|
-
|
10
|
+
ThreadUserMessagePart,
|
11
11
|
ThreadUserMessage,
|
12
12
|
ThreadSystemMessage,
|
13
13
|
CompleteAttachment,
|
14
|
-
|
15
|
-
|
14
|
+
FileMessagePart,
|
15
|
+
Unstable_AudioMessagePart,
|
16
16
|
} from "../../types";
|
17
17
|
import {
|
18
|
-
|
19
|
-
|
18
|
+
ReasoningMessagePart,
|
19
|
+
SourceMessagePart,
|
20
20
|
ThreadStep,
|
21
21
|
} from "../../types/AssistantTypes";
|
22
22
|
import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
|
@@ -26,12 +26,12 @@ export type ThreadMessageLike = {
|
|
26
26
|
readonly content:
|
27
27
|
| string
|
28
28
|
| readonly (
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
| TextMessagePart
|
30
|
+
| ReasoningMessagePart
|
31
|
+
| SourceMessagePart
|
32
|
+
| ImageMessagePart
|
33
|
+
| FileMessagePart
|
34
|
+
| Unstable_AudioMessagePart
|
35
35
|
| {
|
36
36
|
readonly type: "tool-call";
|
37
37
|
readonly toolCallId?: string;
|
@@ -91,7 +91,7 @@ export const fromThreadMessageLike = (
|
|
91
91
|
...common,
|
92
92
|
role,
|
93
93
|
content: content
|
94
|
-
.map((part):
|
94
|
+
.map((part): ThreadAssistantMessagePart | null => {
|
95
95
|
const type = part.type;
|
96
96
|
switch (type) {
|
97
97
|
case "text":
|
@@ -126,7 +126,7 @@ export const fromThreadMessageLike = (
|
|
126
126
|
default: {
|
127
127
|
const unhandledType: "image" | "audio" = type;
|
128
128
|
throw new Error(
|
129
|
-
`Unsupported assistant
|
129
|
+
`Unsupported assistant message part type: ${unhandledType}`,
|
130
130
|
);
|
131
131
|
}
|
132
132
|
}
|
@@ -146,7 +146,7 @@ export const fromThreadMessageLike = (
|
|
146
146
|
return {
|
147
147
|
...common,
|
148
148
|
role,
|
149
|
-
content: content.map((part):
|
149
|
+
content: content.map((part): ThreadUserMessagePart => {
|
150
150
|
const type = part.type;
|
151
151
|
switch (type) {
|
152
152
|
case "text":
|
@@ -158,7 +158,7 @@ export const fromThreadMessageLike = (
|
|
158
158
|
default: {
|
159
159
|
const unhandledType: "tool-call" | "reasoning" | "source" = type;
|
160
160
|
throw new Error(
|
161
|
-
`Unsupported user
|
161
|
+
`Unsupported user message part type: ${unhandledType}`,
|
162
162
|
);
|
163
163
|
}
|
164
164
|
}
|
@@ -172,13 +172,13 @@ export const fromThreadMessageLike = (
|
|
172
172
|
case "system":
|
173
173
|
if (content.length !== 1 || content[0]!.type !== "text")
|
174
174
|
throw new Error(
|
175
|
-
"System messages must have exactly one text
|
175
|
+
"System messages must have exactly one text message part.",
|
176
176
|
);
|
177
177
|
|
178
178
|
return {
|
179
179
|
...common,
|
180
180
|
role,
|
181
|
-
content: content as [
|
181
|
+
content: content as [TextMessagePart],
|
182
182
|
metadata: {
|
183
183
|
custom: metadata?.custom ?? {},
|
184
184
|
},
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use client";
|
2
2
|
import { ThreadState } from "../../api";
|
3
|
-
import {
|
3
|
+
import { useMessagePart, useMessage } from "../../context";
|
4
4
|
import { ThreadMessage } from "../../types";
|
5
5
|
import {
|
6
6
|
useExternalMessageConverter,
|
@@ -50,13 +50,13 @@ export const createMessageConverter = <T extends object>(
|
|
50
50
|
return first;
|
51
51
|
},
|
52
52
|
useOriginalMessages: () => {
|
53
|
-
const
|
53
|
+
const MessagePartMessages = useMessagePart<T[]>({
|
54
54
|
optional: true,
|
55
55
|
selector: getExternalStoreMessages,
|
56
56
|
});
|
57
57
|
|
58
58
|
const messageMessages = useMessage<T[]>(getExternalStoreMessages);
|
59
|
-
const messages =
|
59
|
+
const messages = MessagePartMessages ?? messageMessages;
|
60
60
|
if (messages.length === 0) throw new Error("No original messages found");
|
61
61
|
return messages;
|
62
62
|
},
|
@@ -8,7 +8,7 @@ import {
|
|
8
8
|
} from "./getExternalStoreMessage";
|
9
9
|
import { fromThreadMessageLike, ThreadMessageLike } from "./ThreadMessageLike";
|
10
10
|
import { getAutoStatus, isAutoStatus } from "./auto-status";
|
11
|
-
import {
|
11
|
+
import { ToolCallMessagePart } from "../../types";
|
12
12
|
|
13
13
|
export namespace useExternalMessageConverter {
|
14
14
|
export type Message =
|
@@ -61,7 +61,7 @@ const joinExternalMessages = (
|
|
61
61
|
if (toolCallIdx !== -1) {
|
62
62
|
const toolCall = assistantMessage.content[
|
63
63
|
toolCallIdx
|
64
|
-
]! as
|
64
|
+
]! as ToolCallMessagePart;
|
65
65
|
if (output.toolName) {
|
66
66
|
if (toolCall.toolName !== output.toolName)
|
67
67
|
throw new Error(
|
@@ -1,25 +1,25 @@
|
|
1
1
|
import type {
|
2
|
-
|
2
|
+
FileMessagePart,
|
3
3
|
MessageStatus,
|
4
|
-
|
4
|
+
ReasoningMessagePart,
|
5
5
|
RunConfig,
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
SourceMessagePart,
|
7
|
+
TextMessagePart,
|
8
|
+
ThreadAssistantMessagePart,
|
9
9
|
ThreadMessage,
|
10
10
|
ThreadStep,
|
11
|
-
|
11
|
+
ToolCallMessagePart,
|
12
12
|
} from "../../types/AssistantTypes";
|
13
13
|
import type { ModelContext } from "../../model-context/ModelContextTypes";
|
14
14
|
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
15
15
|
|
16
16
|
export type ChatModelRunUpdate = {
|
17
|
-
readonly content: readonly
|
17
|
+
readonly content: readonly ThreadAssistantMessagePart[];
|
18
18
|
readonly metadata?: Record<string, unknown>;
|
19
19
|
};
|
20
20
|
|
21
21
|
export type ChatModelRunResult = {
|
22
|
-
readonly content?: readonly
|
22
|
+
readonly content?: readonly ThreadAssistantMessagePart[] | undefined;
|
23
23
|
readonly status?: MessageStatus | undefined;
|
24
24
|
readonly metadata?: {
|
25
25
|
readonly unstable_state?: ReadonlyJSONValue;
|
@@ -32,11 +32,11 @@ export type ChatModelRunResult = {
|
|
32
32
|
|
33
33
|
export type CoreChatModelRunResult = Omit<ChatModelRunResult, "content"> & {
|
34
34
|
readonly content: readonly (
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
| TextMessagePart
|
36
|
+
| ReasoningMessagePart
|
37
|
+
| ToolCallMessagePart
|
38
|
+
| SourceMessagePart
|
39
|
+
| FileMessagePart
|
40
40
|
)[];
|
41
41
|
};
|
42
42
|
|
@@ -33,6 +33,11 @@ export class LocalThreadRuntimeCore
|
|
33
33
|
|
34
34
|
public readonly isDisabled = false;
|
35
35
|
|
36
|
+
private _isLoading = false;
|
37
|
+
public get isLoading() {
|
38
|
+
return this._isLoading;
|
39
|
+
}
|
40
|
+
|
36
41
|
private _suggestions: readonly ThreadSuggestion[] = [];
|
37
42
|
private _suggestionsController: AbortController | null = null;
|
38
43
|
public get suggestions(): readonly ThreadSuggestion[] {
|
@@ -93,23 +98,33 @@ export class LocalThreadRuntimeCore
|
|
93
98
|
|
94
99
|
const promise = this.adapters.history?.load() ?? Promise.resolve(null);
|
95
100
|
|
96
|
-
this.
|
97
|
-
|
98
|
-
this.repository.import(repo);
|
99
|
-
this._notifySubscribers();
|
101
|
+
this._isLoading = true;
|
102
|
+
this._notifySubscribers();
|
100
103
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
resume,
|
104
|
+
this._loadPromise = promise
|
105
|
+
.then((repo) => {
|
106
|
+
if (!repo) return;
|
107
|
+
this.repository.import(repo);
|
108
|
+
this._notifySubscribers();
|
109
|
+
|
110
|
+
const resume = this.adapters.history?.resume?.bind(
|
111
|
+
this.adapters.history,
|
110
112
|
);
|
111
|
-
|
112
|
-
|
113
|
+
if (repo.unstable_resume && resume) {
|
114
|
+
this.startRun(
|
115
|
+
{
|
116
|
+
parentId: this.repository.headId,
|
117
|
+
sourceId: this.repository.headId,
|
118
|
+
runConfig: this._lastRunConfig,
|
119
|
+
},
|
120
|
+
resume,
|
121
|
+
);
|
122
|
+
}
|
123
|
+
})
|
124
|
+
.finally(() => {
|
125
|
+
this._isLoading = false;
|
126
|
+
this._notifySubscribers();
|
127
|
+
});
|
113
128
|
|
114
129
|
return this._loadPromise;
|
115
130
|
}
|
@@ -264,6 +264,10 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
264
264
|
this.getLoadThreadsPromise(); // begin loading on initial bind
|
265
265
|
}
|
266
266
|
|
267
|
+
public get isLoading() {
|
268
|
+
return this._state.value.isLoading;
|
269
|
+
}
|
270
|
+
|
267
271
|
public get threadIds() {
|
268
272
|
return this._state.value.threadIds;
|
269
273
|
}
|
@@ -330,7 +330,7 @@ export class MessageRepository {
|
|
330
330
|
|
331
331
|
if (!message)
|
332
332
|
throw new Error(
|
333
|
-
"MessageRepository(deleteMessage):
|
333
|
+
"MessageRepository(deleteMessage): Message not found. This is likely an internal bug in assistant-ui.",
|
334
334
|
);
|
335
335
|
|
336
336
|
const replacement =
|
@@ -3,7 +3,7 @@ import {
|
|
3
3
|
MessageRepository,
|
4
4
|
ExportedMessageRepository,
|
5
5
|
} from "../runtimes/utils/MessageRepository";
|
6
|
-
import type { ThreadMessage,
|
6
|
+
import type { ThreadMessage, TextMessagePart } from "../types/AssistantTypes";
|
7
7
|
import { ThreadMessageLike } from "../runtimes";
|
8
8
|
|
9
9
|
// Mock generateId and generateOptimisticId to make tests deterministic
|
@@ -501,13 +501,13 @@ describe("MessageRepository", () => {
|
|
501
501
|
role: "user" as const,
|
502
502
|
content: [
|
503
503
|
{ type: "text" as const, text: "Hello" },
|
504
|
-
] as
|
504
|
+
] as TextMessagePart[],
|
505
505
|
},
|
506
506
|
{
|
507
507
|
role: "assistant" as const,
|
508
508
|
content: [
|
509
509
|
{ type: "text" as const, text: "Hi there" },
|
510
|
-
] as
|
510
|
+
] as TextMessagePart[],
|
511
511
|
},
|
512
512
|
];
|
513
513
|
|
@@ -680,9 +680,9 @@ describe("MessageRepository", () => {
|
|
680
680
|
]);
|
681
681
|
|
682
682
|
// Verify content was updated
|
683
|
-
const
|
684
|
-
expect(
|
685
|
-
expect((
|
683
|
+
const MessagePart = messages[1]!.content[0];
|
684
|
+
expect(MessagePart.type).toBe("text");
|
685
|
+
expect((MessagePart as TextMessagePart).text).toBe("Updated content");
|
686
686
|
});
|
687
687
|
});
|
688
688
|
});
|
@@ -3,17 +3,17 @@ import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
|
|
3
3
|
|
4
4
|
export type MessageRole = ThreadMessage["role"];
|
5
5
|
|
6
|
-
export type
|
6
|
+
export type TextMessagePart = {
|
7
7
|
readonly type: "text";
|
8
8
|
readonly text: string;
|
9
9
|
};
|
10
10
|
|
11
|
-
export type
|
11
|
+
export type ReasoningMessagePart = {
|
12
12
|
readonly type: "reasoning";
|
13
13
|
readonly text: string;
|
14
14
|
};
|
15
15
|
|
16
|
-
export type
|
16
|
+
export type SourceMessagePart = {
|
17
17
|
readonly type: "source";
|
18
18
|
readonly sourceType: "url";
|
19
19
|
readonly id: string;
|
@@ -21,18 +21,18 @@ export type SourceContentPart = {
|
|
21
21
|
readonly title?: string;
|
22
22
|
};
|
23
23
|
|
24
|
-
export type
|
24
|
+
export type ImageMessagePart = {
|
25
25
|
readonly type: "image";
|
26
26
|
readonly image: string;
|
27
27
|
};
|
28
28
|
|
29
|
-
export type
|
29
|
+
export type FileMessagePart = {
|
30
30
|
readonly type: "file";
|
31
31
|
readonly data: string;
|
32
32
|
readonly mimeType: string;
|
33
33
|
};
|
34
34
|
|
35
|
-
export type
|
35
|
+
export type Unstable_AudioMessagePart = {
|
36
36
|
readonly type: "audio";
|
37
37
|
readonly audio: {
|
38
38
|
readonly data: string;
|
@@ -40,7 +40,7 @@ export type Unstable_AudioContentPart = {
|
|
40
40
|
};
|
41
41
|
};
|
42
42
|
|
43
|
-
export type
|
43
|
+
export type ToolCallMessagePart<
|
44
44
|
TArgs = ReadonlyJSONObject,
|
45
45
|
TResult = unknown,
|
46
46
|
> = {
|
@@ -54,18 +54,18 @@ export type ToolCallContentPart<
|
|
54
54
|
readonly artifact?: unknown;
|
55
55
|
};
|
56
56
|
|
57
|
-
export type
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
export type ThreadUserMessagePart =
|
58
|
+
| TextMessagePart
|
59
|
+
| ImageMessagePart
|
60
|
+
| FileMessagePart
|
61
|
+
| Unstable_AudioMessagePart;
|
62
62
|
|
63
|
-
export type
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
export type ThreadAssistantMessagePart =
|
64
|
+
| TextMessagePart
|
65
|
+
| ReasoningMessagePart
|
66
|
+
| ToolCallMessagePart
|
67
|
+
| SourceMessagePart
|
68
|
+
| FileMessagePart;
|
69
69
|
|
70
70
|
type MessageCommonProps = {
|
71
71
|
readonly id: string;
|
@@ -82,7 +82,7 @@ export type ThreadStep = {
|
|
82
82
|
| undefined;
|
83
83
|
};
|
84
84
|
|
85
|
-
export type
|
85
|
+
export type MessagePartStatus =
|
86
86
|
| {
|
87
87
|
readonly type: "running";
|
88
88
|
}
|
@@ -100,12 +100,12 @@ export type ContentPartStatus =
|
|
100
100
|
readonly error?: unknown;
|
101
101
|
};
|
102
102
|
|
103
|
-
export type
|
103
|
+
export type ToolCallMessagePartStatus =
|
104
104
|
| {
|
105
105
|
readonly type: "requires-action";
|
106
106
|
readonly reason: "tool-calls";
|
107
107
|
}
|
108
|
-
|
|
108
|
+
| MessagePartStatus;
|
109
109
|
|
110
110
|
export type MessageStatus =
|
111
111
|
| {
|
@@ -133,7 +133,7 @@ export type MessageStatus =
|
|
133
133
|
|
134
134
|
export type ThreadSystemMessage = MessageCommonProps & {
|
135
135
|
readonly role: "system";
|
136
|
-
readonly content: readonly [
|
136
|
+
readonly content: readonly [TextMessagePart];
|
137
137
|
readonly metadata: {
|
138
138
|
readonly custom: Record<string, unknown>;
|
139
139
|
};
|
@@ -141,7 +141,7 @@ export type ThreadSystemMessage = MessageCommonProps & {
|
|
141
141
|
|
142
142
|
export type ThreadUserMessage = MessageCommonProps & {
|
143
143
|
readonly role: "user";
|
144
|
-
readonly content: readonly
|
144
|
+
readonly content: readonly ThreadUserMessagePart[];
|
145
145
|
readonly attachments: readonly CompleteAttachment[];
|
146
146
|
readonly metadata: {
|
147
147
|
readonly custom: Record<string, unknown>;
|
@@ -150,7 +150,7 @@ export type ThreadUserMessage = MessageCommonProps & {
|
|
150
150
|
|
151
151
|
export type ThreadAssistantMessage = MessageCommonProps & {
|
152
152
|
readonly role: "assistant";
|
153
|
-
readonly content: readonly
|
153
|
+
readonly content: readonly ThreadAssistantMessagePart[];
|
154
154
|
readonly status: MessageStatus;
|
155
155
|
readonly metadata: {
|
156
156
|
readonly unstable_state: ReadonlyJSONValue;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { ThreadUserMessagePart } from "./AssistantTypes";
|
2
2
|
|
3
3
|
export type PendingAttachmentStatus =
|
4
4
|
| {
|
@@ -29,7 +29,7 @@ type BaseAttachment = {
|
|
29
29
|
name: string;
|
30
30
|
contentType: string;
|
31
31
|
file?: File;
|
32
|
-
content?:
|
32
|
+
content?: ThreadUserMessagePart[];
|
33
33
|
};
|
34
34
|
|
35
35
|
export type PendingAttachment = BaseAttachment & {
|
@@ -39,7 +39,7 @@ export type PendingAttachment = BaseAttachment & {
|
|
39
39
|
|
40
40
|
export type CompleteAttachment = BaseAttachment & {
|
41
41
|
status: CompleteAttachmentStatus;
|
42
|
-
content:
|
42
|
+
content: ThreadUserMessagePart[];
|
43
43
|
};
|
44
44
|
|
45
45
|
export type Attachment = PendingAttachment | CompleteAttachment;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import type { ComponentType } from "react";
|
2
|
+
import type {
|
3
|
+
MessagePartStatus,
|
4
|
+
FileMessagePart,
|
5
|
+
ImageMessagePart,
|
6
|
+
ReasoningMessagePart,
|
7
|
+
SourceMessagePart,
|
8
|
+
TextMessagePart,
|
9
|
+
ToolCallMessagePart,
|
10
|
+
Unstable_AudioMessagePart,
|
11
|
+
} from "./AssistantTypes";
|
12
|
+
import { MessagePartState } from "../api/MessagePartRuntime";
|
13
|
+
import { ToolResponse } from "assistant-stream";
|
14
|
+
|
15
|
+
export type EmptyMessagePartProps = {
|
16
|
+
status: MessagePartStatus;
|
17
|
+
};
|
18
|
+
export type EmptyMessagePartComponent = ComponentType<EmptyMessagePartProps>;
|
19
|
+
|
20
|
+
export type TextMessagePartProps = MessagePartState & TextMessagePart;
|
21
|
+
export type TextMessagePartComponent = ComponentType<TextMessagePartProps>;
|
22
|
+
|
23
|
+
export type ReasoningMessagePartProps = MessagePartState & ReasoningMessagePart;
|
24
|
+
export type ReasoningMessagePartComponent =
|
25
|
+
ComponentType<ReasoningMessagePartProps>;
|
26
|
+
|
27
|
+
export type SourceMessagePartProps = MessagePartState & SourceMessagePart;
|
28
|
+
export type SourceMessagePartComponent = ComponentType<SourceMessagePartProps>;
|
29
|
+
|
30
|
+
export type ImageMessagePartProps = MessagePartState & ImageMessagePart;
|
31
|
+
export type ImageMessagePartComponent = ComponentType<ImageMessagePartProps>;
|
32
|
+
|
33
|
+
export type FileMessagePartProps = MessagePartState & FileMessagePart;
|
34
|
+
export type FileMessagePartComponent = ComponentType<FileMessagePartProps>;
|
35
|
+
|
36
|
+
export type Unstable_AudioMessagePartProps = MessagePartState &
|
37
|
+
Unstable_AudioMessagePart;
|
38
|
+
export type Unstable_AudioMessagePartComponent =
|
39
|
+
ComponentType<Unstable_AudioMessagePartProps>;
|
40
|
+
|
41
|
+
export type ToolCallMessagePartProps<
|
42
|
+
TArgs = any,
|
43
|
+
TResult = unknown,
|
44
|
+
> = MessagePartState &
|
45
|
+
ToolCallMessagePart<TArgs, TResult> & {
|
46
|
+
addResult: (result: TResult | ToolResponse<TResult>) => void;
|
47
|
+
};
|
48
|
+
|
49
|
+
export type ToolCallMessagePartComponent<
|
50
|
+
TArgs = any,
|
51
|
+
TResult = any,
|
52
|
+
> = ComponentType<ToolCallMessagePartProps<TArgs, TResult>>;
|