@genkit-ai/ai
Version:
Genkit AI framework generative AI APIs.
83 lines • 2.35 kB
JavaScript
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