UNPKG

@genkit-ai/dotprompt

Version:

Genkit AI framework `.prompt` file format and management library.

117 lines 3.99 kB
import { __async } from "./chunk-RGHW4PYM.mjs"; import { GenkitError } from "@genkit-ai/core"; import { logger } from "@genkit-ai/core/logging"; import { existsSync, readdir, readFileSync } from "fs"; import { basename, join, resolve } from "path"; import { Dotprompt } from "./prompt.js"; import { definePartial } from "./template.js"; function registryDefinitionKey(name, variant, ns) { return `${ns ? `${ns}/` : ""}${name}${variant ? `.${variant}` : ""}`; } function registryLookupKey(name, variant, ns) { return `/prompt/${registryDefinitionKey(name, variant, ns)}`; } function lookupPrompt(registry, name, variant, dir = "./prompts") { return __async(this, null, function* () { let registryPrompt = (yield registry.lookupAction(registryLookupKey(name, variant))) || (yield registry.lookupAction( registryLookupKey(name, variant, "dotprompt") )); if (registryPrompt) { return Dotprompt.fromAction(registry, registryPrompt); } else { return maybeLoadPrompt(registry, dir, name, variant); } }); } function maybeLoadPrompt(registry, dir, name, variant) { return __async(this, null, function* () { const expectedFileName = `${name}${variant ? `.${variant}` : ""}.prompt`; const promptFolder = resolve(dir); const promptExists = existsSync(join(promptFolder, expectedFileName)); if (promptExists) { return loadPrompt(registry, promptFolder, expectedFileName); } else { throw new GenkitError({ source: "dotprompt", status: "NOT_FOUND", message: `Could not find '${expectedFileName}' in the prompts folder.` }); } }); } function loadPromptFolder(registry, dir = "./prompts", ns) { return __async(this, null, function* () { const promptsPath = resolve(dir); return new Promise((resolve2, reject) => { if (existsSync(promptsPath)) { readdir( promptsPath, { withFileTypes: true, recursive: true }, (err, dirEnts) => { if (err) { reject(err); } else { dirEnts.forEach((dirEnt) => __async(this, null, function* () { if (dirEnt.isFile() && dirEnt.name.endsWith(".prompt")) { if (dirEnt.name.startsWith("_")) { const partialName = dirEnt.name.substring( 1, dirEnt.name.length - 7 ); definePartial( partialName, readFileSync(join(dirEnt.path, dirEnt.name), { encoding: "utf8" }) ); logger.debug( `Registered Dotprompt partial "${partialName}" from "${join(dirEnt.path, dirEnt.name)}"` ); } else { let prefix = ""; if (promptsPath !== dirEnt.path) { prefix = dirEnt.path.replace(`${promptsPath}/`, "").replace(/\//g, "-"); } loadPrompt(registry, dirEnt.path, dirEnt.name, prefix, ns); } } })); resolve2(); } } ); } else { resolve2(); } }); }); } function loadPrompt(registry, path, filename, prefix = "", ns = "dotprompt") { let name = `${prefix ? `${prefix}-` : ""}${basename(filename, ".prompt")}`; let variant = null; if (name.includes(".")) { const parts = name.split("."); name = parts[0]; variant = parts[1]; } const source = readFileSync(join(path, filename), "utf8"); const prompt = Dotprompt.parse(registry, name, source); if (variant) { prompt.variant = variant; } prompt.define({ ns }); return prompt; } export { loadPrompt, loadPromptFolder, lookupPrompt, registryDefinitionKey, registryLookupKey }; //# sourceMappingURL=registry.mjs.map