Files

58 lines
2.5 KiB
JavaScript
Raw Permalink 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.
// 二期第2段端到端:真实调脚本 agent,验「总时长 = 各镜相加」「单镜 4–15 秒」「组合回写」
const API = process.env.API || "http://127.0.0.1:8010";
const login = await (await fetch(`${API}/api/auth/login/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username: "airshelf", password: "Restraint2026" })
})).json();
const auth = { Authorization: `Token ${login.token}`, "Content-Type": "application/json" };
const prods = (await (await fetch(`${API}/api/products/`, { headers: auth })).json()).results || [];
const project = await (await fetch(`${API}/api/projects/`, {
method: "POST", headers: auth,
body: JSON.stringify({ name: `二期第2段e2e-${Date.now() % 100000}`, product: prods[0].id })
})).json();
const CASES = [
{ total_duration: 40, presentation_format: "drama", video_structure: "pain" },
{ total_duration: 15, presentation_format: "oral", video_structure: "contrast" },
];
for (const params of CASES) {
const res = await fetch(`${API}/api/projects/${project.id}/script-agent-stream/`, {
method: "POST", headers: auth,
body: JSON.stringify({ mode: "auto", aspect_ratio: "9:16", ...params })
});
let saved = null;
const reader = res.body.getReader();
const dec = new TextDecoder();
let buf = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buf += dec.decode(value, { stream: true });
// SSE 帧只有 data: 行,事件类型在 JSON 的 type 字段里
for (const chunk of buf.split("\n\n").slice(0, -1)) {
const data = /^data:\s*([\s\S]+)$/m.exec(chunk)?.[1];
if (!data) continue;
let ev;
try { ev = JSON.parse(data); } catch { continue; }
if (ev.type === "draft") saved = ev.draft;
if (ev.type === "error") console.error(" error:", data);
}
buf = buf.slice(buf.lastIndexOf("\n\n") + 2);
}
const draft = saved || {};
const segs = draft.segments || [];
const durs = segs.map((s) => s.duration);
const sum = durs.reduce((a, b) => a + b, 0);
console.log(
`请求 ${params.total_duration}s ${params.presentation_format}×${params.video_structure}`,
"→ 出稿", draft?.total_duration, "s ·", segs.length, "镜 ·", JSON.stringify(durs), "加总", sum,
"|", draft?.presentation_format, draft?.video_structure,
sum === params.total_duration && durs.every((d) => d >= 4 && d <= 15) ? "✅" : "❌"
);
}
await fetch(`${API}/api/projects/${project.id}/`, { method: "DELETE", headers: auth });