UNPKG

@genkit-ai/dotprompt

Version:

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

117 lines 3.96 kB
import { __async } from "./chunk-DFMI36TU.mjs"; import { GenkitError } from "@genkit-ai/core"; import { logger } from "@genkit-ai/core/logging"; import { lookupAction } from "@genkit-ai/core/registry"; 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(name, variant, dir = "./prompts") { return __async(this, null, function* () { let registryPrompt = (yield lookupAction(registryLookupKey(name, variant))) || (yield lookupAction(registryLookupKey(name, variant, "dotprompt"))); if (registryPrompt) { return Dotprompt.fromAction(registryPrompt); } else { return maybeLoadPrompt(dir, name, variant); } }); } function maybeLoadPrompt(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(promptFolder, expectedFileName); } else { throw new GenkitError({ source: "dotprompt", status: "NOT_FOUND", message: `Could not find '${expectedFileName}' in the prompts folder.` }); } }); } function loadPromptFolder(dir = "./prompts") { 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("_")) { console.log(dirEnt.name); 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(dirEnt.path, dirEnt.name, prefix); } } })); resolve2(); } } ); } else { resolve2(); } }); }); } function loadPrompt(path, filename, prefix = "") { 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(name, source); if (variant) { prompt.variant = variant; } prompt.define({ ns: `dotprompt` }); return prompt; } export { loadPrompt, loadPromptFolder, lookupPrompt, registryDefinitionKey, registryLookupKey }; //# sourceMappingURL=registry.mjs.map