CODE · 1.3 KB
api/generate-story.js
Workspace snapshot · 09/04 13:45
import { buildDeckPrompt, parseDeckResult } from "../src/runtime-prompt.js";
import { environment, rpc, SERVICE_ID } from "./runtime.js";
export const config = { maxDuration: 30 };
export default async function handler(req, res) {
const runtime = environment();
if (!runtime.connected) return res.status(503).json({ error: "VPS GPT基盤が未接続です" });
try {
if (req.method === "POST") {
const jobId = await rpc("avs_llm_public_enqueue_strategy_job", { p_service_id: SERVICE_ID, p_token: runtime.token, p_request_id: crypto.randomUUID(), p_prompt: buildDeckPrompt(req.body) });
return res.status(202).json({ jobId });
}
if (req.method === "GET") {
const jobId = String(req.query?.jobId || "");
if (!/^[0-9a-f-]{36}$/iu.test(jobId)) return res.status(400).json({ error: "jobIdが不正です" });
const job = await rpc("avs_llm_public_get_job", { p_service_id: SERVICE_ID, p_token: runtime.token, p_job_id: jobId });
if (job.status === "COMPLETED") return res.status(200).json({ ...job, slides: parseDeckResult(job.output?.text) });
return res.status(200).json(job);
}
return res.status(405).json({ error: "GETまたはPOSTのみ利用できます" });
} catch (error) { return res.status(error.status || 400).json({ error: error.message }); }
}