feat(ui): add warning socket event handling

This commit is contained in:
psychedelicious 2023-06-13 20:51:35 +10:00
parent abee37eab3
commit 09f396ce84
8 changed files with 80 additions and 0 deletions

View File

@ -551,6 +551,7 @@
}, },
"toast": { "toast": {
"serverError": "Server Error", "serverError": "Server Error",
"serverWarning": "Server Warning",
"disconnected": "Disconnected from Server", "disconnected": "Disconnected from Server",
"connected": "Connected to Server", "connected": "Connected to Server",
"canceled": "Processing Canceled", "canceled": "Processing Canceled",

View File

@ -73,6 +73,7 @@ import { addImageCategoriesChangedListener } from './listeners/imageCategoriesCh
import { addControlNetImageProcessedListener } from './listeners/controlNetImageProcessed'; import { addControlNetImageProcessedListener } from './listeners/controlNetImageProcessed';
import { addControlNetAutoProcessListener } from './listeners/controlNetAutoProcess'; import { addControlNetAutoProcessListener } from './listeners/controlNetAutoProcess';
import { addUpdateImageUrlsOnConnectListener } from './listeners/updateImageUrlsOnConnect'; import { addUpdateImageUrlsOnConnectListener } from './listeners/updateImageUrlsOnConnect';
import { addInvocationWarningEventListener } from './listeners/socketio/socketInvocationWarning';
export const listenerMiddleware = createListenerMiddleware(); export const listenerMiddleware = createListenerMiddleware();
@ -149,6 +150,7 @@ addGeneratorProgressListener();
addGraphExecutionStateCompleteListener(); addGraphExecutionStateCompleteListener();
addInvocationCompleteListener(); addInvocationCompleteListener();
addInvocationErrorListener(); addInvocationErrorListener();
addInvocationWarningEventListener();
addInvocationStartedListener(); addInvocationStartedListener();
addSocketConnectedListener(); addSocketConnectedListener();
addSocketDisconnectedListener(); addSocketDisconnectedListener();

View File

@ -0,0 +1,21 @@
import { startAppListening } from '../..';
import { log } from 'app/logging/useLogger';
import {
appSocketInvocationWarning,
socketInvocationWarning,
} from 'services/events/actions';
const moduleLog = log.child({ namespace: 'socketio' });
export const addInvocationWarningEventListener = () => {
startAppListening({
actionCreator: socketInvocationWarning,
effect: (action, { dispatch, getState }) => {
moduleLog.warn(
action.payload,
`Invocation warning (${action.payload.data.node.type})`
);
dispatch(appSocketInvocationWarning(action.payload));
},
});
};

View File

@ -23,6 +23,7 @@ import {
appSocketInvocationComplete, appSocketInvocationComplete,
appSocketInvocationError, appSocketInvocationError,
appSocketInvocationStarted, appSocketInvocationStarted,
appSocketInvocationWarning,
appSocketSubscribed, appSocketSubscribed,
appSocketUnsubscribed, appSocketUnsubscribed,
} from 'services/events/actions'; } from 'services/events/actions';
@ -334,6 +335,20 @@ export const systemSlice = createSlice({
); );
}); });
/**
* Invocation Warning
*/
builder.addCase(appSocketInvocationWarning, (state, action) => {
const { data } = action.payload;
state.toastQueue.push(
makeToast({
title: t('toast.serverWarning'),
description: data.warning,
status: 'warning',
})
);
});
/** /**
* Graph Execution State Complete * Graph Execution State Complete
*/ */

View File

@ -6,6 +6,7 @@ export const tabMap = [
'nodes', 'nodes',
// 'postprocessing', // 'postprocessing',
// 'training', // 'training',
'prompt',
] as const; ] as const;
export type InvokeTabName = (typeof tabMap)[number]; export type InvokeTabName = (typeof tabMap)[number];

View File

@ -5,6 +5,7 @@ import {
InvocationCompleteEvent, InvocationCompleteEvent,
InvocationErrorEvent, InvocationErrorEvent,
InvocationStartedEvent, InvocationStartedEvent,
InvocationWarningEvent,
} from 'services/events/types'; } from 'services/events/types';
// Common socket action payload data // Common socket action payload data
@ -131,6 +132,24 @@ export const appSocketInvocationError = createAction<
BaseSocketPayload & { data: InvocationErrorEvent } BaseSocketPayload & { data: InvocationErrorEvent }
>('socket/appSocketInvocationError'); >('socket/appSocketInvocationError');
/**
* Socket.IO Invocation Warning
*
* Do not use. Only for use in middleware.
*/
export const socketInvocationWarning = createAction<
BaseSocketPayload & { data: InvocationWarningEvent }
>('socket/socketInvocationWarning');
/**
* Socket.IO Invocation Warning
*
* Do not use. Only for use in middleware.
*/
export const appSocketInvocationWarning = createAction<
BaseSocketPayload & { data: InvocationWarningEvent }
>('socket/appSocketInvocationWarning');
/** /**
* Socket.IO Graph Execution State Complete * Socket.IO Graph Execution State Complete
* *

View File

@ -63,6 +63,18 @@ export type InvocationErrorEvent = {
error: string; error: string;
}; };
/**
* A `invocation_warning` socket.io event.
*
* @example socket.on('invocation_warning', (data: InvocationWarningEvent) => { ... }
*/
export type InvocationWarningEvent = {
graph_execution_state_id: string;
node: BaseNode;
source_node_id: string;
warning: string;
};
/** /**
* A `invocation_started` socket.io event. * A `invocation_started` socket.io event.
* *
@ -95,6 +107,7 @@ export type ServerToClientEvents = {
generator_progress: (payload: GeneratorProgressEvent) => void; generator_progress: (payload: GeneratorProgressEvent) => void;
invocation_complete: (payload: InvocationCompleteEvent) => void; invocation_complete: (payload: InvocationCompleteEvent) => void;
invocation_error: (payload: InvocationErrorEvent) => void; invocation_error: (payload: InvocationErrorEvent) => void;
invocation_warning: (payload: InvocationWarningEvent) => void;
invocation_started: (payload: InvocationStartedEvent) => void; invocation_started: (payload: InvocationStartedEvent) => void;
graph_execution_state_complete: ( graph_execution_state_complete: (
payload: GraphExecutionStateCompleteEvent payload: GraphExecutionStateCompleteEvent

View File

@ -11,6 +11,7 @@ import {
socketConnected, socketConnected,
socketDisconnected, socketDisconnected,
socketSubscribed, socketSubscribed,
socketInvocationWarning,
} from '../actions'; } from '../actions';
import { ClientToServerEvents, ServerToClientEvents } from '../types'; import { ClientToServerEvents, ServerToClientEvents } from '../types';
import { Logger } from 'roarr'; import { Logger } from 'roarr';
@ -94,6 +95,13 @@ export const setEventListeners = (arg: SetEventListenersArg) => {
dispatch(socketInvocationError({ data, timestamp: getTimestamp() })); dispatch(socketInvocationError({ data, timestamp: getTimestamp() }));
}); });
/**
* Invocation warning
*/
socket.on('invocation_warning', (data) => {
dispatch(socketInvocationWarning({ data, timestamp: getTimestamp() }));
});
/** /**
* Invocation complete * Invocation complete
*/ */