fix: run selected ai wash preset only

This commit is contained in:
134 2026-06-15 00:34:46 +08:00
parent 5e0464c522
commit fe18aa0000

View File

@ -572,17 +572,22 @@ export function AiWashWorkspace({
}),
[enabledPresets, modelOptionByRef, selectedLevelIndexByControl, selectedUserModel, selectedUserModelId]
);
const shouldShowUserModelSelector = useMemo(
const selectedExecutionState = useMemo(
() =>
!config.hideModelSelector &&
presetExecutionStates.some((item) => item.usesUserSelectableModel),
[config.hideModelSelector, presetExecutionStates]
presetExecutionStates.find((item) => item.presetId === selectedResultId) ||
presetExecutionStates.find(
(item) => item.presetId === selectedPreviewResult?.presetId
) ||
presetExecutionStates.find((item) => item.preset.isDefault) ||
presetExecutionStates[0] ||
null,
[presetExecutionStates, selectedPreviewResult?.presetId, selectedResultId]
);
const hasExecutableModelRefs = useMemo(
() =>
presetExecutionStates.length > 0 &&
presetExecutionStates.every((item) => Boolean(item.effectiveModelRef)),
[presetExecutionStates]
const selectedPresetHasExecutableModel = Boolean(
selectedExecutionState?.effectiveModelRef
);
const shouldShowUserModelSelector = Boolean(
!config.hideModelSelector && selectedExecutionState?.usesUserSelectableModel
);
useEffect(() => {
@ -727,8 +732,12 @@ export function AiWashWorkspace({
toast.error("请先选择一个可用的生图模型");
return;
}
if (!hasExecutableModelRefs) {
toast.error("当前没有可用的 AI洗图 生图模型,请先在系统设置中配置模型");
if (!selectedExecutionState) {
toast.error("请先选择一个 AI洗图增强预设");
return;
}
if (!selectedPresetHasExecutableModel) {
toast.error("当前预设没有可用的 AI洗图 生图模型,请先在系统设置中配置模型");
return;
}
@ -737,31 +746,33 @@ export function AiWashWorkspace({
setHistorySourceOverride("");
setIsSubmitting(true);
setLastErrorMessage("");
const activeExecutionState = selectedExecutionState;
const activePreset = activeExecutionState.preset;
setResults(
enabledPresets.map((preset) => ({
presetId: preset.id,
title: preset.title,
description: preset.description,
prompt:
presetExecutionStates.find((item) => item.presetId === preset.id)
?.resolvedPrompt || preset.prompt,
modelId:
presetExecutionStates.find((item) => item.presetId === preset.id)
?.resolvedModel?.modelId ||
preset.modelId,
isDefault: preset.isDefault,
status: "submitting",
}))
);
setSelectedResultId(
(enabledPresets.find((preset) => preset.isDefault) || enabledPresets[0])?.id ||
""
enabledPresets.map((preset) => {
const executionState =
presetExecutionStates.find((item) => item.presetId === preset.id) || null;
const isActivePreset = preset.id === activePreset.id;
return {
presetId: preset.id,
title: preset.title,
description: preset.description,
prompt: executionState?.resolvedPrompt || preset.prompt,
modelId:
executionState?.resolvedModel?.modelId ||
executionState?.effectiveModelRef ||
preset.modelId,
isDefault: preset.isDefault,
status: isActivePreset ? ("submitting" as const) : ("idle" as const),
};
})
);
setSelectedResultId(activePreset.id);
setComparePositionById(
enabledPresets.reduce<Record<string, number>>((accumulator, preset) => {
accumulator[preset.id] = 50;
return accumulator;
}, {})
(current) => ({
...current,
[activePreset.id]: 50,
})
);
const startedAt = Date.now();
@ -781,7 +792,7 @@ export function AiWashWorkspace({
}
const taskResults = await Promise.all<AiWashTaskOutcome>(
presetExecutionStates.map(async (executionState, index) => {
[activeExecutionState].map(async (executionState, index) => {
const { preset } = executionState;
try {
if (!executionState.effectiveModelRef) {
@ -843,9 +854,7 @@ export function AiWashWorkspace({
error: "",
}));
if (preset.isDefault || index === 0) {
setSelectedResultId((current) => current || preset.id);
}
setSelectedResultId(preset.id);
return {
presetId: preset.id,
@ -917,7 +926,7 @@ export function AiWashWorkspace({
toast.success(
failedItems.length > 0
? `AI洗图已完成 ${successfulItems.length} 组,另有 ${failedItems.length} 组失败`
: `AI洗图已完成,共生成 ${successfulItems.length} 组结果`
: `AI洗图已完成:${selected?.title || "当前预设"}`
);
} else {
const message = failedItems[0]?.error || "AI洗图失败";
@ -932,10 +941,11 @@ export function AiWashWorkspace({
config.imageSize,
config.promptExtend,
enabledPresets,
hasExecutableModelRefs,
presetExecutionStates,
persistHistoryBatches,
resolvedHistoryScopeKey,
selectedExecutionState,
selectedPresetHasExecutableModel,
selectedUserModel,
shouldShowUserModelSelector,
updateResultCard,
@ -992,13 +1002,6 @@ export function AiWashWorkspace({
? comparePositionById[selectedPreviewResult.presetId] ?? 50
: 50;
const previewHasImage = Boolean(selectedPreviewResult?.imageUrl);
const selectedExecutionState =
presetExecutionStates.find(
(item) => item.presetId === selectedPreviewResult?.presetId
) ||
presetExecutionStates.find((item) => item.preset.isDefault) ||
presetExecutionStates[0] ||
null;
return (
<div className="relative flex h-full w-full bg-[#ffffff] text-[#111111]">
@ -1378,7 +1381,7 @@ export function AiWashWorkspace({
isSubmitting ||
!compareSourceUrl ||
enabledPresets.length === 0 ||
!hasExecutableModelRefs ||
!selectedPresetHasExecutableModel ||
(shouldShowUserModelSelector && !selectedUserModel)
}
onClick={handleSubmit}