|
import { ChatCompletionRequestMessage } from "openai" |
|
|
|
import { Video, VideoAPIRequest } from "../types.mts" |
|
import { generateYAML } from "./openai/generateYAML.mts" |
|
import { HallucinatedVideoRequest, OpenAIErrorResponse } from "./types.mts" |
|
import { getQueryChatMessages } from "../preproduction/prompts.mts" |
|
import { getValidNumber } from "../utils/getValidNumber.mts" |
|
import { parseShotRequest } from "../utils/parseShotRequest.mts" |
|
|
|
|
|
export const enrichVideoSpecsUsingLLM = async (video: Video): Promise<Video> => { |
|
|
|
const messages: ChatCompletionRequestMessage[] = getQueryChatMessages(video.videoPrompt) |
|
|
|
const defaultValue = {} as unknown as HallucinatedVideoRequest |
|
|
|
let hallucinatedVideo: HallucinatedVideoRequest |
|
video.shots = [] |
|
|
|
try { |
|
hallucinatedVideo = await generateYAML<HallucinatedVideoRequest>( |
|
messages, |
|
defaultValue |
|
) |
|
console.log("enrichVideoSpecsUsingLLM: hallucinatedVideo = ", hallucinatedVideo) |
|
} catch (err) { |
|
|
|
let error: OpenAIErrorResponse = err?.response?.data?.error as unknown as OpenAIErrorResponse |
|
if (!error) { |
|
error = { message: `${err || ""}` } as unknown as OpenAIErrorResponse |
|
} |
|
|
|
console.error(JSON.stringify(error, null, 2)) |
|
throw new Error(`failed to call the LLM: ${error.message}`) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
video.backgroundAudioPrompt = hallucinatedVideo.backgroundAudioPrompt || video.backgroundAudioPrompt |
|
video.foregroundAudioPrompt = hallucinatedVideo.foregroundAudioPrompt || video.foregroundAudioPrompt |
|
video.actorPrompt = hallucinatedVideo.actorPrompt || video.actorPrompt |
|
video.actorVoicePrompt = hallucinatedVideo.actorVoicePrompt || video.actorVoicePrompt |
|
|
|
video.noise = typeof hallucinatedVideo.noise !== "undefined" |
|
? (`${hallucinatedVideo.noise || ""}`.toLowerCase() === "true") |
|
: video.noise |
|
|
|
video.noiseAmount = typeof hallucinatedVideo.noiseAmount !== "undefined" |
|
? getValidNumber(hallucinatedVideo.noiseAmount, 0, 10, 2) |
|
: video.noiseAmount |
|
|
|
video.outroDurationMs = typeof hallucinatedVideo.outroDurationMs !== "undefined" |
|
? getValidNumber(hallucinatedVideo.outroDurationMs, 0, 3000, 500) |
|
: video.outroDurationMs |
|
|
|
const hallucinatedShots = Array.isArray(hallucinatedVideo.shots) ? hallucinatedVideo.shots : [] |
|
|
|
|
|
for (const hallucinatedShot of hallucinatedShots) { |
|
const shot = await parseShotRequest(video, { |
|
shotPrompt: hallucinatedShot.shotPrompt, |
|
environmentPrompt: hallucinatedShot.environmentPrompt, |
|
photographyPrompt: hallucinatedShot.photographyPrompt, |
|
actionPrompt: hallucinatedShot.actionPrompt, |
|
foregroundAudioPrompt: hallucinatedShot.foregroundAudioPrompt |
|
}) |
|
video.shots.push(shot) |
|
} |
|
|
|
console.log("enrichVideoSpecsUsingLLM: video = ", video) |
|
|
|
return video |
|
} |