UNPKG

genkit

Version:

Genkit AI framework

1 lines 6.81 kB
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Plugin authoring utilities — factory functions (`model`, `embedder`,\n * `retriever`, etc.), plugin lifecycle types, and the v1/v2 plugin\n * interfaces for building Genkit plugins.\n *\n * ```ts\n * import { model, embedder, genkitPlugin } from 'genkit/plugin';\n * ```\n *\n * @module plugin\n */\n\nimport type { GenerateMiddleware } from '@genkit-ai/ai';\nimport { type GenkitPluginV2 } from '@genkit-ai/ai';\nimport { type ModelAction } from '@genkit-ai/ai/model';\nimport {\n GenkitError,\n type ActionMetadata,\n type ResolvableAction,\n} from '@genkit-ai/core';\nimport type { Genkit } from './genkit.mjs';\nimport type { ActionType } from './registry.mjs';\n\nexport { embedder, embedderActionMetadata } from '@genkit-ai/ai/embedder';\nexport { evaluator } from '@genkit-ai/ai/evaluator';\nexport {\n backgroundModel,\n model,\n modelActionMetadata,\n} from '@genkit-ai/ai/model';\nexport { reranker } from '@genkit-ai/ai/reranker';\nexport { indexer, retriever } from '@genkit-ai/ai/retriever';\nexport { type GenerateMiddleware, type GenkitPluginV2, type ResolvableAction };\n\n/** A v1 plugin provider returned by a {@link GenkitPlugin} factory function. */\nexport interface PluginProvider {\n name: string;\n initializer: () => void | Promise<void>;\n resolver?: (action: ActionType, target: string) => Promise<void>;\n listActions?: () => Promise<ActionMetadata[]>;\n}\n\n/** A v1 Genkit plugin factory function. Returns a {@link PluginProvider} when called with a Genkit instance. */\nexport type GenkitPlugin = (genkit: Genkit) => PluginProvider;\n\n/** Initialization function called during plugin setup. */\nexport type PluginInit = (genkit: Genkit) => void | Promise<void>;\n\n/** Optional resolver function for lazily-resolved plugin actions. */\nexport type PluginActionResolver = (\n genkit: Genkit,\n action: ActionType,\n target: string\n) => Promise<void>;\n\n/**\n * Defines a Genkit plugin.\n */\nexport function genkitPlugin<T extends PluginInit>(\n pluginName: string,\n initFn: T,\n resolveFn?: PluginActionResolver,\n listActionsFn?: () => Promise<ActionMetadata[]>\n): GenkitPlugin {\n return (genkit: Genkit) => ({\n name: pluginName,\n initializer: async () => {\n await initFn(genkit);\n },\n resolver: async (action: ActionType, target: string): Promise<void> => {\n if (resolveFn) {\n return await resolveFn(genkit, action, target);\n }\n },\n listActions: async (): Promise<ActionMetadata[]> => {\n if (listActionsFn) {\n return await listActionsFn();\n }\n return [];\n },\n });\n}\n\n/**\n * Concrete implementation of a v2 plugin that wraps a {@link GenkitPluginV2} definition\n * and provides default implementations for all optional hooks.\n */\nexport class GenkitPluginV2Instance implements Required<GenkitPluginV2> {\n readonly version = 'v2';\n readonly name: string;\n\n private plugin: Omit<GenkitPluginV2, 'version' | 'model'>;\n\n constructor(plugin: Omit<GenkitPluginV2, 'version' | 'model'>) {\n this.name = plugin.name;\n this.plugin = plugin;\n }\n\n init(): ResolvableAction[] | Promise<ResolvableAction[]> {\n if (!this.plugin.init) {\n return [];\n }\n return this.plugin.init();\n }\n\n list(): ActionMetadata[] | Promise<ActionMetadata[]> {\n if (!this.plugin.list) {\n return [];\n }\n return this.plugin.list();\n }\n\n middleware(): GenerateMiddleware<any, any>[] {\n if (!this.plugin.middleware) {\n return [];\n }\n return this.plugin.middleware();\n }\n\n resolve(\n actionType: ActionType,\n name: string\n ): ResolvableAction | undefined | Promise<ResolvableAction | undefined> {\n if (!this.plugin.resolve) {\n return undefined;\n }\n return this.plugin.resolve(actionType, name);\n }\n\n async model(name: string): Promise<ModelAction> {\n const model = await this.resolve('model', name);\n if (!model) {\n throw new GenkitError({\n message: `Failed to resolve model ${name} for plugin ${this.name}`,\n status: 'NOT_FOUND',\n });\n }\n return model as ModelAction;\n }\n}\n\n/**\n * Creates a new v2 plugin instance from the provided options.\n */\nexport function genkitPluginV2(\n options: Omit<GenkitPluginV2, 'version' | 'model'>\n): GenkitPluginV2Instance {\n return new GenkitPluginV2Instance(options);\n}\n\n/** Checks whether the given plugin conforms to the v2 plugin interface. */\nexport function isPluginV2(plugin: unknown): plugin is GenkitPluginV2 {\n return (plugin as GenkitPluginV2).version === 'v2';\n}\n"],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA,EACE;AAAA,OAGK;AAIP,SAAS,UAAU,8BAA8B;AACjD,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,SAAS,iBAAiB;AA2B5B,SAAS,aACd,YACA,QACA,WACA,eACc;AACd,SAAO,CAAC,YAAoB;AAAA,IAC1B,MAAM;AAAA,IACN,aAAa,YAAY;AACvB,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,IACA,UAAU,OAAO,QAAoB,WAAkC;AACrE,UAAI,WAAW;AACb,eAAO,MAAM,UAAU,QAAQ,QAAQ,MAAM;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,aAAa,YAAuC;AAClD,UAAI,eAAe;AACjB,eAAO,MAAM,cAAc;AAAA,MAC7B;AACA,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AACF;AAMO,MAAM,uBAA2D;AAAA,EAC7D,UAAU;AAAA,EACV;AAAA,EAED;AAAA,EAER,YAAY,QAAmD;AAC7D,SAAK,OAAO,OAAO;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAyD;AACvD,QAAI,CAAC,KAAK,OAAO,MAAM;AACrB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,OAAqD;AACnD,QAAI,CAAC,KAAK,OAAO,MAAM;AACrB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,aAA6C;AAC3C,QAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,aAAO,CAAC;AAAA,IACV;AACA,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EAEA,QACE,YACA,MACsE;AACtE,QAAI,CAAC,KAAK,OAAO,SAAS;AACxB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,OAAO,QAAQ,YAAY,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAM,MAAM,MAAoC;AAC9C,UAAMA,SAAQ,MAAM,KAAK,QAAQ,SAAS,IAAI;AAC9C,QAAI,CAACA,QAAO;AACV,YAAM,IAAI,YAAY;AAAA,QACpB,SAAS,2BAA2B,IAAI,eAAe,KAAK,IAAI;AAAA,QAChE,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AACA,WAAOA;AAAA,EACT;AACF;AAKO,SAAS,eACd,SACwB;AACxB,SAAO,IAAI,uBAAuB,OAAO;AAC3C;AAGO,SAAS,WAAW,QAA2C;AACpE,SAAQ,OAA0B,YAAY;AAChD;","names":["model"]}