{"version":3,"sources":["../src/dalle.ts"],"sourcesContent":["/**\n * Copyright 2026 Xavier Portilla Edo\n * Copyright 2026 Google LLC\n * Copyright 2026 Bloom Inc.\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 { GenerateRequest, GenerateResponseData, Genkit } from \"genkit\";\nimport { GenerationCommonConfigSchema, Message, z } from \"genkit\";\nimport type { ModelAction } from \"genkit/model\";\nimport { modelRef } from \"genkit/model\";\nimport AzureOpenAI from \"openai\";\nimport { ImageGenerateParams, ImagesResponse } from \"openai/resources/images\";\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: \"azure-openai/dall-e-3\",\n  info: {\n    label: \"OpenAI - DALL-E 3\",\n    supports: {\n      media: false,\n      output: [\"media\"],\n      multiturn: false,\n      tools: false,\n      systemRole: false,\n    },\n  },\n  configSchema: DallE3ConfigSchema,\n});\n\nfunction toDallE3Request(\n  request: GenerateRequest & {\n    config?: { custom?: z.infer<typeof DallE3ConfigSchema> };\n  },\n): ImageGenerateParams {\n  const options: Partial<ImageGenerateParams> = {\n    model: \"dall-e-3\",\n    prompt: new Message(request.messages[0]).text,\n    n: request.candidates || 1,\n    size: request.config?.custom?.size,\n    style: request.config?.custom?.style,\n    user: request.config?.custom?.user,\n    quality: request.config?.custom?.quality,\n    response_format: request.config?.custom?.response_format || \"b64_json\",\n  };\n  for (const k in options) {\n    if (options[k as keyof typeof options] === undefined) {\n      delete options[k as keyof typeof options];\n    }\n  }\n  return options as ImageGenerateParams;\n}\n\nfunction toGenerateResponse(result: ImagesResponse): GenerateResponseData {\n  interface ImageData {\n    url?: string;\n    b64_json?: string;\n    revised_prompt?: string;\n  }\n  const candidates: GenerateResponseData[\"candidates\"] = (\n    result.data || []\n  ).map((image: ImageData, index: number) => ({\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  return { candidates };\n}\n\nexport function dallE3Model(\n  ai: Genkit,\n  client: AzureOpenAI,\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 as ImagesResponse);\n    },\n  );\n}\n"],"mappings":"AAmBA,SAAS,8BAA8B,SAAS,SAAS;AAEzD,SAAS,gBAAgB;AAIlB,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,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,cAAc;AAChB,CAAC;AAED,SAAS,gBACP,SAGqB;AACrB,QAAM,UAAwC;AAAA,IAC5C,OAAO;AAAA,IACP,QAAQ,IAAI,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE;AAAA,IACzC,GAAG,QAAQ,cAAc;AAAA,IACzB,MAAM,QAAQ,QAAQ,QAAQ;AAAA,IAC9B,OAAO,QAAQ,QAAQ,QAAQ;AAAA,IAC/B,MAAM,QAAQ,QAAQ,QAAQ;AAAA,IAC9B,SAAS,QAAQ,QAAQ,QAAQ;AAAA,IACjC,iBAAiB,QAAQ,QAAQ,QAAQ,mBAAmB;AAAA,EAC9D;AACA,aAAW,KAAK,SAAS;AACvB,QAAI,QAAQ,CAAyB,MAAM,QAAW;AACpD,aAAO,QAAQ,CAAyB;AAAA,IAC1C;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAA8C;AAMxE,QAAM,cACJ,OAAO,QAAQ,CAAC,GAChB,IAAI,CAAC,OAAkB,WAAmB;AAAA,IAC1C;AAAA,IACA,cAAc;AAAA,IACd,QAAQ,EAAE,eAAe,MAAM,eAAe;AAAA,IAC9C,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,KAAK,MAAM,OAAO,yBAAyB,MAAM,QAAQ;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,EAAE;AACF,SAAO,EAAE,WAAW;AACtB;AAEO,SAAS,YACd,IACA,QACwC;AACxC,SAAO,GAAG;AAAA,IACR;AAAA,MACE,MAAM,OAAO;AAAA,MACb,GAAG,OAAO;AAAA,MACV,cAAc,OAAO;AAAA,IACvB;AAAA,IACA,OAAO,YAAY;AACjB,YAAM,SAAS,MAAM,OAAO,OAAO,SAAS,gBAAgB,OAAO,CAAC;AACpE,aAAO,mBAAmB,MAAwB;AAAA,IACpD;AAAA,EACF;AACF;","names":[]}