feat(ui): handle enriched events

This commit is contained in:
psychedelicious 2024-05-23 15:21:01 +10:00
parent 9a4c167342
commit 6063487b20
4 changed files with 23 additions and 7 deletions

View File

@ -39,13 +39,21 @@ export const addInvocationErrorEventListener = (startAppListening: AppStartListe
actionCreator: socketInvocationError, actionCreator: socketInvocationError,
effect: (action, { getState }) => { effect: (action, { getState }) => {
log.error(action.payload, `Invocation error (${action.payload.data.node.type})`); log.error(action.payload, `Invocation error (${action.payload.data.node.type})`);
const { source_node_id, error_type, graph_execution_state_id } = action.payload.data; const { source_node_id, error_type, error_message, error_traceback, graph_execution_state_id } =
action.payload.data;
const nes = deepClone($nodeExecutionStates.get()[source_node_id]); const nes = deepClone($nodeExecutionStates.get()[source_node_id]);
if (nes) { if (nes) {
nes.status = zNodeStatus.enum.FAILED; nes.status = zNodeStatus.enum.FAILED;
nes.error = action.payload.data.error;
nes.progress = null; nes.progress = null;
nes.progressImage = null; nes.progressImage = null;
if (error_type && error_message && error_traceback) {
nes.error = {
error_type,
error_message,
error_traceback,
};
}
upsertExecutionState(nes.nodeId, nes); upsertExecutionState(nes.nodeId, nes);
} }

View File

@ -70,13 +70,18 @@ export const isInvocationNodeData = (node?: AnyNodeData | null): node is Invocat
// #region NodeExecutionState // #region NodeExecutionState
export const zNodeStatus = z.enum(['PENDING', 'IN_PROGRESS', 'COMPLETED', 'FAILED']); export const zNodeStatus = z.enum(['PENDING', 'IN_PROGRESS', 'COMPLETED', 'FAILED']);
const zNodeError = z.object({
error_type: z.string(),
error_message: z.string(),
error_traceback: z.string(),
});
const zNodeExecutionState = z.object({ const zNodeExecutionState = z.object({
nodeId: z.string().trim().min(1), nodeId: z.string().trim().min(1),
status: zNodeStatus, status: zNodeStatus,
progress: z.number().nullable(), progress: z.number().nullable(),
progressImage: zProgressImage.nullable(), progressImage: zProgressImage.nullable(),
error: z.string().nullable(),
outputs: z.array(z.any()), outputs: z.array(z.any()),
error: zNodeError.nullable(),
}); });
export type NodeExecutionState = z.infer<typeof zNodeExecutionState>; export type NodeExecutionState = z.infer<typeof zNodeExecutionState>;
// #endregion // #endregion

View File

@ -76,7 +76,7 @@ const QueueItemComponent = ({ queueItemDTO }: Props) => {
</Button> </Button>
</ButtonGroup> </ButtonGroup>
</Flex> </Flex>
{queueItem?.error && ( {(queueItem?.error_traceback || queueItem?.error_message) && (
<Flex <Flex
layerStyle="second" layerStyle="second"
p={3} p={3}
@ -89,7 +89,7 @@ const QueueItemComponent = ({ queueItemDTO }: Props) => {
<Heading size="sm" color="error.400"> <Heading size="sm" color="error.400">
{t('common.error')} {t('common.error')}
</Heading> </Heading>
<pre>{queueItem.error}</pre> <pre>{queueItem?.error_traceback ?? queueItem?.error_message}</pre>
</Flex> </Flex>
)} )}
<Flex layerStyle="second" h={512} w="full" borderRadius="base" alignItems="center" justifyContent="center"> <Flex layerStyle="second" h={512} w="full" borderRadius="base" alignItems="center" justifyContent="center">

View File

@ -116,7 +116,8 @@ export type InvocationErrorEvent = {
node: BaseNode; node: BaseNode;
source_node_id: string; source_node_id: string;
error_type: string; error_type: string;
error: string; error_message: string;
error_traceback: string;
}; };
/** /**
@ -187,7 +188,9 @@ export type QueueItemStatusChangedEvent = {
batch_id: string; batch_id: string;
session_id: string; session_id: string;
status: components['schemas']['SessionQueueItemDTO']['status']; status: components['schemas']['SessionQueueItemDTO']['status'];
error: string | undefined; error_type?: string | null;
error_message?: string | null;
error_traceback?: string | null;
created_at: string; created_at: string;
updated_at: string; updated_at: string;
started_at: string | undefined; started_at: string | undefined;