mirror of https://github.com/langgenius/dify.git
refactor: rename 'suspended' status to 'paused' across workflow components and update related styles
This commit is contained in:
parent
062896cb9c
commit
2969a77b15
|
|
@ -81,7 +81,7 @@ const WorkflowAppLogList: FC<ILogs> = ({ logs, appDetail, onRefresh }) => {
|
|||
</div>
|
||||
)
|
||||
}
|
||||
if (status === 'suspended') {
|
||||
if (status === 'paused') {
|
||||
return (
|
||||
<div className="system-xs-semibold-uppercase inline-flex items-center gap-1">
|
||||
<Indicator color="yellow" />
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ const WorkflowProcessItem = ({
|
|||
const running = data.status === WorkflowRunningStatus.Running
|
||||
const succeeded = data.status === WorkflowRunningStatus.Succeeded
|
||||
const failed = data.status === WorkflowRunningStatus.Failed || data.status === WorkflowRunningStatus.Stopped
|
||||
const suspended = data.status === WorkflowRunningStatus.Suspended
|
||||
const paused = data.status === WorkflowRunningStatus.Paused
|
||||
const latestNode = data.tracing[data.tracing.length - 1]
|
||||
|
||||
useEffect(() => {
|
||||
|
|
@ -53,9 +53,9 @@ const WorkflowProcessItem = ({
|
|||
running && !collapse && 'bg-background-section-burn',
|
||||
succeeded && !collapse && 'bg-state-success-hover',
|
||||
failed && !collapse && 'bg-state-destructive-hover',
|
||||
suspended && !collapse && 'bg-state-warning-hover',
|
||||
collapse && !failed && !suspended && 'bg-workflow-process-bg',
|
||||
collapse && suspended && 'bg-workflow-process-suspended-bg',
|
||||
paused && !collapse && 'bg-state-warning-hover',
|
||||
collapse && !failed && !paused && 'bg-workflow-process-bg',
|
||||
collapse && paused && 'bg-workflow-process-paused-bg',
|
||||
collapse && failed && 'bg-workflow-process-failed-bg',
|
||||
)}
|
||||
>
|
||||
|
|
@ -79,7 +79,7 @@ const WorkflowProcessItem = ({
|
|||
)
|
||||
}
|
||||
{
|
||||
suspended && (
|
||||
paused && (
|
||||
<RiPauseCircleFill className="mr-1 h-3.5 w-3.5 shrink-0 text-text-warning-secondary" />
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ export const useWorkflowRun = () => {
|
|||
handleWorkflowAgentLog,
|
||||
handleWorkflowTextChunk,
|
||||
handleWorkflowTextReplace,
|
||||
handleWorkflowSuspended,
|
||||
handleWorkflowPaused,
|
||||
} = useWorkflowRunEvent()
|
||||
|
||||
const handleBackupDraft = useCallback(() => {
|
||||
|
|
@ -178,7 +178,7 @@ export const useWorkflowRun = () => {
|
|||
onNodeRetry,
|
||||
onAgentLog,
|
||||
onError,
|
||||
onWorkflowSuspended,
|
||||
onWorkflowPaused,
|
||||
onHumanInputRequired,
|
||||
onCompleted,
|
||||
...restCallback
|
||||
|
|
@ -609,7 +609,7 @@ export const useWorkflowRun = () => {
|
|||
baseSseOptions.onTextReplace,
|
||||
baseSseOptions.onAgentLog,
|
||||
baseSseOptions.onHumanInputRequired,
|
||||
baseSseOptions.onWorkflowSuspended,
|
||||
baseSseOptions.onWorkflowPaused,
|
||||
baseSseOptions.onDataSourceNodeProcessing,
|
||||
baseSseOptions.onDataSourceNodeCompleted,
|
||||
baseSseOptions.onDataSourceNodeError,
|
||||
|
|
@ -780,10 +780,10 @@ export const useWorkflowRun = () => {
|
|||
onTTSEnd: (messageId: string, audio: string) => {
|
||||
player?.playAudioWithAudio(audio, false)
|
||||
},
|
||||
onWorkflowSuspended: (params) => {
|
||||
handleWorkflowSuspended()
|
||||
if (onWorkflowSuspended)
|
||||
onWorkflowSuspended(params)
|
||||
onWorkflowPaused: (params) => {
|
||||
handleWorkflowPaused()
|
||||
if (onWorkflowPaused)
|
||||
onWorkflowPaused(params)
|
||||
},
|
||||
onHumanInputRequired: (params) => {
|
||||
handleWorkflowNodeHumanInputRequired(params)
|
||||
|
|
@ -793,7 +793,7 @@ export const useWorkflowRun = () => {
|
|||
...restCallback,
|
||||
},
|
||||
)
|
||||
}, [store, doSyncWorkflowDraft, workflowStore, pathname, handleWorkflowStarted, handleWorkflowFinished, fetchInspectVars, invalidAllLastRun, handleWorkflowFailed, handleWorkflowNodeStarted, handleWorkflowNodeFinished, handleWorkflowNodeIterationStarted, handleWorkflowNodeIterationNext, handleWorkflowNodeIterationFinished, handleWorkflowNodeLoopStarted, handleWorkflowNodeLoopNext, handleWorkflowNodeLoopFinished, handleWorkflowNodeRetry, handleWorkflowAgentLog, handleWorkflowTextChunk, handleWorkflowTextReplace])
|
||||
}, [store, doSyncWorkflowDraft, workflowStore, pathname, handleWorkflowFailed, flowId, handleWorkflowStarted, handleWorkflowFinished, fetchInspectVars, invalidAllLastRun, handleWorkflowNodeStarted, handleWorkflowNodeFinished, handleWorkflowNodeIterationStarted, handleWorkflowNodeIterationNext, handleWorkflowNodeIterationFinished, handleWorkflowNodeLoopStarted, handleWorkflowNodeLoopNext, handleWorkflowNodeLoopFinished, handleWorkflowNodeRetry, handleWorkflowAgentLog, handleWorkflowTextChunk, handleWorkflowTextReplace, handleWorkflowPaused, handleWorkflowNodeHumanInputRequired])
|
||||
|
||||
const handleStopRun = useCallback((taskId: string) => {
|
||||
const setStoppedState = () => {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ export * from './use-workflow-node-loop-next'
|
|||
export * from './use-workflow-node-loop-started'
|
||||
export * from './use-workflow-node-retry'
|
||||
export * from './use-workflow-node-started'
|
||||
export * from './use-workflow-paused'
|
||||
export * from './use-workflow-started'
|
||||
export * from './use-workflow-suspended'
|
||||
export * from './use-workflow-text-chunk'
|
||||
export * from './use-workflow-text-replace'
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export const useWorkflowNodeHumanInputRequired = () => {
|
|||
const nodes = getNodes()
|
||||
const currentNodeIndex = nodes.findIndex(node => node.id === data.node_id)
|
||||
const newNodes = produce(nodes, (draft) => {
|
||||
draft[currentNodeIndex].data._runningStatus = NodeRunningStatus.Suspended
|
||||
draft[currentNodeIndex].data._runningStatus = NodeRunningStatus.Paused
|
||||
// draft[currentNodeIndex].data._waitingRun = false
|
||||
// store form data & input form schema
|
||||
})
|
||||
|
|
@ -35,10 +35,10 @@ export const useWorkflowNodeHumanInputRequired = () => {
|
|||
setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
|
||||
draft.result = {
|
||||
...draft.result,
|
||||
// status: WorkflowRunningStatus.Suspended, // human input required !== workflow 'Suspended'
|
||||
// status: WorkflowRunningStatus.Paused, // human input required !== workflow 'Paused'
|
||||
}
|
||||
}))
|
||||
}, [workflowStore])
|
||||
}, [store, workflowStore])
|
||||
|
||||
return {
|
||||
handleWorkflowNodeHumanInputRequired,
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ import { useCallback } from 'react'
|
|||
import { useWorkflowStore } from '@/app/components/workflow/store'
|
||||
import { WorkflowRunningStatus } from '@/app/components/workflow/types'
|
||||
|
||||
export const useWorkflowSuspended = () => {
|
||||
export const useWorkflowPaused = () => {
|
||||
const workflowStore = useWorkflowStore()
|
||||
|
||||
const handleWorkflowSuspended = useCallback(() => {
|
||||
const handleWorkflowPaused = useCallback(() => {
|
||||
const {
|
||||
workflowRunningData,
|
||||
setWorkflowRunningData,
|
||||
|
|
@ -15,12 +15,12 @@ export const useWorkflowSuspended = () => {
|
|||
setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
|
||||
draft.result = {
|
||||
...draft.result,
|
||||
status: WorkflowRunningStatus.Suspended,
|
||||
status: WorkflowRunningStatus.Paused,
|
||||
}
|
||||
}))
|
||||
}, [workflowStore])
|
||||
|
||||
return {
|
||||
handleWorkflowSuspended,
|
||||
handleWorkflowPaused,
|
||||
}
|
||||
}
|
||||
|
|
@ -12,8 +12,8 @@ import {
|
|||
useWorkflowNodeLoopStarted,
|
||||
useWorkflowNodeRetry,
|
||||
useWorkflowNodeStarted,
|
||||
useWorkflowPaused,
|
||||
useWorkflowStarted,
|
||||
useWorkflowSuspended,
|
||||
useWorkflowTextChunk,
|
||||
useWorkflowTextReplace,
|
||||
} from '.'
|
||||
|
|
@ -34,7 +34,7 @@ export const useWorkflowRunEvent = () => {
|
|||
const { handleWorkflowTextChunk } = useWorkflowTextChunk()
|
||||
const { handleWorkflowTextReplace } = useWorkflowTextReplace()
|
||||
const { handleWorkflowAgentLog } = useWorkflowAgentLog()
|
||||
const { handleWorkflowSuspended } = useWorkflowSuspended()
|
||||
const { handleWorkflowPaused } = useWorkflowPaused()
|
||||
const { handleWorkflowNodeHumanInputRequired } = useWorkflowNodeHumanInputRequired()
|
||||
|
||||
return {
|
||||
|
|
@ -53,7 +53,7 @@ export const useWorkflowRunEvent = () => {
|
|||
handleWorkflowTextChunk,
|
||||
handleWorkflowTextReplace,
|
||||
handleWorkflowAgentLog,
|
||||
handleWorkflowSuspended,
|
||||
handleWorkflowPaused,
|
||||
handleWorkflowNodeHumanInputRequired,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import {
|
|||
RiCheckboxCircleFill,
|
||||
RiErrorWarningFill,
|
||||
RiLoader2Line,
|
||||
RiPauseCircleFill,
|
||||
} from '@remixicon/react'
|
||||
import {
|
||||
cloneElement,
|
||||
|
|
@ -107,7 +108,7 @@ const BaseNode: FC<BaseNodeProps> = ({
|
|||
showExceptionBorder,
|
||||
} = useMemo(() => {
|
||||
return {
|
||||
showRunningBorder: data._runningStatus === NodeRunningStatus.Running && !showSelectedBorder,
|
||||
showRunningBorder: (data._runningStatus === NodeRunningStatus.Running || data._runningStatus === NodeRunningStatus.Paused) && !showSelectedBorder,
|
||||
showSuccessBorder: (data._runningStatus === NodeRunningStatus.Succeeded || hasVarValue) && !showSelectedBorder,
|
||||
showFailedBorder: data._runningStatus === NodeRunningStatus.Failed && !showSelectedBorder,
|
||||
showExceptionBorder: data._runningStatus === NodeRunningStatus.Exception && !showSelectedBorder,
|
||||
|
|
@ -287,15 +288,27 @@ const BaseNode: FC<BaseNodeProps> = ({
|
|||
data.type === BlockEnum.Loop && data._loopIndex && LoopIndex
|
||||
}
|
||||
{
|
||||
isLoading
|
||||
? <RiLoader2Line className="h-3.5 w-3.5 animate-spin text-text-accent" />
|
||||
: data._runningStatus === NodeRunningStatus.Failed
|
||||
? <RiErrorWarningFill className="h-3.5 w-3.5 text-text-destructive" />
|
||||
: data._runningStatus === NodeRunningStatus.Exception
|
||||
? <RiAlertFill className="h-3.5 w-3.5 text-text-warning-secondary" />
|
||||
: (data._runningStatus === NodeRunningStatus.Succeeded || hasVarValue)
|
||||
? <RiCheckboxCircleFill className="h-3.5 w-3.5 text-text-success" />
|
||||
: null
|
||||
isLoading && <RiLoader2Line className="h-3.5 w-3.5 animate-spin text-text-accent" />
|
||||
}
|
||||
{
|
||||
!isLoading && data._runningStatus === NodeRunningStatus.Failed && (
|
||||
<RiErrorWarningFill className="h-3.5 w-3.5 text-text-destructive" />
|
||||
)
|
||||
}
|
||||
{
|
||||
!isLoading && data._runningStatus === NodeRunningStatus.Exception && (
|
||||
<RiAlertFill className="h-3.5 w-3.5 text-text-warning-secondary" />
|
||||
)
|
||||
}
|
||||
{
|
||||
!isLoading && (data._runningStatus === NodeRunningStatus.Succeeded || hasVarValue) && (
|
||||
<RiCheckboxCircleFill className="h-3.5 w-3.5 text-text-success" />
|
||||
)
|
||||
}
|
||||
{
|
||||
!isLoading && data._runningStatus === NodeRunningStatus.Paused && (
|
||||
<RiPauseCircleFill className="h-3.5 w-3.5 text-text-warning-secondary" />
|
||||
)
|
||||
}
|
||||
</div>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ const ChatWrapper = (
|
|||
|
||||
const inputDisabled = useMemo(() => {
|
||||
const latestMessage = chatList[chatList.length - 1]
|
||||
return latestMessage?.isAnswer && (latestMessage.workflowProcess?.status === WorkflowRunningStatus.Suspended)
|
||||
return latestMessage?.isAnswer && (latestMessage.workflowProcess?.status === WorkflowRunningStatus.Paused)
|
||||
}, [chatList])
|
||||
|
||||
const { eventEmitter } = useEventEmitterContextContext()
|
||||
|
|
|
|||
|
|
@ -514,9 +514,14 @@ export const useChat = (
|
|||
parentId: params.parent_message_id,
|
||||
})
|
||||
},
|
||||
onWorkflowSuspended: ({ data }) => {
|
||||
console.log(data.suspended_at_node_ids)
|
||||
responseItem.workflowProcess!.status = WorkflowRunningStatus.Suspended
|
||||
onWorkflowPaused: ({ data }) => {
|
||||
responseItem.workflowProcess!.status = WorkflowRunningStatus.Paused
|
||||
data.paused_nodes.forEach((nodeId) => {
|
||||
const currentTracingIndex = responseItem.workflowProcess!.tracing!.findIndex(item => item.node_id === nodeId)
|
||||
if (currentTracingIndex > -1) {
|
||||
responseItem.workflowProcess!.tracing[currentTracingIndex].status = NodeRunningStatus.Paused
|
||||
}
|
||||
})
|
||||
updateCurrentQAOnTree({
|
||||
placeholderQuestionId,
|
||||
questionItem,
|
||||
|
|
|
|||
|
|
@ -50,6 +50,9 @@ const MetaData: FC<Props> = ({
|
|||
{status === 'stopped' && (
|
||||
<span>STOP</span>
|
||||
)}
|
||||
{status === 'paused' && (
|
||||
<span>PENDING</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex">
|
||||
|
|
@ -88,10 +91,10 @@ const MetaData: FC<Props> = ({
|
|||
<div className="flex">
|
||||
<div className="system-xs-regular w-[104px] shrink-0 truncate px-2 py-1.5 text-text-tertiary">{t('runLog.meta.tokens')}</div>
|
||||
<div className="system-xs-regular grow px-2 py-1.5 text-text-secondary">
|
||||
{status === 'running' && (
|
||||
{['running', 'paused'].includes(status) && (
|
||||
<div className="my-1 h-2 w-[48px] rounded-sm bg-text-quaternary" />
|
||||
)}
|
||||
{status !== 'running' && (
|
||||
{!['running', 'paused'].includes(status) && (
|
||||
<span>{`${tokens || 0} Tokens`}</span>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ const NodePanel: FC<Props> = ({
|
|||
{nodeInfo.title}
|
||||
</div>
|
||||
</Tooltip>
|
||||
{nodeInfo.status !== 'running' && !hideInfo && (
|
||||
{!['running', 'paused'].includes(nodeInfo.status) && !hideInfo && (
|
||||
<div className="system-xs-regular shrink-0 text-text-tertiary">
|
||||
{nodeInfo.execution_metadata?.total_tokens ? `${getTokenCount(nodeInfo.execution_metadata?.total_tokens || 0)} tokens · ` : ''}
|
||||
{`${getTime(nodeInfo.elapsed_time || 0)}`}
|
||||
|
|
@ -160,7 +160,7 @@ const NodePanel: FC<Props> = ({
|
|||
{nodeInfo.status === 'stopped' && (
|
||||
<RiAlertFill className={cn('ml-2 h-4 w-4 shrink-0 text-text-warning-secondary', inMessage && 'h-3.5 w-3.5')} />
|
||||
)}
|
||||
{nodeInfo.status === 'suspended' && (
|
||||
{nodeInfo.status === 'paused' && (
|
||||
<RiPauseCircleFill className={cn('ml-2 h-4 w-4 shrink-0 text-text-warning-secondary', inMessage && 'h-3.5 w-3.5')} />
|
||||
)}
|
||||
{nodeInfo.status === 'exception' && (
|
||||
|
|
@ -233,8 +233,8 @@ const NodePanel: FC<Props> = ({
|
|||
{nodeInfo.error}
|
||||
</StatusContainer>
|
||||
)}
|
||||
{(nodeInfo.status === 'suspended') && (
|
||||
<StatusContainer status="suspended">
|
||||
{(nodeInfo.status === 'paused') && (
|
||||
<StatusContainer status="paused">
|
||||
<div className="system-xs-regular text-text-warning">{t('workflow.nodes.humanInput.log.reasonContent')}</div>
|
||||
</StatusContainer>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ const StatusContainer: FC<Props> = ({
|
|||
status === 'failed' && 'border-[rgba(240,68,56,0.8)] bg-workflow-display-error-bg bg-[url(~@/app/components/workflow/run/assets/bg-line-error.svg)] text-text-warning',
|
||||
status === 'failed' && theme === Theme.light && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.5),inset_0_1px_3px_0_rgba(0,0,0,0.12),inset_0_2px_24px_0_rgba(240,68,56,0.2),0_1px_2px_0_rgba(9,9,11,0.05),0_0_0_1px_rgba(0,0,0,0.05)]',
|
||||
status === 'failed' && theme === Theme.dark && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.12),inset_0_1px_3px_0_rgba(0,0,0,0.4),inset_0_2px_24px_0_rgba(240,68,56,0.25),0_1px_2px_0_rgba(0,0,0,0.1),0_0_0_1px_rgba(24, 24, 27, 0.95)]',
|
||||
(status === 'stopped' || status === 'suspended') && 'border-[rgba(247,144,9,0.8)] bg-workflow-display-warning-bg bg-[url(~@/app/components/workflow/run/assets/bg-line-warning.svg)] text-text-destructive',
|
||||
(status === 'stopped' || status === 'suspended') && theme === Theme.light && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.5),inset_0_1px_3px_0_rgba(0,0,0,0.12),inset_0_2px_24px_0_rgba(247,144,9,0.2),0_1px_2px_0_rgba(9,9,11,0.05),0_0_0_1px_rgba(0,0,0,0.05)]',
|
||||
(status === 'stopped' || status === 'suspended') && theme === Theme.dark && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.12),inset_0_1px_3px_0_rgba(0,0,0,0.4),inset_0_2px_24px_0_rgba(247,144,9,0.25),0_1px_2px_0_rgba(0,0,0,0.1),0_0_0_1px_rgba(24, 24, 27, 0.95)]',
|
||||
(status === 'stopped' || status === 'paused') && 'border-[rgba(247,144,9,0.8)] bg-workflow-display-warning-bg bg-[url(~@/app/components/workflow/run/assets/bg-line-warning.svg)] text-text-destructive',
|
||||
(status === 'stopped' || status === 'paused') && theme === Theme.light && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.5),inset_0_1px_3px_0_rgba(0,0,0,0.12),inset_0_2px_24px_0_rgba(247,144,9,0.2),0_1px_2px_0_rgba(9,9,11,0.05),0_0_0_1px_rgba(0,0,0,0.05)]',
|
||||
(status === 'stopped' || status === 'paused') && theme === Theme.dark && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.12),inset_0_1px_3px_0_rgba(0,0,0,0.4),inset_0_2px_24px_0_rgba(247,144,9,0.25),0_1px_2px_0_rgba(0,0,0,0.1),0_0_0_1px_rgba(24, 24, 27, 0.95)]',
|
||||
status === 'exception' && 'border-[rgba(247,144,9,0.8)] bg-workflow-display-warning-bg bg-[url(~@/app/components/workflow/run/assets/bg-line-warning.svg)] text-text-destructive',
|
||||
status === 'exception' && theme === Theme.light && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.5),inset_0_1px_3px_0_rgba(0,0,0,0.12),inset_0_2px_24px_0_rgba(247,144,9,0.2),0_1px_2px_0_rgba(9,9,11,0.05),0_0_0_1px_rgba(0,0,0,0.05)]',
|
||||
status === 'exception' && theme === Theme.dark && 'shadow-[inset_2px_2px_0_0_rgba(255,255,255,0.12),inset_0_1px_3px_0_rgba(0,0,0,0.4),inset_0_2px_24px_0_rgba(247,144,9,0.25),0_1px_2px_0_rgba(0,0,0,0.1),0_0_0_1px_rgba(24, 24, 27, 0.95)]',
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ const StatusPanel: FC<ResultProps> = ({
|
|||
status === 'succeeded' && 'text-util-colors-green-green-600',
|
||||
status === 'partial-succeeded' && 'text-util-colors-green-green-600',
|
||||
status === 'failed' && 'text-util-colors-red-red-600',
|
||||
(status === 'stopped' || status === 'suspended') && 'text-util-colors-warning-warning-600',
|
||||
(status === 'stopped' || status === 'paused') && 'text-util-colors-warning-warning-600',
|
||||
status === 'running' && 'text-util-colors-blue-light-blue-light-600',
|
||||
)}
|
||||
>
|
||||
|
|
@ -83,7 +83,7 @@ const StatusPanel: FC<ResultProps> = ({
|
|||
<span>STOP</span>
|
||||
</>
|
||||
)}
|
||||
{status === 'suspended' && (
|
||||
{status === 'paused' && (
|
||||
<>
|
||||
<Indicator color="yellow" />
|
||||
<span>PENDING</span>
|
||||
|
|
@ -94,10 +94,10 @@ const StatusPanel: FC<ResultProps> = ({
|
|||
<div className="max-w-[152px] flex-[33%]">
|
||||
<div className="system-2xs-medium-uppercase mb-1 text-text-tertiary">{t('runLog.resultPanel.time')}</div>
|
||||
<div className="system-sm-medium flex items-center gap-1 text-text-secondary">
|
||||
{(status === 'running' || status === 'suspended') && (
|
||||
{(status === 'running' || status === 'paused') && (
|
||||
<div className="h-2 w-16 rounded-sm bg-text-quaternary" />
|
||||
)}
|
||||
{status !== 'running' && status !== 'suspended' && (
|
||||
{status !== 'running' && status !== 'paused' && (
|
||||
<span>{time ? `${time?.toFixed(3)}s` : '-'}</span>
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -105,10 +105,10 @@ const StatusPanel: FC<ResultProps> = ({
|
|||
<div className="flex-[33%]">
|
||||
<div className="system-2xs-medium-uppercase mb-1 text-text-tertiary">{t('runLog.resultPanel.tokens')}</div>
|
||||
<div className="system-sm-medium flex items-center gap-1 text-text-secondary">
|
||||
{(status === 'running' || status === 'suspended') && (
|
||||
{(status === 'running' || status === 'paused') && (
|
||||
<div className="h-2 w-20 rounded-sm bg-text-quaternary" />
|
||||
)}
|
||||
{status !== 'running' && status !== 'suspended' && (
|
||||
{status !== 'running' && status !== 'paused' && (
|
||||
<span>{`${tokens || 0} Tokens`}</span>
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -157,7 +157,7 @@ const StatusPanel: FC<ResultProps> = ({
|
|||
</>
|
||||
)
|
||||
}
|
||||
{status === 'suspended' && (
|
||||
{status === 'paused' && (
|
||||
<>
|
||||
<div className="my-2 h-[0.5px] bg-divider-deep" />
|
||||
<div className="system-xs-medium space-y-1 text-text-warning">
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import type { FileUploadConfigResponse } from '@/models/common'
|
|||
type PreviewRunningData = WorkflowRunningData & {
|
||||
resultTabActive?: boolean
|
||||
resultText?: string
|
||||
// human input form schema or data cached when node is in 'Suspended' status
|
||||
// human input form schema or data cached when node is in 'Paused' status
|
||||
extraContentAndFormData?: Record<string, any>
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ export enum WorkflowRunningStatus {
|
|||
Succeeded = 'succeeded',
|
||||
Failed = 'failed',
|
||||
Stopped = 'stopped',
|
||||
Suspended = 'suspended',
|
||||
Paused = 'paused',
|
||||
}
|
||||
|
||||
export enum WorkflowVersion {
|
||||
|
|
@ -369,7 +369,7 @@ export enum NodeRunningStatus {
|
|||
Exception = 'exception',
|
||||
Retry = 'retry',
|
||||
Stopped = 'stopped',
|
||||
Suspended = 'suspended',
|
||||
Paused = 'paused',
|
||||
}
|
||||
|
||||
export type OnNodeAdd = (
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import type {
|
|||
TextChunkResponse,
|
||||
TextReplaceResponse,
|
||||
WorkflowFinishedResponse,
|
||||
WorkflowPausedResponse,
|
||||
WorkflowStartedResponse,
|
||||
WorkflowSuspendedResponse,
|
||||
} from '@/types/workflow'
|
||||
import Cookies from 'js-cookie'
|
||||
import Toast from '@/app/components/base/toast'
|
||||
|
|
@ -73,7 +73,7 @@ export type IOnLoopFinished = (workflowFinished: LoopFinishedResponse) => void
|
|||
export type IOnAgentLog = (agentLog: AgentLogResponse) => void
|
||||
|
||||
export type IOHumanInputRequired = (humanInputRequired: HumanInputRequiredResponse) => void
|
||||
export type IOWorkflowSuspended = (workflowSuspended: WorkflowSuspendedResponse) => void
|
||||
export type IOWorkflowPaused = (workflowPaused: WorkflowPausedResponse) => void
|
||||
export type IOnDataSourceNodeProcessing = (dataSourceNodeProcessing: DataSourceNodeProcessingResponse) => void
|
||||
export type IOnDataSourceNodeCompleted = (dataSourceNodeCompleted: DataSourceNodeCompletedResponse) => void
|
||||
export type IOnDataSourceNodeError = (dataSourceNodeError: DataSourceNodeErrorResponse) => void
|
||||
|
|
@ -113,7 +113,7 @@ export type IOtherOptions = {
|
|||
onLoopFinish?: IOnLoopFinished
|
||||
onAgentLog?: IOnAgentLog
|
||||
onHumanInputRequired?: IOHumanInputRequired
|
||||
onWorkflowSuspended?: IOWorkflowSuspended
|
||||
onWorkflowPaused?: IOWorkflowPaused
|
||||
|
||||
// Pipeline data source node run
|
||||
onDataSourceNodeProcessing?: IOnDataSourceNodeProcessing
|
||||
|
|
@ -197,7 +197,7 @@ export const handleStream = (
|
|||
onTextReplace?: IOnTextReplace,
|
||||
onAgentLog?: IOnAgentLog,
|
||||
onHumanInputRequired?: IOHumanInputRequired,
|
||||
onWorkflowSuspended?: IOWorkflowSuspended,
|
||||
onWorkflowPaused?: IOWorkflowPaused,
|
||||
onDataSourceNodeProcessing?: IOnDataSourceNodeProcessing,
|
||||
onDataSourceNodeCompleted?: IOnDataSourceNodeCompleted,
|
||||
onDataSourceNodeError?: IOnDataSourceNodeError,
|
||||
|
|
@ -323,7 +323,7 @@ export const handleStream = (
|
|||
onHumanInputRequired?.(bufferObj as HumanInputRequiredResponse)
|
||||
}
|
||||
else if (bufferObj.event === 'workflow_paused') {
|
||||
onWorkflowSuspended?.(bufferObj as WorkflowSuspendedResponse)
|
||||
onWorkflowPaused?.(bufferObj as WorkflowPausedResponse)
|
||||
}
|
||||
else if (bufferObj.event === 'datasource_processing') {
|
||||
onDataSourceNodeProcessing?.(bufferObj as DataSourceNodeProcessingResponse)
|
||||
|
|
@ -448,7 +448,7 @@ export const ssePost = async (
|
|||
onLoopNext,
|
||||
onLoopFinish,
|
||||
onHumanInputRequired,
|
||||
onWorkflowSuspended,
|
||||
onWorkflowPaused,
|
||||
onDataSourceNodeProcessing,
|
||||
onDataSourceNodeCompleted,
|
||||
onDataSourceNodeError,
|
||||
|
|
@ -551,7 +551,7 @@ export const ssePost = async (
|
|||
onTextReplace,
|
||||
onAgentLog,
|
||||
onHumanInputRequired,
|
||||
onWorkflowSuspended,
|
||||
onWorkflowPaused,
|
||||
onDataSourceNodeProcessing,
|
||||
onDataSourceNodeCompleted,
|
||||
onDataSourceNodeError,
|
||||
|
|
@ -598,7 +598,7 @@ export const sseGet = async (
|
|||
onLoopNext,
|
||||
onLoopFinish,
|
||||
onHumanInputRequired,
|
||||
onWorkflowSuspended,
|
||||
onWorkflowPaused,
|
||||
onDataSourceNodeProcessing,
|
||||
onDataSourceNodeCompleted,
|
||||
onDataSourceNodeError,
|
||||
|
|
@ -694,7 +694,7 @@ export const sseGet = async (
|
|||
onTextReplace,
|
||||
onAgentLog,
|
||||
onHumanInputRequired,
|
||||
onWorkflowSuspended,
|
||||
onWorkflowPaused,
|
||||
onDataSourceNodeProcessing,
|
||||
onDataSourceNodeCompleted,
|
||||
onDataSourceNodeError,
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ const config = {
|
|||
'chat-bubble-bg': 'var(--color-chat-bubble-bg)',
|
||||
'chat-input-mask': 'var(--color-chat-input-mask)',
|
||||
'workflow-process-bg': 'var(--color-workflow-process-bg)',
|
||||
'workflow-process-paused-bg': 'var(--color-workflow-process-paused-bg)',
|
||||
'workflow-run-failed-bg': 'var(--color-workflow-run-failed-bg)',
|
||||
'workflow-batch-failed-bg': 'var(--color-workflow-batch-failed-bg)',
|
||||
'mask-top2bottom-gray-50-to-transparent': 'var(--mask-top2bottom-gray-50-to-transparent)',
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ html[data-theme="dark"] {
|
|||
--color-workflow-process-bg: linear-gradient(90deg,
|
||||
rgba(24, 24, 27, 0.25) 0%,
|
||||
rgba(24, 24, 27, 0.04) 100%);
|
||||
--color-workflow-process-suspended-bg: linear-gradient(90deg,
|
||||
--color-workflow-process-paused-bg: linear-gradient(90deg,
|
||||
rgba(247, 144, 9, 0.14) 0%,
|
||||
rgba(247, 144, 9, 0.00) 100%);
|
||||
--color-workflow-process-failed-bg: linear-gradient(90deg,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ html[data-theme="light"] {
|
|||
--color-workflow-process-bg: linear-gradient(90deg,
|
||||
rgba(200, 206, 218, 0.2) 0%,
|
||||
rgba(200, 206, 218, 0.04) 100%);
|
||||
--color-workflow-process-suspended-bg: linear-gradient(90deg,
|
||||
--color-workflow-process-paused-bg: linear-gradient(90deg,
|
||||
#FFFAEB 0%,
|
||||
rgba(255, 250, 235, 0.00) 100%);
|
||||
--color-workflow-process-failed-bg: linear-gradient(90deg,
|
||||
|
|
|
|||
|
|
@ -168,15 +168,15 @@ export type WorkflowStartedResponse = {
|
|||
}
|
||||
}
|
||||
|
||||
export type WorkflowSuspendedResponse = {
|
||||
export type WorkflowPausedResponse = {
|
||||
task_id: string
|
||||
workflow_run_id: string
|
||||
event: string
|
||||
data: {
|
||||
id: string
|
||||
workflow_id: string
|
||||
created_at: number
|
||||
suspended_at_node_ids: string[]
|
||||
outputs: any // todo: remove any
|
||||
paused_nodes: string[]
|
||||
reasons: any[] // todo: remove any
|
||||
workflow_run_id: string
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue