{"version":3,"sources":["../src/embedder.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\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// import { defineEmbedder, embedderRef } from '@genkit-ai/ai/embedder';\n\nimport type { EmbedderAction, EmbedderReference } from 'genkit';\nimport { embedder } from 'genkit/plugin';\nimport OpenAI from 'openai';\nimport { PluginOptions } from './index.js';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.js';\n\n/**\n * Method to define a new Genkit Embedder that is compatibale with the Open AI\n * Embeddings API. \n *\n * @param params An object containing parameters for defining the OpenAI embedder.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the embedder.\n * @param params.client The OpenAI client instance.\n * @param params.embedderRef Optional reference to the embedder's configuration and\n * custom options.\n\n * @returns the created {@link EmbedderAction}\n */\nexport function defineCompatOpenAIEmbedder(params: {\n  name: string;\n  client: OpenAI;\n  pluginOptions?: PluginOptions;\n  embedderRef?: EmbedderReference;\n}): EmbedderAction {\n  const { name, client: defaultClient, pluginOptions, embedderRef } = params;\n\n  const modelName = toModelName(name, pluginOptions?.name);\n  const actionName =\n    embedderRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`;\n\n  return embedder(\n    {\n      name: actionName,\n      configSchema: embedderRef?.configSchema,\n      ...embedderRef?.info,\n    },\n    async (req) => {\n      const { encodingFormat: encoding_format, ...restOfConfig } = req.options;\n      const client = maybeCreateRequestScopedOpenAIClient(\n        pluginOptions,\n        req,\n        defaultClient\n      );\n      const embeddings = await client.embeddings.create({\n        model: modelName,\n        input: req.input.map((d) => d.text),\n        encoding_format,\n        ...restOfConfig,\n      });\n      return {\n        embeddings: embeddings.data.map((d) => ({ embedding: d.embedding })),\n      };\n    }\n  );\n}\n"],"mappings":"AAoBA,SAAS,gBAAgB;AAGzB,SAAS,sCAAsC,mBAAmB;AAe3D,SAAS,2BAA2B,QAKxB;AACjB,QAAM,EAAE,MAAM,QAAQ,eAAe,eAAe,YAAY,IAAI;AAEpE,QAAM,YAAY,YAAY,MAAM,eAAe,IAAI;AACvD,QAAM,aACJ,aAAa,QAAQ,GAAG,eAAe,QAAQ,YAAY,IAAI,SAAS;AAE1E,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,cAAc,aAAa;AAAA,MAC3B,GAAG,aAAa;AAAA,IAClB;AAAA,IACA,OAAO,QAAQ;AACb,YAAM,EAAE,gBAAgB,iBAAiB,GAAG,aAAa,IAAI,IAAI;AACjE,YAAM,SAAS;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,aAAa,MAAM,OAAO,WAAW,OAAO;AAAA,QAChD,OAAO;AAAA,QACP,OAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,QAClC;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AACD,aAAO;AAAA,QACL,YAAY,WAAW,KAAK,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}