{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\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\nimport { type ModelAction } from '@genkit-ai/ai/model';\nimport {\n  GenkitError,\n  type Action,\n  type ActionMetadata,\n  type BackgroundAction,\n} from '@genkit-ai/core';\nimport type { Genkit } from './genkit.js';\nimport type { ActionType } from './registry.js';\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 interface PluginProvider {\n  name: string;\n  initializer: () => void | Promise<void>;\n  resolver?: (action: ActionType, target: string) => Promise<void>;\n  listActions?: () => Promise<ActionMetadata[]>;\n}\n\nexport type ResolvableAction = Action | BackgroundAction;\n\nexport interface GenkitPluginV2 {\n  version: 'v2';\n  name: string;\n  init?: () => ResolvableAction[] | Promise<ResolvableAction[]>;\n  resolve?: (\n    actionType: ActionType,\n    name: string\n  ) => ResolvableAction | undefined | Promise<ResolvableAction | undefined>;\n  list?: () => ActionMetadata[] | Promise<ActionMetadata[]>;\n\n  // A shortcut for resolving a model.\n  model(name: string): Promise<ModelAction>;\n}\n\nexport type GenkitPlugin = (genkit: Genkit) => PluginProvider;\n\nexport type PluginInit = (genkit: Genkit) => void | Promise<void>;\n\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\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  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\nexport function genkitPluginV2(\n  options: Omit<GenkitPluginV2, 'version' | 'model'>\n): GenkitPluginV2Instance {\n  return new GenkitPluginV2Instance(options);\n}\n\nexport function isPluginV2(plugin: unknown): plugin is GenkitPluginV2 {\n  return (plugin as GenkitPluginV2).version === 'v2';\n}\n"],"mappings":"AAiBA;AAAA,EACE;AAAA,OAIK;AAGP,SAAS,UAAU,8BAA8B;AACjD,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,SAAS,iBAAiB;AAqC5B,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;AAEO,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,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;AAEO,SAAS,eACd,SACwB;AACxB,SAAO,IAAI,uBAAuB,OAAO;AAC3C;AAEO,SAAS,WAAW,QAA2C;AACpE,SAAQ,OAA0B,YAAY;AAChD;","names":["model"]}