@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
@@ -1,277 +0,0 @@
|
|
1
|
-
"use client";
|
2
|
-
|
3
|
-
import { type ComponentType, type FC, memo, useMemo } from "react";
|
4
|
-
import {
|
5
|
-
TextContentPartProvider,
|
6
|
-
useContentPart,
|
7
|
-
useContentPartRuntime,
|
8
|
-
useToolUIs,
|
9
|
-
} from "../../context";
|
10
|
-
import {
|
11
|
-
useMessage,
|
12
|
-
useMessageRuntime,
|
13
|
-
} from "../../context/react/MessageContext";
|
14
|
-
import { ContentPartRuntimeProvider } from "../../context/providers/ContentPartRuntimeProvider";
|
15
|
-
import { ContentPartPrimitiveText } from "../contentPart/ContentPartText";
|
16
|
-
import { ContentPartPrimitiveImage } from "../contentPart/ContentPartImage";
|
17
|
-
import type {
|
18
|
-
Unstable_AudioContentPartComponent,
|
19
|
-
EmptyContentPartComponent,
|
20
|
-
TextContentPartComponent,
|
21
|
-
ImageContentPartComponent,
|
22
|
-
SourceContentPartComponent,
|
23
|
-
ToolCallContentPartComponent,
|
24
|
-
ToolCallContentPartProps,
|
25
|
-
FileContentPartComponent,
|
26
|
-
ReasoningContentPartComponent,
|
27
|
-
} from "../../types/ContentPartComponentTypes";
|
28
|
-
import { ContentPartPrimitiveInProgress } from "../contentPart/ContentPartInProgress";
|
29
|
-
import { ContentPartStatus } from "../../types/AssistantTypes";
|
30
|
-
|
31
|
-
export namespace MessagePrimitiveContent {
|
32
|
-
export type Props = {
|
33
|
-
/**
|
34
|
-
* Component configuration for rendering different types of message content.
|
35
|
-
*
|
36
|
-
* You can provide custom components for each content type (text, image, file, etc.)
|
37
|
-
* and configure tool rendering behavior. If not provided, default components will be used.
|
38
|
-
*/
|
39
|
-
components?:
|
40
|
-
| {
|
41
|
-
/** Component for rendering empty messages */
|
42
|
-
Empty?: EmptyContentPartComponent | undefined;
|
43
|
-
/** Component for rendering text content */
|
44
|
-
Text?: TextContentPartComponent | undefined;
|
45
|
-
/** Component for rendering reasoning content (typically hidden) */
|
46
|
-
Reasoning?: ReasoningContentPartComponent | undefined;
|
47
|
-
/** Component for rendering source content */
|
48
|
-
Source?: SourceContentPartComponent | undefined;
|
49
|
-
/** Component for rendering image content */
|
50
|
-
Image?: ImageContentPartComponent | undefined;
|
51
|
-
/** Component for rendering file content */
|
52
|
-
File?: FileContentPartComponent | undefined;
|
53
|
-
/** Component for rendering audio content (experimental) */
|
54
|
-
Unstable_Audio?: Unstable_AudioContentPartComponent | undefined;
|
55
|
-
/** Configuration for tool call rendering */
|
56
|
-
tools?:
|
57
|
-
| {
|
58
|
-
/** Map of tool names to their specific components */
|
59
|
-
by_name?:
|
60
|
-
| Record<string, ToolCallContentPartComponent | undefined>
|
61
|
-
| undefined;
|
62
|
-
/** Fallback component for unregistered tools */
|
63
|
-
Fallback?: ComponentType<ToolCallContentPartProps> | undefined;
|
64
|
-
}
|
65
|
-
| {
|
66
|
-
/** Override component that handles all tool calls */
|
67
|
-
Override: ComponentType<ToolCallContentPartProps>;
|
68
|
-
}
|
69
|
-
| undefined;
|
70
|
-
}
|
71
|
-
| undefined;
|
72
|
-
};
|
73
|
-
}
|
74
|
-
|
75
|
-
const ToolUIDisplay = ({
|
76
|
-
Fallback,
|
77
|
-
...props
|
78
|
-
}: {
|
79
|
-
Fallback: ToolCallContentPartComponent | undefined;
|
80
|
-
} & ToolCallContentPartProps) => {
|
81
|
-
const Render = useToolUIs((s) => s.getToolUI(props.toolName)) ?? Fallback;
|
82
|
-
if (!Render) return null;
|
83
|
-
return <Render {...props} />;
|
84
|
-
};
|
85
|
-
|
86
|
-
const defaultComponents = {
|
87
|
-
Text: () => (
|
88
|
-
<p style={{ whiteSpace: "pre-line" }}>
|
89
|
-
<ContentPartPrimitiveText />
|
90
|
-
<ContentPartPrimitiveInProgress>
|
91
|
-
<span style={{ fontFamily: "revert" }}>{" \u25CF"}</span>
|
92
|
-
</ContentPartPrimitiveInProgress>
|
93
|
-
</p>
|
94
|
-
),
|
95
|
-
Reasoning: () => null,
|
96
|
-
Source: () => null,
|
97
|
-
Image: () => <ContentPartPrimitiveImage />,
|
98
|
-
File: () => null,
|
99
|
-
Unstable_Audio: () => null,
|
100
|
-
} satisfies MessagePrimitiveContent.Props["components"];
|
101
|
-
|
102
|
-
type MessageContentPartComponentProps = {
|
103
|
-
components: MessagePrimitiveContent.Props["components"];
|
104
|
-
};
|
105
|
-
|
106
|
-
const MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({
|
107
|
-
components: {
|
108
|
-
Text = defaultComponents.Text,
|
109
|
-
Reasoning = defaultComponents.Reasoning,
|
110
|
-
Image = defaultComponents.Image,
|
111
|
-
Source = defaultComponents.Source,
|
112
|
-
File = defaultComponents.File,
|
113
|
-
Unstable_Audio: Audio = defaultComponents.Unstable_Audio,
|
114
|
-
tools = {},
|
115
|
-
} = {},
|
116
|
-
}) => {
|
117
|
-
const contentPartRuntime = useContentPartRuntime();
|
118
|
-
|
119
|
-
const part = useContentPart();
|
120
|
-
|
121
|
-
const type = part.type;
|
122
|
-
if (type === "tool-call") {
|
123
|
-
const addResult = (result: any) => contentPartRuntime.addToolResult(result);
|
124
|
-
if ("Override" in tools)
|
125
|
-
return <tools.Override {...part} addResult={addResult} />;
|
126
|
-
const Tool = tools.by_name?.[part.toolName] ?? tools.Fallback;
|
127
|
-
return <ToolUIDisplay {...part} Fallback={Tool} addResult={addResult} />;
|
128
|
-
}
|
129
|
-
|
130
|
-
if (part.status.type === "requires-action")
|
131
|
-
throw new Error("Encountered unexpected requires-action status");
|
132
|
-
|
133
|
-
switch (type) {
|
134
|
-
case "text":
|
135
|
-
return <Text {...part} />;
|
136
|
-
|
137
|
-
case "reasoning":
|
138
|
-
return <Reasoning {...part} />;
|
139
|
-
|
140
|
-
case "source":
|
141
|
-
return <Source {...part} />;
|
142
|
-
|
143
|
-
case "image":
|
144
|
-
// eslint-disable-next-line jsx-a11y/alt-text
|
145
|
-
return <Image {...part} />;
|
146
|
-
|
147
|
-
case "file":
|
148
|
-
return <File {...part} />;
|
149
|
-
|
150
|
-
case "audio":
|
151
|
-
return <Audio {...part} />;
|
152
|
-
|
153
|
-
default:
|
154
|
-
const unhandledType: never = type;
|
155
|
-
throw new Error(`Unknown content part type: ${unhandledType}`);
|
156
|
-
}
|
157
|
-
};
|
158
|
-
|
159
|
-
type MessageContentPartProps = {
|
160
|
-
partIndex: number;
|
161
|
-
components: MessagePrimitiveContent.Props["components"];
|
162
|
-
};
|
163
|
-
|
164
|
-
const MessageContentPartImpl: FC<MessageContentPartProps> = ({
|
165
|
-
partIndex,
|
166
|
-
components,
|
167
|
-
}) => {
|
168
|
-
const messageRuntime = useMessageRuntime();
|
169
|
-
const runtime = useMemo(
|
170
|
-
() => messageRuntime.getContentPartByIndex(partIndex),
|
171
|
-
[messageRuntime, partIndex],
|
172
|
-
);
|
173
|
-
|
174
|
-
return (
|
175
|
-
<ContentPartRuntimeProvider runtime={runtime}>
|
176
|
-
<MessageContentPartComponent components={components} />
|
177
|
-
</ContentPartRuntimeProvider>
|
178
|
-
);
|
179
|
-
};
|
180
|
-
|
181
|
-
const MessageContentPart = memo(
|
182
|
-
MessageContentPartImpl,
|
183
|
-
(prev, next) =>
|
184
|
-
prev.partIndex === next.partIndex &&
|
185
|
-
prev.components?.Text === next.components?.Text &&
|
186
|
-
prev.components?.Reasoning === next.components?.Reasoning &&
|
187
|
-
prev.components?.Source === next.components?.Source &&
|
188
|
-
prev.components?.Image === next.components?.Image &&
|
189
|
-
prev.components?.File === next.components?.File &&
|
190
|
-
prev.components?.Unstable_Audio === next.components?.Unstable_Audio &&
|
191
|
-
prev.components?.tools === next.components?.tools,
|
192
|
-
);
|
193
|
-
|
194
|
-
const COMPLETE_STATUS: ContentPartStatus = Object.freeze({
|
195
|
-
type: "complete",
|
196
|
-
});
|
197
|
-
|
198
|
-
const EmptyContentFallback: FC<{
|
199
|
-
status: ContentPartStatus;
|
200
|
-
component: TextContentPartComponent;
|
201
|
-
}> = ({ status, component: Component }) => {
|
202
|
-
return (
|
203
|
-
<TextContentPartProvider text="" isRunning={status.type === "running"}>
|
204
|
-
<Component type="text" text="" status={status} />
|
205
|
-
</TextContentPartProvider>
|
206
|
-
);
|
207
|
-
};
|
208
|
-
|
209
|
-
const EmptyContentImpl: FC<MessageContentPartComponentProps> = ({
|
210
|
-
components,
|
211
|
-
}) => {
|
212
|
-
const status =
|
213
|
-
useMessage((s) => s.status as ContentPartStatus) ?? COMPLETE_STATUS;
|
214
|
-
|
215
|
-
if (components?.Empty) return <components.Empty status={status} />;
|
216
|
-
|
217
|
-
return (
|
218
|
-
<EmptyContentFallback
|
219
|
-
status={status}
|
220
|
-
component={components?.Text ?? defaultComponents.Text}
|
221
|
-
/>
|
222
|
-
);
|
223
|
-
};
|
224
|
-
|
225
|
-
const EmptyContent = memo(
|
226
|
-
EmptyContentImpl,
|
227
|
-
(prev, next) =>
|
228
|
-
prev.components?.Empty === next.components?.Empty &&
|
229
|
-
prev.components?.Text === next.components?.Text,
|
230
|
-
);
|
231
|
-
|
232
|
-
/**
|
233
|
-
* Renders the content of a message with support for multiple content types.
|
234
|
-
*
|
235
|
-
* This component automatically handles different types of message content including
|
236
|
-
* text, images, files, tool calls, and more. It provides a flexible component
|
237
|
-
* system for customizing how each content type is rendered.
|
238
|
-
*
|
239
|
-
* @example
|
240
|
-
* ```tsx
|
241
|
-
* <MessagePrimitive.Content
|
242
|
-
* components={{
|
243
|
-
* Text: ({ text }) => <p className="message-text">{text}</p>,
|
244
|
-
* Image: ({ image }) => <img src={image} alt="Message image" />,
|
245
|
-
* tools: {
|
246
|
-
* by_name: {
|
247
|
-
* calculator: CalculatorTool,
|
248
|
-
* weather: WeatherTool,
|
249
|
-
* },
|
250
|
-
* Fallback: DefaultToolComponent
|
251
|
-
* }
|
252
|
-
* }}
|
253
|
-
* />
|
254
|
-
* ```
|
255
|
-
*/
|
256
|
-
export const MessagePrimitiveContent: FC<MessagePrimitiveContent.Props> = ({
|
257
|
-
components,
|
258
|
-
}) => {
|
259
|
-
const contentLength = useMessage((s) => s.content.length);
|
260
|
-
|
261
|
-
const contentElements = useMemo(() => {
|
262
|
-
if (contentLength === 0) {
|
263
|
-
return <EmptyContent components={components} />;
|
264
|
-
}
|
265
|
-
return Array.from({ length: contentLength }, (_, index) => (
|
266
|
-
<MessageContentPart
|
267
|
-
key={index}
|
268
|
-
partIndex={index}
|
269
|
-
components={components}
|
270
|
-
/>
|
271
|
-
));
|
272
|
-
}, [contentLength, components]);
|
273
|
-
|
274
|
-
return <>{contentElements}</>;
|
275
|
-
};
|
276
|
-
|
277
|
-
MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
|
@@ -1,52 +0,0 @@
|
|
1
|
-
import type { ComponentType } from "react";
|
2
|
-
import type {
|
3
|
-
ContentPartStatus,
|
4
|
-
FileContentPart,
|
5
|
-
ImageContentPart,
|
6
|
-
ReasoningContentPart,
|
7
|
-
SourceContentPart,
|
8
|
-
TextContentPart,
|
9
|
-
ToolCallContentPart,
|
10
|
-
Unstable_AudioContentPart,
|
11
|
-
} from "./AssistantTypes";
|
12
|
-
import { ContentPartState } from "../api/ContentPartRuntime";
|
13
|
-
import { ToolResponse } from "assistant-stream";
|
14
|
-
|
15
|
-
export type EmptyContentPartProps = {
|
16
|
-
status: ContentPartStatus;
|
17
|
-
};
|
18
|
-
export type EmptyContentPartComponent = ComponentType<EmptyContentPartProps>;
|
19
|
-
|
20
|
-
export type TextContentPartProps = ContentPartState & TextContentPart;
|
21
|
-
export type TextContentPartComponent = ComponentType<TextContentPartProps>;
|
22
|
-
|
23
|
-
export type ReasoningContentPartProps = ContentPartState & ReasoningContentPart;
|
24
|
-
export type ReasoningContentPartComponent =
|
25
|
-
ComponentType<ReasoningContentPartProps>;
|
26
|
-
|
27
|
-
export type SourceContentPartProps = ContentPartState & SourceContentPart;
|
28
|
-
export type SourceContentPartComponent = ComponentType<SourceContentPartProps>;
|
29
|
-
|
30
|
-
export type ImageContentPartProps = ContentPartState & ImageContentPart;
|
31
|
-
export type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
|
32
|
-
|
33
|
-
export type FileContentPartProps = ContentPartState & FileContentPart;
|
34
|
-
export type FileContentPartComponent = ComponentType<FileContentPartProps>;
|
35
|
-
|
36
|
-
export type Unstable_AudioContentPartProps = ContentPartState &
|
37
|
-
Unstable_AudioContentPart;
|
38
|
-
export type Unstable_AudioContentPartComponent =
|
39
|
-
ComponentType<Unstable_AudioContentPartProps>;
|
40
|
-
|
41
|
-
export type ToolCallContentPartProps<
|
42
|
-
TArgs = any,
|
43
|
-
TResult = unknown,
|
44
|
-
> = ContentPartState &
|
45
|
-
ToolCallContentPart<TArgs, TResult> & {
|
46
|
-
addResult: (result: TResult | ToolResponse<TResult>) => void;
|
47
|
-
};
|
48
|
-
|
49
|
-
export type ToolCallContentPartComponent<
|
50
|
-
TArgs = any,
|
51
|
-
TResult = any,
|
52
|
-
> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
|
File without changes
|