UNPKG

@genkit-ai/core

Version:

Genkit AI framework core libraries.

157 lines 5.04 kB
"use strict"; 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