{"version":3,"sources":["../src/gpt.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 { GenerationCommonConfigSchema, Message, z } from \"genkit\";\nimport type {\n  GenerateRequest,\n  Genkit,\n  MessageData,\n  Part,\n  Role,\n  StreamingCallback,\n  ToolRequestPart,\n} from \"genkit\";\nimport {\n  CandidateData,\n  GenerateResponseChunkData,\n  modelRef,\n  ToolDefinition,\n} from \"genkit/model\";\nimport { AzureOpenAI } from \"openai\";\nimport {\n  type ChatCompletion,\n  type ChatCompletionChunk,\n  type ChatCompletionContentPart,\n  type ChatCompletionCreateParamsNonStreaming,\n  type ChatCompletionMessageParam,\n  type ChatCompletionMessageToolCall,\n  type ChatCompletionRole,\n  type ChatCompletionTool,\n  type CompletionChoice,\n} from \"openai/resources/index\";\n\ntype VisualDetailLevel = \"low\" | \"auto\" | \"high\";\n\nconst MODELS_SUPPORTING_OPENAI_RESPONSE_FORMAT = [\n  \"gpt-4\",\n  \"gpt-4-32k\",\n  \"gpt-4o\",\n  \"gpt-4o-mini\",\n  \"gpt-o1\",\n  \"gpt-o1-mini\",\n  \"gpt-o1-preview\",\n  \"gpt-3.5-turbo\",\n  \"gpt-3.5-turbo-instruct\",\n  \"gpt-3.5-turbo-26k\",\n  \"gpt-4.5\",\n  \"gpt-4.1-mini\",\n  \"gpt-4.1-nano\",\n  \"gpt-4.1\",\n  \"gpt-5\",\n  \"gpt-5-mini\",\n  \"gpt-5-nano\",\n  \"gpt-5-chat\",\n  \"gpt-5-codex\",\n  \"gpt-5-pro\",\n  \"gpt-5.1\",\n  \"gpt-5.1-chat\",\n  \"gpt-5.1-codex\",\n  \"gpt-5.1-codex-mini\",\n  \"gpt-5.1-codex-max\",\n  \"gpt-5.2\",\n  \"gpt-5.2-chat\",\n  \"gpt-5.2-codex\",\n  \"gpt-oss-120b\",\n  \"gpt-oss-20b\",\n  \"o3\",\n  \"o3-mini\",\n  \"o3-pro\",\n  \"o4-mini\",\n  \"o1\",\n  \"o1-mini\",\n  \"o1-preview\",\n  \"codex-mini\",\n];\n\nexport const OpenAiConfigSchema = GenerationCommonConfigSchema.extend({\n  frequencyPenalty: z.number().min(-2).max(2).optional(),\n  logitBias: z.record(z.string(), z.number().min(-100).max(100)).optional(),\n  logProbs: z.boolean().optional(),\n  presencePenalty: z.number().min(-2).max(2).optional(),\n  seed: z.number().int().optional(),\n  topLogProbs: z.number().int().min(0).max(20).optional(),\n  user: z.string().optional(),\n  visualDetailLevel: z.enum([\"auto\", \"low\", \"high\"]).optional(),\n});\n\nexport const gpt4o = modelRef({\n  name: \"azure-openai/gpt-4o\",\n  info: {\n    versions: [\"gpt-4o\"],\n    label: \"OpenAI - GPT-4o\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt4oMini = modelRef({\n  name: \"azure-openai/gpt-4o-mini\",\n  info: {\n    versions: [\"gpt-4o-mini\"],\n    label: \"OpenAI - GPT-4o Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt4 = modelRef({\n  name: \"azure-openai/gpt-4\",\n  info: {\n    versions: [\"gpt-4\", \"gpt-4-32k\"],\n    label: \"OpenAI - GPT-4\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt45 = modelRef({\n  name: \"azure-openai/gpt-4.5\",\n  info: {\n    versions: [\"gpt-4.5-preview\"],\n    label: \"OpenAI - GPT-4.5\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5 = modelRef({\n  name: \"azure-openai/gpt-5\",\n  info: {\n    versions: [\"gpt-5\"],\n    label: \"OpenAI - GPT-5\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5Mini = modelRef({\n  name: \"azure-openai/gpt-5-mini\",\n  info: {\n    versions: [\"gpt-5-mini\"],\n    label: \"OpenAI - GPT-5 Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5Nano = modelRef({\n  name: \"azure-openai/gpt-5-nano\",\n  info: {\n    versions: [\"gpt-5-nano\"],\n    label: \"OpenAI - GPT-5 Nano\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5Chat = modelRef({\n  name: \"azure-openai/gpt-5-chat\",\n  info: {\n    versions: [\"gpt-5-chat\"],\n    label: \"OpenAI - GPT-5 Chat\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5Codex = modelRef({\n  name: \"azure-openai/gpt-5-codex\",\n  info: {\n    versions: [\"gpt-5-codex\"],\n    label: \"OpenAI - GPT-5 Codex\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt5Pro = modelRef({\n  name: \"azure-openai/gpt-5-pro\",\n  info: {\n    versions: [\"gpt-5-pro\"],\n    label: \"OpenAI - GPT-5 Pro\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt51 = modelRef({\n  name: \"azure-openai/gpt-5.1\",\n  info: {\n    versions: [\"gpt-5.1\"],\n    label: \"OpenAI - GPT-5.1\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt51Chat = modelRef({\n  name: \"azure-openai/gpt-5.1-chat\",\n  info: {\n    versions: [\"gpt-5.1-chat\"],\n    label: \"OpenAI - GPT-5.1 Chat\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt51Codex = modelRef({\n  name: \"azure-openai/gpt-5.1-codex\",\n  info: {\n    versions: [\"gpt-5.1-codex\"],\n    label: \"OpenAI - GPT-5.1 Codex\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt51CodexMini = modelRef({\n  name: \"azure-openai/gpt-5.1-codex-mini\",\n  info: {\n    versions: [\"gpt-5.1-codex-mini\"],\n    label: \"OpenAI - GPT-5.1 Codex Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt51CodexMax = modelRef({\n  name: \"azure-openai/gpt-5.1-codex-max\",\n  info: {\n    versions: [\"gpt-5.1-codex-max\"],\n    label: \"OpenAI - GPT-5.1 Codex Max\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt52 = modelRef({\n  name: \"azure-openai/gpt-5.2\",\n  info: {\n    versions: [\"gpt-5.2\"],\n    label: \"OpenAI - GPT-5.2\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt52Chat = modelRef({\n  name: \"azure-openai/gpt-5.2-chat\",\n  info: {\n    versions: [\"gpt-5.2-chat\"],\n    label: \"OpenAI - GPT-5.2 Chat\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt52Codex = modelRef({\n  name: \"azure-openai/gpt-5.2-codex\",\n  info: {\n    versions: [\"gpt-5.2-codex\"],\n    label: \"OpenAI - GPT-5.2 Codex\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gptOss120b = modelRef({\n  name: \"azure-openai/gpt-oss-120b\",\n  info: {\n    versions: [\"gpt-oss-120b\"],\n    label: \"OpenAI - GPT-OSS 120B\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gptOss20b = modelRef({\n  name: \"azure-openai/gpt-oss-20b\",\n  info: {\n    versions: [\"gpt-oss-20b\"],\n    label: \"OpenAI - GPT-OSS 20B\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt41 = modelRef({\n  name: \"azure-openai/gpt-4.1\",\n  info: {\n    versions: [\"gpt-4.1\"],\n    label: \"OpenAI - GPT-4.1\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt41Mini = modelRef({\n  name: \"azure-openai/gpt-4.1-mini\",\n  info: {\n    versions: [\"gpt-4.1-mini\"],\n    label: \"OpenAI - GPT-4.1 Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt41Nano = modelRef({\n  name: \"azure-openai/gpt-4.1-nano\",\n  info: {\n    versions: [\"gpt-4.1-nano\"],\n    label: \"OpenAI - GPT-4.1 Nano\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\", \"json\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o1 = modelRef({\n  name: \"azure-openai/o1\",\n  info: {\n    versions: [\"o1\"],\n    label: \"OpenAI - o1\",\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o1Mini = modelRef({\n  name: \"azure-openai/o1-mini\",\n  info: {\n    versions: [\"o1-mini\"],\n    label: \"OpenAI - o1 Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o1Preview = modelRef({\n  name: \"azure-openai/o1-preview\",\n  info: {\n    versions: [\"o1-preview\"],\n    label: \"OpenAI - o1 Preview\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o3 = modelRef({\n  name: \"azure-openai/o3\",\n  info: {\n    versions: [\"o3\"],\n    label: \"OpenAI - o3\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o4Mini = modelRef({\n  name: \"azure-openai/o4-mini\",\n  info: {\n    versions: [\"o4-mini\"],\n    label: \"OpenAI - o4 Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o3Mini = modelRef({\n  name: \"azure-openai/o3-mini\",\n  info: {\n    versions: [\"o3-mini\"],\n    label: \"OpenAI - o3 Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const o3Pro = modelRef({\n  name: \"azure-openai/o3-pro\",\n  info: {\n    versions: [\"o3-pro\"],\n    label: \"OpenAI - o3 Pro\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const codexMini = modelRef({\n  name: \"azure-openai/codex-mini\",\n  info: {\n    versions: [\"codex-mini\"],\n    label: \"OpenAI - Codex Mini\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: true,\n      systemRole: true,\n      output: [\"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const gpt35Turbo = modelRef({\n  name: \"azure-openai/gpt-3.5-turbo\",\n  info: {\n    versions: [\"gpt-3.5-turbo\", \"gpt-35-turbo-instruct\", \"gpt-35-turbo-16k\"],\n    label: \"OpenAI - GPT-3.5 Turbo\",\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: [\"json\", \"text\"],\n    },\n  },\n  configSchema: OpenAiConfigSchema,\n});\n\nexport const SUPPORTED_GPT_MODELS = {\n  \"o1-mini\": o1Mini,\n  \"o1-preview\": o1Preview,\n  o1: o1,\n  o3: o3,\n  \"o3-mini\": o3Mini,\n  \"o3-pro\": o3Pro,\n  \"o4-mini\": o4Mini,\n  \"codex-mini\": codexMini,\n  \"gpt-4.1\": gpt41,\n  \"gpt-4.1-mini\": gpt41Mini,\n  \"gpt-4.1-nano\": gpt41Nano,\n  \"gpt-4\": gpt4,\n  \"gpt-4o\": gpt4o,\n  \"gpt-4o-mini\": gpt4oMini,\n  \"gpt-4.5\": gpt45,\n  \"gpt-5\": gpt5,\n  \"gpt-5-mini\": gpt5Mini,\n  \"gpt-5-nano\": gpt5Nano,\n  \"gpt-5-chat\": gpt5Chat,\n  \"gpt-5-codex\": gpt5Codex,\n  \"gpt-5-pro\": gpt5Pro,\n  \"gpt-5.1\": gpt51,\n  \"gpt-5.1-chat\": gpt51Chat,\n  \"gpt-5.1-codex\": gpt51Codex,\n  \"gpt-5.1-codex-mini\": gpt51CodexMini,\n  \"gpt-5.1-codex-max\": gpt51CodexMax,\n  \"gpt-5.2\": gpt52,\n  \"gpt-5.2-chat\": gpt52Chat,\n  \"gpt-5.2-codex\": gpt52Codex,\n  \"gpt-oss-120b\": gptOss120b,\n  \"gpt-oss-20b\": gptOss20b,\n  \"gpt-3.5-turbo\": gpt35Turbo,\n};\n\nfunction toOpenAIRole(role: Role): ChatCompletionRole {\n  switch (role) {\n    case \"user\":\n      return \"user\";\n    case \"model\":\n      return \"assistant\";\n    case \"system\":\n      return \"system\";\n    case \"tool\":\n      return \"tool\";\n    default:\n      throw new Error(`role ${role} doesn't map to an OpenAI role.`);\n  }\n}\n\nfunction toOpenAiTool(tool: ToolDefinition): ChatCompletionTool {\n  let parameters;\n  if (tool.inputSchema !== null) {\n    if (typeof tool.inputSchema === \"string\") {\n      try {\n        parameters = JSON.parse(tool.inputSchema);\n      } catch (error) {\n        const errorMessage =\n          error instanceof Error ? error.message : \"Unknown parsing error\";\n        throw new Error(\n          `Invalid JSON schema for function '${tool.name}': ${errorMessage}`,\n        );\n      }\n    } else {\n      parameters = tool.inputSchema;\n    }\n\n    parameters.type = \"object\";\n    parameters.properties = {\n      ...tool.inputSchema!.properties,\n    };\n  }\n\n  return {\n    type: \"function\",\n    function: {\n      name: tool.name,\n      parameters: parameters,\n    },\n  };\n}\n\nexport function toOpenAiTextAndMedia(\n  part: Part,\n  visualDetailLevel: VisualDetailLevel,\n): ChatCompletionContentPart {\n  if (part.text) {\n    return {\n      type: \"text\",\n      text: part.text,\n    };\n  } else if (part.media) {\n    return {\n      type: \"image_url\",\n      image_url: {\n        url: part.media.url,\n        detail: visualDetailLevel,\n      },\n    };\n  }\n  throw Error(\n    `Unsupported genkit part fields encountered for current message role: ${part}.`,\n  );\n}\n\nexport function toOpenAiMessages(\n  messages: MessageData[],\n  visualDetailLevel: VisualDetailLevel = \"auto\",\n): ChatCompletionMessageParam[] {\n  const openAiMsgs: ChatCompletionMessageParam[] = [];\n  for (const message of messages) {\n    const msg = new Message(message);\n    const role = toOpenAIRole(message.role);\n    switch (role) {\n      case \"user\":\n        openAiMsgs.push({\n          role: role,\n          content: msg.content.map((part) =>\n            toOpenAiTextAndMedia(part, visualDetailLevel),\n          ),\n        });\n        break;\n      case \"system\":\n        openAiMsgs.push({\n          role: role,\n          content: msg.text,\n        });\n        break;\n      case \"assistant\": {\n        const toolCalls: ChatCompletionMessageToolCall[] = msg.content\n          .filter((part) => part.toolRequest)\n          .map((part) => {\n            if (!part.toolRequest) {\n              throw Error(\n                \"Mapping genkit message to openai tool call content part but message.toolRequest not provided.\",\n              );\n            }\n            return {\n              id: part.toolRequest.ref || \"\",\n              type: \"function\",\n              function: {\n                name: part.toolRequest.name,\n                arguments: JSON.stringify(part.toolRequest.input),\n              },\n            };\n          });\n        if (toolCalls?.length > 0) {\n          openAiMsgs.push({\n            role: role,\n            tool_calls: toolCalls,\n          });\n        } else {\n          openAiMsgs.push({\n            role: role,\n            content: msg.text,\n          });\n        }\n        break;\n      }\n      case \"tool\": {\n        const toolResponseParts = msg.toolResponseParts();\n        toolResponseParts.map((part) => {\n          openAiMsgs.push({\n            role: role,\n            tool_call_id: part.toolResponse.ref || \"\",\n            content:\n              typeof part.toolResponse.output === \"string\"\n                ? part.toolResponse.output\n                : JSON.stringify(part.toolResponse.output),\n          });\n        });\n        break;\n      }\n      default: {\n        throw new Error(\"unrecognized role\");\n      }\n    }\n  }\n  return openAiMsgs;\n}\n\nconst finishReasonMap: Record<\n  // OpenAI Node SDK doesn't support tool_call in the enum, but it is returned from the API\n  CompletionChoice[\"finish_reason\"] | \"tool_calls\" | \"function_call\",\n  CandidateData[\"finishReason\"]\n> = {\n  length: \"length\",\n  stop: \"stop\",\n  tool_calls: \"stop\",\n  content_filter: \"blocked\",\n  function_call: \"stop\",\n};\n\nfunction fromOpenAiToolCall(\n  toolCall:\n    | ChatCompletionMessageToolCall\n    | ChatCompletionChunk.Choice.Delta.ToolCall,\n  choice: ChatCompletion.Choice | ChatCompletionChunk.Choice,\n) {\n  // Check if this is a function tool call (not custom)\n  if (\n    !(\n      \"function\" in toolCall &&\n      toolCall.function &&\n      typeof toolCall.function === \"object\"\n    )\n  ) {\n    throw Error(\n      `Unexpected openAI chunk choice. tool_calls was provided but one or more tool_calls is missing function property.`,\n    );\n  }\n  const f = toolCall.function;\n  if (choice.finish_reason === \"tool_calls\") {\n    return {\n      toolRequest: {\n        name: f.name,\n        ref: toolCall.id,\n        input: f.arguments ? JSON.parse(f.arguments) : f.arguments,\n      },\n    };\n  } else {\n    return {\n      toolRequest: {\n        name: f.name,\n        ref: toolCall.id,\n        input: \"\",\n      },\n    };\n  }\n}\n\nfunction fromOpenAiChoice(\n  choice: ChatCompletion[\"choices\"][0],\n  jsonMode = false,\n): CandidateData {\n  const toolRequestParts = choice.message.tool_calls?.map(\n    (toolCall: ChatCompletionMessageToolCall) =>\n      fromOpenAiToolCall(toolCall, choice),\n  );\n  return {\n    index: choice.index,\n    finishReason: finishReasonMap[choice.finish_reason] || \"other\",\n    message: {\n      role: \"model\",\n      content: toolRequestParts\n        ? // Note: Not sure why I have to cast here exactly.\n          // Otherwise it thinks toolRequest must be 'undefined' if provided\n          (toolRequestParts as ToolRequestPart[])\n        : [\n            jsonMode\n              ? { data: JSON.parse(choice.message.content!) }\n              : { text: choice.message.content! },\n          ],\n    },\n    custom: {},\n  };\n}\n\nfunction fromOpenAiChunkChoice(\n  choice: ChatCompletionChunk[\"choices\"][0],\n  jsonMode = false,\n): CandidateData {\n  const toolRequestParts = choice.delta.tool_calls?.map((toolCall) =>\n    fromOpenAiToolCall(toolCall as ChatCompletionMessageToolCall, choice),\n  );\n  return {\n    index: choice.index,\n    finishReason: choice.finish_reason\n      ? finishReasonMap[choice.finish_reason] || \"other\"\n      : \"unknown\",\n    message: {\n      role: \"model\",\n      content: toolRequestParts\n        ? // Note: Not sure why I have to cast here exactly.\n          // Otherwise it thinks toolRequest must be 'undefined' if provided\n          (toolRequestParts as ToolRequestPart[])\n        : [\n            jsonMode\n              ? { data: JSON.parse(choice.delta.content!) }\n              : { text: choice.delta.content! },\n          ],\n    },\n    custom: {},\n  };\n}\n\nexport function toOpenAiRequestBody(\n  modelName: string,\n  request: GenerateRequest,\n) {\n  type JsonValue =\n    | string\n    | number\n    | boolean\n    | null\n    | JsonValue[]\n    | { [key: string]: JsonValue };\n  const mapToSnakeCase = <T extends Record<string, JsonValue>>(\n    obj: T,\n  ): Record<string, JsonValue> => {\n    return Object.entries(obj).reduce(\n      (acc: Record<string, JsonValue>, [key, value]) => {\n        const snakeCaseKey = key.replace(\n          /[A-Z]/g,\n          (letter) => `_${letter.toLowerCase()}`,\n        );\n        acc[snakeCaseKey] = value;\n        return acc;\n      },\n      {},\n    );\n  };\n  const model =\n    SUPPORTED_GPT_MODELS[modelName as keyof typeof SUPPORTED_GPT_MODELS];\n  if (!model) throw new Error(`Unsupported model: ${modelName}`);\n  const openAiMessages = toOpenAiMessages(\n    request.messages,\n    request.config?.visualDetailLevel,\n  );\n  const mappedModelName = request.config?.version || modelName;\n  const body = {\n    messages: openAiMessages,\n    tools: request.tools?.map(toOpenAiTool),\n    model: mappedModelName,\n    max_tokens: request.config?.maxOutputTokens,\n    temperature: request.config?.temperature,\n    top_p: request.config?.topP,\n    n: request.candidates,\n    stop: request.config?.stopSequences,\n    ...mapToSnakeCase(request.config?.custom || {}),\n  } as ChatCompletionCreateParamsNonStreaming;\n\n  const response_format = request.output?.format;\n  if (\n    response_format &&\n    MODELS_SUPPORTING_OPENAI_RESPONSE_FORMAT.includes(mappedModelName)\n  ) {\n    if (\n      response_format === \"json\" &&\n      model.info?.supports?.output?.includes(\"json\")\n    ) {\n      body.response_format = {\n        type: \"json_object\",\n      };\n    } else if (\n      response_format === \"text\" &&\n      model.info?.supports?.output?.includes(\"text\")\n    ) {\n      body.response_format = {\n        type: \"text\",\n      };\n    } else {\n      throw new Error(\n        `${response_format} format is not supported for GPT models currently`,\n      );\n    }\n  }\n  for (const key in body) {\n    const typedKey = key as keyof typeof body;\n    if (\n      !body[typedKey] ||\n      (Array.isArray(body[typedKey]) &&\n        !(body[typedKey] as Array<unknown>).length)\n    )\n      delete body[typedKey];\n  }\n  return body;\n}\n\n/**\n *\n */\nexport function gptModel(ai: Genkit, name: string, client: AzureOpenAI) {\n  const modelId = `azure-openai/${name}`;\n  const model = SUPPORTED_GPT_MODELS[name as keyof typeof SUPPORTED_GPT_MODELS];\n  if (!model) throw new Error(`Unsupported model: ${name}`);\n\n  return ai.defineModel(\n    {\n      name: modelId,\n      ...model.info,\n      configSchema:\n        SUPPORTED_GPT_MODELS[name as keyof typeof SUPPORTED_GPT_MODELS]\n          .configSchema,\n    },\n    async (\n      request,\n      streamingCallback?: StreamingCallback<GenerateResponseChunkData>,\n    ) => {\n      let response: ChatCompletion;\n      const body = toOpenAiRequestBody(name, request);\n      if (streamingCallback) {\n        const stream = client.chat.completions.stream({\n          ...body,\n          stream: true,\n          stream_options: {\n            include_usage: true,\n          },\n        });\n        for await (const chunk of stream) {\n          chunk.choices?.forEach((chunk) => {\n            const c = fromOpenAiChunkChoice(chunk);\n            streamingCallback({\n              index: c.index,\n              content: c.message.content,\n            });\n          });\n        }\n        response = await stream.finalChatCompletion();\n      } else {\n        response = await client.chat.completions.create(body);\n      }\n      return {\n        candidates: response.choices.map((c: ChatCompletion[\"choices\"][0]) =>\n          fromOpenAiChoice(c, request.output?.format === \"json\"),\n        ),\n        usage: {\n          inputTokens: response.usage?.prompt_tokens,\n          outputTokens: response.usage?.completion_tokens,\n          totalTokens: response.usage?.total_tokens,\n        },\n        custom: response,\n      };\n    },\n  );\n}\n"],"mappings":"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","names":["chunk"]}