fix(engine): prevent Architect from seeing literal "auto" styleGuide

Replace session.styleGuide with a descriptive placeholder before the
Architect runs, so its prompt reads a natural sentence instead of the
raw "auto" marker. Also wrap selectStyle in a try-catch so a transient
LLM failure falls back to 吉卜力 instead of crashing session start.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
yuanzonghao
2026-06-06 22:28:44 +08:00
parent 585f302908
commit 165dcbc5e6
+11 -4
View File
@@ -16,6 +16,7 @@ import { coerceOrientation } from "@infiplot/types";
import { runArchitect } from "./agents/architect"; import { runArchitect } from "./agents/architect";
import { selectStyle } from "./agents/styleSelector"; import { selectStyle } from "./agents/styleSelector";
import { directInsertBeat, directScene } from "./director"; import { directInsertBeat, directScene } from "./director";
import { STYLE_MAP } from "@/lib/options";
import { synthesizeBeat } from "./voice"; import { synthesizeBeat } from "./voice";
import { interpret } from "./vision"; import { interpret } from "./vision";
@@ -59,17 +60,23 @@ export async function startSession(
`[start] worldSetting (${session.worldSetting.length} chars):\n${session.worldSetting}`, `[start] worldSetting (${session.worldSetting.length} chars):\n${session.worldSetting}`,
); );
const isAutoStyle = session.styleGuide === "auto"; const isAutoStyle = session.styleGuide === "auto";
if (isAutoStyle) {
session.styleGuide = "由 AI 根据剧情自动匹配最佳画风";
}
const tArchitect = Date.now(); const tArchitect = Date.now();
const [architectResult, autoStyleGuide] = await Promise.all([ const [architectResult, autoStyleGuide] = await Promise.all([
runArchitect(config.text, session), runArchitect(config.text, session),
isAutoStyle isAutoStyle
? selectStyle(config.text, session.worldSetting) ? selectStyle(config.text, session.worldSetting).catch((err) => {
console.warn(`[styleSelector] failed, falling back to 吉卜力:`, err);
return null;
})
: Promise.resolve(null), : Promise.resolve(null),
]); ]);
session.storyState = architectResult; session.storyState = architectResult;
if (isAutoStyle && autoStyleGuide) { if (isAutoStyle) {
session.styleGuide = autoStyleGuide; session.styleGuide = autoStyleGuide ?? STYLE_MAP["吉卜力"]!;
console.log(`[start] auto-selected style: ${autoStyleGuide.slice(0, 60)}`); console.log(`[start] auto-selected style: ${session.styleGuide.slice(0, 60)}`);
} }
tlog("[start] Architect" + (isAutoStyle ? " + StyleSelector" : ""), tArchitect); tlog("[start] Architect" + (isAutoStyle ? " + StyleSelector" : ""), tArchitect);
console.log( console.log(