refactor: Update ChatView component to handle different message formats
This commit is contained in:
parent
862791f55d
commit
2b6fec82bb
3 changed files with 35 additions and 26 deletions
|
|
@ -65,10 +65,15 @@ export default function ChatView({
|
||||||
.filter((output) => output.data.message)
|
.filter((output) => output.data.message)
|
||||||
.map((output, index) => {
|
.map((output, index) => {
|
||||||
try {
|
try {
|
||||||
const { sender, message, sender_name, stream_url, files } = output
|
console.log("output:", output);
|
||||||
.data.message as ChatOutputType;
|
const { sender, message, sender_name, stream_url, files } =
|
||||||
|
output.data.message.message !== "" ||
|
||||||
|
(output.data.message.files ?? []).length > 0
|
||||||
|
? output.data.message
|
||||||
|
: output.data.artifacts;
|
||||||
|
|
||||||
const is_ai = sender === "Machine" || sender === null;
|
const is_ai =
|
||||||
|
sender === "Machine" || sender === null || sender === undefined;
|
||||||
return {
|
return {
|
||||||
isSend: !is_ai,
|
isSend: !is_ai,
|
||||||
message: message,
|
message: message,
|
||||||
|
|
@ -131,7 +136,7 @@ export default function ChatView({
|
||||||
function updateChat(
|
function updateChat(
|
||||||
chat: ChatMessageType,
|
chat: ChatMessageType,
|
||||||
message: string,
|
message: string,
|
||||||
stream_url?: string
|
stream_url?: string,
|
||||||
) {
|
) {
|
||||||
// if (message === "") return;
|
// if (message === "") return;
|
||||||
chat.message = message;
|
chat.message = message;
|
||||||
|
|
@ -161,7 +166,7 @@ export default function ChatView({
|
||||||
setIsDragging,
|
setIsDragging,
|
||||||
setFiles,
|
setFiles,
|
||||||
currentFlowId,
|
currentFlowId,
|
||||||
setErrorData
|
setErrorData,
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -36,25 +36,25 @@ export default function IOModal({
|
||||||
const allNodes = useFlowStore((state) => state.nodes);
|
const allNodes = useFlowStore((state) => state.nodes);
|
||||||
const setMessages = useMessagesStore((state) => state.setMessages);
|
const setMessages = useMessagesStore((state) => state.setMessages);
|
||||||
const inputs = useFlowStore((state) => state.inputs).filter(
|
const inputs = useFlowStore((state) => state.inputs).filter(
|
||||||
(input) => input.type !== "ChatInput"
|
(input) => input.type !== "ChatInput",
|
||||||
);
|
);
|
||||||
const chatInput = useFlowStore((state) => state.inputs).find(
|
const chatInput = useFlowStore((state) => state.inputs).find(
|
||||||
(input) => input.type === "ChatInput"
|
(input) => input.type === "ChatInput",
|
||||||
);
|
);
|
||||||
const outputs = useFlowStore((state) => state.outputs).filter(
|
const outputs = useFlowStore((state) => state.outputs).filter(
|
||||||
(output) => output.type !== "ChatOutput"
|
(output) => output.type !== "ChatOutput",
|
||||||
);
|
);
|
||||||
const chatOutput = useFlowStore((state) => state.outputs).find(
|
const chatOutput = useFlowStore((state) => state.outputs).find(
|
||||||
(output) => output.type === "ChatOutput"
|
(output) => output.type === "ChatOutput",
|
||||||
);
|
);
|
||||||
const nodes = useFlowStore((state) => state.nodes).filter(
|
const nodes = useFlowStore((state) => state.nodes).filter(
|
||||||
(node) =>
|
(node) =>
|
||||||
inputs.some((input) => input.id === node.id) ||
|
inputs.some((input) => input.id === node.id) ||
|
||||||
outputs.some((output) => output.id === node.id)
|
outputs.some((output) => output.id === node.id),
|
||||||
);
|
);
|
||||||
const haveChat = chatInput || chatOutput;
|
const haveChat = chatInput || chatOutput;
|
||||||
const [selectedTab, setSelectedTab] = useState(
|
const [selectedTab, setSelectedTab] = useState(
|
||||||
inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0
|
inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0,
|
||||||
);
|
);
|
||||||
const setErrorData = useAlertStore((state) => state.setErrorData);
|
const setErrorData = useAlertStore((state) => state.setErrorData);
|
||||||
const setSuccessData = useAlertStore((state) => state.setSuccessData);
|
const setSuccessData = useAlertStore((state) => state.setSuccessData);
|
||||||
|
|
@ -127,7 +127,7 @@ export default function IOModal({
|
||||||
|
|
||||||
const { handleRemoveSession } = useRemoveSession(
|
const { handleRemoveSession } = useRemoveSession(
|
||||||
setSuccessData,
|
setSuccessData,
|
||||||
setErrorData
|
setErrorData,
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -188,7 +188,7 @@ export default function IOModal({
|
||||||
<div className="flex-max-width h-full">
|
<div className="flex-max-width h-full">
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"mr-6 flex h-full w-2/6 flex-shrink-0 flex-col justify-start transition-all duration-300"
|
"mr-6 flex h-full w-2/6 flex-shrink-0 flex-col justify-start transition-all duration-300",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<Tabs
|
<Tabs
|
||||||
|
|
@ -217,11 +217,11 @@ export default function IOModal({
|
||||||
<TabsContent value={"1"} className="api-modal-tabs-content">
|
<TabsContent value={"1"} className="api-modal-tabs-content">
|
||||||
{nodes
|
{nodes
|
||||||
.filter((node) =>
|
.filter((node) =>
|
||||||
inputs.some((input) => input.id === node.id)
|
inputs.some((input) => input.id === node.id),
|
||||||
)
|
)
|
||||||
.map((node, index) => {
|
.map((node, index) => {
|
||||||
const input = inputs.find(
|
const input = inputs.find(
|
||||||
(input) => input.id === node.id
|
(input) => input.id === node.id,
|
||||||
)!;
|
)!;
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|
@ -282,11 +282,11 @@ export default function IOModal({
|
||||||
<TabsContent value={"2"} className="api-modal-tabs-content">
|
<TabsContent value={"2"} className="api-modal-tabs-content">
|
||||||
{nodes
|
{nodes
|
||||||
.filter((node) =>
|
.filter((node) =>
|
||||||
outputs.some((output) => output.id === node.id)
|
outputs.some((output) => output.id === node.id),
|
||||||
)
|
)
|
||||||
.map((node, index) => {
|
.map((node, index) => {
|
||||||
const output = outputs.find(
|
const output = outputs.find(
|
||||||
(output) => output.id === node.id
|
(output) => output.id === node.id,
|
||||||
)!;
|
)!;
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|
@ -355,7 +355,11 @@ export default function IOModal({
|
||||||
>
|
>
|
||||||
<div className="flex w-full items-center justify-between border-b px-2 py-1 align-middle">
|
<div className="flex w-full items-center justify-between border-b px-2 py-1 align-middle">
|
||||||
<Badge variant="gray" size="md">
|
<Badge variant="gray" size="md">
|
||||||
{session}
|
<span className="truncate">
|
||||||
|
{session === currentFlow?.id
|
||||||
|
? "Default Session"
|
||||||
|
: session}
|
||||||
|
</span>
|
||||||
</Badge>
|
</Badge>
|
||||||
<div className="flex items-center justify-center gap-2 align-middle">
|
<div className="flex items-center justify-center gap-2 align-middle">
|
||||||
<Button
|
<Button
|
||||||
|
|
@ -418,7 +422,7 @@ export default function IOModal({
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex h-full w-full flex-col items-start gap-4 pt-4",
|
"flex h-full w-full flex-col items-start gap-4 pt-4",
|
||||||
!selectedViewField ? "hidden" : ""
|
!selectedViewField ? "hidden" : "",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="font-xl flex items-center justify-center gap-3 font-semibold">
|
<div className="font-xl flex items-center justify-center gap-3 font-semibold">
|
||||||
|
|
@ -437,7 +441,7 @@ export default function IOModal({
|
||||||
</div>
|
</div>
|
||||||
<div className="h-full w-full">
|
<div className="h-full w-full">
|
||||||
{inputs.some(
|
{inputs.some(
|
||||||
(input) => input.id === selectedViewField.id
|
(input) => input.id === selectedViewField.id,
|
||||||
) && (
|
) && (
|
||||||
<IOFieldView
|
<IOFieldView
|
||||||
type={InputOutput.INPUT}
|
type={InputOutput.INPUT}
|
||||||
|
|
@ -447,7 +451,7 @@ export default function IOModal({
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{outputs.some(
|
{outputs.some(
|
||||||
(output) => output.id === selectedViewField.id
|
(output) => output.id === selectedViewField.id,
|
||||||
) && (
|
) && (
|
||||||
<IOFieldView
|
<IOFieldView
|
||||||
type={InputOutput.OUTPUT}
|
type={InputOutput.OUTPUT}
|
||||||
|
|
@ -457,12 +461,12 @@ export default function IOModal({
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{sessions.some(
|
{sessions.some(
|
||||||
(session) => session === selectedViewField.id
|
(session) => session === selectedViewField.id,
|
||||||
) && (
|
) && (
|
||||||
<SessionView
|
<SessionView
|
||||||
rows={messages.filter(
|
rows={messages.filter(
|
||||||
(message) =>
|
(message) =>
|
||||||
message.session_id === selectedViewField.id
|
message.session_id === selectedViewField.id,
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
@ -472,7 +476,7 @@ export default function IOModal({
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex h-full w-full",
|
"flex h-full w-full",
|
||||||
selectedViewField ? "hidden" : ""
|
selectedViewField ? "hidden" : "",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{haveChat ? (
|
{haveChat ? (
|
||||||
|
|
@ -504,7 +508,7 @@ export default function IOModal({
|
||||||
"h-4 w-4",
|
"h-4 w-4",
|
||||||
isBuilding
|
isBuilding
|
||||||
? "animate-spin"
|
? "animate-spin"
|
||||||
: "fill-current text-medium-indigo"
|
: "fill-current text-medium-indigo",
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ export type VertexDataTypeAPI = {
|
||||||
inactive?: boolean;
|
inactive?: boolean;
|
||||||
timedelta?: number;
|
timedelta?: number;
|
||||||
duration?: string;
|
duration?: string;
|
||||||
artifacts?: any;
|
artifacts?: any | ChatOutputType | ChatInputType;
|
||||||
message: ChatOutputType | ChatInputType;
|
message: ChatOutputType | ChatInputType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue