@genkit-ai/compat-oai
Version:
Genkit AI framework plugin for OpenAI APIs.
1 lines • 7 kB
Source Map (JSON)
{"version":3,"sources":["../src/image.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 */\nimport type {\n GenerateRequest,\n GenerateResponseData,\n Genkit,\n ModelReference,\n} from 'genkit';\nimport { Message, modelRef, z } from 'genkit';\nimport { ModelAction, ModelInfo } from 'genkit/model';\nimport OpenAI from 'openai';\nimport type {\n ImageGenerateParams,\n ImagesResponse,\n} from 'openai/resources/images.mjs';\n\nexport type ImageRequestBuilder = (\n req: GenerateRequest,\n params: ImageGenerateParams\n) => void;\n\nexport const IMAGE_GENERATION_MODEL_INFO: ModelInfo = {\n supports: {\n media: false,\n output: ['media'],\n multiturn: false,\n systemRole: false,\n tools: false,\n },\n};\n\nexport const ImageGenerationCommonConfigSchema = z.object({\n size: z.enum(['1024x1024', '1792x1024', '1024x1792']).optional(),\n style: z.enum(['vivid', 'natural']).optional(),\n user: z.string().optional(),\n n: z.number().int().min(1).max(10).default(1),\n quality: z.enum(['standard', 'hd']).optional(),\n response_format: z.enum(['b64_json', 'url']).default('b64_json').optional(),\n});\n\nfunction toImageGenerateParams(\n modelName: string,\n request: GenerateRequest,\n requestBuilder?: ImageRequestBuilder\n): ImageGenerateParams {\n const {\n temperature,\n version: modelVersion,\n maxOutputTokens,\n stopSequences,\n topK,\n topP,\n response_format,\n ...restOfConfig\n } = request.config ?? {};\n\n let options: ImageGenerateParams = {\n model: modelVersion ?? modelName,\n prompt: new Message(request.messages[0]).text,\n response_format: response_format || 'b64_json',\n };\n if (requestBuilder) {\n requestBuilder(request, options);\n } else {\n options = { ...options, ...restOfConfig };\n }\n for (const k in options) {\n if (options[k] === undefined) {\n delete options[k];\n }\n }\n return options;\n}\n\nfunction toGenerateResponse(result: ImagesResponse): GenerateResponseData {\n const images = result.data;\n if (!images) {\n return { finishReason: 'stop' };\n } else {\n const content = (result.data ?? []).map((image) => ({\n media: {\n contentType: 'image/png',\n url: image.url || `data:image/png;base64,${image.b64_json}`,\n },\n }));\n return { message: { role: 'model', content }, raw: result };\n }\n}\n\n/**\n * Method to define a new Genkit Model that is compatible with Open AI\n * Images API. \n *\n * These models are to be used to create images from a user prompt.\n *\n * @param params An object containing parameters for defining the OpenAI\n * image model.\n * @param params.ai The Genkit AI instance.\n * @param params.name The name of the model.\n * @param params.client The OpenAI client instance.\n * @param params.modelRef Optional reference to the model's configuration and\n * custom options.\n\n * @returns the created {@link ModelAction}\n */\nexport function defineCompatOpenAIImageModel<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n ai: Genkit;\n name: string;\n client: OpenAI;\n modelRef?: ModelReference<CustomOptions>;\n requestBuilder?: ImageRequestBuilder;\n}): ModelAction<CustomOptions> {\n const { ai, name, client, modelRef, requestBuilder } = params;\n const modelName = name.substring(name.indexOf('/') + 1);\n\n return ai.defineModel(\n {\n name,\n ...modelRef?.info,\n apiVersion: 'v2',\n configSchema: modelRef?.configSchema,\n },\n async (request, { abortSignal }) => {\n const result = await client.images.generate(\n toImageGenerateParams(modelName!, request, requestBuilder),\n { signal: abortSignal }\n );\n return toGenerateResponse(result);\n }\n );\n}\n\n/** Image generation ModelRef helper, with reasonable defaults for\n * OpenAI-compatible providers */\nexport function compatOaiImageModelRef<\n CustomOptions extends z.ZodTypeAny = z.ZodTypeAny,\n>(params: {\n name: string;\n info?: ModelInfo;\n configSchema?: CustomOptions;\n config?: any;\n}) {\n const {\n name,\n info = IMAGE_GENERATION_MODEL_INFO,\n configSchema,\n config = undefined,\n } = params;\n return modelRef({\n name,\n configSchema:\n configSchema || (ImageGenerationCommonConfigSchema as z.AnyZodObject),\n info,\n config,\n });\n}\n"],"mappings":"AAsBA,SAAS,SAAS,UAAU,SAAS;AAa9B,MAAM,8BAAyC;AAAA,EACpD,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ,CAAC,OAAO;AAAA,IAChB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEO,MAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,MAAM,EAAE,KAAK,CAAC,aAAa,aAAa,WAAW,CAAC,EAAE,SAAS;AAAA,EAC/D,OAAO,EAAE,KAAK,CAAC,SAAS,SAAS,CAAC,EAAE,SAAS;AAAA,EAC7C,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;AAAA,EAC5C,SAAS,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,SAAS;AAAA,EAC7C,iBAAiB,EAAE,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,QAAQ,UAAU,EAAE,SAAS;AAC5E,CAAC;AAED,SAAS,sBACP,WACA,SACA,gBACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI,QAAQ,UAAU,CAAC;AAEvB,MAAI,UAA+B;AAAA,IACjC,OAAO,gBAAgB;AAAA,IACvB,QAAQ,IAAI,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE;AAAA,IACzC,iBAAiB,mBAAmB;AAAA,EACtC;AACA,MAAI,gBAAgB;AAClB,mBAAe,SAAS,OAAO;AAAA,EACjC,OAAO;AACL,cAAU,EAAE,GAAG,SAAS,GAAG,aAAa;AAAA,EAC1C;AACA,aAAW,KAAK,SAAS;AACvB,QAAI,QAAQ,CAAC,MAAM,QAAW;AAC5B,aAAO,QAAQ,CAAC;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAA8C;AACxE,QAAM,SAAS,OAAO;AACtB,MAAI,CAAC,QAAQ;AACX,WAAO,EAAE,cAAc,OAAO;AAAA,EAChC,OAAO;AACL,UAAM,WAAW,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW;AAAA,MAClD,OAAO;AAAA,QACL,aAAa;AAAA,QACb,KAAK,MAAM,OAAO,yBAAyB,MAAM,QAAQ;AAAA,MAC3D;AAAA,IACF,EAAE;AACF,WAAO,EAAE,SAAS,EAAE,MAAM,SAAS,QAAQ,GAAG,KAAK,OAAO;AAAA,EAC5D;AACF;AAkBO,SAAS,6BAEd,QAM6B;AAC7B,QAAM,EAAE,IAAI,MAAM,QAAQ,UAAAA,WAAU,eAAe,IAAI;AACvD,QAAM,YAAY,KAAK,UAAU,KAAK,QAAQ,GAAG,IAAI,CAAC;AAEtD,SAAO,GAAG;AAAA,IACR;AAAA,MACE;AAAA,MACA,GAAGA,WAAU;AAAA,MACb,YAAY;AAAA,MACZ,cAAcA,WAAU;AAAA,IAC1B;AAAA,IACA,OAAO,SAAS,EAAE,YAAY,MAAM;AAClC,YAAM,SAAS,MAAM,OAAO,OAAO;AAAA,QACjC,sBAAsB,WAAY,SAAS,cAAc;AAAA,QACzD,EAAE,QAAQ,YAAY;AAAA,MACxB;AACA,aAAO,mBAAmB,MAAM;AAAA,IAClC;AAAA,EACF;AACF;AAIO,SAAS,uBAEd,QAKC;AACD,QAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,SAAS;AAAA,EACX,IAAI;AACJ,SAAO,SAAS;AAAA,IACd;AAAA,IACA,cACE,gBAAiB;AAAA,IACnB;AAAA,IACA;AAAA,EACF,CAAC;AACH;","names":["modelRef"]}