From 3269943cc348214a6fa618ce015b6471822d43e6 Mon Sep 17 00:00:00 2001 From: Zero Liu Date: Mon, 20 Oct 2025 17:52:50 -0700 Subject: [PATCH] Improve custom command (#1942) * Persist quick command configs * upgrade langchain and fix gpt-5 in custom command * Handle thinking in custom command * code clean up * Address cursor feedback --- esbuild.config.mjs | 19 +- nodeModuleShim.mjs | 37 + package-lock.json | 1315 +++++++++-------- package.json | 27 +- .../chainRunner/AutonomousAgentChainRunner.ts | 12 +- .../chainRunner/utils/ThinkBlockStreamer.ts | 17 +- src/LLMProviders/chatModelManager.ts | 21 +- src/LLMProviders/memoryManager.ts | 2 +- src/chainFactory.ts | 6 +- src/chainUtils.ts | 8 +- src/commands/CustomCommandChatModal.tsx | 50 +- src/components/QuickCommand.tsx | 25 +- src/constants.ts | 2 + src/imageProcessing/imageProcessor.ts | 2 + src/search/hybridRetriever.ts | 9 +- src/search/indexOperations.ts | 2 +- src/search/v3/chunks.ts | 2 +- src/settings/model.ts | 18 + src/utils.ts | 6 +- 19 files changed, 916 insertions(+), 664 deletions(-) create mode 100644 nodeModuleShim.mjs diff --git a/esbuild.config.mjs b/esbuild.config.mjs index fe4b681e..5e926170 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -2,11 +2,19 @@ import esbuild from "esbuild"; import svgPlugin from "esbuild-plugin-svg"; import process from "process"; import wasmPlugin from "./wasmPlugin.mjs"; +import nodeModuleShim from "./nodeModuleShim.mjs"; const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ + +// Polyfill for import.meta in CommonJS context +if (typeof import_meta === 'undefined') { + var import_meta = { + url: typeof __filename !== 'undefined' ? 'file://' + __filename : 'file:///obsidian-plugin' + }; +} `; const prod = process.argv[2] === "production"; @@ -31,6 +39,14 @@ const context = await esbuild.context({ "@lezer/common", "@lezer/highlight", "@lezer/lr", + // Node.js built-in modules (available in Electron) - except node:module which we shim + "node:fs", + "node:path", + "node:url", + "node:buffer", + "node:stream", + "node:crypto", + "node:async_hooks", ], format: "cjs", target: "es2020", @@ -38,10 +54,11 @@ const context = await esbuild.context({ sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", - plugins: [svgPlugin(), wasmPlugin], + plugins: [nodeModuleShim, svgPlugin(), wasmPlugin], define: { global: "window", "process.env.NODE_ENV": prod ? '"production"' : '"development"', + "import.meta.url": "import_meta.url", }, minify: prod, }); diff --git a/nodeModuleShim.mjs b/nodeModuleShim.mjs new file mode 100644 index 00000000..ae76e18d --- /dev/null +++ b/nodeModuleShim.mjs @@ -0,0 +1,37 @@ +// Plugin to provide a shim for node:module in browser/Electron renderer context +const nodeModuleShim = { + name: "node-module-shim", + setup(build) { + // Intercept node:module imports and provide a shim + build.onResolve({ filter: /^node:module$/ }, (args) => { + return { + path: args.path, + namespace: "node-module-shim", + }; + }); + + build.onLoad({ filter: /.*/, namespace: "node-module-shim" }, () => { + return { + contents: ` +// Shim for node:module in Electron/Obsidian environment (CommonJS format) +module.exports = { + createRequire: function(filename) { + // In Electron renderer, we can use the global require + // Note: filename parameter is ignored (may be undefined from @langchain/community v1.0.0) + if (typeof require !== 'undefined') { + return require; + } + // Fallback: return a function that throws a helpful error + return function shimmedRequire(id) { + throw new Error('Dynamic require of "' + id + '" is not supported in this environment'); + }; + } +}; +`, + loader: "js", + }; + }); + }, +}; + +export default nodeModuleShim; diff --git a/package-lock.json b/package-lock.json index a0f17976..64875977 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,18 +13,19 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@google/generative-ai": "^0.21.0", - "@huggingface/inference": "^2.6.4", + "@huggingface/inference": "^4.11.3", "@koa/cors": "^5.0.0", - "@langchain/anthropic": "^0.3.30", - "@langchain/cohere": "^0.3.0", - "@langchain/community": "^0.3.22", - "@langchain/core": "^0.3.45", - "@langchain/deepseek": "^0.0.1", - "@langchain/google-genai": "^0.1.6", - "@langchain/groq": "^0.1.2", - "@langchain/mistralai": "^0.2.0", - "@langchain/openai": "^0.6.6", - "@langchain/xai": "^0.0.2", + "@langchain/anthropic": "^1.0.0", + "@langchain/cohere": "^1.0.0", + "@langchain/community": "^1.0.0", + "@langchain/core": "^1.0.1", + "@langchain/deepseek": "^1.0.0", + "@langchain/google-genai": "^1.0.0", + "@langchain/groq": "^1.0.0", + "@langchain/mistralai": "^1.0.0", + "@langchain/openai": "^1.0.0", + "@langchain/textsplitters": "^1.0.0", + "@langchain/xai": "^1.0.0", "@lexical/plain-text": "^0.34.0", "@lexical/react": "^0.34.0", "@lexical/selection": "^0.34.0", @@ -63,7 +64,7 @@ "jotai": "^2.10.3", "koa": "^2.14.2", "koa-proxies": "^0.12.3", - "langchain": "^0.3.2", + "langchain": "^1.0.1", "lexical": "^0.34.0", "lodash.debounce": "^4.0.8", "lucide-react": "^0.462.0", @@ -83,7 +84,7 @@ "trie-search": "^2.2.0" }, "devDependencies": { - "@langchain/ollama": "^0.2.0", + "@langchain/ollama": "^1.0.0", "@tailwindcss/container-queries": "^0.1.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", @@ -183,6 +184,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "optional": true, + "peer": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -193,6 +196,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -202,7 +207,9 @@ "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true, + "peer": true }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", @@ -1095,47 +1102,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz", - "integrity": "sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==", - "deprecated": "This package has moved to @smithy/protocol-http", - "dependencies": { - "@smithy/protocol-http": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/protocol-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", - "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", - "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.614.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", @@ -1157,132 +1123,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz", - "integrity": "sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==", - "deprecated": "This package has moved to @smithy/signature-v4", - "dependencies": { - "@smithy/signature-v4": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/eventstream-codec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", - "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/is-array-buffer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", - "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/signature-v4": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", - "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", - "dependencies": { - "@smithy/eventstream-codec": "^1.1.0", - "@smithy/is-array-buffer": "^1.1.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "@smithy/util-middleware": "^1.1.0", - "@smithy/util-uri-escape": "^1.1.0", - "@smithy/util-utf8": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", - "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", - "dependencies": { - "@smithy/is-array-buffer": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-hex-encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", - "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", - "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-uri-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", - "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", - "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", - "dependencies": { - "@smithy/util-buffer-from": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, "node_modules/@aws-sdk/token-providers": { "version": "3.614.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", @@ -1405,6 +1245,8 @@ "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "peer": true, "dependencies": { "tslib": "^2.3.1" } @@ -2686,13 +2528,33 @@ } }, "node_modules/@huggingface/inference": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.6.4.tgz", - "integrity": "sha512-Xna7arltBSBoKaH3diGi3sYvkExgJMd/pF4T6vl2YbmDccbr1G/X5EPZ2048p+YgrJYG1jTYFCtY6Dr3HvJaow==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-4.11.3.tgz", + "integrity": "sha512-Fqpj89DuB6i9j+cos9i0bfUKlpx5NFFsmvED0OAdE1gUSTHR86GpUZ0xkKy58IYXV1yFyHLFxQaOn0XDmD2m7Q==", + "license": "MIT", + "dependencies": { + "@huggingface/jinja": "^0.5.1", + "@huggingface/tasks": "^0.19.52" + }, "engines": { "node": ">=18" } }, + "node_modules/@huggingface/jinja": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.5.1.tgz", + "integrity": "sha512-yUZLld4lrM9iFxHCwFQ7D1HW2MWMwSbeB7WzWqFYDWK+rEb+WldkLdAJxUPOmgICMHZLzZGVcVjFh3w/YGubng==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@huggingface/tasks": { + "version": "0.19.56", + "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.19.56.tgz", + "integrity": "sha512-sULqkRk5V6f39+N6MfpxjJklr9KrnIsJx5RyxkhNdTKQfn6ZRDBLoWBVJx4e4F67yelh7zzyBOfCS5MI14jRgA==", + "license": "MIT" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -3846,19 +3708,18 @@ } }, "node_modules/@langchain/anthropic": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.30.tgz", - "integrity": "sha512-ZO6b8G+6OxI/4drCSWIzMC67o7ZhWGlX6OXhO30X0BgtMYHwpYlU7ATPT/9+IvOcFSytC7GZsWb5zKknLku0vw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-1.0.0.tgz", + "integrity": "sha512-Lud/FrkFmXMYW5R9y0FC+RGdgjBBVQ2JAnG3A8E1I4+sqv5JgJttw3HKRpFkyBUSyacs6LMfSn5dbJ6TT9nMiQ==", "license": "MIT", "dependencies": { - "@anthropic-ai/sdk": "^0.65.0", - "fast-xml-parser": "^4.4.1" + "@anthropic-ai/sdk": "^0.65.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.3.58 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/anthropic/node_modules/@anthropic-ai/sdk": { @@ -3881,21 +3742,112 @@ } } }, - "node_modules/@langchain/cohere": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@langchain/cohere/-/cohere-0.3.0.tgz", - "integrity": "sha512-JlevgVK4oUwHiPcP7Xw55Xlp8FdbCsjDuWbcjWgeYcdTTH1sIItG/nDREZa8Z+MfXYca2njk4sZjCIuGsY7fVA==", + "node_modules/@langchain/classic": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/classic/-/classic-1.0.0.tgz", + "integrity": "sha512-darZFvO5g5e3TqZ4rvZ938F94D4a34v2ZdWfyipmyu7WB4RXMshmYtWCp98o4ec3bfRD9S4+oHMmaPcnk5cs5A==", + "license": "MIT", "dependencies": { - "cohere-ai": "^7.10.5", + "@langchain/openai": "1.0.0-alpha.3", + "@langchain/textsplitters": "1.0.0", + "handlebars": "^4.7.8", + "js-yaml": "^4.1.0", + "jsonpointer": "^5.0.1", + "openapi-types": "^12.1.3", + "p-retry": "4", "uuid": "^10.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.1" + "yaml": "^2.2.1", + "zod": "^3.25.76 || ^4" }, "engines": { - "node": ">=18" + "node": ">=20" + }, + "optionalDependencies": { + "langsmith": "^0.3.64" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@langchain/core": "^1.0.0", + "cheerio": "*", + "peggy": "^3.0.2", + "typeorm": "*" + }, + "peerDependenciesMeta": { + "cheerio": { + "optional": true + }, + "peggy": { + "optional": true + }, + "typeorm": { + "optional": true + } + } + }, + "node_modules/@langchain/classic/node_modules/@langchain/openai": { + "version": "1.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-1.0.0-alpha.3.tgz", + "integrity": "sha512-re2NXLYeLatPzoB6YRoFgB1fW6i5ygcLGa7PlNOhi3f93uU1vSlWMgjkO9dcN9ALmr/bhoruqJEn7U0Eva+6/w==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12", + "openai": "^6.3.0", + "zod": "^3.25.76 || ^4" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.0.0-alpha.6" + } + }, + "node_modules/@langchain/classic/node_modules/openai": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.5.0.tgz", + "integrity": "sha512-bNqJ15Ijbs41KuJ2iYz/mGAruFHzQQt7zXo4EvjNLoB64aJdgn1jlMeDTsXjEg+idVYafg57QB/5Rd16oqvZ6A==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@langchain/classic/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/cohere": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/cohere/-/cohere-1.0.0.tgz", + "integrity": "sha512-KqncspXKt2ueqkR5/LlOvm+rOIzx/AQhkITDYWFNOU4/BxPG238anE87jXnCOSE4LRlic+BdmFHEqstHd+lyYA==", + "license": "MIT", + "dependencies": { + "cohere-ai": "^7.14.0", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/cohere/node_modules/uuid": { @@ -3911,57 +3863,50 @@ } }, "node_modules/@langchain/community": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.22.tgz", - "integrity": "sha512-RGfmG3sfJhVpdFHyPwdQhrzGXdGoCoBh6zWB79/4WaMVU0q0Uo1Y/NeeslSxp778sWEeJkRcXZC73dR8lwOFjw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/community/-/community-1.0.0.tgz", + "integrity": "sha512-CM4vUZHaFHq8HpWBMIWPO5bo/rmRPJ1/iaJk7s8CghkkQ0WLaZzDtoG/wJKJZMDJOUVCtZKTw+TytlGu00/9dg==", + "license": "MIT", "dependencies": { - "@langchain/openai": ">=0.2.0 <0.4.0", + "@langchain/classic": "1.0.0", + "@langchain/openai": "1.0.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", - "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", - "langsmith": "^0.2.8", "uuid": "^10.0.0", - "zod": "^3.22.3", - "zod-to-json-schema": "^3.22.5" + "zod": "^3.25.76 || ^4" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", - "@aws-sdk/client-bedrock-agent-runtime": "^3.583.0", - "@aws-sdk/client-bedrock-runtime": "^3.422.0", - "@aws-sdk/client-dynamodb": "^3.310.0", - "@aws-sdk/client-kendra": "^3.352.0", - "@aws-sdk/client-lambda": "^3.310.0", - "@aws-sdk/client-s3": "^3.310.0", - "@aws-sdk/client-sagemaker-runtime": "^3.310.0", - "@aws-sdk/client-sfn": "^3.310.0", + "@aws-sdk/client-dynamodb": "^3.749.0", + "@aws-sdk/client-lambda": "^3.749.0", + "@aws-sdk/client-s3": "^3.749.0", + "@aws-sdk/client-sagemaker-runtime": "^3.749.0", + "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", - "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", - "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", - "@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", + "@lancedb/lancedb": "^0.19.1", + "@langchain/core": "^1.0.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", @@ -3970,10 +3915,8 @@ "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", - "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", - "@qdrant/js-client-rest": "^1.8.2", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", @@ -3983,7 +3926,6 @@ "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", - "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", @@ -3995,6 +3937,7 @@ "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", + "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", @@ -4003,17 +3946,15 @@ "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", - "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", - "dria": "^0.0.3", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", - "faiss-node": "^0.5.1", + "faiss-node": "*", "fast-xml-parser": "*", - "firebase-admin": "^11.9.0 || ^12.0.0", + "firebase-admin": "^11.9.0 || ^12.0.0 || ^13.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", @@ -4025,13 +3966,14 @@ "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", - "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", - "mongodb": ">=5.2.0", + "mariadb": "^3.4.0", + "mem0ai": "^2.1.8", "mysql2": "^3.9.8", "neo4j-driver": "*", + "node-llama-cpp": ">=3.0.0", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", @@ -4043,20 +3985,16 @@ "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", - "redis": "*", - "replicate": "^0.29.4", + "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", - "weaviate-ts-client": "*", - "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", - "youtube-transcript": "^1.0.6", - "youtubei.js": "^9.1.0" + "youtubei.js": "*" }, "peerDependenciesMeta": { "@arcjet/redact": { @@ -4065,18 +4003,9 @@ "@aws-crypto/sha256-js": { "optional": true }, - "@aws-sdk/client-bedrock-agent-runtime": { - "optional": true - }, - "@aws-sdk/client-bedrock-runtime": { - "optional": true - }, "@aws-sdk/client-dynamodb": { "optional": true }, - "@aws-sdk/client-kendra": { - "optional": true - }, "@aws-sdk/client-lambda": { "optional": true }, @@ -4092,6 +4021,9 @@ "@aws-sdk/credential-provider-node": { "optional": true }, + "@aws-sdk/dsql-signer": { + "optional": true + }, "@azure/search-documents": { "optional": true }, @@ -4104,9 +4036,6 @@ "@clickhouse/client": { "optional": true }, - "@cloudflare/ai": { - "optional": true - }, "@datastax/astra-db-ts": { "optional": true }, @@ -4122,15 +4051,9 @@ "@getzep/zep-js": { "optional": true }, - "@gomomento/sdk": { - "optional": true - }, "@gomomento/sdk-core": { "optional": true }, - "@google-ai/generativelanguage": { - "optional": true - }, "@google-cloud/storage": { "optional": true }, @@ -4209,9 +4132,6 @@ "@tensorflow-models/universal-sentence-encoder": { "optional": true }, - "@tensorflow/tfjs-converter": { - "optional": true - }, "@tensorflow/tfjs-core": { "optional": true }, @@ -4236,6 +4156,9 @@ "@xata.io/client": { "optional": true }, + "@xenova/transformers": { + "optional": true + }, "@zilliz/milvus2-sdk-node": { "optional": true }, @@ -4245,6 +4168,9 @@ "assemblyai": { "optional": true }, + "azion": { + "optional": true + }, "better-sqlite3": { "optional": true }, @@ -4284,9 +4210,6 @@ "discord.js": { "optional": true }, - "dria": { - "optional": true - }, "duck-duck-scrape": { "optional": true }, @@ -4332,9 +4255,6 @@ "jsonwebtoken": { "optional": true }, - "llmonitor": { - "optional": true - }, "lodash": { "optional": true }, @@ -4344,6 +4264,12 @@ "mammoth": { "optional": true }, + "mariadb": { + "optional": true + }, + "mem0ai": { + "optional": true + }, "mongodb": { "optional": true }, @@ -4353,6 +4279,9 @@ "neo4j-driver": { "optional": true }, + "node-llama-cpp": { + "optional": true + }, "notion-to-md": { "optional": true }, @@ -4407,10 +4336,7 @@ "voy-search": { "optional": true }, - "weaviate-ts-client": { - "optional": true - }, - "web-auth-library": { + "weaviate-client": { "optional": true }, "word-extractor": { @@ -4419,32 +4345,11 @@ "ws": { "optional": true }, - "youtube-transcript": { - "optional": true - }, "youtubei.js": { "optional": true } } }, - "node_modules/@langchain/community/node_modules/@langchain/openai": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.17.tgz", - "integrity": "sha512-uw4po32OKptVjq+CYHrumgbfh4NuD7LqyE+ZgqY9I/LrLc6bHLMc+sisHmI17vgek0K/yqtarI0alPJbzrwyag==", - "license": "MIT", - "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.77.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.3.29 <0.4.0" - } - }, "node_modules/@langchain/community/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -4453,14 +4358,15 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@langchain/core": { - "version": "0.3.68", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.68.tgz", - "integrity": "sha512-dWPT1h9ObG1TK9uivFTk/pgBULZ6/tBmq8czGUjZjR+1xh9jB4tm/D5FY6o5FklXcEpnAI9peNq2x17Kl9wbMg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@langchain/core/-/core-1.0.1.tgz", + "integrity": "sha512-hVM3EkojYOk4ISJQKjLuWYSH6kyyOFlZIrLFETDA1L0Z2/Iu0q32aJawZ0FDn6rlXE8QZjBt/9OaOL36rXc05w==", "license": "MIT", "dependencies": { "@cfworker/json-schema": "^4.0.2", @@ -4468,16 +4374,15 @@ "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", - "langsmith": "^0.3.46", + "langsmith": "^0.3.64", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", - "zod": "^3.25.32", - "zod-to-json-schema": "^3.22.3" + "zod": "^3.25.76 || ^4" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@langchain/core/node_modules/ansi-styles": { @@ -4502,72 +4407,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@langchain/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@langchain/core/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@langchain/core/node_modules/langsmith": { - "version": "0.3.54", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.54.tgz", - "integrity": "sha512-+yMM0pFU172QLq/PIUdaI0Yn+M6CjSSFEQh2R+0B1IvtmVuB72R8if8eLnQ8LdqgvN7jHTjTqJmc/EZVJqv+QA==", - "license": "MIT", - "dependencies": { - "@types/uuid": "^10.0.0", - "chalk": "^4.1.2", - "console-table-printer": "^2.12.1", - "p-queue": "^6.6.2", - "p-retry": "4", - "semver": "^7.6.3", - "uuid": "^10.0.0" - }, - "peerDependencies": { - "@opentelemetry/api": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/sdk-trace-base": "*", - "openai": "*" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@opentelemetry/exporter-trace-otlp-proto": { - "optional": true - }, - "@opentelemetry/sdk-trace-base": { - "optional": true - }, - "openai": { - "optional": true - } - } - }, "node_modules/@langchain/core/node_modules/p-queue": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", @@ -4610,102 +4449,207 @@ } }, "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": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/deepseek/-/deepseek-1.0.0.tgz", + "integrity": "sha512-jNMnX4iiqc+/T7kSr8JlDvtneFc1Jxc+I1feoBtGhnoGr8jN4R7t5oFvkuIZBaGNvS/mtJlP6Ujy3Z/X1qqjxg==", + "license": "MIT", "dependencies": { - "@langchain/openai": "^0.4.2", - "zod": "^3.24.1" + "@langchain/openai": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.3.0 <0.4.0" - } - }, - "node_modules/@langchain/deepseek/node_modules/@langchain/openai": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.4.9.tgz", - "integrity": "sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==", - "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.87.3", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.3.39 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/google-genai": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-0.1.6.tgz", - "integrity": "sha512-LF3fan9pvgFa1vw2/IYGhi5KjppE0OvPFX3QQBUshBLpXWERP+BSpSD7jcXyqm9Kf7DcFj7w5/2knKeEwih8Xg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-1.0.0.tgz", + "integrity": "sha512-ICUBZl/46nG6+Yhe5v7kp/2TQBGOzqEkpfKPLDeNyJ4x9OOL46xsW3ZZrHJjhGMQuR6/JMmQMTU9kLoYgsd1Tg==", + "license": "MIT", "dependencies": { - "@google/generative-ai": "^0.21.0", - "zod-to-json-schema": "^3.22.4" + "@google/generative-ai": "^0.24.0", + "uuid": "^11.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.3.17 <0.4.0" + "@langchain/core": "^1.0.0" + } + }, + "node_modules/@langchain/google-genai/node_modules/@google/generative-ai": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz", + "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@langchain/google-genai/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" } }, "node_modules/@langchain/groq": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@langchain/groq/-/groq-0.1.2.tgz", - "integrity": "sha512-bgQ9yGoNHOwG6LG2ngGvSNxF/1U1c1u3vKmFWmzecFIcBoQQOJY0jb0MrL3g1uTife0Sr3zxkWKXQg2aK/U4Sg==", - "dependencies": { - "@langchain/openai": "~0.3.0", - "groq-sdk": "^0.5.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" - } - }, - "node_modules/@langchain/groq/node_modules/@langchain/openai": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.17.tgz", - "integrity": "sha512-uw4po32OKptVjq+CYHrumgbfh4NuD7LqyE+ZgqY9I/LrLc6bHLMc+sisHmI17vgek0K/yqtarI0alPJbzrwyag==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/groq/-/groq-1.0.0.tgz", + "integrity": "sha512-6fG9MEQHNXnxgObFHSPh+BPYyTGcoDnKd+GhI9l96cpHh+QNI+IvypicRCZVSsLdqzRCFHISvBQaH+SP5vgjIw==", "license": "MIT", "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.77.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "groq-sdk": "^0.19.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.0.0" + } + }, + "node_modules/@langchain/langgraph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-1.0.0.tgz", + "integrity": "sha512-2k7Thk5qH0zMhP+sbNKwQZl6zSwxKtrsFmHGOEvUUMjH6Rb9n5IMxoF5WTJlP/CGMO9ulI+5UefNz3rOfjuPBg==", + "license": "MIT", + "dependencies": { + "@langchain/langgraph-checkpoint": "^1.0.0", + "@langchain/langgraph-sdk": "~1.0.0", + "uuid": "^10.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@langchain/core": ">=0.3.29 <0.4.0" + "@langchain/core": "^1.0.1", + "zod": "^3.25.32 || ^4.1.0", + "zod-to-json-schema": "^3.x" + }, + "peerDependenciesMeta": { + "zod-to-json-schema": { + "optional": true + } + } + }, + "node_modules/@langchain/langgraph-checkpoint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.0.0.tgz", + "integrity": "sha512-xrclBGvNCXDmi0Nz28t3vjpxSH6UYx6w5XAXSiiB1WEdc2xD2iY/a913I3x3a31XpInUW/GGfXXfePfaghV54A==", + "license": "MIT", + "dependencies": { + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": "^1.0.1" + } + }, + "node_modules/@langchain/langgraph-checkpoint/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/langgraph-sdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-1.0.0.tgz", + "integrity": "sha512-g25ti2W7Dl5wUPlNK+0uIGbeNFqf98imhHlbdVVKTTkDYLhi/pI1KTgsSSkzkeLuBIfvt2b0q6anQwCs7XBlbw==", + "license": "MIT", + "dependencies": { + "p-queue": "^6.6.2", + "p-retry": "4", + "uuid": "^9.0.0" + }, + "peerDependencies": { + "@langchain/core": "^1.0.1", + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@langchain/core": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@langchain/langgraph-sdk/node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@langchain/langgraph-sdk/node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@langchain/langgraph/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "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": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-1.0.0.tgz", + "integrity": "sha512-gzRjDjGGgd5RApF3pSO1t15nJmnbmutT/XcNfyemmJjL5LhD7+Z0PeMqDshmGdMh/holBo6b7su8aCLGon+X8g==", + "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" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.3.7 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/mistralai/node_modules/uuid": { @@ -4716,70 +4660,70 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "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==", - "devOptional": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-1.0.0.tgz", + "integrity": "sha512-zqn6i7haMjvZW4FQWo0GrF4wYL5mLurdL0qoe+moYWYSCGaay4K7e/4dqM5C/MR16/HPFDzFbBRMkni2PDRBgA==", + "dev": true, "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" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/ollama/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "devOptional": true, + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@langchain/openai": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.6.6.tgz", - "integrity": "sha512-0fxSg290WTCTEM0PECDGfst2QYUiULKhzyydaOPLMQ5pvWHjJkzBudx+CyHkeQ8DvGXysJteSmZzAMjRCj4duQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-1.0.0.tgz", + "integrity": "sha512-olKEUIjb3HBOiD/NR056iGJz4wiN6HhQ/u65YmGWYadWWoKOcGwheBw/FE0x6SH4zDlI3QmP+vMhuQoaww19BQ==", "license": "MIT", "dependencies": { "js-tiktoken": "^1.0.12", - "openai": "^5.12.1", - "zod": "^3.25.32" + "openai": "^6.3.0", + "zod": "^3.25.76 || ^4" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.3.68 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@langchain/openai/node_modules/openai": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.1.tgz", - "integrity": "sha512-26s536j4Fi7P3iUma1S9H33WRrw0Qu8pJ2nYJHffrlKHPU0JK4d0r3NcMgqEcAeTdNLGYNyoFsqN4g4YE9vutg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.5.0.tgz", + "integrity": "sha512-bNqJ15Ijbs41KuJ2iYz/mGAruFHzQQt7zXo4EvjNLoB64aJdgn1jlMeDTsXjEg+idVYafg57QB/5Rd16oqvZ6A==", "license": "Apache-2.0", "bin": { "openai": "bin/cli" }, "peerDependencies": { "ws": "^8.18.0", - "zod": "^3.23.8" + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { "ws": { @@ -4791,49 +4735,33 @@ } }, "node_modules/@langchain/textsplitters": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.1.0.tgz", - "integrity": "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-1.0.0.tgz", + "integrity": "sha512-L1gOwOJXeM+6MKzrj9shSsDyH32j898jgqvVArOjdge2zLyY+Mv4aOuyAAxbPyaFdQXlxKfa9xjqIUyv8TzrqA==", + "license": "MIT", "dependencies": { "js-tiktoken": "^1.0.12" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@langchain/core": "^1.0.0" } }, "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": "1.0.0", + "resolved": "https://registry.npmjs.org/@langchain/xai/-/xai-1.0.0.tgz", + "integrity": "sha512-r/MsnUwueEL5zo3jYuSB+Kx7E/qamNLHIhUYUOPxVFl1QF4CKTB3JdrWMCRyvOHRAKYHBU1BXZ3iAhAoib51Rw==", + "license": "MIT", "dependencies": { - "@langchain/openai": "~0.4.4", - "zod": "^3.24.2" + "@langchain/openai": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" - } - }, - "node_modules/@langchain/xai/node_modules/@langchain/openai": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.4.9.tgz", - "integrity": "sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==", - "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.87.3", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.3.39 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/@lexical/clipboard": { @@ -5101,14 +5029,12 @@ "license": "MIT" }, "node_modules/@mistralai/mistralai": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.5.0.tgz", - "integrity": "sha512-AIn8pwAwA/fDvEUvmkt+40zH1ZmfaG3Q7oUWl17GUEC1tU7ZPwYz8Cv9P59lyS1SisHdDSu81oknO7f1ywkz8Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.10.0.tgz", + "integrity": "sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg==", "dependencies": { + "zod": "^3.20.0", "zod-to-json-schema": "^3.24.1" - }, - "peerDependencies": { - "zod": ">= 3" } }, "node_modules/@next/env": { @@ -11664,24 +11590,144 @@ } }, "node_modules/cohere-ai": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.13.0.tgz", - "integrity": "sha512-/VTqq2dW7YkQEfeBwEmckAHorQuw1exnfrO3orsixVXASr71oF3TL0w/xi9ZVN9xsoYpXZyVaiD8GBxLEiGJ7Q==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.19.0.tgz", + "integrity": "sha512-TV8tYFUBB38GvcFHmS165+OAYmpMm8cqDk44LianFNxJMjUWbJf91hEs69PIDl8ghvI4r098GjolUlsiO1uR1A==", "dependencies": { "@aws-sdk/client-sagemaker": "^3.583.0", "@aws-sdk/credential-providers": "^3.583.0", - "@aws-sdk/protocol-http": "^3.374.0", - "@aws-sdk/signature-v4": "^3.374.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "convict": "^6.2.4", "form-data": "^4.0.0", "form-data-encoder": "^4.0.2", "formdata-node": "^6.0.3", - "js-base64": "3.7.2", - "node-fetch": "2.7.0", - "qs": "6.11.2", + "js-base64": "3.7.7", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", "readable-stream": "^4.5.2", "url-join": "4.0.1" } }, + "node_modules/cohere-ai/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/protocol-http": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.3.tgz", + "integrity": "sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/signature-v4": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.3.tgz", + "integrity": "sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.3", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/types": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.8.0.tgz", + "integrity": "sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/util-middleware": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.3.tgz", + "integrity": "sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/cohere-ai/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/cohere-ai/node_modules/form-data-encoder": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", @@ -11698,6 +11744,12 @@ "node": ">= 18" } }, + "node_modules/cohere-ai/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -11817,6 +11869,28 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/convict/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/cookies": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", @@ -14081,9 +14155,10 @@ "dev": true }, "node_modules/groq-sdk": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/groq-sdk/-/groq-sdk-0.5.0.tgz", - "integrity": "sha512-RVmhW7qZ+XZoy5fIuSdx/LGQJONpL8MHgZEW7dFwTdgkzStub2XQx6OKv28CHogijdwH41J+Npj/z2jBPu3vmw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/groq-sdk/-/groq-sdk-0.19.0.tgz", + "integrity": "sha512-vdh5h7ORvwvOvutA80dKF81b0gPWHxu6K/GOJBOM0n6p6CSqAVLhFfeS79Ef0j/yCycDR09jqY7jkYz9dLiS6w==", + "license": "Apache-2.0", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -14091,18 +14166,39 @@ "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7", - "web-streams-polyfill": "^3.2.1" + "node-fetch": "^2.6.7" } }, "node_modules/groq-sdk/node_modules/@types/node": { - "version": "18.19.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", - "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -16460,9 +16556,10 @@ } }, "node_modules/js-base64": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", - "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "license": "BSD-3-Clause" }, "node_modules/js-tiktoken": { "version": "1.0.14", @@ -16626,6 +16723,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16792,104 +16890,24 @@ } }, "node_modules/langchain": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.3.9.tgz", - "integrity": "sha512-uteRutI03Bt9f53nZmx8mWfJXkf6VlFVRuOprRJ0mWdCpkTP359sxrH4v6w4TokLiziPC/aMay662kmOz0dHlA==", - "dependencies": { - "@langchain/openai": ">=0.1.0 <0.4.0", - "@langchain/textsplitters": ">=0.0.0 <0.2.0", - "js-tiktoken": "^1.0.12", - "js-yaml": "^4.1.0", - "jsonpointer": "^5.0.1", - "langsmith": "^0.2.8", - "openapi-types": "^12.1.3", - "p-retry": "4", - "uuid": "^10.0.0", - "yaml": "^2.2.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/anthropic": "*", - "@langchain/aws": "*", - "@langchain/cerebras": "*", - "@langchain/cohere": "*", - "@langchain/core": ">=0.2.21 <0.4.0", - "@langchain/google-genai": "*", - "@langchain/google-vertexai": "*", - "@langchain/groq": "*", - "@langchain/mistralai": "*", - "@langchain/ollama": "*", - "axios": "*", - "cheerio": "*", - "handlebars": "^4.7.8", - "peggy": "^3.0.2", - "typeorm": "*" - }, - "peerDependenciesMeta": { - "@langchain/anthropic": { - "optional": true - }, - "@langchain/aws": { - "optional": true - }, - "@langchain/cerebras": { - "optional": true - }, - "@langchain/cohere": { - "optional": true - }, - "@langchain/google-genai": { - "optional": true - }, - "@langchain/google-vertexai": { - "optional": true - }, - "@langchain/groq": { - "optional": true - }, - "@langchain/mistralai": { - "optional": true - }, - "@langchain/ollama": { - "optional": true - }, - "axios": { - "optional": true - }, - "cheerio": { - "optional": true - }, - "handlebars": { - "optional": true - }, - "peggy": { - "optional": true - }, - "typeorm": { - "optional": true - } - } - }, - "node_modules/langchain/node_modules/@langchain/openai": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.17.tgz", - "integrity": "sha512-uw4po32OKptVjq+CYHrumgbfh4NuD7LqyE+ZgqY9I/LrLc6bHLMc+sisHmI17vgek0K/yqtarI0alPJbzrwyag==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/langchain/-/langchain-1.0.1.tgz", + "integrity": "sha512-IT4JBVbKBh2AjaUFT9OsmOfeK3UbKy3SgdzZOuvet25sAaMpAR8IaM9XVddRs+OXQqVg6sOS01KUUVCJksVhHg==", "license": "MIT", "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.77.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "@langchain/langgraph": "^1.0.0", + "@langchain/langgraph-checkpoint": "^1.0.0", + "uuid": "^10.0.0", + "zod": "^3.25.76 || ^4" }, "engines": { - "node": ">=18" + "node": ">=20" + }, + "optionalDependencies": { + "langsmith": "^0.3.64" }, "peerDependencies": { - "@langchain/core": ">=0.3.29 <0.4.0" + "@langchain/core": "^1.0.0" } }, "node_modules/langchain/node_modules/uuid": { @@ -16900,37 +16918,60 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/langsmith": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.2.14.tgz", - "integrity": "sha512-ClAuAgSf3m9miMYotLEaZKQyKdaWlfjhebCuYco8bc6g72dU2VwTg31Bv4YINBq7EH2i1cMwbOiJxbOXPqjGig==", + "version": "0.3.74", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.74.tgz", + "integrity": "sha512-ZuW3Qawz8w88XcuCRH91yTp6lsdGuwzRqZ5J0Hf5q/AjMz7DwcSv0MkE6V5W+8hFMI850QZN2Wlxwm3R9lHlZg==", + "license": "MIT", "dependencies": { "@types/uuid": "^10.0.0", - "commander": "^10.0.1", + "chalk": "^4.1.2", + "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, "openai": { "optional": true } } }, - "node_modules/langsmith/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/langsmith/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/langsmith/node_modules/p-queue": { @@ -16969,6 +17010,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -17388,6 +17430,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "devOptional": true }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -18537,6 +18585,15 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -18608,6 +18665,12 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, "node_modules/next": { "version": "15.5.4", "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", @@ -19581,10 +19644,10 @@ } }, "node_modules/ollama": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.5.14.tgz", - "integrity": "sha512-pvOuEYa2WkkAumxzJP0RdEYHkbZ64AYyyUszXVX7ruLvk5L+EiO2G71da2GqEQ4IAk4j6eLoUbGk5arzFT1wJA==", - "devOptional": true, + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.5.18.tgz", + "integrity": "sha512-lTFqTf9bo7Cd3hpF6CviBe/DEhewjoZYd9N/uCe7O20qYTvGqrNOFOBDj3lbZgFWHUgDv5EeyusYxsZSLS8nvg==", + "dev": true, "license": "MIT", "dependencies": { "whatwg-fetch": "^3.6.20" @@ -19634,6 +19697,7 @@ "version": "4.95.1", "resolved": "https://registry.npmjs.org/openai/-/openai-4.95.1.tgz", "integrity": "sha512-IqJy+ymeW+k/Wq+2YVN3693OQMMcODRtHEYOlz263MdUwnN/Dwdl9c2EXSxLLtGEHkSHAfvzpDMHI5MaWJKXjQ==", + "peer": true, "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -19663,6 +19727,7 @@ "version": "18.19.33", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "peer": true, "dependencies": { "undici-types": "~5.26.4" } @@ -19670,7 +19735,8 @@ "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==" + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT" }, "node_modules/optionator": { "version": "0.9.4", @@ -20449,11 +20515,12 @@ ] }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -22599,6 +22666,19 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -22973,6 +23053,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "dev": true, "engines": { "node": ">= 8" } @@ -23002,7 +23083,7 @@ "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/whatwg-mimetype": { @@ -23137,6 +23218,12 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 3f885c75..e5dd35ff 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ }, "license": "AGPL-3.0", "devDependencies": { - "@langchain/ollama": "^0.2.0", + "@langchain/ollama": "^1.0.0", "@tailwindcss/container-queries": "^0.1.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", @@ -81,18 +81,19 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@google/generative-ai": "^0.21.0", - "@huggingface/inference": "^2.6.4", + "@huggingface/inference": "^4.11.3", "@koa/cors": "^5.0.0", - "@langchain/anthropic": "^0.3.30", - "@langchain/cohere": "^0.3.0", - "@langchain/community": "^0.3.22", - "@langchain/core": "^0.3.45", - "@langchain/deepseek": "^0.0.1", - "@langchain/google-genai": "^0.1.6", - "@langchain/groq": "^0.1.2", - "@langchain/mistralai": "^0.2.0", - "@langchain/openai": "^0.6.6", - "@langchain/xai": "^0.0.2", + "@langchain/anthropic": "^1.0.0", + "@langchain/cohere": "^1.0.0", + "@langchain/community": "^1.0.0", + "@langchain/core": "^1.0.1", + "@langchain/deepseek": "^1.0.0", + "@langchain/google-genai": "^1.0.0", + "@langchain/groq": "^1.0.0", + "@langchain/mistralai": "^1.0.0", + "@langchain/openai": "^1.0.0", + "@langchain/textsplitters": "^1.0.0", + "@langchain/xai": "^1.0.0", "@lexical/plain-text": "^0.34.0", "@lexical/react": "^0.34.0", "@lexical/selection": "^0.34.0", @@ -131,7 +132,7 @@ "jotai": "^2.10.3", "koa": "^2.14.2", "koa-proxies": "^0.12.3", - "langchain": "^0.3.2", + "langchain": "^1.0.1", "lexical": "^0.34.0", "lodash.debounce": "^4.0.8", "lucide-react": "^0.462.0", diff --git a/src/LLMProviders/chainRunner/AutonomousAgentChainRunner.ts b/src/LLMProviders/chainRunner/AutonomousAgentChainRunner.ts index 83495ccf..c4600fe0 100644 --- a/src/LLMProviders/chainRunner/AutonomousAgentChainRunner.ts +++ b/src/LLMProviders/chainRunner/AutonomousAgentChainRunner.ts @@ -10,6 +10,7 @@ import { deriveReadNoteDisplayName, ToolResultFormatter } from "@/tools/ToolResu import { ChatMessage, ResponseMetadata, StreamingResult } from "@/types/message"; import { getMessageRole, withSuppressedTokenWarnings } from "@/utils"; import { processToolResults } from "@/utils/toolResultUtils"; +import { HumanMessage, AIMessage, BaseMessage } from "@langchain/core/messages"; import { CopilotPlusChainRunner } from "./CopilotPlusChainRunner"; import { addChatHistoryToMessages } from "./utils/chatHistoryUtils"; import { @@ -773,8 +774,17 @@ ${params} while (retryCount <= maxRetries) { try { + // Convert ConversationMessage to LangChain BaseMessage format + const langchainMessages: BaseMessage[] = messages.map((msg) => { + if (msg.role === "user") { + return new HumanMessage(msg.content); + } else { + return new AIMessage(msg.content); + } + }); + const chatStream = await withSuppressedTokenWarnings(() => - this.chainManager.chatModelManager.getChatModel().stream(messages, { + this.chainManager.chatModelManager.getChatModel().stream(langchainMessages, { signal: abortController.signal, }) ); diff --git a/src/LLMProviders/chainRunner/utils/ThinkBlockStreamer.ts b/src/LLMProviders/chainRunner/utils/ThinkBlockStreamer.ts index ddf4bf99..69020dec 100644 --- a/src/LLMProviders/chainRunner/utils/ThinkBlockStreamer.ts +++ b/src/LLMProviders/chainRunner/utils/ThinkBlockStreamer.ts @@ -16,17 +16,24 @@ export class ThinkBlockStreamer { constructor( private updateCurrentAiMessage: (message: string) => void, - private modelAdapter?: ModelAdapter + private modelAdapter?: ModelAdapter, + private excludeThinking: boolean = false ) {} private handleClaude37Chunk(content: any[]) { let textContent = ""; + let hasThinkingContent = false; for (const item of content) { switch (item.type) { case "text": textContent += item.text; break; case "thinking": + hasThinkingContent = true; + // Skip thinking content if excludeThinking is enabled + if (this.excludeThinking) { + break; + } if (!this.hasOpenThinkBlock) { this.fullResponse += "\n"; this.hasOpenThinkBlock = true; @@ -36,13 +43,13 @@ export class ThinkBlockStreamer { this.fullResponse += item.thinking; } this.updateCurrentAiMessage(this.fullResponse); - return true; // Indicate we handled a thinking chunk + break; } } if (textContent) { this.fullResponse += textContent; } - return false; // No thinking chunk handled + return hasThinkingContent; } private handleDeepseekChunk(chunk: any) { @@ -53,6 +60,10 @@ export class ThinkBlockStreamer { // Handle deepseek reasoning/thinking content if (chunk.additional_kwargs?.reasoning_content) { + // Skip thinking content if excludeThinking is enabled + if (this.excludeThinking) { + return true; // Indicate we handled (but skipped) a thinking chunk + } if (!this.hasOpenThinkBlock) { this.fullResponse += "\n"; this.hasOpenThinkBlock = true; diff --git a/src/LLMProviders/chatModelManager.ts b/src/LLMProviders/chatModelManager.ts index 0475650d..f1f8e2a3 100644 --- a/src/LLMProviders/chatModelManager.ts +++ b/src/LLMProviders/chatModelManager.ts @@ -206,7 +206,7 @@ export default class ChatModelManager { }, [ChatModelProviders.GOOGLE]: { apiKey: await getDecryptedKey(customModel.apiKey || settings.googleApiKey), - modelName: modelName, + model: modelName, safetySettings: [ { category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, @@ -246,7 +246,7 @@ export default class ChatModelManager { }, [ChatModelProviders.GROQ]: { apiKey: await getDecryptedKey(customModel.apiKey || settings.groqApiKey), - modelName: modelName, + model: modelName, }, [ChatModelProviders.OLLAMA]: { // ChatOllama has `model` instead of `modelName`!! @@ -475,6 +475,23 @@ export default class ChatModelManager { return ChatModelManager.chatModel; } + /** + * langchain 1.0 TypeScript doesn't support temperature override in BaseChatModelCallOptions, + * so we need to create a new model instance with the specified temperature. + */ + async getChatModelWithTemperature(temperature: number): Promise { + const settings = getSettings(); + const currentModel = settings.activeModels[0]; + + // Create a temporary model config with overridden temperature + const modelWithTempOverride: CustomModel = { + ...currentModel, + temperature, + }; + + return await this.createModelInstance(modelWithTempOverride); + } + async setChatModel(model: CustomModel): Promise { const modelKey = getModelKeyFromModel(model); try { diff --git a/src/LLMProviders/memoryManager.ts b/src/LLMProviders/memoryManager.ts index b76eb9bb..bac41e69 100644 --- a/src/LLMProviders/memoryManager.ts +++ b/src/LLMProviders/memoryManager.ts @@ -1,5 +1,5 @@ import { getSettings, subscribeToSettingsChange } from "@/settings/model"; -import { BaseChatMemory, BufferWindowMemory } from "langchain/memory"; +import { BaseChatMemory, BufferWindowMemory } from "@langchain/classic/memory"; import { BaseChatMessageHistory } from "@langchain/core/chat_history"; export default class MemoryManager { diff --git a/src/chainFactory.ts b/src/chainFactory.ts index 8f16ceac..f633d9a1 100644 --- a/src/chainFactory.ts +++ b/src/chainFactory.ts @@ -6,8 +6,8 @@ import { StringOutputParser } from "@langchain/core/output_parsers"; import { ChatPromptTemplate, PromptTemplate } from "@langchain/core/prompts"; import { BaseRetriever } from "@langchain/core/retrievers"; import { RunnablePassthrough, RunnableSequence } from "@langchain/core/runnables"; -import { BaseChatMemory } from "langchain/memory"; -import { formatDocumentsAsString } from "langchain/util/document"; +import { BaseChatMemory } from "@langchain/classic/memory"; +import { formatDocumentsAsString } from "@langchain/classic/util/document"; import { removeThinkTags } from "./utils"; export interface LLMChainInput { @@ -72,7 +72,7 @@ class ChainFactory { public static createNewLLMChain(args: LLMChainInput): RunnableSequence { const { llm, memory, prompt, abortController } = args; - const model = llm.bind({ signal: abortController?.signal }); + const model = llm.withConfig({ signal: abortController?.signal }); const instance = RunnableSequence.from([ { input: (initialInput) => initialInput.input, diff --git a/src/chainUtils.ts b/src/chainUtils.ts index 896feb34..65c0cd6e 100644 --- a/src/chainUtils.ts +++ b/src/chainUtils.ts @@ -1,6 +1,5 @@ import ProjectManager from "@/LLMProviders/projectManager"; import { ChatHistoryEntry, removeThinkTags, withSuppressedTokenWarnings } from "@/utils"; -import { BaseChatModelCallOptions } from "@langchain/core/language_models/chat_models"; export async function getStandaloneQuestion( question: string, @@ -24,10 +23,11 @@ export async function getStandaloneQuestion( // Wrap the model call with token warning suppression return await withSuppressedTokenWarnings(async () => { - const chatModel = ProjectManager.instance + // Use temperature=0 for deterministic question condensation + const chatModel = await ProjectManager.instance .getCurrentChainManager() - .chatModelManager.getChatModel() - .bind({ temperature: 0 } as BaseChatModelCallOptions); + .chatModelManager.getChatModelWithTemperature(0); + const response = await chatModel.invoke([ { role: "user", diff --git a/src/commands/CustomCommandChatModal.tsx b/src/commands/CustomCommandChatModal.tsx index e4b9b0de..5e6c1fae 100644 --- a/src/commands/CustomCommandChatModal.tsx +++ b/src/commands/CustomCommandChatModal.tsx @@ -3,6 +3,7 @@ import { processCommandPrompt } from "@/commands/customCommandUtils"; import { Button } from "@/components/ui/button"; import { getModelDisplayText } from "@/components/ui/model-display"; import ChatModelManager from "@/LLMProviders/chatModelManager"; +import { ThinkBlockStreamer } from "@/LLMProviders/chainRunner/utils/ThinkBlockStreamer"; import { logError } from "@/logger"; import { findCustomModel, insertIntoEditor } from "@/utils"; import { @@ -12,7 +13,7 @@ import { SystemMessagePromptTemplate, } from "@langchain/core/prompts"; import { RunnableSequence } from "@langchain/core/runnables"; -import { BaseChatMemory, BufferMemory } from "langchain/memory"; +import { BaseChatMemory, BufferMemory } from "@langchain/classic/memory"; import { ArrowBigUp, Bot, Command, Copy, CornerDownLeft, PenLine } from "lucide-react"; import { App, Modal, Notice, Platform } from "obsidian"; import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; @@ -94,6 +95,29 @@ function CustomCommandChatModalContent({ const commandTitle = command.title; + /** + * Compute the display value for the textarea + */ + const displayValue = useMemo(() => { + // If we have a processed message, show that + if (processedMessage) { + return processedMessage; + } + + // If not generating, show loading + if (!generating) { + return "loading..."; + } + + // If generating but no content yet, show loading + if (!aiCurrentMessage || aiCurrentMessage.trim() === "") { + return "loading..."; + } + + // Otherwise show the streaming content + return aiCurrentMessage; + }, [processedMessage, generating, aiCurrentMessage]); + // Reusable function to handle streaming responses wrapped in useCallback const streamResponse = useCallback( async (input: string, abortController: AbortController) => { @@ -108,21 +132,31 @@ function CustomCommandChatModalContent({ setAiCurrentMessage(null); setProcessedMessage(null); setGenerating(true); - let fullResponse = ""; - const chainWithSignal = chatChain.bind({ signal: abortController.signal }); + const chainWithSignal = chatChain.withConfig({ signal: abortController.signal }); const stream = await chainWithSignal.stream({ input }); + // Initialize ThinkBlockStreamer to handle reasoning content from Claude and Deepseek + // excludeThinking=true means thinking tokens are not included in the response + const thinkStreamer = new ThinkBlockStreamer( + (message: string) => { + setAiCurrentMessage(message); + }, + undefined, // no model adapter + true // excludeThinking + ); + for await (const chunk of stream) { if (abortController.signal.aborted) break; - const chunkContent = typeof chunk.content === "string" ? chunk.content : ""; - fullResponse += chunkContent; - setAiCurrentMessage(fullResponse); + thinkStreamer.processChunk(chunk); } + // Close the streamer to finalize the response and close any open think blocks + const result = thinkStreamer.close(); + if (!abortController.signal.aborted) { - const trimmedResponse = fullResponse.trim(); + const trimmedResponse = result.content.trim(); setProcessedMessage(trimmedResponse); setGenerating(false); @@ -262,7 +296,7 @@ function CustomCommandChatModalContent({