Revert "feat(loading): support typewriter story teaser during first scene generation"

This reverts commit 4e4e06ec8a.
This commit is contained in:
DESKTOP-I1T6TF3\Q
2026-06-04 15:13:03 +08:00
parent 587e1e4e7d
commit 592c82816a
4 changed files with 6 additions and 99 deletions
-45
View File
@@ -1,45 +0,0 @@
import { chat } from "@infiplot/ai-client";
import { NextResponse } from "next/server";
import { loadEngineConfig } from "@/lib/config";
export const runtime = "nodejs";
export const maxDuration = 30;
const TEASER_SYSTEM = `你是一个交互视觉小说的“故事预告设计师/旁白配音员”。
根据用户输入的故事设定、面向观众、剧情风格和内容节奏,为该故事撰写一段富有悬念、画面感极强、极具吸引力的【故事预告】(类似电影预告片旁白风格)。
要求:
1. 语言必须富有情感、张力、史诗感或治愈感(根据题材基调决定),用第二人称“你”指代玩家。
2. 长度控制在 80-150 字以内,字句简练,用字考究,多用短句。
3. 绝对只返回预告片纯文本内容,不要带有任何 JSON 标记、Markdown 标题或“预告:”等任何额外字符。直接输出文字本身。`;
export async function POST(req: Request) {
let body: { worldSetting?: string };
try {
body = (await req.json()) as { worldSetting?: string };
} catch {
return NextResponse.json({ error: "Invalid JSON" }, { status: 400 });
}
const worldSetting = body.worldSetting?.trim();
if (!worldSetting) {
return NextResponse.json({ error: "worldSetting is required" }, { status: 400 });
}
try {
const config = loadEngineConfig(req.headers);
const rawTeaser = await chat(
config.text,
[
{ role: "system", content: TEASER_SYSTEM },
{ role: "user", content: `故事设定如下,请生成一段精彩的预告:\n\n${worldSetting}` },
],
{ temperature: 0.85, tag: "teaser" }
);
return NextResponse.json({ teaser: rawTeaser.trim() });
} catch (err) {
const message = err instanceof Error ? err.message : "Unknown error";
return NextResponse.json({ error: message }, { status: 500 });
}
}
-22
View File
@@ -402,7 +402,6 @@ function PlayInner() {
const [error, setError] = useState<string | null>(null);
const [presentation, setPresentation] = useState(false);
const [lastExitLabel, setLastExitLabel] = useState<string | null>(null);
const [teaserText, setTeaserText] = useState<string | null>(null);
const startedRef = useRef(false);
const poolRef = useRef<Map<string, PrefetchEntry>>(new Map());
@@ -695,25 +694,6 @@ function PlayInner() {
return;
}
if (livePayload) {
fetch("/api/teaser", {
method: "POST",
headers: {
"Content-Type": "application/json",
...getByoHeaders(),
},
body: JSON.stringify({ worldSetting: livePayload.worldSetting }),
})
.then(async (r) => {
if (!r.ok) return;
const data = await r.json();
if (data.teaser) {
setTeaserText(data.teaser);
}
})
.catch(() => {});
}
type PrebakedFirstAct = StartResponse & {
worldSetting: string;
styleGuide: string;
@@ -1175,7 +1155,6 @@ function PlayInner() {
onAdvance={onAdvance}
onSelectChoice={onSelectChoice}
fullViewport
teaserText={teaserText}
/>
</div>
);
@@ -1215,7 +1194,6 @@ function PlayInner() {
onBackgroundClick={onBackgroundClick}
onAdvance={onAdvance}
onSelectChoice={onSelectChoice}
teaserText={teaserText}
aboveCanvas={
<button
type="button"