@genkit-ai/core
Version:
Genkit AI framework core libraries.
157 lines • 5.04 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 dynamic_action_provider_exports = {};
__export(dynamic_action_provider_exports, {
defineDynamicActionProvider: () => defineDynamicActionProvider,
isDynamicActionProvider: () => isDynamicActionProvider
});
module.exports = __toCommonJS(dynamic_action_provider_exports);
var import_action = require("./action.js");
var import_error = require("./error.js");
class SimpleCache {
value;
expiresAt;
ttlMillis;
dap;
dapFn;
fetchPromise = null;
constructor(dap, config, dapFn) {
this.dap = dap;
this.dapFn = dapFn;
this.ttlMillis = !config.cacheConfig?.ttlMillis ? 3 * 1e3 : config.cacheConfig?.ttlMillis;
}
/**
* Gets or fetches the DAP data.
* @param skipTrace Don't run the action. i.e. don't create a trace log.
* @returns The DAP data
*/
async getOrFetch(params) {
const isStale = !this.value || !this.expiresAt || this.ttlMillis < 0 || Date.now() > this.expiresAt;
if (!isStale) {
return this.value;
}
if (!this.fetchPromise) {
this.fetchPromise = (async () => {
try {
this.value = await this.dapFn();
this.expiresAt = Date.now() + this.ttlMillis;
if (!params?.skipTrace) {
await this.dap.run(transformDapValue(this.value));
}
return this.value;
} catch (error) {
console.error("Error fetching Dynamic Action Provider value:", error);
this.invalidate();
throw error;
} finally {
this.fetchPromise = null;
}
})();
}
return await this.fetchPromise;
}
invalidate() {
this.value = void 0;
}
}
function isDynamicActionProvider(obj) {
return obj.__action?.metadata?.type == "dynamic-action-provider";
}
function transformDapValue(value) {
const metadata = {};
for (const key of Object.keys(value)) {
metadata[key] = value[key].map((a) => {
return a.__action;
});
}
return metadata;
}
function defineDynamicActionProvider(registry, config, fn) {
let cfg;
if (typeof config == "string") {
cfg = { name: config };
} else {
cfg = { ...config };
}
const a = (0, import_action.defineAction)(
registry,
{
...cfg,
actionType: "dynamic-action-provider",
metadata: { ...cfg.metadata || {}, type: "dynamic-action-provider" }
},
async (i, _options) => {
return i;
}
);
implementDap(a, cfg, fn);
return a;
}
function implementDap(dap, config, dapFn) {
dap.__cache = new SimpleCache(dap, config, dapFn);
dap.invalidateCache = () => {
dap.__cache.invalidate();
};
dap.getAction = async (actionType, actionName) => {
const result = await dap.__cache.getOrFetch();
if (result[actionType]) {
return result[actionType].find((t) => t.__action.name == actionName);
}
return void 0;
};
dap.listActionMetadata = async (actionType, actionName) => {
const result = await dap.__cache.getOrFetch();
if (!result[actionType]) {
return [];
}
const metadata = result[actionType].map((a) => a.__action);
if (actionName == "*") {
return metadata;
}
if (actionName.endsWith("*")) {
const prefix = actionName.slice(0, -1);
return metadata.filter((m) => m.name.startsWith(prefix));
}
return metadata.filter((m) => m.name == actionName);
};
dap.getActionMetadataRecord = async (dapPrefix) => {
const dapActions = {};
const result = await dap.__cache.getOrFetch({ skipTrace: true });
for (const [actionType, actions] of Object.entries(result)) {
const metadataList = actions.map((a) => a.__action);
for (const metadata of metadataList) {
if (!metadata.name) {
throw new import_error.GenkitError({
status: "INVALID_ARGUMENT",
message: `Invalid metadata when listing dynamic actions from ${dapPrefix} - name required`
});
}
const key = `${dapPrefix}:${actionType}/${metadata.name}`;
dapActions[key] = metadata;
}
}
return dapActions;
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
defineDynamicActionProvider,
isDynamicActionProvider
});
//# sourceMappingURL=dynamic-action-provider.js.map