UNPKG

@advjs/ai

Version:
122 lines (114 loc) 3.87 kB
import path from 'node:path'; import { consola } from 'consola'; import fs from 'fs-extra'; import process from 'node:process'; import OpenAI from 'openai'; import 'dotenv/config'; import { hunyuan } from 'tencentcloud-sdk-nodejs-hunyuan'; function walkChapterNodes({ json }) { const nodes = []; json.chapters.forEach((chapter) => { chapter.nodes.forEach((node) => { nodes.push(node.id); }); }); return nodes; } const promptsDir = path.resolve(import.meta.dirname, "../prompts"); path.resolve(import.meta.dirname, "../dist"); const typesDir = path.resolve(import.meta.dirname, "./types"); const dramaWriterPath = path.resolve(promptsDir, "drama-writer.md"); const prompts = { dramaWriter: fs.readFileSync(dramaWriterPath, "utf-8") }; const configTSPath = path.resolve(typesDir, "config.ts"); const configTSContent = fs.readFileSync(configTSPath, "utf-8"); path.resolve(import.meta.dirname, "../examples/ai-generated"); function renderTemplate(template, variables) { return template.replace(/\{\{\s*([^}]+?)\s*\}\}/g, (_, key) => { const value = variables[key.trim()]; return value !== void 0 ? String(value) : ""; }); } const openai = new OpenAI({ baseURL: "https://api.deepseek.com", // apiKey: '<DeepSeek API Key>' apiKey: process.env.DEEPSEEK_API_KEY }); async function generateAdvDramaJSON(params) { const dramaWriterPrompt = renderTemplate(prompts.dramaWriter, { dts: configTSContent, story_background: params.storyBackground }); consola.debug("dramaWriterPrompt:", dramaWriterPrompt); const completion = await openai.chat.completions.create({ messages: [ { role: "system", content: dramaWriterPrompt } ], model: "deepseek-chat", response_format: { type: "json_object" } }); return completion.choices[0].message.content; } const hunyuanClient = new hunyuan.v20230901.Client({ credential: { secretId: process.env.TENCENT_CLOUD_SECRET_ID || "", secretKey: process.env.TENCENT_CLOUD_SECRET_KEY || "" }, region: process.env.TENCENT_CLOUD_REGION || "ap-guangzhou", profile: { httpProfile: { reqMethod: "POST", reqTimeout: 30, endpoint: "hunyuan.tencentcloudapi.com" } } }); const HUNYUAN_STYLES = { "\uFF08\u4E0D\u9650\u5B9A\u98CE\u683C\uFF09": "000", "\u6C34\u58A8\u753B": "101", "\u6982\u5FF5\u827A\u672F": "102", "\u6CB9\u753B1": "103", "\u6CB9\u753B2\uFF08\u68B5\u9AD8\uFF09": "118", "\u6C34\u5F69\u753B": "104", "\u50CF\u7D20\u753B": "105", "\u539A\u6D82\u98CE\u683C": "106", "\u63D2\u56FE": "107", "\u526A\u7EB8\u98CE\u683C": "108", "\u5370\u8C61\u6D3E1\uFF08\u83AB\u5948\uFF09": "109", "\u5370\u8C61\u6D3E2": "119", "2.5D": "110", "\u53E4\u5178\u8096\u50CF\u753B": "111", "\u9ED1\u767D\u7D20\u63CF\u753B": "112", "\u8D5B\u535A\u670B\u514B": "113", "\u79D1\u5E7B\u98CE\u683C": "114", "\u6697\u9ED1\u98CE\u683C": "115", "3D": "116", "\u84B8\u6C7D\u6CE2": "117", "\u65E5\u7CFB\u52A8\u6F2B": "201", "\u602A\u517D\u98CE\u683C": "202", "\u552F\u7F8E\u53E4\u98CE": "203", "\u590D\u53E4\u52A8\u6F2B": "204", "\u6E38\u620F\u5361\u901A\u624B\u7ED8": "301", "\u901A\u7528\u5199\u5B9E\u98CE\u683C": "401" }; async function writerWorkflow(params) { const aiStr = await generateAdvDramaJSON(params); try { const aiData = JSON.parse(aiStr || "{}"); if (params.outputDir) { await fs.ensureDir(params.outputDir); const fileName = params.overwrite ? "adv.ai.json" : `adv.ai.${Date.now()}.json`; await fs.writeJSON(path.resolve(params.outputDir, fileName), aiData, { spaces: 2, EOL: "\n" }); } consola.success("\u{1F500} [ADV Writer] completed successfully."); } catch (error) { consola.error("\u{1F500} [ADV Writer] failed:", error); } } export { HUNYUAN_STYLES, hunyuanClient, walkChapterNodes, writerWorkflow };