From fa54c9ae9001fbad409797e5e1ae76d3c8638f0f Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 20 Jun 2025 15:49:24 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20chore:=20Bump=20Agents=20Package?= =?UTF-8?q?s=20(#7992)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update peer dependency for @librechat/agents to version 2.4.41 * 🔧 chore: proxy handling in OpenAI endpoint to use undici * 🔧 chore: update @anthropic-ai/sdk to version 0.52.0 and refactor proxy handling to use undici * 🔧 chore: update globIgnores in vite.config.ts to exclude index.html from caching * 🔧 ci: update proxy handling in getLLMConfig to use fetchOptions and ProxyAgent * 🔧 chore: refactor proxy handling in Anthropic and OpenAI clients to use fetchOptions * refactor: agent initialization to streamline model parameters and resendFiles handling * chore: update @google/generative-ai to version 0.24.0 --- api/app/clients/AnthropicClient.js | 3 +- api/app/clients/OpenAIClient.js | 5 +- api/app/clients/specs/AnthropicClient.test.js | 4 +- api/package.json | 14 +- api/server/services/Endpoints/agents/agent.js | 60 +- .../services/Endpoints/agents/initialize.js | 2 +- .../services/Endpoints/anthropic/llm.js | 7 +- .../services/Endpoints/anthropic/llm.spec.js | 8 +- client/vite.config.ts | 2 +- package-lock.json | 744 +++++++++++++----- packages/api/package.json | 3 +- packages/api/src/endpoints/openai/llm.ts | 8 +- 12 files changed, 598 insertions(+), 262 deletions(-) diff --git a/api/app/clients/AnthropicClient.js b/api/app/clients/AnthropicClient.js index 037f1e7c46..a3fba29d5c 100644 --- a/api/app/clients/AnthropicClient.js +++ b/api/app/clients/AnthropicClient.js @@ -190,10 +190,11 @@ class AnthropicClient extends BaseClient { reverseProxyUrl: this.options.reverseProxyUrl, }), apiKey: this.apiKey, + fetchOptions: {}, }; if (this.options.proxy) { - options.httpAgent = new HttpsProxyAgent(this.options.proxy); + options.fetchOptions.agent = new HttpsProxyAgent(this.options.proxy); } if (this.options.reverseProxyUrl) { diff --git a/api/app/clients/OpenAIClient.js b/api/app/clients/OpenAIClient.js index f3a7e67c12..2d4146bd9c 100644 --- a/api/app/clients/OpenAIClient.js +++ b/api/app/clients/OpenAIClient.js @@ -1159,6 +1159,7 @@ ${convo} logger.debug('[OpenAIClient] chatCompletion', { baseURL, modelOptions }); const opts = { baseURL, + fetchOptions: {}, }; if (this.useOpenRouter) { @@ -1177,7 +1178,7 @@ ${convo} } if (this.options.proxy) { - opts.httpAgent = new HttpsProxyAgent(this.options.proxy); + opts.fetchOptions.agent = new HttpsProxyAgent(this.options.proxy); } /** @type {TAzureConfig | undefined} */ @@ -1395,7 +1396,7 @@ ${convo} ...modelOptions, stream: true, }; - const stream = await openai.beta.chat.completions + const stream = await openai.chat.completions .stream(params) .on('abort', () => { /* Do nothing here */ diff --git a/api/app/clients/specs/AnthropicClient.test.js b/api/app/clients/specs/AnthropicClient.test.js index 9867859087..fbcd2b75e4 100644 --- a/api/app/clients/specs/AnthropicClient.test.js +++ b/api/app/clients/specs/AnthropicClient.test.js @@ -309,7 +309,7 @@ describe('AnthropicClient', () => { }; client.setOptions({ modelOptions, promptCache: true }); const anthropicClient = client.getClient(modelOptions); - expect(anthropicClient.defaultHeaders).not.toHaveProperty('anthropic-beta'); + expect(anthropicClient._options.defaultHeaders).toBeUndefined(); }); it('should not add beta header for other models', () => { @@ -320,7 +320,7 @@ describe('AnthropicClient', () => { }, }); const anthropicClient = client.getClient(); - expect(anthropicClient.defaultHeaders).not.toHaveProperty('anthropic-beta'); + expect(anthropicClient._options.defaultHeaders).toBeUndefined(); }); }); diff --git a/api/package.json b/api/package.json index 636e8cb8f3..6633a99c3f 100644 --- a/api/package.json +++ b/api/package.json @@ -34,21 +34,21 @@ }, "homepage": "https://librechat.ai", "dependencies": { - "@anthropic-ai/sdk": "^0.37.0", + "@anthropic-ai/sdk": "^0.52.0", "@aws-sdk/client-s3": "^3.758.0", "@aws-sdk/s3-request-presigner": "^3.758.0", "@azure/identity": "^4.7.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.27.0", - "@google/generative-ai": "^0.23.0", + "@google/generative-ai": "^0.24.0", "@googleapis/youtube": "^20.0.0", "@keyv/redis": "^4.3.3", - "@langchain/community": "^0.3.44", - "@langchain/core": "^0.3.57", - "@langchain/google-genai": "^0.2.9", - "@langchain/google-vertexai": "^0.2.9", + "@langchain/community": "^0.3.47", + "@langchain/core": "^0.3.60", + "@langchain/google-genai": "^0.2.13", + "@langchain/google-vertexai": "^0.2.13", "@langchain/textsplitters": "^0.1.0", - "@librechat/agents": "^2.4.38", + "@librechat/agents": "^2.4.41", "@librechat/api": "*", "@librechat/data-schemas": "*", "@node-saml/passport-saml": "^5.0.0", diff --git a/api/server/services/Endpoints/agents/agent.js b/api/server/services/Endpoints/agents/agent.js index 13a42140db..e135401467 100644 --- a/api/server/services/Endpoints/agents/agent.js +++ b/api/server/services/Endpoints/agents/agent.js @@ -63,11 +63,17 @@ const initializeAgent = async ({ } let currentFiles; - if ( - isInitialAgent && - conversationId != null && - (agent.model_parameters?.resendFiles ?? true) === true - ) { + const _modelOptions = structuredClone( + Object.assign( + { model: agent.model }, + agent.model_parameters ?? { model: agent.model }, + isInitialAgent === true ? endpointOption?.model_parameters : {}, + ), + ); + + const { resendFiles = true, ...modelOptions } = _modelOptions; + + if (isInitialAgent && conversationId != null && resendFiles) { const fileIds = (await getConvoFiles(conversationId)) ?? []; /** @type {Set} */ const toolResourceSet = new Set(); @@ -117,15 +123,11 @@ const initializeAgent = async ({ getOptions = initCustom; agent.provider = Providers.OPENAI; } - const model_parameters = Object.assign( - {}, - agent.model_parameters ?? { model: agent.model }, - isInitialAgent === true ? endpointOption?.model_parameters : {}, - ); + const _endpointOption = isInitialAgent === true - ? Object.assign({}, endpointOption, { model_parameters }) - : { model_parameters }; + ? Object.assign({}, endpointOption, { model_parameters: modelOptions }) + : { model_parameters: modelOptions }; const options = await getOptions({ req, @@ -136,6 +138,20 @@ const initializeAgent = async ({ endpointOption: _endpointOption, }); + const tokensModel = + agent.provider === EModelEndpoint.azureOpenAI ? agent.model : modelOptions.model; + const maxTokens = optionalChainWithEmptyCheck( + modelOptions.maxOutputTokens, + modelOptions.maxTokens, + 0, + ); + const maxContextTokens = optionalChainWithEmptyCheck( + modelOptions.maxContextTokens, + modelOptions.max_context_tokens, + getModelMaxTokens(tokensModel, providerEndpointMap[provider]), + 4096, + ); + if ( agent.endpoint === EModelEndpoint.azureOpenAI && options.llmConfig?.azureOpenAIApiInstanceName == null @@ -148,15 +164,11 @@ const initializeAgent = async ({ } /** @type {import('@librechat/agents').ClientOptions} */ - agent.model_parameters = Object.assign(model_parameters, options.llmConfig); + agent.model_parameters = { ...options.llmConfig }; if (options.configOptions) { agent.model_parameters.configuration = options.configOptions; } - if (!agent.model_parameters.model) { - agent.model_parameters.model = agent.model; - } - if (agent.instructions && agent.instructions !== '') { agent.instructions = replaceSpecialVars({ text: agent.instructions, @@ -171,23 +183,11 @@ const initializeAgent = async ({ }); } - const tokensModel = - agent.provider === EModelEndpoint.azureOpenAI ? agent.model : agent.model_parameters.model; - const maxTokens = optionalChainWithEmptyCheck( - agent.model_parameters.maxOutputTokens, - agent.model_parameters.maxTokens, - 0, - ); - const maxContextTokens = optionalChainWithEmptyCheck( - agent.model_parameters.maxContextTokens, - agent.max_context_tokens, - getModelMaxTokens(tokensModel, providerEndpointMap[provider]), - 4096, - ); return { ...agent, tools, attachments, + resendFiles, toolContextMap, maxContextTokens: (maxContextTokens - maxTokens) * 0.9, }; diff --git a/api/server/services/Endpoints/agents/initialize.js b/api/server/services/Endpoints/agents/initialize.js index e3154fe13a..e4ffcf4730 100644 --- a/api/server/services/Endpoints/agents/initialize.js +++ b/api/server/services/Endpoints/agents/initialize.js @@ -130,8 +130,8 @@ const initializeClient = async ({ req, res, endpointOption }) => { iconURL: endpointOption.iconURL, attachments: primaryConfig.attachments, endpointType: endpointOption.endpointType, + resendFiles: primaryConfig.resendFiles ?? true, maxContextTokens: primaryConfig.maxContextTokens, - resendFiles: primaryConfig.model_parameters?.resendFiles ?? true, endpoint: primaryConfig.id === Constants.EPHEMERAL_AGENT_ID ? primaryConfig.endpoint diff --git a/api/server/services/Endpoints/anthropic/llm.js b/api/server/services/Endpoints/anthropic/llm.js index 9f20b8e61d..66496f00fd 100644 --- a/api/server/services/Endpoints/anthropic/llm.js +++ b/api/server/services/Endpoints/anthropic/llm.js @@ -1,4 +1,4 @@ -const { HttpsProxyAgent } = require('https-proxy-agent'); +const { ProxyAgent } = require('undici'); const { anthropicSettings, removeNullishValues } = require('librechat-data-provider'); const { checkPromptCacheSupport, getClaudeHeaders, configureReasoning } = require('./helpers'); @@ -67,7 +67,10 @@ function getLLMConfig(apiKey, options = {}) { } if (options.proxy) { - requestOptions.clientOptions.httpAgent = new HttpsProxyAgent(options.proxy); + const proxyAgent = new ProxyAgent(options.proxy); + requestOptions.clientOptions.fetchOptions = { + dispatcher: proxyAgent, + }; } if (options.reverseProxyUrl) { diff --git a/api/server/services/Endpoints/anthropic/llm.spec.js b/api/server/services/Endpoints/anthropic/llm.spec.js index 9c453efb92..f3f77ee897 100644 --- a/api/server/services/Endpoints/anthropic/llm.spec.js +++ b/api/server/services/Endpoints/anthropic/llm.spec.js @@ -21,8 +21,12 @@ describe('getLLMConfig', () => { proxy: 'http://proxy:8080', }); - expect(result.llmConfig.clientOptions).toHaveProperty('httpAgent'); - expect(result.llmConfig.clientOptions.httpAgent).toHaveProperty('proxy', 'http://proxy:8080'); + expect(result.llmConfig.clientOptions).toHaveProperty('fetchOptions'); + expect(result.llmConfig.clientOptions.fetchOptions).toHaveProperty('dispatcher'); + expect(result.llmConfig.clientOptions.fetchOptions.dispatcher).toBeDefined(); + expect(result.llmConfig.clientOptions.fetchOptions.dispatcher.constructor.name).toBe( + 'ProxyAgent', + ); }); it('should include reverse proxy URL when provided', () => { diff --git a/client/vite.config.ts b/client/vite.config.ts index 9a091d9f53..152cf4255e 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -46,7 +46,7 @@ export default defineConfig(({ command }) => ({ 'assets/maskable-icon.png', 'manifest.webmanifest', ], - globIgnores: ['images/**/*', '**/*.map'], + globIgnores: ['images/**/*', '**/*.map', 'index.html'], maximumFileSizeToCacheInBytes: 4 * 1024 * 1024, navigateFallbackDenylist: [/^\/oauth/, /^\/api/], }, diff --git a/package-lock.json b/package-lock.json index a7384d0f90..0301bdce1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,21 +50,21 @@ "version": "v0.7.8", "license": "ISC", "dependencies": { - "@anthropic-ai/sdk": "^0.37.0", + "@anthropic-ai/sdk": "^0.52.0", "@aws-sdk/client-s3": "^3.758.0", "@aws-sdk/s3-request-presigner": "^3.758.0", "@azure/identity": "^4.7.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.27.0", - "@google/generative-ai": "^0.23.0", + "@google/generative-ai": "^0.24.0", "@googleapis/youtube": "^20.0.0", "@keyv/redis": "^4.3.3", - "@langchain/community": "^0.3.44", - "@langchain/core": "^0.3.57", - "@langchain/google-genai": "^0.2.9", - "@langchain/google-vertexai": "^0.2.9", + "@langchain/community": "^0.3.47", + "@langchain/core": "^0.3.60", + "@langchain/google-genai": "^0.2.13", + "@langchain/google-vertexai": "^0.2.13", "@langchain/textsplitters": "^0.1.0", - "@librechat/agents": "^2.4.38", + "@librechat/agents": "^2.4.41", "@librechat/api": "*", "@librechat/data-schemas": "*", "@node-saml/passport-saml": "^5.0.0", @@ -140,17 +140,12 @@ } }, "api/node_modules/@anthropic-ai/sdk": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.37.0.tgz", - "integrity": "sha512-tHjX2YbkUBwEgg0JZU3EFSSAQPoK4qQR/NFYa8Vtzd5UAyXzZksCw2In69Rml4R/TyHPBfRYaLK35XiOe33pjw==", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.52.0.tgz", + "integrity": "sha512-d4c+fg+xy9e46c8+YnrrgIQR45CZlAi7PwdzIfDXDM6ACxEZli1/fxhURsq30ZpMZy6LvSkr41jGq5aF5TD7rQ==", + "license": "MIT", + "bin": { + "anthropic-ai-sdk": "bin/cli" } }, "api/node_modules/@aws-sdk/client-sso": { @@ -781,14 +776,6 @@ } } }, - "api/node_modules/@google/generative-ai": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.23.0.tgz", - "integrity": "sha512-8vGoguvLG22U3t9XpXvbxjxy/yfBhE27pqptz5QVKXwBSh9sUXXmZWS8ZdGMqifK7kiuZQCG2cjGJNUdBsgX+g==", - "engines": { - "node": ">=18.0.0" - } - }, "api/node_modules/@keyv/redis": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@keyv/redis/-/redis-4.3.3.tgz", @@ -803,9 +790,9 @@ } }, "api/node_modules/@langchain/community": { - "version": "0.3.44", - "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.44.tgz", - "integrity": "sha512-lOA7rw0lC6WCRO/xoacx4Gpbx1ncscAilYn9LVjyiBxJw47d01iq8hdkGdBW5OFISub/wCK4FmHih2S4WJicAg==", + "version": "0.3.47", + "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.47.tgz", + "integrity": "sha512-Vo42kAfkXpTFSevhEkeqqE55az8NyQgDktCbitXYuhipNbFYx08XVvqEDkFkB20MM/Z7u+cvLb+DxCqnKuH0CQ==", "license": "MIT", "dependencies": { "@langchain/openai": ">=0.2.0 <0.6.0", @@ -815,10 +802,9 @@ "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", - "langsmith": "^0.3.29", + "langsmith": "^0.3.33", "uuid": "^10.0.0", - "zod": "^3.22.3", - "zod-to-json-schema": "^3.22.5" + "zod": "^3.25.32" }, "engines": { "node": ">=18" @@ -851,11 +837,11 @@ "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", - "@huggingface/inference": "^2.6.4", - "@huggingface/transformers": "^3.2.3", + "@huggingface/inference": "^4.0.5", + "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.12.0", - "@langchain/core": ">=0.2.21 <0.4.0", + "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", @@ -925,7 +911,7 @@ "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", - "mongodb": ">=5.2.0", + "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", @@ -1329,21 +1315,41 @@ } }, "api/node_modules/@langchain/openai": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.11.tgz", - "integrity": "sha512-DAp7x+NfjSqDvKVMle8yb85nzz+3ctP7zGJaeRS0vLmvkY9qf/jRkowsM0mcsIiEUKhG/AHzWqvxbhktb/jJ6Q==", + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.14.tgz", + "integrity": "sha512-0GEj5K/qi1MRuZ4nE7NvyI4jTG+RSewLZqsExUwRukWdeqmkPNHGrogTa5ZDt7eaJxAaY7EgLC5ZnvCM3L1oug==", "license": "MIT", "dependencies": { "js-tiktoken": "^1.0.12", - "openai": "^4.96.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "openai": "^5.3.0", + "zod": "^3.25.32" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.48 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "api/node_modules/@langchain/openai/node_modules/openai": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.5.1.tgz", + "integrity": "sha512-5i19097mGotHA1eFsM6Tjd/tJ8uo9sa5Ysv4Q6bKJ2vtN6rc0MzMrUefXnLXYAJcmMQrC1Efhj0AvfIkXrQamw==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } } }, "api/node_modules/@smithy/abort-controller": { @@ -2090,14 +2096,6 @@ "node": ">=18.0.0" } }, - "api/node_modules/@types/node": { - "version": "18.19.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", - "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, "api/node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -2142,6 +2140,104 @@ "node": ">= 0.6" } }, + "api/node_modules/gaxios": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.0.tgz", + "integrity": "sha512-y1Q0MX1Ba6eg67Zz92kW0MHHhdtWksYckQy1KJsI6P4UlDQ8cvdvpLEPslD/k7vFkdPppMESFGTvk7XpSiKj8g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "api/node_modules/gaxios/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "api/node_modules/google-auth-library": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.1.0.tgz", + "integrity": "sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^7.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "api/node_modules/google-auth-library/node_modules/gcp-metadata": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.0.tgz", + "integrity": "sha512-3PfRTzvT3Msu0Hy8Gf9ypxJvaClG2IB9pyH0r8QOmRBW5mUcrHgYpF4GYP+XulDbfhxEhBYtJtJJQb5S2wM+LA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "api/node_modules/google-logging-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.1.tgz", + "integrity": "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=14" + } + }, + "api/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, "api/node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -2243,14 +2339,6 @@ "node": ">=14" } }, - "api/node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, "api/node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", @@ -2383,15 +2471,6 @@ "@img/sharp-win32-x64": "0.33.5" } }, - "api/node_modules/undici": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.10.0.tgz", - "integrity": "sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==", - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, "api/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -16752,6 +16831,7 @@ "version": "0.24.0", "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.0.tgz", "integrity": "sha512-fnEITCGEB7NdX0BhoYZ/cq/7WPZ1QS5IzJJfC3Tg/OwkvBetMiVJciyaan297OvE4B9Jg1xvo0zIazX/9sGu1Q==", + "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } @@ -17857,65 +17937,46 @@ } }, "node_modules/@langchain/anthropic": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.21.tgz", - "integrity": "sha512-iyVZ9PHcNbABVzWFWtolcDUqHYCEkl1yypRYXE98tTPiNhGo6g/MgKky96TEcOnJ0VNHD6qlzo9LhQl87OplvA==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.23.tgz", + "integrity": "sha512-lwp43HUcCM0bJqJEwBwutskvV85G3R3rQDW5XNCntPDzelW+fCmlsm40P7dg7uG/3uOtDGhj4eDMapKpbPvtlA==", "license": "MIT", "dependencies": { - "@anthropic-ai/sdk": "^0.39.0", - "fast-xml-parser": "^4.4.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" + "@anthropic-ai/sdk": "^0.52.0", + "fast-xml-parser": "^4.4.1" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.48 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/anthropic/node_modules/@anthropic-ai/sdk": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.39.0.tgz", - "integrity": "sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==", + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.52.0.tgz", + "integrity": "sha512-d4c+fg+xy9e46c8+YnrrgIQR45CZlAi7PwdzIfDXDM6ACxEZli1/fxhURsq30ZpMZy6LvSkr41jGq5aF5TD7rQ==", "license": "MIT", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - } - }, - "node_modules/@langchain/anthropic/node_modules/@types/node": { - "version": "18.19.87", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", - "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" + "bin": { + "anthropic-ai-sdk": "bin/cli" } }, "node_modules/@langchain/aws": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@langchain/aws/-/aws-0.1.10.tgz", - "integrity": "sha512-PWA68aPBdLgmOvzsVgVpBec3sfwyCgsx/fpaTsf75k6TfHp4KBzqGGLGzgYo5/QBrInRkxVawJL1eKu4APy2nw==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@langchain/aws/-/aws-0.1.11.tgz", + "integrity": "sha512-JNnEmJaJB5TzcniPYGZi6dlpmZyzeyVsS+Za0Ye1DhCpcNmEiWRy514gVcTPQUEl5EcpIR51B/YyowI7zUzVvg==", "license": "MIT", "dependencies": { "@aws-sdk/client-bedrock-agent-runtime": "^3.755.0", "@aws-sdk/client-bedrock-runtime": "^3.755.0", "@aws-sdk/client-kendra": "^3.750.0", - "@aws-sdk/credential-provider-node": "^3.750.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.22.5" + "@aws-sdk/credential-provider-node": "^3.750.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.48 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/aws/node_modules/@aws-sdk/client-sso": { @@ -18771,9 +18832,9 @@ } }, "node_modules/@langchain/core": { - "version": "0.3.57", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.57.tgz", - "integrity": "sha512-jz28qCTKJmi47b6jqhQ6vYRTG5jRpqhtPQjriRTB5wR8mgvzo6xKs0fG/kExS3ZvM79ytD1npBvgf8i19xOo9Q==", + "version": "0.3.60", + "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.60.tgz", + "integrity": "sha512-FlUjO7ovGnaKcb2JPmw5ajPaZj18LVjh/vAURtdzzFy4UsYBLv/5Y3HJQ2KgDdrl6sW/UyfG0zWdnhZQ1A5eJw==", "license": "MIT", "dependencies": { "@cfworker/json-schema": "^4.0.2", @@ -18781,12 +18842,12 @@ "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", - "langsmith": "^0.3.29", + "langsmith": "^0.3.33", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", - "zod": "^3.22.4", + "zod": "^3.25.32", "zod-to-json-schema": "^3.22.3" }, "engines": { @@ -18818,34 +18879,71 @@ } }, "node_modules/@langchain/deepseek": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@langchain/deepseek/-/deepseek-0.0.1.tgz", - "integrity": "sha512-jgrbitvV4p7Kqo/Fyni9coCliNXUrJ2XChdR8eHvQg3RL+w13DIQjJn2mrkCrb7v6Is1rI7It2x3yIbADL71Yg==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@langchain/deepseek/-/deepseek-0.0.2.tgz", + "integrity": "sha512-u13KbPUXW7uhcybbRzYdRroBgqVUSgG0SJM15c7Etld2yjRQC2c4O/ga9eQZdLh/kaDlQfH/ZITFdjHe77RnGw==", + "license": "MIT", "dependencies": { - "@langchain/openai": "^0.4.2", - "zod": "^3.24.1" + "@langchain/openai": "^0.5.5" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.0 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/deepseek/node_modules/@langchain/openai": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.14.tgz", + "integrity": "sha512-0GEj5K/qi1MRuZ4nE7NvyI4jTG+RSewLZqsExUwRukWdeqmkPNHGrogTa5ZDt7eaJxAaY7EgLC5ZnvCM3L1oug==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12", + "openai": "^5.3.0", + "zod": "^3.25.32" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/deepseek/node_modules/openai": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.5.1.tgz", + "integrity": "sha512-5i19097mGotHA1eFsM6Tjd/tJ8uo9sa5Ysv4Q6bKJ2vtN6rc0MzMrUefXnLXYAJcmMQrC1Efhj0AvfIkXrQamw==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } } }, "node_modules/@langchain/google-common": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@langchain/google-common/-/google-common-0.2.9.tgz", - "integrity": "sha512-T6U6zK906ruitDWjrWLk542LotCkqZSENogNAzS+QvGKW1KpLtdgcIhvfKDFP8rCMj4X1QfIW6OXo2a6URnK0w==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@langchain/google-common/-/google-common-0.2.13.tgz", + "integrity": "sha512-Wd254vAajKxK3bIYPmuFRrk90oN3YIDzwwiO+3ojYKoWP+EBzW3eg3B4f8ofvGXUkJPxEwp/u8ymSsVUElUGlw==", "license": "MIT", "dependencies": { - "uuid": "^10.0.0", - "zod-to-json-schema": "^3.22.4" + "uuid": "^10.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.55 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/google-common/node_modules/uuid": { @@ -18862,36 +18960,143 @@ } }, "node_modules/@langchain/google-gauth": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@langchain/google-gauth/-/google-gauth-0.2.9.tgz", - "integrity": "sha512-x9SjEzIhPN7XzXhQ1Aj68OjsQcnTKa070UGs030rn3US2MUQWvqaxcKKnKhE7XiwdLsvuUXrsbqv09XUNzu3Fg==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@langchain/google-gauth/-/google-gauth-0.2.13.tgz", + "integrity": "sha512-JAIMtdmN+6/5aPRz3XUCFQ8+4TP272V8QCLhcyZ9LhDlnmY5DJv+LhzjMk9L5XZx9sRnKRvthVWiAY0Xbs3qAg==", "license": "MIT", "dependencies": { - "@langchain/google-common": "^0.2.9", - "google-auth-library": "^9.15.1" + "@langchain/google-common": "^0.2.13", + "google-auth-library": "^10.1.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.55 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/google-gauth/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@langchain/google-gauth/node_modules/gaxios": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.0.tgz", + "integrity": "sha512-y1Q0MX1Ba6eg67Zz92kW0MHHhdtWksYckQy1KJsI6P4UlDQ8cvdvpLEPslD/k7vFkdPppMESFGTvk7XpSiKj8g==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/google-gauth/node_modules/gcp-metadata": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.0.tgz", + "integrity": "sha512-3PfRTzvT3Msu0Hy8Gf9ypxJvaClG2IB9pyH0r8QOmRBW5mUcrHgYpF4GYP+XulDbfhxEhBYtJtJJQb5S2wM+LA==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/google-gauth/node_modules/google-auth-library": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.1.0.tgz", + "integrity": "sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^7.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/google-gauth/node_modules/google-logging-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.1.tgz", + "integrity": "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@langchain/google-gauth/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/google-gauth/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@langchain/google-gauth/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/@langchain/google-genai": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-0.2.9.tgz", - "integrity": "sha512-AcHAD0VX8Qci5ApLYd6ojMTJUk4ZTeMQrsOYsOVv09sy3FtrLHkRxZXkb0qgtDS9EJ+w40904B+s6s2H9+HZmQ==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-0.2.13.tgz", + "integrity": "sha512-ReZe4oNUhPNEijYo9CGA3/CJUwVPaaoYnyplZyYTbUNPAwwRH5aR1e6bppKFBb+ZZeTRCR25JFDIPnXJFfjaBg==", "license": "MIT", "dependencies": { "@google/generative-ai": "^0.24.0", - "uuid": "^11.1.0", - "zod-to-json-schema": "^3.22.4" + "uuid": "^11.1.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.55 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/google-genai/node_modules/uuid": { @@ -18907,36 +19112,36 @@ } }, "node_modules/@langchain/google-vertexai": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@langchain/google-vertexai/-/google-vertexai-0.2.9.tgz", - "integrity": "sha512-41LyACkSyQK5iKh58UBNVDkteeTqKapeu6SdYGfdqVP6erckciDClwmZUKO2UefDco9X0SCKphR+tPWpWFPoag==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@langchain/google-vertexai/-/google-vertexai-0.2.13.tgz", + "integrity": "sha512-Y97f0IBr4uWsyJTcDJROWXuu+qh4elSDLK1e6MD+mrxCx+UlgcXCReg4zvEFJzqpBKrfFt+lvXstJ6XTR6Zfyg==", "license": "MIT", "dependencies": { - "@langchain/google-gauth": "^0.2.9" + "@langchain/google-gauth": "^0.2.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.55 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/langgraph": { - "version": "0.2.74", - "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.2.74.tgz", - "integrity": "sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.3.4.tgz", + "integrity": "sha512-Vuja8Qtu3Zjx7k4fK7Cnw+p8gtvIRPciWp9btPhAs3aUo6aBgOJOZVcK5Ii3mHfEHK/aQmRElR0x/u/YwykOrg==", "license": "MIT", "dependencies": { - "@langchain/langgraph-checkpoint": "~0.0.17", + "@langchain/langgraph-checkpoint": "~0.0.18", "@langchain/langgraph-sdk": "~0.0.32", "uuid": "^10.0.0", - "zod": "^3.23.8" + "zod": "^3.25.32" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0", + "@langchain/core": ">=0.3.58 < 0.4.0", "zod-to-json-schema": "^3.x" }, "peerDependenciesMeta": { @@ -18974,9 +19179,9 @@ } }, "node_modules/@langchain/langgraph-sdk": { - "version": "0.0.82", - "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.82.tgz", - "integrity": "sha512-QxhGtDArHkqsJAbO5RuZsCyvDmPWf4pUpkOpLDzPEQXCBuasrBRgB6pxQWof2l6kfMYCfrc6lp3jL6TAqapmjQ==", + "version": "0.0.84", + "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.84.tgz", + "integrity": "sha512-l0PFQyJ+6m6aclORNPPWlcRwgKcXVXsPaJCbCUYFABR3yf4cOpsjhUNR0cJ7+2cS400oieHjGRdGGyO/hbSjhg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.15", @@ -19011,20 +19216,19 @@ } }, "node_modules/@langchain/mistralai": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-0.2.0.tgz", - "integrity": "sha512-VdfbKZopAuSXf/vlXbriGWLK3c7j5s47DoB3S31xpprY2BMSKZZiX9vE9TsgxMfAPuIDPIYcfgU7p1upvTYt8g==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-0.2.1.tgz", + "integrity": "sha512-s91BlNcuxaaZGnVukyl81nwGrWpeE0EYiAdEFoBmZwlT4yLpx+QpPhRsGKrTg/Vm7Nscy6Wd8Xy2PJ93wftMdw==", + "license": "MIT", "dependencies": { "@mistralai/mistralai": "^1.3.1", - "uuid": "^10.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.22.4" + "uuid": "^10.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.7 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/mistralai/node_modules/uuid": { @@ -19040,20 +19244,19 @@ } }, "node_modules/@langchain/ollama": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-0.2.0.tgz", - "integrity": "sha512-jLlYFqt+nbhaJKLakk7lRTWHZJ7wHeJLM6yuv4jToQ8zPzpL//372+MjggDoW0mnw8ofysg1T2C6mEJspKJtiA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-0.2.3.tgz", + "integrity": "sha512-1Obe45jgQspqLMBVlayQbGdywFmri8DgmGRdzNu0li56cG5RReYlRCFVDZBRMMvF9JhsP5eXRyfyivtKfITHWQ==", + "license": "MIT", "dependencies": { "ollama": "^0.5.12", - "uuid": "^10.0.0", - "zod": "^3.24.1", - "zod-to-json-schema": "^3.24.1" + "uuid": "^10.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@langchain/ollama/node_modules/uuid": { @@ -19130,18 +19333,56 @@ } }, "node_modules/@langchain/xai": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@langchain/xai/-/xai-0.0.2.tgz", - "integrity": "sha512-wVOs7SfJs4VWk/oiHJomaoaZ+r9nQhPqbEXlQ2D8L0d54PxYhb1ILR9rub9LT1RpqazSX8HG4A8+hX4R01qkSg==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@langchain/xai/-/xai-0.0.3.tgz", + "integrity": "sha512-NA+0d6z/1focGuakceOz/AspWN9xcz7mYpjLFuCDtOPRLzdjUTRiqljXx9RVSl/VQMA8AzHCOA64m3asYZAYWg==", + "license": "MIT", "dependencies": { - "@langchain/openai": "~0.4.4", - "zod": "^3.24.2" + "@langchain/openai": "^0.5.5" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/xai/node_modules/@langchain/openai": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.14.tgz", + "integrity": "sha512-0GEj5K/qi1MRuZ4nE7NvyI4jTG+RSewLZqsExUwRukWdeqmkPNHGrogTa5ZDt7eaJxAaY7EgLC5ZnvCM3L1oug==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12", + "openai": "^5.3.0", + "zod": "^3.25.32" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/xai/node_modules/openai": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.5.1.tgz", + "integrity": "sha512-5i19097mGotHA1eFsM6Tjd/tJ8uo9sa5Ysv4Q6bKJ2vtN6rc0MzMrUefXnLXYAJcmMQrC1Efhj0AvfIkXrQamw==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } } }, "node_modules/@lezer/common": { @@ -19196,23 +19437,23 @@ } }, "node_modules/@librechat/agents": { - "version": "2.4.38", - "resolved": "https://registry.npmjs.org/@librechat/agents/-/agents-2.4.38.tgz", - "integrity": "sha512-GfQ36TpKrC60vesTM0MrBaE8aEC50yBp0CsT4ERHO9HbCjH8na+CA14Ldps1cGwinL4gtyDH2gB0nVuhgEtYAg==", + "version": "2.4.41", + "resolved": "https://registry.npmjs.org/@librechat/agents/-/agents-2.4.41.tgz", + "integrity": "sha512-kYmdk5WVRp0qZxTx6BuGCs4l0Ir9iBLLx4ZY4/1wxr80al5/vq3P8wbgGdKMeO2qTu4ZaT4RyWRQYWBg5HDkUQ==", "license": "MIT", "dependencies": { - "@langchain/anthropic": "^0.3.21", - "@langchain/aws": "^0.1.10", - "@langchain/community": "^0.3.44", - "@langchain/core": "^0.3.57", - "@langchain/deepseek": "^0.0.1", - "@langchain/google-genai": "^0.2.9", - "@langchain/google-vertexai": "^0.2.9", - "@langchain/langgraph": "^0.2.73", - "@langchain/mistralai": "^0.2.0", - "@langchain/ollama": "^0.2.0", - "@langchain/openai": "^0.5.11", - "@langchain/xai": "^0.0.2", + "@langchain/anthropic": "^0.3.23", + "@langchain/aws": "^0.1.11", + "@langchain/community": "^0.3.47", + "@langchain/core": "^0.3.60", + "@langchain/deepseek": "^0.0.2", + "@langchain/google-genai": "^0.2.13", + "@langchain/google-vertexai": "^0.2.13", + "@langchain/langgraph": "^0.3.4", + "@langchain/mistralai": "^0.2.1", + "@langchain/ollama": "^0.2.3", + "@langchain/openai": "^0.5.14", + "@langchain/xai": "^0.0.3", "cheerio": "^1.0.0", "dotenv": "^16.4.7", "https-proxy-agent": "^7.0.6", @@ -19223,9 +19464,9 @@ } }, "node_modules/@librechat/agents/node_modules/@langchain/community": { - "version": "0.3.45", - "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.45.tgz", - "integrity": "sha512-KkAGmnP+w5tozLYsj/kGKwyfuPnCcA6MyDXfNF7oDo7L1TxhUgdEKhvNsY7ooLXz6Xh/LV5Kqp2B8U0jfYCQKQ==", + "version": "0.3.47", + "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.47.tgz", + "integrity": "sha512-Vo42kAfkXpTFSevhEkeqqE55az8NyQgDktCbitXYuhipNbFYx08XVvqEDkFkB20MM/Z7u+cvLb+DxCqnKuH0CQ==", "license": "MIT", "dependencies": { "@langchain/openai": ">=0.2.0 <0.6.0", @@ -19235,10 +19476,9 @@ "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", - "langsmith": "^0.3.29", + "langsmith": "^0.3.33", "uuid": "^10.0.0", - "zod": "^3.22.3", - "zod-to-json-schema": "^3.22.5" + "zod": "^3.25.32" }, "engines": { "node": ">=18" @@ -19271,11 +19511,11 @@ "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", - "@huggingface/inference": "^2.6.4", - "@huggingface/transformers": "^3.2.3", + "@huggingface/inference": "^4.0.5", + "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.12.0", - "@langchain/core": ">=0.2.21 <0.4.0", + "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", @@ -19345,7 +19585,7 @@ "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", - "mongodb": ">=5.2.0", + "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", @@ -19749,21 +19989,20 @@ } }, "node_modules/@librechat/agents/node_modules/@langchain/openai": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.11.tgz", - "integrity": "sha512-DAp7x+NfjSqDvKVMle8yb85nzz+3ctP7zGJaeRS0vLmvkY9qf/jRkowsM0mcsIiEUKhG/AHzWqvxbhktb/jJ6Q==", + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.14.tgz", + "integrity": "sha512-0GEj5K/qi1MRuZ4nE7NvyI4jTG+RSewLZqsExUwRukWdeqmkPNHGrogTa5ZDt7eaJxAaY7EgLC5ZnvCM3L1oug==", "license": "MIT", "dependencies": { "js-tiktoken": "^1.0.12", - "openai": "^4.96.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "openai": "^5.3.0", + "zod": "^3.25.32" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.48 <0.4.0" + "@langchain/core": ">=0.3.58 <0.4.0" } }, "node_modules/@librechat/agents/node_modules/agent-base": { @@ -19788,6 +20027,27 @@ "node": ">= 14" } }, + "node_modules/@librechat/agents/node_modules/openai": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.5.1.tgz", + "integrity": "sha512-5i19097mGotHA1eFsM6Tjd/tJ8uo9sa5Ysv4Q6bKJ2vtN6rc0MzMrUefXnLXYAJcmMQrC1Efhj0AvfIkXrQamw==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/@librechat/agents/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -27551,6 +27811,15 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cheerio/node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, "node_modules/cheerio/node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", @@ -28554,6 +28823,15 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", @@ -30727,6 +31005,29 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -31107,6 +31408,18 @@ "node": ">= 14" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/formidable": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", @@ -34583,9 +34896,9 @@ } }, "node_modules/langsmith": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.29.tgz", - "integrity": "sha512-JPF2B339qpYy9FyuY4Yz1aWYtgPlFc/a+VTj3L/JcFLHCiMP7+Ig8I9jO+o1QwVa+JU3iugL1RS0wwc+Glw0zA==", + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.33.tgz", + "integrity": "sha512-imNIaBL6+ElE5eMzNHYwFxo6W/6rHlqcaUjCYoIeGdCYWlARxE3CTGKul5DJnaUgGP2CTLFeNXyvRx5HWC/4KQ==", "license": "MIT", "dependencies": { "@types/uuid": "^10.0.0", @@ -44153,12 +44466,12 @@ "dev": true }, "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.10.0.tgz", + "integrity": "sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==", "license": "MIT", "engines": { - "node": ">=18.17" + "node": ">=20.18.1" } }, "node_modules/undici-types": { @@ -45069,6 +45382,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -46174,9 +46496,10 @@ } }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.25.67", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -46232,7 +46555,7 @@ "typescript": "^5.0.4" }, "peerDependencies": { - "@librechat/agents": "^2.4.37", + "@librechat/agents": "^2.4.41", "@librechat/data-schemas": "*", "@modelcontextprotocol/sdk": "^1.12.3", "axios": "^1.8.2", @@ -46243,6 +46566,7 @@ "librechat-data-provider": "*", "node-fetch": "2.7.0", "tiktoken": "^1.0.15", + "undici": "^7.10.0", "zod": "^3.22.4" } }, @@ -46462,7 +46786,7 @@ }, "packages/data-schemas": { "name": "@librechat/data-schemas", - "version": "0.0.9", + "version": "0.0.10", "license": "MIT", "devDependencies": { "@rollup/plugin-alias": "^5.1.0", diff --git a/packages/api/package.json b/packages/api/package.json index 1c2ab534e3..aa4fc43772 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -69,7 +69,7 @@ "registry": "https://registry.npmjs.org/" }, "peerDependencies": { - "@librechat/agents": "^2.4.37", + "@librechat/agents": "^2.4.41", "@librechat/data-schemas": "*", "@modelcontextprotocol/sdk": "^1.12.3", "axios": "^1.8.2", @@ -80,6 +80,7 @@ "librechat-data-provider": "*", "node-fetch": "2.7.0", "tiktoken": "^1.0.15", + "undici": "^7.10.0", "zod": "^3.22.4" } } diff --git a/packages/api/src/endpoints/openai/llm.ts b/packages/api/src/endpoints/openai/llm.ts index 2f9a3f6011..ec7c4b863d 100644 --- a/packages/api/src/endpoints/openai/llm.ts +++ b/packages/api/src/endpoints/openai/llm.ts @@ -1,4 +1,4 @@ -import { HttpsProxyAgent } from 'https-proxy-agent'; +import { ProxyAgent } from 'undici'; import { KnownEndpoints } from 'librechat-data-provider'; import type * as t from '~/types'; import { sanitizeModelName, constructAzureURL } from '~/utils/azure'; @@ -102,8 +102,10 @@ export function getOpenAIConfig( } if (proxy) { - const proxyAgent = new HttpsProxyAgent(proxy); - configOptions.httpAgent = proxyAgent; + const proxyAgent = new ProxyAgent(proxy); + configOptions.fetchOptions = { + dispatcher: proxyAgent, + }; } if (azure) {