From 61dcb4d3073a74bc45020d4888d2120173b4eb22 Mon Sep 17 00:00:00 2001 From: Naosuke Yokoe Date: Sat, 19 Aug 2023 20:11:31 +0900 Subject: [PATCH] feat: Azure Cognitive Search Plugin (#815) * feat(AzureCognitiveSearchPlugin) * feat(tools/AzureCognitiveSearch.js): Add a new plugin (not structured version) * feat(tools/structured/AzureCognitiveSearch.js): Add a new plugin (structured version) * feat(tools/manifest.json, tools/index.js, tools/util/handleTools.js): Add configurations for the plugin * feat(api/package.json, package-lock.json): Installed a new package for the plugin (@azure/search-documents) * feat(.env.example): Add new environment variables for the plugin Here is the link to the corresponding discussion page: https://github.com/danny-avila/LibreChat/discussions/567 * docs(AzureCognitiveSearchPlugin) * docs(features/plugins/azure_cognitive_search.md): Add a new document for the plugin * (fix:.env.example) * reverted extra whitespaces removed by the editor * docs(mkdocs.yml) * Add the Azure Cognitive Search Plugin's documentation item to mkdocs.yml. --- .env.example | 12 ++ api/app/clients/tools/AzureCognitiveSearch.js | 111 ++++++++++++ api/app/clients/tools/index.js | 4 + api/app/clients/tools/manifest.json | 23 +++ .../tools/structured/AzureCognitiveSearch.js | 116 ++++++++++++ api/app/clients/tools/util/handleTools.js | 3 + api/package.json | 1 + .../plugins/azure_cognitive_search.md | 57 ++++++ mkdocs.yml | 17 +- package-lock.json | 166 +++++++++++++++++- 10 files changed, 498 insertions(+), 12 deletions(-) create mode 100644 api/app/clients/tools/AzureCognitiveSearch.js create mode 100644 api/app/clients/tools/structured/AzureCognitiveSearch.js create mode 100644 docs/features/plugins/azure_cognitive_search.md diff --git a/.env.example b/.env.example index 601f126b5..ee50e58d6 100644 --- a/.env.example +++ b/.env.example @@ -147,6 +147,18 @@ GOOGLE_CSE_ID= # Use "http://127.0.0.1:7860" with local install and "http://host.docker.internal:7860" for docker SD_WEBUI_URL=http://host.docker.internal:7860 +# Azure Cognitive Search +# This plugin supports searching Azure Cognitive Search for answers to your questions. +# See detailed instructions here: https://github.com/danny-avila/LibreChat/blob/main/docs/features/plugins/azure_cognitive_search.md +AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT= +AZURE_COGNITIVE_SEARCH_INDEX_NAME= +AZURE_COGNITIVE_SEARCH_API_KEY= + +AZURE_COGNITIVE_SEARCH_API_VERSION= +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE= +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP= +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT= + ########################## # PaLM (Google) Endpoint: ########################## diff --git a/api/app/clients/tools/AzureCognitiveSearch.js b/api/app/clients/tools/AzureCognitiveSearch.js new file mode 100644 index 000000000..d7c508c9f --- /dev/null +++ b/api/app/clients/tools/AzureCognitiveSearch.js @@ -0,0 +1,111 @@ +const { Tool } = require('langchain/tools'); +const { SearchClient, AzureKeyCredential } = require('@azure/search-documents'); + +class AzureCognitiveSearch extends Tool { + constructor(fields = {}) { + super(); + this.serviceEndpoint = + fields.AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT || this.getServiceEndpoint(); + this.indexName = fields.AZURE_COGNITIVE_SEARCH_INDEX_NAME || this.getIndexName(); + this.apiKey = fields.AZURE_COGNITIVE_SEARCH_API_KEY || this.getApiKey(); + + this.apiVersion = fields.AZURE_COGNITIVE_SEARCH_API_VERSION || this.getApiVersion(); + + this.queryType = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE || this.getQueryType(); + this.top = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP || this.getTop(); + this.select = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT || this.getSelect(); + + this.client = new SearchClient( + this.serviceEndpoint, + this.indexName, + new AzureKeyCredential(this.apiKey), + { + apiVersion: this.apiVersion, + }, + ); + } + + /** + * The name of the tool. + * @type {string} + */ + name = 'azure-cognitive-search'; + + /** + * A description for the agent to use + * @type {string} + */ + description = + 'Use the \'azure-cognitive-search\' tool to retrieve search results relevant to your input'; + + getServiceEndpoint() { + const serviceEndpoint = process.env.AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT || ''; + if (!serviceEndpoint) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT environment variable.'); + } + return serviceEndpoint; + } + + getIndexName() { + const indexName = process.env.AZURE_COGNITIVE_SEARCH_INDEX_NAME || ''; + if (!indexName) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_INDEX_NAME environment variable.'); + } + return indexName; + } + + getApiKey() { + const apiKey = process.env.AZURE_COGNITIVE_SEARCH_API_KEY || ''; + if (!apiKey) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_API_KEY environment variable.'); + } + return apiKey; + } + + getApiVersion() { + return process.env.AZURE_COGNITIVE_SEARCH_API_VERSION || '2020-06-30'; + } + + getQueryType() { + return process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE || 'simple'; + } + + getTop() { + if (process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP) { + return Number(process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP); + } else { + return 5; + } + } + + getSelect() { + if (process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT) { + return process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT.split(','); + } else { + return null; + } + } + + async _call(query) { + try { + const searchOption = { + queryType: this.queryType, + top: this.top, + }; + if (this.select) { + searchOption.select = this.select; + } + const searchResults = await this.client.search(query, searchOption); + const resultDocuments = []; + for await (const result of searchResults.results) { + resultDocuments.push(result.document); + } + return JSON.stringify(resultDocuments); + } catch (error) { + console.error(`Azure Cognitive Search request failed: ${error}`); + return 'There was an error with Azure Cognitive Search.'; + } + } +} + +module.exports = AzureCognitiveSearch; diff --git a/api/app/clients/tools/index.js b/api/app/clients/tools/index.js index 307a42a4a..678ee787b 100644 --- a/api/app/clients/tools/index.js +++ b/api/app/clients/tools/index.js @@ -7,6 +7,8 @@ const StableDiffusionAPI = require('./StableDiffusion'); const WolframAlphaAPI = require('./Wolfram'); const StructuredWolfram = require('./structured/Wolfram'); const SelfReflectionTool = require('./SelfReflection'); +const AzureCognitiveSearch = require('./AzureCognitiveSearch'); +const StructuredACS = require('./structured/AzureCognitiveSearch'); const availableTools = require('./manifest.json'); module.exports = { @@ -20,4 +22,6 @@ module.exports = { WolframAlphaAPI, StructuredWolfram, SelfReflectionTool, + AzureCognitiveSearch, + StructuredACS, }; diff --git a/api/app/clients/tools/manifest.json b/api/app/clients/tools/manifest.json index a2968135c..6ca7f4c4f 100644 --- a/api/app/clients/tools/manifest.json +++ b/api/app/clients/tools/manifest.json @@ -102,5 +102,28 @@ "description": "You can use Zapier with your API Key from Zapier." } ] + }, + { + "name": "Azure Cognitive Search", + "pluginKey": "azure-cognitive-search", + "description": "Use Azure Cognitive Search to find information", + "icon": "https://i.imgur.com/E7crPze.png", + "authConfig": [ + { + "authField": "AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT", + "label": "Azur Cognitive Search Endpoint", + "description": "You need to provide your Endpoint for Azure Cognitive Search." + }, + { + "authField": "AZURE_COGNITIVE_SEARCH_INDEX_NAME", + "label": "Azur Cognitive Search Index Name", + "description": "You need to provide your Index Name for Azure Cognitive Search." + }, + { + "authField": "AZURE_COGNITIVE_SEARCH_API_KEY", + "label": "Azur Cognitive Search API Key", + "description": "You need to provideq your API Key for Azure Cognitive Search." + } + ] } ] diff --git a/api/app/clients/tools/structured/AzureCognitiveSearch.js b/api/app/clients/tools/structured/AzureCognitiveSearch.js new file mode 100644 index 000000000..a94774cf9 --- /dev/null +++ b/api/app/clients/tools/structured/AzureCognitiveSearch.js @@ -0,0 +1,116 @@ +const { StructuredTool } = require('langchain/tools'); +const { z } = require('zod'); +const { SearchClient, AzureKeyCredential } = require('@azure/search-documents'); + +class AzureCognitiveSearch extends StructuredTool { + constructor(fields = {}) { + super(); + this.serviceEndpoint = + fields.AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT || this.getServiceEndpoint(); + this.indexName = fields.AZURE_COGNITIVE_SEARCH_INDEX_NAME || this.getIndexName(); + this.apiKey = fields.AZURE_COGNITIVE_SEARCH_API_KEY || this.getApiKey(); + + this.apiVersion = fields.AZURE_COGNITIVE_SEARCH_API_VERSION || this.getApiVersion(); + + this.queryType = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE || this.getQueryType(); + this.top = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP || this.getTop(); + this.select = fields.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT || this.getSelect(); + + this.client = new SearchClient( + this.serviceEndpoint, + this.indexName, + new AzureKeyCredential(this.apiKey), + { + apiVersion: this.apiVersion, + }, + ); + this.schema = z.object({ + query: z.string().describe('Search word or phrase to Azure Cognitive Search'), + }); + } + + /** + * The name of the tool. + * @type {string} + */ + name = 'azure-cognitive-search'; + + /** + * A description for the agent to use + * @type {string} + */ + description = + 'Use the \'azure-cognitive-search\' tool to retrieve search results relevant to your input'; + + getServiceEndpoint() { + const serviceEndpoint = process.env.AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT || ''; + if (!serviceEndpoint) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT environment variable.'); + } + return serviceEndpoint; + } + + getIndexName() { + const indexName = process.env.AZURE_COGNITIVE_SEARCH_INDEX_NAME || ''; + if (!indexName) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_INDEX_NAME environment variable.'); + } + return indexName; + } + + getApiKey() { + const apiKey = process.env.AZURE_COGNITIVE_SEARCH_API_KEY || ''; + if (!apiKey) { + throw new Error('Missing AZURE_COGNITIVE_SEARCH_API_KEY environment variable.'); + } + return apiKey; + } + + getApiVersion() { + return process.env.AZURE_COGNITIVE_SEARCH_API_VERSION || '2020-06-30'; + } + + getQueryType() { + return process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE || 'simple'; + } + + getTop() { + if (process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP) { + return Number(process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP); + } else { + return 5; + } + } + + getSelect() { + if (process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT) { + return process.env.AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT.split(','); + } else { + return null; + } + } + + async _call(data) { + const { query } = data; + try { + const searchOption = { + queryType: this.queryType, + top: this.top, + }; + if (this.select) { + searchOption.select = this.select; + } + const searchResults = await this.client.search(query, searchOption); + const resultDocuments = []; + for await (const result of searchResults.results) { + resultDocuments.push(result.document); + } + return JSON.stringify(resultDocuments); + } catch (error) { + console.error(`Azure Cognitive Search request failed: ${error}`); + return 'There was an error with Azure Cognitive Search.'; + } + } +} + +module.exports = AzureCognitiveSearch; diff --git a/api/app/clients/tools/util/handleTools.js b/api/app/clients/tools/util/handleTools.js index 13bf2fe18..7fe69622f 100644 --- a/api/app/clients/tools/util/handleTools.js +++ b/api/app/clients/tools/util/handleTools.js @@ -15,6 +15,8 @@ const { OpenAICreateImage, StableDiffusionAPI, StructuredSD, + AzureCognitiveSearch, + StructuredACS, } = require('../'); const { loadSpecs } = require('./loadSpecs'); @@ -78,6 +80,7 @@ const loadTools = async ({ user, model, functions = null, tools = [], options = wolfram: functions ? StructuredWolfram : WolframAlphaAPI, 'dall-e': OpenAICreateImage, 'stable-diffusion': functions ? StructuredSD : StableDiffusionAPI, + 'azure-cognitive-search': functions ? StructuredACS : AzureCognitiveSearch, }; const customConstructors = { diff --git a/api/package.json b/api/package.json index 157b87fcc..bd2c76b97 100644 --- a/api/package.json +++ b/api/package.json @@ -21,6 +21,7 @@ "homepage": "https://github.com/danny-avila/LibreChat#readme", "dependencies": { "@anthropic-ai/sdk": "^0.5.4", + "@azure/search-documents": "^11.3.2", "@dqbd/tiktoken": "^1.0.2", "@fortaine/fetch-event-source": "^3.0.6", "@keyv/mongo": "^2.1.8", diff --git a/docs/features/plugins/azure_cognitive_search.md b/docs/features/plugins/azure_cognitive_search.md new file mode 100644 index 000000000..9954968df --- /dev/null +++ b/docs/features/plugins/azure_cognitive_search.md @@ -0,0 +1,57 @@ +# Azure Cognitive Search Plugin +Through the plugins endpoint, you can use Azure Cognitive Search for answers to your questions with assistance from GPT. + +## Configurations + +### Required + +To get started, you need to get a Azure Cognitive Search endpoint URL, index name, and a API Key. You can then define these as follows in your `.env` file: +```env +AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT="..." +AZURE_COGNITIVE_SEARCH_INDEX_NAME="..." +AZURE_COGNITIVE_SEARCH_API_KEY="..." +``` + +### AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT + +This is the URL of the search endpoint. It can be obtained from the top page of the search service in the Cognitive Search management console (e.g., 'https://example.search.windows.net'). + +### AZURE_COGNITIVE_SEARCH_INDEX_NAME + +This is the name of the index to be searched (e.g., 'hotels-sample-index'). + +### AZURE_COGNITIVE_SEARCH_API_KEY + +This is the authentication key to use when utilizing the search endpoint. Please issue it from the management console. Use the Value, not the name of the authentication key. + +### Optional + +The following are configuration values that are not required but can be specified as parameters during a search. + +If there are concerns that the search result data may be too large and exceed the prompt size, consider reducing the size of the search result data by using AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP and AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT. + +For details on each parameter, please refer to the following document: +https://learn.microsoft.com/en-us/rest/api/searchservice/search-documents + +```env +AZURE_COGNITIVE_SEARCH_API_VERSION=2023-07-01-Preview +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE=simple +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP=3 +AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT=field1,field2,field3 +``` + +#### AZURE_COGNITIVE_SEARCH_API_VERSION + +Specify the version of the search API. When using new features such as semantic search, you may need to specify the preview version. The default value is '2020-06-30'. + +#### AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_QUERY_TYPE + +Specify 'simple' or 'full'. The default value is 'simple'. + +#### AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_TOP + +Specify the number of items to search for. The default value is 5. + +#### AZURE_COGNITIVE_SEARCH_SEARCH_OPTION_SELECT + +Specify the fields of the index to be retrieved, separated by commas. Please note that these are not the fields to be searched. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index c61df290f..ac516605f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,20 +24,20 @@ theme: toggle: icon: material/brightness-4 name: Switch to light mode - + # Palette toggle for light mode - scheme: default primary: cyan accent: purple toggle: - icon: material/brightness-7 + icon: material/brightness-7 name: Switch to dark mode - + icon: repo: fontawesome/brands/github edit: material/pencil view: material/eye - + features: - header.autohide - navigation.tabs @@ -74,11 +74,11 @@ markdown_extensions: # Page tree nav: - - Home: + - Home: - 'index.md' - v0.5.0 Breaking Changes: 'general_info/breaking_changes.md' - Project Origin: 'general_info/project_origin.md' - - Tech Stack: 'general_info/tech_stack.md' + - Tech Stack: 'general_info/tech_stack.md' - Multilingual Information: 'general_info/multilingual_information.md' - Installation Guides: - Installation: @@ -98,10 +98,11 @@ nav: - Google: 'features/plugins/google_search.md' - Stable Diffusion: 'features/plugins/stable_diffusion.md' - Wolfram: 'features/plugins/wolfram.md' + - Azure Cognitive Search: 'features/plugins/azure_cognitive_search.md' - Make Your Own Plugin: 'features/plugins/make_your_own.md' - Using official ChatGPT Plugins: 'features/plugins/chatgpt_plugins_openapi.md' - Proxy: 'features/proxy.md' - - Bing Jailbreak: 'features/bing_jailbreak.md' + - Bing Jailbreak: 'features/bing_jailbreak.md' - Cloud Deployment: - DigitalOcean (preferred): 'deployment/digitalocean.md' - Cloudflare: 'deployment/cloudflare.md' @@ -123,7 +124,7 @@ extra: - icon: fontawesome/brands/github link: https://github.com/danny-avila/LibreChat - icon: fontawesome/brands/youtube - link: https://www.youtube.com/@LibreChat + link: https://www.youtube.com/@LibreChat copyright: © 2023 LibreChat diff --git a/package-lock.json b/package-lock.json index e961deef6..7d2ef2892 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,6 +47,7 @@ "license": "ISC", "dependencies": { "@anthropic-ai/sdk": "^0.5.4", + "@azure/search-documents": "^11.3.2", "@dqbd/tiktoken": "^1.0.2", "@fortaine/fetch-event-source": "^3.0.6", "@keyv/mongo": "^2.1.8", @@ -875,6 +876,166 @@ "tslib": "^2.3.1" } }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", + "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.3.tgz", + "integrity": "sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-1.3.0.tgz", + "integrity": "sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==", + "dependencies": { + "@azure/abort-controller": "^1.0.4", + "@azure/core-client": "^1.3.0", + "@azure/core-rest-pipeline": "^1.3.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.5.0.tgz", + "integrity": "sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.0.tgz", + "integrity": "sha512-+MnSB0vGZjszSzr5AW8z93/9fkDu2RLtWmAN8gskURq7EW2sSwqy8jZa0V26rjuBVkwhdA3Hw8z3VWoeBUOw+A==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", + "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", + "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/search-documents": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/@azure/search-documents/-/search-documents-11.3.2.tgz", + "integrity": "sha512-pJBY/DF+G2PJzUFGu+MvBcHWgXMg4QceoTSoMvelPi/g9ynVxjjHYUdlP2aei8/L7nOpFnbTmC5iKNIRCNbnGw==", + "dependencies": { + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.3.0", + "@azure/core-http-compat": "^1.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-rest-pipeline": "^1.3.0", + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@babel/cli": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.10.tgz", @@ -7181,7 +7342,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, "engines": { "node": ">= 10" } @@ -13655,7 +13815,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -13669,7 +13828,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -26273,7 +26431,7 @@ }, "packages/data-provider": { "name": "librechat-data-provider", - "version": "0.1.4", + "version": "0.1.5", "license": "ISC", "dependencies": { "@tanstack/react-query": "^4.28.0",