{"version":3,"sources":["../src/dalle.ts"],"sourcesContent":["/**\n * Copyright 2024 The Fire Company\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 { GenerateRequest, GenerateResponseData, Genkit } from 'genkit';\nimport { GenerationCommonConfigSchema, Message, z } from 'genkit';\nimport type { ModelAction } from 'genkit/model';\nimport { modelRef } from 'genkit/model';\nimport type OpenAI from 'openai';\nimport {\n  type ImageGenerateParams,\n  type ImagesResponse,\n} from 'openai/resources/images.mjs';\n\nexport const DallE3ConfigSchema = GenerationCommonConfigSchema.extend({\n  size: z.enum(['1024x1024', '1792x1024', '1024x1792']).optional(),\n  style: z.enum(['vivid', 'natural']).optional(),\n  user: z.string().optional(),\n  quality: z.enum(['standard', 'hd']).optional(),\n  response_format: z.enum(['b64_json', 'url']).optional(),\n});\n\nexport const dallE3 = modelRef({\n  name: 'openai/dall-e-3',\n  info: {\n    label: 'OpenAI - DALL-E 3',\n    supports: {\n      media: false,\n      output: ['media'],\n      multiturn: false,\n      systemRole: false,\n      tools: false,\n    },\n  },\n  configSchema: DallE3ConfigSchema,\n});\n\nfunction toDallE3Request(\n  request: GenerateRequest<typeof DallE3ConfigSchema>\n): ImageGenerateParams {\n  const options = {\n    model: 'dall-e-3',\n    prompt: new Message(request.messages[0]).text,\n    n: request.candidates || 1,\n    size: request.config?.size,\n    style: request.config?.style,\n    user: request.config?.user,\n    quality: request.config?.quality,\n    response_format: request.config?.response_format || 'b64_json',\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 candidates: GenerateResponseData['candidates'] = result.data.map(\n    (image, index) => ({\n      index: index,\n      finishReason: 'stop',\n      custom: { revisedPrompt: image.revised_prompt },\n      message: {\n        role: 'model',\n        content: [\n          {\n            media: {\n              contentType: 'image/png',\n              url: image.url || `data:image/png;base64,${image.b64_json}`,\n            },\n          },\n        ],\n      },\n    })\n  );\n  return { candidates };\n}\n\nexport function dallE3Model(\n  ai: Genkit,\n  client: OpenAI\n): ModelAction<typeof DallE3ConfigSchema> {\n  return ai.defineModel<typeof DallE3ConfigSchema>(\n    {\n      name: dallE3.name,\n      ...dallE3.info,\n      configSchema: dallE3.configSchema,\n    },\n    async (request) => {\n      const result = await client.images.generate(toDallE3Request(request));\n      return toGenerateResponse(result);\n    }\n  );\n}\n"],"mappings":";;;;;AAgBA,SAAS,8BAA8B,SAAS,SAAS;AAEzD,SAAS,gBAAgB;AAOlB,MAAM,qBAAqB,6BAA6B,OAAO;AAAA,EACpE,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,SAAS,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,SAAS;AAAA,EAC7C,iBAAiB,EAAE,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,SAAS;AACxD,CAAC;AAEM,MAAM,SAAS,SAAS;AAAA,EAC7B,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,MACR,OAAO;AAAA,MACP,QAAQ,CAAC,OAAO;AAAA,MAChB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,cAAc;AAChB,CAAC;AAED,SAAS,gBACP,SACqB;AAlDvB;AAmDE,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,QAAQ,IAAI,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE;AAAA,IACzC,GAAG,QAAQ,cAAc;AAAA,IACzB,OAAM,aAAQ,WAAR,mBAAgB;AAAA,IACtB,QAAO,aAAQ,WAAR,mBAAgB;AAAA,IACvB,OAAM,aAAQ,WAAR,mBAAgB;AAAA,IACtB,UAAS,aAAQ,WAAR,mBAAgB;AAAA,IACzB,mBAAiB,aAAQ,WAAR,mBAAgB,oBAAmB;AAAA,EACtD;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,aAAiD,OAAO,KAAK;AAAA,IACjE,CAAC,OAAO,WAAW;AAAA,MACjB;AAAA,MACA,cAAc;AAAA,MACd,QAAQ,EAAE,eAAe,MAAM,eAAe;AAAA,MAC9C,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,OAAO;AAAA,cACL,aAAa;AAAA,cACb,KAAK,MAAM,OAAO,yBAAyB,MAAM,QAAQ;AAAA,YAC3D;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,WAAW;AACtB;AAEO,SAAS,YACd,IACA,QACwC;AACxC,SAAO,GAAG;AAAA,IACR;AAAA,MACE,MAAM,OAAO;AAAA,OACV,OAAO,OAFZ;AAAA,MAGE,cAAc,OAAO;AAAA,IACvB;AAAA,IACA,CAAO,YAAY;AACjB,YAAM,SAAS,MAAM,OAAO,OAAO,SAAS,gBAAgB,OAAO,CAAC;AACpE,aAAO,mBAAmB,MAAM;AAAA,IAClC;AAAA,EACF;AACF;","names":[]}