@genkit-ai/dotprompt
Version:
Genkit AI framework `.prompt` file format and management library.
162 lines • 5.94 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve2, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
var registry_exports = {};
__export(registry_exports, {
loadPrompt: () => loadPrompt,
loadPromptFolder: () => loadPromptFolder,
lookupPrompt: () => lookupPrompt,
registryDefinitionKey: () => registryDefinitionKey,
registryLookupKey: () => registryLookupKey
});
module.exports = __toCommonJS(registry_exports);
var import_core = require("@genkit-ai/core");
var import_logging = require("@genkit-ai/core/logging");
var import_registry = require("@genkit-ai/core/registry");
var import_fs = require("fs");
var import_path = require("path");
var import_prompt = require("./prompt.js");
var import_template = require("./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 (0, import_registry.lookupAction)(registryLookupKey(name, variant))) || (yield (0, import_registry.lookupAction)(registryLookupKey(name, variant, "dotprompt")));
if (registryPrompt) {
return import_prompt.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 = (0, import_path.resolve)(dir);
const promptExists = (0, import_fs.existsSync)((0, import_path.join)(promptFolder, expectedFileName));
if (promptExists) {
return loadPrompt(promptFolder, expectedFileName);
} else {
throw new import_core.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 = (0, import_path.resolve)(dir);
return new Promise((resolve2, reject) => {
if ((0, import_fs.existsSync)(promptsPath)) {
(0, import_fs.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
);
(0, import_template.definePartial)(
partialName,
(0, import_fs.readFileSync)((0, import_path.join)(dirEnt.path, dirEnt.name), {
encoding: "utf8"
})
);
import_logging.logger.debug(
`Registered Dotprompt partial "${partialName}" from "${(0, import_path.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}-` : ""}${(0, import_path.basename)(filename, ".prompt")}`;
let variant = null;
if (name.includes(".")) {
const parts = name.split(".");
name = parts[0];
variant = parts[1];
}
const source = (0, import_fs.readFileSync)((0, import_path.join)(path, filename), "utf8");
const prompt = import_prompt.Dotprompt.parse(name, source);
if (variant) {
prompt.variant = variant;
}
prompt.define({ ns: `dotprompt` });
return prompt;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
loadPrompt,
loadPromptFolder,
lookupPrompt,
registryDefinitionKey,
registryLookupKey
});
//# sourceMappingURL=registry.js.map
;