Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import { promises as fs } from "node:fs" | |
import path from "node:path" | |
import { RenderRequest, RenderedScene } from "../types.mts" | |
import { renderedDirFilePath } from "../config.mts" | |
import { hashRequest } from "./hashRequest.mts" | |
export async function loadRenderedSceneFromCache(request?: RenderRequest, id?: string): Promise<RenderedScene> { | |
let pattern = "" | |
if (request?.prompt) { | |
try { | |
// note: this hashing function ignores the commands associated to cache and stuff | |
const hash = hashRequest(request) | |
pattern = `hash_${hash}` | |
} catch (err) { | |
} | |
} else if (id) { | |
pattern = `id_${id}` | |
} | |
if (!pattern) { | |
throw new Error("invalid request or id") | |
} | |
// console.log("pattern to find: " + pattern) | |
for (const cachedFile of await fs.readdir(renderedDirFilePath)) { | |
// console.log("evaluating " + cachedFile) | |
if (cachedFile.includes(pattern)) { | |
// console.log("matched with " + cachedFile) | |
const cacheFilePath = path.join(renderedDirFilePath, cachedFile) | |
const scene = JSON.parse( | |
await fs.readFile(cacheFilePath, 'utf8') | |
) as RenderedScene | |
if (!scene.assetUrl) { | |
throw new Error("there is something wrong with the cached rendered scene (url is empty)") | |
} | |
if (!scene.assetUrl) { | |
throw new Error("there is something wrong with the cached rendered scene (statis is not completed)") | |
} | |
return scene | |
} | |
} | |
throw new Error(`couldn't find a cache file for pattern ${pattern}`) | |
} |