UNPKG

@genkit-ai/ai

Version:

Genkit AI framework generative AI APIs.

83 lines 2.35 kB
import { GenkitError, z } from "@genkit-ai/core"; import { toJsonSchema } from "@genkit-ai/core/schema"; import { GenkitAI } from "../genkit-ai.js"; const MiddlewareDescSchema = z.object({ /** Unique name of the middleware. */ name: z.string(), /** Human-readable description of what the middleware does. */ description: z.string().optional(), /** JSON Schema for the middleware's configuration. */ configSchema: z.record(z.any()).nullish(), /** User defined metadata for the middleware. */ metadata: z.record(z.any()).nullish() }); function generateMiddleware(options, middlewareFn) { const def = function(config) { return { name: options.name, config, __def: def }; }; Object.defineProperty(def, "name", { value: options.name }); def.configSchema = options.configSchema; def.description = options.description; def.metadata = options.metadata; def.instantiate = middlewareFn; def.plugin = (pluginConfig) => ({ name: `middleware:${options.name}`, version: "v2", middleware: () => { const wrappedDef = Object.assign( function(config) { return def(config); }, def, { pluginOptions: pluginConfig } ); Object.defineProperty(wrappedDef, "name", { value: options.name }); return [wrappedDef]; }, model: (_) => { throw new Error("Not supported for middleware plugins"); } }); def.toJson = () => ({ name: options.name, description: options.description, configSchema: options.configSchema ? toJsonSchema({ schema: options.configSchema }) : void 0, metadata: options.metadata }); return def; } async function resolveMiddleware(registry, refs) { const result = []; if (!refs) return result; const ai = new GenkitAI(registry); for (const ref of refs) { const def = await registry.lookupValue( "middleware", ref.name ); if (!def) { throw new GenkitError({ status: "NOT_FOUND", message: `Middleware ${ref.name} not found in registry.` }); } result.push( def.instantiate({ config: ref.config, ai, pluginConfig: def.pluginOptions }) ); } return result; } export { MiddlewareDescSchema, generateMiddleware, resolveMiddleware }; //# sourceMappingURL=middleware.mjs.map