UNPKG

@genkit-ai/compat-oai

Version:

Genkit AI framework plugin for OpenAI APIs.

1 lines 3.38 kB
{"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.mjs';\nimport { maybeCreateRequestScopedOpenAIClient, toModelName } from './utils.mjs';\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":[]}