{"version":3,"file":"common.cjs","names":["getEndpoint","getHeadersWithUserAgent","AzureOpenAIClient"],"sources":["../../../src/azure/chat_models/common.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient, type ClientOptions } from \"openai\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport type { Serialized } from \"@langchain/core/load/serializable\";\nimport { ChatOpenAICallOptions } from \"../../chat_models/index.js\";\nimport {\n  OpenAIEndpointConfig,\n  getEndpoint,\n  getHeadersWithUserAgent,\n} from \"../../utils/azure.js\";\nimport { AzureOpenAIChatInput, OpenAICoreRequestOptions } from \"../../types.js\";\nimport {\n  BaseChatOpenAI,\n  BaseChatOpenAIFields,\n} from \"../../chat_models/base.js\";\n\nexport const AZURE_ALIASES = {\n  openAIApiKey: \"openai_api_key\",\n  openAIApiVersion: \"openai_api_version\",\n  openAIBasePath: \"openai_api_base\",\n  deploymentName: \"deployment_name\",\n  azureOpenAIEndpoint: \"azure_endpoint\",\n  azureOpenAIApiVersion: \"openai_api_version\",\n  azureOpenAIBasePath: \"openai_api_base\",\n  azureOpenAIApiDeploymentName: \"deployment_name\",\n};\n\nexport const AZURE_SECRETS = {\n  azureOpenAIApiKey: \"AZURE_OPENAI_API_KEY\",\n};\n\nexport const AZURE_SERIALIZABLE_KEYS = [\n  \"azureOpenAIApiKey\",\n  \"azureOpenAIApiVersion\",\n  \"azureOpenAIBasePath\",\n  \"azureOpenAIEndpoint\",\n  \"azureOpenAIApiInstanceName\",\n  \"azureOpenAIApiDeploymentName\",\n  \"deploymentName\",\n  \"openAIApiKey\",\n  \"openAIApiVersion\",\n];\n\nexport interface AzureChatOpenAIFields\n  extends BaseChatOpenAIFields, Partial<AzureOpenAIChatInput> {\n  /**\n   * Whether to use the responses API for all requests. If `false` the responses API will be used\n   * only when required in order to fulfill the request.\n   */\n  useResponsesApi?: boolean;\n}\n\nexport function getAzureChatOpenAIParams(\n  modelOrFields?: string | AzureChatOpenAIFields,\n  fieldsArg?: Omit<\n    AzureChatOpenAIFields,\n    \"deploymentName\" | \"azureOpenAIApiDeploymentName\" | \"model\"\n  >\n): AzureChatOpenAIFields | undefined {\n  if (typeof modelOrFields === \"string\") {\n    return {\n      model: modelOrFields,\n      deploymentName: modelOrFields,\n      azureOpenAIApiDeploymentName: modelOrFields,\n      ...(fieldsArg ?? {}),\n    };\n  }\n  if (modelOrFields == null) {\n    return fieldsArg as AzureChatOpenAIFields | undefined;\n  }\n  return modelOrFields;\n}\n\nexport function _constructAzureFields(\n  this: Partial<AzureOpenAIChatInput>,\n  fields?: AzureChatOpenAIFields\n) {\n  this.azureOpenAIApiKey =\n    fields?.azureOpenAIApiKey ??\n    (typeof fields?.openAIApiKey === \"string\"\n      ? fields?.openAIApiKey\n      : undefined) ??\n    (typeof fields?.apiKey === \"string\" ? fields?.apiKey : undefined) ??\n    getEnvironmentVariable(\"AZURE_OPENAI_API_KEY\");\n\n  this.azureOpenAIApiInstanceName =\n    fields?.azureOpenAIApiInstanceName ??\n    getEnvironmentVariable(\"AZURE_OPENAI_API_INSTANCE_NAME\");\n\n  this.azureOpenAIApiDeploymentName =\n    fields?.azureOpenAIApiDeploymentName ??\n    fields?.deploymentName ??\n    getEnvironmentVariable(\"AZURE_OPENAI_API_DEPLOYMENT_NAME\");\n\n  this.azureOpenAIApiVersion =\n    fields?.azureOpenAIApiVersion ??\n    fields?.openAIApiVersion ??\n    getEnvironmentVariable(\"AZURE_OPENAI_API_VERSION\");\n\n  this.azureOpenAIBasePath =\n    fields?.azureOpenAIBasePath ??\n    getEnvironmentVariable(\"AZURE_OPENAI_BASE_PATH\");\n\n  this.azureOpenAIEndpoint =\n    fields?.azureOpenAIEndpoint ??\n    getEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\");\n\n  this.azureADTokenProvider = fields?.azureADTokenProvider;\n\n  if (!this.azureOpenAIApiKey && !this.apiKey && !this.azureADTokenProvider) {\n    throw new Error(\"Azure OpenAI API key or Token Provider not found\");\n  }\n}\n\nexport function _getAzureClientOptions(\n  this: BaseChatOpenAI<ChatOpenAICallOptions> & Partial<AzureOpenAIChatInput>,\n  options: OpenAICoreRequestOptions | undefined\n): OpenAICoreRequestOptions {\n  if (!this.client) {\n    const openAIEndpointConfig: OpenAIEndpointConfig = {\n      azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n      azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n      azureOpenAIApiKey: this.azureOpenAIApiKey,\n      azureOpenAIBasePath: this.azureOpenAIBasePath,\n      azureADTokenProvider: this.azureADTokenProvider,\n      baseURL: this.clientConfig.baseURL,\n      azureOpenAIEndpoint: this.azureOpenAIEndpoint,\n    };\n\n    const endpoint = getEndpoint(openAIEndpointConfig);\n\n    const { apiKey: existingApiKey, ...clientConfigRest } = this.clientConfig;\n    const params: Omit<ClientOptions, \"apiKey\"> & { apiKey?: string } = {\n      ...clientConfigRest,\n      baseURL: endpoint,\n      timeout: this.timeout,\n      maxRetries: 0,\n    };\n\n    if (!this.azureADTokenProvider) {\n      params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n    }\n\n    if (!params.baseURL) {\n      delete params.baseURL;\n    }\n\n    params.defaultHeaders = getHeadersWithUserAgent(\n      params.defaultHeaders,\n      true,\n      \"2.0.0\"\n    );\n\n    this.client = new AzureOpenAIClient({\n      apiVersion: this.azureOpenAIApiVersion,\n      azureADTokenProvider: this.azureADTokenProvider,\n      deployment: this.azureOpenAIApiDeploymentName,\n      ...params,\n    });\n  }\n  const requestOptions = {\n    ...this.clientConfig,\n    ...options,\n  } as OpenAICoreRequestOptions;\n  if (this.azureOpenAIApiKey) {\n    requestOptions.headers = {\n      \"api-key\": this.azureOpenAIApiKey,\n      ...requestOptions.headers,\n    };\n    requestOptions.query = {\n      \"api-version\": this.azureOpenAIApiVersion,\n      ...requestOptions.query,\n    };\n  }\n  return requestOptions;\n}\n\nexport function _serializeAzureChat(\n  this: BaseChatOpenAI<ChatOpenAICallOptions> & Partial<AzureOpenAIChatInput>,\n  input: Serialized\n) {\n  const json = input;\n\n  function isRecord(obj: unknown): obj is Record<string, unknown> {\n    return typeof obj === \"object\" && obj != null;\n  }\n\n  if (isRecord(json) && isRecord(json.kwargs)) {\n    delete json.kwargs.azure_openai_base_path;\n    delete json.kwargs.azure_openai_api_deployment_name;\n    delete json.kwargs.azure_openai_api_key;\n    delete json.kwargs.azure_openai_api_version;\n    delete json.kwargs.azure_open_ai_base_path;\n\n    if (!json.kwargs.azure_endpoint && this.azureOpenAIEndpoint) {\n      json.kwargs.azure_endpoint = this.azureOpenAIEndpoint;\n    }\n    if (!json.kwargs.azure_endpoint && this.azureOpenAIBasePath) {\n      const parts = this.azureOpenAIBasePath.split(\"/openai/deployments/\");\n      if (parts.length === 2 && parts[0].startsWith(\"http\")) {\n        const [endpoint] = parts;\n        json.kwargs.azure_endpoint = endpoint;\n      }\n    }\n    if (!json.kwargs.azure_endpoint && this.azureOpenAIApiInstanceName) {\n      json.kwargs.azure_endpoint = `https://${this.azureOpenAIApiInstanceName}.openai.azure.com/`;\n    }\n    if (!json.kwargs.deployment_name && this.azureOpenAIApiDeploymentName) {\n      json.kwargs.deployment_name = this.azureOpenAIApiDeploymentName;\n    }\n    if (!json.kwargs.deployment_name && this.azureOpenAIBasePath) {\n      const parts = this.azureOpenAIBasePath.split(\"/openai/deployments/\");\n      if (parts.length === 2) {\n        const [, deployment] = parts;\n        json.kwargs.deployment_name = deployment;\n      }\n    }\n\n    if (\n      json.kwargs.azure_endpoint &&\n      json.kwargs.deployment_name &&\n      json.kwargs.openai_api_base\n    ) {\n      delete json.kwargs.openai_api_base;\n    }\n    if (\n      json.kwargs.azure_openai_api_instance_name &&\n      json.kwargs.azure_endpoint\n    ) {\n      delete json.kwargs.azure_openai_api_instance_name;\n    }\n  }\n\n  return json;\n}\n"],"mappings":"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"}