← GPT-AI-SLIDE
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 }); }
}