Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,800 Bytes
f62b8d3 4c34e70 f62b8d3 4c34e70 f62b8d3 4c34e70 f62b8d3 4c34e70 f62b8d3 4c34e70 93f8352 4c34e70 f62b8d3 4c34e70 93f8352 4c34e70 f62b8d3 f27679f 4c34e70 93f8352 4c34e70 f27679f 4c34e70 93f8352 f62b8d3 93f8352 f62b8d3 93f8352 f62b8d3 93f8352 4c34e70 93f8352 4c34e70 f62b8d3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
import { ChannelInfo, ParsedDatasetPrompt } from "@/types"
import { parseVideoModelName } from "./parseVideoModelName"
export function parseDatasetPrompt(markdown: string, channel: ChannelInfo): ParsedDatasetPrompt {
try {
const { title, description, tags, prompt, model, lora, style, thumbnail, voice, music } = parseMarkdown(markdown)
return {
title: typeof title === "string" && title ? title : "",
description: typeof description === "string" && description ? description : "",
tags:
tags && typeof tags === "string" ? tags.split("-").map(x => x.trim()).filter(x => x)
: (channel.tags || []),
prompt: typeof prompt === "string" && prompt ? prompt : "",
model: parseVideoModelName(model, channel.model),
lora: typeof lora === "string" && lora ? lora : (channel.lora || ""),
style: typeof style === "string" && style ? style : (channel.style || ""),
thumbnail: typeof thumbnail === "string" && thumbnail ? thumbnail : "",
voice: typeof voice === "string" && voice ? voice : (channel.voice || ""),
music: typeof music === "string" && music ? music : (channel.music || ""),
}
} catch (err) {
return {
title: "",
description: "",
tags: channel.tags || [],
prompt: "",
model: channel.model || "HotshotXL",
lora: channel.lora || "",
style: channel.style || "",
thumbnail: "",
voice: channel.voice || "",
music: channel.music || "",
}
}
}
/**
* Simple Markdown Parser to extract sections into a JSON object
* @param markdown A Markdown string containing Description and Prompt sections
* @returns A JSON object with { "description": "...", "prompt": "..." }
*/
function parseMarkdown(markdown: string): {
title: string
description: string
tags: string
prompt: string
model: string
lora: string
style: string
thumbnail: string
voice: string
music: string
} {
markdown = `${markdown || ""}`.trim()
// Improved regular expression to find markdown sections and accommodate multi-line content.
const sectionRegex = /^#+\s+(?<key>.+?)\n\n?(?<content>[^#]+)/gm;
const sections: { [key: string]: string } = {};
let match;
while ((match = sectionRegex.exec(markdown))) {
const { key, content } = match.groups as { key: string; content: string };
sections[key.trim().toLowerCase()] = content.trim();
}
return {
title: sections["title"] || "",
description: sections["description"] || "",
tags: sections["tags"] || "",
prompt: sections["prompt"] || "",
model: sections["model"] || "",
lora: sections["lora"] || "",
style: sections["style"] || "",
thumbnail: sections["thumbnail"] || "",
voice: sections["voice"] || "",
music: sections["music"] || "",
};
} |