ai-comic-factory / src /app /queries /getStoryContinuation.ts
jbilcke-hf's picture
jbilcke-hf HF staff
release 1.3
b022cb9
raw
history blame
No virus
2.08 kB
import { Preset } from "../engine/presets"
import { GeneratedPanel, LLMVendorConfig } from "@/types"
import { predictNextPanels } from "./predictNextPanels"
import { joinWords } from "@/lib/joinWords"
import { sleep } from "@/lib/sleep"
export const getStoryContinuation = async ({
preset,
stylePrompt = "",
userStoryPrompt = "",
nbPanelsToGenerate,
maxNbPanels,
existingPanels = [],
llmVendorConfig
}: {
preset: Preset;
stylePrompt?: string;
userStoryPrompt?: string;
nbPanelsToGenerate: number;
maxNbPanels: number;
existingPanels?: GeneratedPanel[];
llmVendorConfig: LLMVendorConfig
}): Promise<GeneratedPanel[]> => {
let panels: GeneratedPanel[] = []
const startAt: number = (existingPanels.length + 1) || 0
const endAt: number = startAt + nbPanelsToGenerate
try {
const prompt = joinWords([ userStoryPrompt ])
const panelCandidates: GeneratedPanel[] = await predictNextPanels({
preset,
prompt,
nbPanelsToGenerate,
maxNbPanels,
existingPanels,
llmVendorConfig,
})
// console.log("LLM responded with panelCandidates:", panelCandidates)
// we clean the output from the LLM
// most importantly, we need to adjust the panel index,
// to start from where we last finished
for (let i = 0; i < nbPanelsToGenerate; i++) {
panels.push({
panel: startAt + i,
instructions: `${panelCandidates[i]?.instructions || ""}`,
caption: `${panelCandidates[i]?.caption || ""}`,
})
}
} catch (err) {
// console.log("LLM step failed due to:", err)
// console.log("we are now switching to a degraded mode, using 4 similar panels")
panels = []
for (let p = startAt; p < endAt && p; p++) {
panels.push({
panel: p,
instructions: joinWords([
stylePrompt,
userStoryPrompt,
`${".".repeat(p)}`,
]),
caption: "(Sorry, LLM generation failed: using degraded mode)"
})
}
await sleep(2000)
// console.error(err)
} finally {
return panels
}
}