Files
SillyTavern_replica/frontend/src/components/Studio/studioRunUtils.js

44 lines
1.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Resolve bound character display name from workflow variable and/or project meta.
*/
export function resolveBoundCharacterName({ boundCharacterVar, characterId, characters = [] }) {
if (boundCharacterVar) {
const nameMatch = String(boundCharacterVar).match(/名称[:]\s*(.+?)(?:\n|$)/);
if (nameMatch?.[1]?.trim()) {
return nameMatch[1].trim();
}
}
if (characterId && characters.length > 0) {
const byId = characters.find((c) => c.id === characterId);
if (byId?.name) return byId.name;
const byName = characters.find((c) => c.name === characterId);
if (byName?.name) return byName.name;
}
return null;
}
/** Index of the last user message in stepMessages, or -1. */
export function findLastUserMessageIndex(stepMessages = []) {
for (let i = stepMessages.length - 1; i >= 0; i -= 1) {
if (stepMessages[i]?.role === 'user') return i;
}
return -1;
}
/** Whether undo is available for the active node state. */
export function canUndoRun(activeNodeState) {
return (activeNodeState?.turnHistory?.length ?? 0) > 0;
}
/** Whether reroll is available (at least one user message in current step). */
export function canRerollRun(activeNodeState) {
return findLastUserMessageIndex(activeNodeState?.stepMessages) >= 0;
}
/** Whether the user may advance to the next pipeline node (R5). */
export function canAdvanceNextStep(activeNodeState) {
return Boolean(activeNodeState?.lastDraft);
}