UNPKG

@langchain/openai

Version:
1 lines 10.5 kB
{"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":";;;;AAeA,MAAa,gBAAgB;CAC3B,cAAc;CACd,kBAAkB;CAClB,gBAAgB;CAChB,gBAAgB;CAChB,qBAAqB;CACrB,uBAAuB;CACvB,qBAAqB;CACrB,8BAA8B;CAC/B;AAED,MAAa,gBAAgB,EAC3B,mBAAmB,wBACpB;AAED,MAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAWD,SAAgB,yBACd,eACA,WAImC;AACnC,KAAI,OAAO,kBAAkB,SAC3B,QAAO;EACL,OAAO;EACP,gBAAgB;EAChB,8BAA8B;EAC9B,GAAI,aAAa,EAAE;EACpB;AAEH,KAAI,iBAAiB,KACnB,QAAO;AAET,QAAO;;AAGT,SAAgB,sBAEd,QACA;AACA,MAAK,oBACH,QAAQ,sBACP,OAAO,QAAQ,iBAAiB,WAC7B,QAAQ,eACR,KAAA,OACH,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,KAAA,OAAA,GAAA,0BAAA,wBAChC,uBAAuB;AAEhD,MAAK,6BACH,QAAQ,+BAAA,GAAA,0BAAA,wBACe,iCAAiC;AAE1D,MAAK,+BACH,QAAQ,gCACR,QAAQ,mBAAA,GAAA,0BAAA,wBACe,mCAAmC;AAE5D,MAAK,wBACH,QAAQ,yBACR,QAAQ,qBAAA,GAAA,0BAAA,wBACe,2BAA2B;AAEpD,MAAK,sBACH,QAAQ,wBAAA,GAAA,0BAAA,wBACe,yBAAyB;AAElD,MAAK,sBACH,QAAQ,wBAAA,GAAA,0BAAA,wBACe,wBAAwB;AAEjD,MAAK,uBAAuB,QAAQ;AAEpC,KAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,UAAU,CAAC,KAAK,qBACnD,OAAM,IAAI,MAAM,mDAAmD;;AAIvE,SAAgB,uBAEd,SAC0B;AAC1B,KAAI,CAAC,KAAK,QAAQ;EAChB,MAAM,uBAA6C;GACjD,8BAA8B,KAAK;GACnC,4BAA4B,KAAK;GACjC,mBAAmB,KAAK;GACxB,qBAAqB,KAAK;GAC1B,sBAAsB,KAAK;GAC3B,SAAS,KAAK,aAAa;GAC3B,qBAAqB,KAAK;GAC3B;EAED,MAAM,WAAWA,cAAAA,YAAY,qBAAqB;EAElD,MAAM,EAAE,QAAQ,gBAAgB,GAAG,qBAAqB,KAAK;EAC7D,MAAM,SAA8D;GAClE,GAAG;GACH,SAAS;GACT,SAAS,KAAK;GACd,YAAY;GACb;AAED,MAAI,CAAC,KAAK,qBACR,QAAO,SAAS,qBAAqB;AAGvC,MAAI,CAAC,OAAO,QACV,QAAO,OAAO;AAGhB,SAAO,iBAAiBC,cAAAA,wBACtB,OAAO,gBACP,MACA,QACD;AAED,OAAK,SAAS,IAAIC,OAAAA,YAAkB;GAClC,YAAY,KAAK;GACjB,sBAAsB,KAAK;GAC3B,YAAY,KAAK;GACjB,GAAG;GACJ,CAAC;;CAEJ,MAAM,iBAAiB;EACrB,GAAG,KAAK;EACR,GAAG;EACJ;AACD,KAAI,KAAK,mBAAmB;AAC1B,iBAAe,UAAU;GACvB,WAAW,KAAK;GAChB,GAAG,eAAe;GACnB;AACD,iBAAe,QAAQ;GACrB,eAAe,KAAK;GACpB,GAAG,eAAe;GACnB;;AAEH,QAAO;;AAGT,SAAgB,oBAEd,OACA;CACA,MAAM,OAAO;CAEb,SAAS,SAAS,KAA8C;AAC9D,SAAO,OAAO,QAAQ,YAAY,OAAO;;AAG3C,KAAI,SAAS,KAAK,IAAI,SAAS,KAAK,OAAO,EAAE;AAC3C,SAAO,KAAK,OAAO;AACnB,SAAO,KAAK,OAAO;AACnB,SAAO,KAAK,OAAO;AACnB,SAAO,KAAK,OAAO;AACnB,SAAO,KAAK,OAAO;AAEnB,MAAI,CAAC,KAAK,OAAO,kBAAkB,KAAK,oBACtC,MAAK,OAAO,iBAAiB,KAAK;AAEpC,MAAI,CAAC,KAAK,OAAO,kBAAkB,KAAK,qBAAqB;GAC3D,MAAM,QAAQ,KAAK,oBAAoB,MAAM,uBAAuB;AACpE,OAAI,MAAM,WAAW,KAAK,MAAM,GAAG,WAAW,OAAO,EAAE;IACrD,MAAM,CAAC,YAAY;AACnB,SAAK,OAAO,iBAAiB;;;AAGjC,MAAI,CAAC,KAAK,OAAO,kBAAkB,KAAK,2BACtC,MAAK,OAAO,iBAAiB,WAAW,KAAK,2BAA2B;AAE1E,MAAI,CAAC,KAAK,OAAO,mBAAmB,KAAK,6BACvC,MAAK,OAAO,kBAAkB,KAAK;AAErC,MAAI,CAAC,KAAK,OAAO,mBAAmB,KAAK,qBAAqB;GAC5D,MAAM,QAAQ,KAAK,oBAAoB,MAAM,uBAAuB;AACpE,OAAI,MAAM,WAAW,GAAG;IACtB,MAAM,GAAG,cAAc;AACvB,SAAK,OAAO,kBAAkB;;;AAIlC,MACE,KAAK,OAAO,kBACZ,KAAK,OAAO,mBACZ,KAAK,OAAO,gBAEZ,QAAO,KAAK,OAAO;AAErB,MACE,KAAK,OAAO,kCACZ,KAAK,OAAO,eAEZ,QAAO,KAAK,OAAO;;AAIvB,QAAO"}