diff --git a/.github/workflows/unit-tests-integrations.yml b/.github/workflows/unit-tests-integrations.yml
index c3cbc5e2e292..5e77222654cb 100644
--- a/.github/workflows/unit-tests-integrations.yml
+++ b/.github/workflows/unit-tests-integrations.yml
@@ -45,7 +45,7 @@ jobs:
needs: get-changed-files
runs-on: ubuntu-latest
env:
- PACKAGES: "anthropic,azure-openai,cloudflare,cohere,core,community,exa,google-common,google-gauth,google-genai,google-vertexai,google-vertexai-web,google-webauth,groq,mistralai,mongo,nomic,openai,pinecone,qdrant,redis,textsplitters,weaviate,yandex"
+ PACKAGES: "anthropic,azure-openai,cloudflare,cohere,core,community,exa,google-common,google-gauth,google-genai,google-vertexai,google-vertexai-web,google-webauth,groq,mistralai,mongo,nomic,openai,pinecone,qdrant,redis,textsplitters,weaviate,yandex,baidu-qianfan"
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -95,4 +95,4 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Test '@langchain/${{ matrix.package }}' package
- run: yarn test:unit:ci --filter=@langchain/${{ matrix.package }}
+ run: yarn test:unit:ci --filter=@langchain/${{ matrix.package }}
\ No newline at end of file
diff --git a/docs/core_docs/docs/integrations/chat/baidu_qianfan.mdx b/docs/core_docs/docs/integrations/chat/baidu_qianfan.mdx
new file mode 100644
index 000000000000..246bb9db1a01
--- /dev/null
+++ b/docs/core_docs/docs/integrations/chat/baidu_qianfan.mdx
@@ -0,0 +1,37 @@
+---
+sidebar_label: Baidu Qianfan
+---
+
+import CodeBlock from "@theme/CodeBlock";
+
+# ChatBaiduQianfan
+
+## Setup
+
+You'll first need to install the [`@langchain/baidu-qianfan`](https://www.npmjs.com/package/@langchain/baidu-qianfan) package:
+
+import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";
+
+
+
+```bash npm2yarn
+npm install @langchain/baidu-qianfan
+```
+
+Available models: `ERNIE-Bot`,`ERNIE-Bot-turbo`,`ERNIE-Bot-4`,`ERNIE-Speed-8K`,`ERNIE-Speed-128K`,`ERNIE-4.0-8K`,
+`ERNIE-4.0-8K-Preview`,`ERNIE-3.5-8K`,`ERNIE-3.5-8K-Preview`,`ERNIE-Lite-8K`,`ERNIE-Tiny-8K`,`ERNIE-Character-8K`,
+`ERNIE Speed-AppBuilder`
+
+## Usage
+
+import ChatBaiduQianfanExample from "@examples/models/chat/chat_baidu_qianfan.ts";
+
+{ChatBaiduQianfanExample}
+
+## Streaming
+
+Qianfan's API also supports streaming token responses. The example below demonstrates how to use this feature.
+
+import ChatBaiduQianfanStreamExample from "@examples/models/chat/chat_stream_baidu_qianfan.ts";
+
+{ChatBaiduQianfanStreamExample}
diff --git a/docs/core_docs/docs/integrations/chat/baidu_wenxin.mdx b/docs/core_docs/docs/integrations/chat/baidu_wenxin.mdx
index 7b5b92d3d455..08148d8ac1bc 100644
--- a/docs/core_docs/docs/integrations/chat/baidu_wenxin.mdx
+++ b/docs/core_docs/docs/integrations/chat/baidu_wenxin.mdx
@@ -1,11 +1,18 @@
---
sidebar_label: Baidu Wenxin
+sidebar_class_name: hidden
---
import CodeBlock from "@theme/CodeBlock";
# ChatBaiduWenxin
+:::warning
+This class has been deprecated.
+
+Use the [`@langchain/baidu-qianfan`](/docs/integrations/chat/baidu_qianfan/) package instead.
+:::
+
LangChain.js supports Baidu's ERNIE-bot family of models. Here's an example:
import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";
diff --git a/docs/core_docs/docs/integrations/text_embedding/baidu_qianfan.mdx b/docs/core_docs/docs/integrations/text_embedding/baidu_qianfan.mdx
index 341310c6d9f5..116e75d20239 100644
--- a/docs/core_docs/docs/integrations/text_embedding/baidu_qianfan.mdx
+++ b/docs/core_docs/docs/integrations/text_embedding/baidu_qianfan.mdx
@@ -1,27 +1,21 @@
----
-sidebar_class_name: node-only
----
-
# Baidu Qianfan
The `BaiduQianfanEmbeddings` class uses the Baidu Qianfan API to generate embeddings for a given text.
## Setup
-Official Website: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu
-
An API key is required to use this embedding model. You can get one by registering at https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu.
Please set the acquired API key as an environment variable named BAIDU_API_KEY, and set your secret key as an environment variable named BAIDU_SECRET_KEY.
-Then, you'll need to install the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package:
+Then, you'll need to install the [`@langchain/baidu-qianfan`](https://www.npmjs.com/package/@langchain/baidu-qianfan) package:
import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";
```bash npm2yarn
-npm install @langchain/community
+npm install @langchain/baidu-qianfan
```
## Usage
diff --git a/examples/package.json b/examples/package.json
index eebdfe237c67..597bfd475cde 100644
--- a/examples/package.json
+++ b/examples/package.json
@@ -37,6 +37,7 @@
"@langchain/aws": "workspace:*",
"@langchain/azure-dynamic-sessions": "workspace:^",
"@langchain/azure-openai": "workspace:*",
+ "@langchain/baidu-qianfan": "workspace:*",
"@langchain/cloudflare": "workspace:*",
"@langchain/cohere": "workspace:*",
"@langchain/community": "workspace:*",
diff --git a/examples/src/embeddings/baidu_qianfan.ts b/examples/src/embeddings/baidu_qianfan.ts
index 9a85ddc6d7b4..c0e76c04a71d 100644
--- a/examples/src/embeddings/baidu_qianfan.ts
+++ b/examples/src/embeddings/baidu_qianfan.ts
@@ -1,4 +1,4 @@
-import { BaiduQianfanEmbeddings } from "@langchain/community/embeddings/baidu_qianfan";
+import { BaiduQianfanEmbeddings } from "@langchain/baidu-qianfan";
const embeddings = new BaiduQianfanEmbeddings();
const res = await embeddings.embedQuery(
diff --git a/examples/src/models/chat/chat_baidu_qianfan.ts b/examples/src/models/chat/chat_baidu_qianfan.ts
new file mode 100644
index 000000000000..9163d1a5bbde
--- /dev/null
+++ b/examples/src/models/chat/chat_baidu_qianfan.ts
@@ -0,0 +1,37 @@
+import { ChatBaiduQianfan } from "@langchain/baidu-qianfan";
+import { HumanMessage } from "@langchain/core/messages";
+
+const chat = new ChatBaiduQianfan({
+ qianfanAccessKey: process.env.QIANFAN_ACCESS_KEY,
+ qianfanSecretKey: process.env.QIANFAN_SECRET_KEY,
+ model: "ERNIE-Bot-turbo",
+});
+
+const message = new HumanMessage("北京天气");
+const res = await chat.invoke([message]);
+console.log({ res });
+/**
+ {
+ res: AIMessage {
+ lc_serializable: true,
+ lc_kwargs: {
+ content: '北京天气**多云,气温13~24°C**,微风,空气质量良,预报无持续降水^[2]^。\n' +
+ '\n' +
+ '近期天气情况来说,白天最高气温多在30度左右,而夜晚最低气温仅有几度,早晚较凉,需要做好保暖,昼夜温差较大。由于现在正处于雨水节气,此时天气阴沉、多变,时而下起冰雹,时而下起大雨,天色昏暗。冰雹时间不会持续太长,通常都是下冰雹一小段时间后就会停止,天气就会逐渐恢复晴好^[1]^。',
+ tool_calls: [],
+ invalid_tool_calls: [],
+ additional_kwargs: {},
+ response_metadata: {}
+ },
+ lc_namespace: [ 'langchain_core', 'messages' ],
+ content: '北京天气**多云,气温13~24°C**,微风,空气质量良,预报无持续降水^[2]^。\n' +
+ '\n' +
+ '近期天气情况来说,白天最高气温多在30度左右,而夜晚最低气温仅有几度,早晚较凉,需要做好保暖,昼夜温差较大。由于现在正处于雨水节气,此时天气阴沉、多变,时而下起冰雹,时而下起大雨,天色昏暗。冰雹时间不会持续太长,通常都是下冰雹一小段时间后就会停止,天气就会逐渐恢复晴好^[1]^。',
+ name: undefined,
+ additional_kwargs: {},
+ response_metadata: { tokenUsage: [Object] },
+ tool_calls: [],
+ invalid_tool_calls: []
+ }
+ }
+ */
diff --git a/examples/src/models/chat/chat_stream_baidu_qianfan.ts b/examples/src/models/chat/chat_stream_baidu_qianfan.ts
new file mode 100644
index 000000000000..bac05472eda3
--- /dev/null
+++ b/examples/src/models/chat/chat_stream_baidu_qianfan.ts
@@ -0,0 +1,47 @@
+import { ChatBaiduQianfan } from "@langchain/baidu-qianfan";
+import { HumanMessage } from "@langchain/core/messages";
+
+const chat = new ChatBaiduQianfan({
+ qianfanAccessKey: process.env.QIANFAN_ACCESS_KEY,
+ qianfanSecretKey: process.env.QIANFAN_SECRET_KEY,
+ model: "ERNIE-Bot-turbo",
+ streaming: true,
+});
+
+const message = new HumanMessage("等额本金和等额本息有什么区别?");
+const res = await chat.invoke([message]);
+console.log({ res });
+
+/**
+ {
+ res: AIMessage {
+ lc_serializable: true,
+ lc_kwargs: {
+ content: 'undefined等额本金和等额本息是两种常见的贷款还款方式,它们之间的主要区别在于计息方式、每月还款额和利息支出等方面。\n' +
+ '\n' +
+ '1. 计息方式:等额本金是一种按月递减的计息方式,每月偿还相同数额的本金和剩余贷款在该月产生的利息。而等额本息则是每月偿还相同金额的利息,根据贷款金额和贷款期限计算月供,本金和利息在每月还款中占的比例逐月变化。\n' +
+ '2. 每月还款额:由于等额本息每月偿还的利息占每月还款总额的比例逐渐减少,导致每月还款额逐渐增加,而等额本金每月偿还的本金相同,因此每月还款额逐渐减少。\n' +
+ '3. 利息支出:在贷款期限相同的情况下,等额本金的利息支出相对较少,因为随着本金的减少,剩余贷款产生的利息也相应减少。而等额本息的利息支出则相对较高,因为每月偿还的利息逐渐减少,导致总利息支出相对较高。\n' +
+ '\n' +
+ '总之,等额本金和等额本息在贷款期限相同的情况下,等额本金由于利息支出相对较少,更适合于资金充裕、有提前还款打算的借款人;而等额本息每月还款额固定,更适合于每月收入较高的借款人。',
+ tool_calls: [],
+ invalid_tool_calls: [],
+ additional_kwargs: {},
+ response_metadata: {}
+ },
+ lc_namespace: [ 'langchain_core', 'messages' ],
+ content: 'undefined等额本金和等额本息是两种常见的贷款还款方式,它们之间的主要区别在于计息方式、每月还款额和利息支出等方面。\n' +
+ '\n' +
+ '1. 计息方式:等额本金是一种按月递减的计息方式,每月偿还相同数额的本金和剩余贷款在该月产生的利息。而等额本息则是每月偿还相同金额的利息,根据贷款金额和贷款期限计算月供,本金和利息在每月还款中占的比例逐月变化。\n' +
+ '2. 每月还款额:由于等额本息每月偿还的利息占每月还款总额的比例逐渐减少,导致每月还款额逐渐增加,而等额本金每月偿还的本金相同,因此每月还款额逐渐减少。\n' +
+ '3. 利息支出:在贷款期限相同的情况下,等额本金的利息支出相对较少,因为随着本金的减少,剩余贷款产生的利息也相应减少。而等额本息的利息支出则相对较高,因为每月偿还的利息逐渐减少,导致总利息支出相对较高。\n' +
+ '\n' +
+ '总之,等额本金和等额本息在贷款期限相同的情况下,等额本金由于利息支出相对较少,更适合于资金充裕、有提前还款打算的借款人;而等额本息每月还款额固定,更适合于每月收入较高的借款人。',
+ name: undefined,
+ additional_kwargs: {},
+ response_metadata: { tokenUsage: [Object] },
+ tool_calls: [],
+ invalid_tool_calls: []
+ }
+ }
+ */
diff --git a/examples/src/models/chat/integration_qianfan.ts b/examples/src/models/chat/integration_qianfan.ts
new file mode 100644
index 000000000000..51600c2a6d61
--- /dev/null
+++ b/examples/src/models/chat/integration_qianfan.ts
@@ -0,0 +1,38 @@
+import { ChatBaiduWenxin } from "@langchain/community/chat_models/baiduwenxin";
+import { HumanMessage } from "@langchain/core/messages";
+
+// Default model is ERNIE-Bot-turbo
+const ernieTurbo = new ChatBaiduWenxin({
+ baiduApiKey: "YOUR-API-KEY", // In Node.js defaults to process.env.BAIDU_API_KEY
+ baiduSecretKey: "YOUR-SECRET-KEY", // In Node.js defaults to process.env.BAIDU_SECRET_KEY
+});
+
+// Use ERNIE-Bot
+const ernie = new ChatBaiduWenxin({
+ model: "ERNIE-Bot", // Available models are shown above
+ temperature: 1,
+ baiduApiKey: "YOUR-API-KEY", // In Node.js defaults to process.env.BAIDU_API_KEY
+ baiduSecretKey: "YOUR-SECRET-KEY", // In Node.js defaults to process.env.BAIDU_SECRET_KEY
+});
+
+const messages = [new HumanMessage("Hello")];
+
+let res = await ernieTurbo.invoke(messages);
+/*
+AIChatMessage {
+ text: 'Hello! How may I assist you today?',
+ name: undefined,
+ additional_kwargs: {}
+ }
+}
+*/
+
+res = await ernie.invoke(messages);
+/*
+AIChatMessage {
+ text: 'Hello! How may I assist you today?',
+ name: undefined,
+ additional_kwargs: {}
+ }
+}
+*/
diff --git a/libs/langchain-baidu-qianfan/.eslintrc.cjs b/libs/langchain-baidu-qianfan/.eslintrc.cjs
new file mode 100644
index 000000000000..42618f39198e
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/.eslintrc.cjs
@@ -0,0 +1,75 @@
+module.exports = {
+ extends: [
+ "airbnb-base",
+ "eslint:recommended",
+ "prettier",
+ "plugin:@typescript-eslint/recommended",
+ ],
+ parserOptions: {
+ ecmaVersion: 12,
+ parser: "@typescript-eslint/parser",
+ project: "./tsconfig.json",
+ sourceType: "module",
+ },
+ plugins: ["@typescript-eslint", "no-instanceof"],
+ ignorePatterns: [
+ ".eslintrc.cjs",
+ "scripts",
+ "node_modules",
+ "dist",
+ "dist-cjs",
+ "*.js",
+ "*.cjs",
+ "*.d.ts",
+ ],
+ rules: {
+ "no-process-env": 2,
+ "no-instanceof/no-instanceof": 2,
+ "@typescript-eslint/explicit-module-boundary-types": 0,
+ "@typescript-eslint/no-empty-function": 0,
+ "@typescript-eslint/no-shadow": 0,
+ "@typescript-eslint/no-empty-interface": 0,
+ "@typescript-eslint/no-use-before-define": ["error", "nofunc"],
+ "@typescript-eslint/no-unused-vars": ["warn", { args: "none" }],
+ "@typescript-eslint/no-floating-promises": "error",
+ "@typescript-eslint/no-misused-promises": "error",
+ "arrow-body-style": 0,
+ camelcase: 0,
+ "class-methods-use-this": 0,
+ "import/extensions": [2, "ignorePackages"],
+ "import/no-extraneous-dependencies": [
+ "error",
+ { devDependencies: ["**/*.test.ts"] },
+ ],
+ "import/no-unresolved": 0,
+ "import/prefer-default-export": 0,
+ "keyword-spacing": "error",
+ "max-classes-per-file": 0,
+ "max-len": 0,
+ "no-await-in-loop": 0,
+ "no-bitwise": 0,
+ "no-console": 0,
+ "no-restricted-syntax": 0,
+ "no-shadow": 0,
+ "no-continue": 0,
+ "no-void": 0,
+ "no-underscore-dangle": 0,
+ "no-use-before-define": 0,
+ "no-useless-constructor": 0,
+ "no-return-await": 0,
+ "consistent-return": 0,
+ "no-else-return": 0,
+ "func-names": 0,
+ "no-lonely-if": 0,
+ "prefer-rest-params": 0,
+ "new-cap": ["error", { properties: false, capIsNew: false }],
+ },
+ overrides: [
+ {
+ files: ['**/*.test.ts'],
+ rules: {
+ '@typescript-eslint/no-unused-vars': 'off'
+ }
+ }
+ ]
+};
diff --git a/libs/langchain-baidu-qianfan/.gitignore b/libs/langchain-baidu-qianfan/.gitignore
new file mode 100644
index 000000000000..c10034e2f1be
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/.gitignore
@@ -0,0 +1,7 @@
+index.cjs
+index.js
+index.d.ts
+index.d.cts
+node_modules
+dist
+.yarn
diff --git a/libs/langchain-baidu-qianfan/.prettierrc b/libs/langchain-baidu-qianfan/.prettierrc
new file mode 100644
index 000000000000..ba08ff04f677
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/.prettierrc
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://json.schemastore.org/prettierrc",
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "quoteProps": "as-needed",
+ "jsxSingleQuote": false,
+ "trailingComma": "es5",
+ "bracketSpacing": true,
+ "arrowParens": "always",
+ "requirePragma": false,
+ "insertPragma": false,
+ "proseWrap": "preserve",
+ "htmlWhitespaceSensitivity": "css",
+ "vueIndentScriptAndStyle": false,
+ "endOfLine": "lf"
+}
diff --git a/libs/langchain-baidu-qianfan/.release-it.json b/libs/langchain-baidu-qianfan/.release-it.json
new file mode 100644
index 000000000000..06850ca85be1
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/.release-it.json
@@ -0,0 +1,12 @@
+{
+ "github": {
+ "release": true,
+ "autoGenerate": true,
+ "tokenRef": "GITHUB_TOKEN_RELEASE"
+ },
+ "npm": {
+ "versionArgs": [
+ "--workspaces-update=false"
+ ]
+ }
+}
diff --git a/libs/langchain-baidu-qianfan/LICENSE b/libs/langchain-baidu-qianfan/LICENSE
new file mode 100644
index 000000000000..8cd8f501eb49
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2023 LangChain
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/libs/langchain-baidu-qianfan/README.md b/libs/langchain-baidu-qianfan/README.md
new file mode 100644
index 000000000000..681c1d9fbdc0
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/README.md
@@ -0,0 +1,42 @@
+# @langchain/baidu-qianfan
+
+This package contains the LangChain.js integrations for Baidu Qianfan via the qianfan/sdk package.
+
+
+## Installation
+
+```bash npm2yarn
+npm install @langchain/baidu-qianfan
+```
+
+## Chat models
+
+This package adds support for Qianfan chat model inference.
+
+Set the necessary environment variable (or pass it in via the constructor):
+
+```bash
+export QIANFAN_AK=""
+export QIANFAN_SK=""
+export QIANFAN_ACCESS_KEY=""
+export QIANFAN_SECRET_KEY=""
+```
+
+```typescript
+import { ChatBaiduQianfan } from "@langchain/baidu-qianfan";
+import { HumanMessage } from "@langchain/core/messages";
+
+const chat = new ChatBaiduQianfan({
+ model: 'ERNIE-Bot-turbo'
+});
+const message = new HumanMessage("北京天气");
+
+const res = await chat.invoke([message]);
+```
+
+```typescript
+import { BaiduQianfanEmbeddings } from "@langchain/baidu-qianfan";
+
+const embeddings = new BaiduQianfanEmbeddings();
+const res = await embeddings.embedQuery("Introduce the city Beijing");
+```
diff --git a/libs/langchain-baidu-qianfan/example.env b/libs/langchain-baidu-qianfan/example.env
new file mode 100644
index 000000000000..22c17f8aa34f
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/example.env
@@ -0,0 +1,14 @@
+# 鉴权相关
+## AK 与 SK 分别对应于千帆平台上 **应用** 的 API Key 与 Secret Key
+## 主要用于模型相关 API 鉴权
+## 获取位置:https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application
+# QIANFAN_AK=""
+# QIANFAN_SK=""
+
+## Access Key 与 Secret Key 对应于 [百度智能云控制台-安全认证]
+## 中的 Access Key 与 Secret Key
+## 获取位置:https://console.bce.baidu.com/iam/#/iam/accesslist
+## 主要用于非模型相关的、管控类的 API 鉴权
+## 注意与 AK 与 SK 的使用范围进行区分,详细参见文档
+# QIANFAN_ACCESS_KEY=""
+# QIANFAN_SECRET_KEY=""
\ No newline at end of file
diff --git a/libs/langchain-baidu-qianfan/jest.config.cjs b/libs/langchain-baidu-qianfan/jest.config.cjs
new file mode 100644
index 000000000000..a06cb3338861
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/jest.config.cjs
@@ -0,0 +1,20 @@
+/** @type {import('ts-jest').JestConfigWithTsJest} */
+module.exports = {
+ preset: "ts-jest/presets/default-esm",
+ testEnvironment: "./jest.env.cjs",
+ modulePathIgnorePatterns: ["dist/", "docs/"],
+ moduleNameMapper: {
+ "^(\\.{1,2}/.*)\\.js$": "$1",
+ },
+ transform: {
+ "^.+\\.tsx?$": ["@swc/jest"],
+ },
+ transformIgnorePatterns: [
+ "/node_modules/",
+ "\\.pnp\\.[^\\/]+$",
+ "./scripts/jest-setup-after-env.js",
+ ],
+ setupFiles: ["dotenv/config"],
+ testTimeout: 20_000,
+ passWithNoTests: true,
+};
diff --git a/libs/langchain-baidu-qianfan/jest.env.cjs b/libs/langchain-baidu-qianfan/jest.env.cjs
new file mode 100644
index 000000000000..2ccedccb8672
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/jest.env.cjs
@@ -0,0 +1,12 @@
+const { TestEnvironment } = require("jest-environment-node");
+
+class AdjustedTestEnvironmentToSupportFloat32Array extends TestEnvironment {
+ constructor(config, context) {
+ // Make `instanceof Float32Array` return true in tests
+ // to avoid https://github.com/xenova/transformers.js/issues/57 and https://github.com/jestjs/jest/issues/2549
+ super(config, context);
+ this.global.Float32Array = Float32Array;
+ }
+}
+
+module.exports = AdjustedTestEnvironmentToSupportFloat32Array;
diff --git a/libs/langchain-baidu-qianfan/langchain.config.js b/libs/langchain-baidu-qianfan/langchain.config.js
new file mode 100644
index 000000000000..19512b23d29b
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/langchain.config.js
@@ -0,0 +1,21 @@
+import { resolve, dirname } from "node:path";
+import { fileURLToPath } from "node:url";
+
+/**
+ * @param {string} relativePath
+ * @returns {string}
+ */
+function abs(relativePath) {
+ return resolve(dirname(fileURLToPath(import.meta.url)), relativePath);
+}
+
+export const config = {
+ internals: [/node\:/, /@langchain\/core\//],
+ entrypoints: {
+ index: "index",
+ },
+ tsConfigPath: resolve("./tsconfig.json"),
+ cjsSource: "./dist-cjs",
+ cjsDestination: "./dist",
+ abs,
+}
\ No newline at end of file
diff --git a/libs/langchain-baidu-qianfan/package.json b/libs/langchain-baidu-qianfan/package.json
new file mode 100644
index 000000000000..6b3bf46efc28
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/package.json
@@ -0,0 +1,89 @@
+{
+ "name": "@langchain/baidu-qianfan",
+ "version": "0.0.1",
+ "description": "Baidu Qianfan integration for LangChain.js",
+ "type": "module",
+ "engines": {
+ "node": ">=18"
+ },
+ "main": "./index.js",
+ "types": "./index.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:langchain-ai/langchainjs.git"
+ },
+ "homepage": "https://github.com/langchain-ai/langchainjs/tree/main/libs/langchain-baidu-qianfan/",
+ "scripts": {
+ "build": "yarn turbo:command build:internal --filter=@langchain/baidu-qianfan",
+ "build:internal": "yarn lc-build:v2 --create-entrypoints --pre --tree-shaking",
+ "lint:eslint": "NODE_OPTIONS=--max-old-space-size=4096 eslint --cache --ext .ts,.js src/",
+ "lint:dpdm": "dpdm --exit-code circular:1 --no-warning --no-tree src/*.ts src/**/*.ts",
+ "lint": "yarn lint:eslint && yarn lint:dpdm",
+ "lint:fix": "yarn lint:eslint --fix && yarn lint:dpdm",
+ "clean": "rm -rf .turbo dist/",
+ "prepack": "yarn build",
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest --testPathIgnorePatterns=\\.int\\.test.ts --testTimeout 30000 --maxWorkers=50%",
+ "test:int": "NODE_OPTIONS=--experimental-vm-modules jest --testPathPattern=\\.int\\.test.ts --testTimeout 100000 --maxWorkers=50%",
+ "test:embeddings": "NODE_OPTIONS=--experimental-vm-modules jest --testPathPattern=\\.embeddings\\.test.ts --testTimeout 100000 --maxWorkers=50%",
+ "format": "prettier --config .prettierrc --write \"src\"",
+ "format:check": "prettier --config .prettierrc --check \"src\""
+ },
+ "author": "LangChain",
+ "license": "MIT",
+ "dependencies": {
+ "@baiducloud/qianfan": "0.1.0",
+ "@langchain/core": ">0.1.56 <0.3.0",
+ "@langchain/openai": "~0.1.0",
+ "zod": "^3.22.4",
+ "zod-to-json-schema": "^3.22.5"
+ },
+ "devDependencies": {
+ "@jest/globals": "^29.5.0",
+ "@langchain/openai": "~0.1.0",
+ "@langchain/scripts": "~0.0.14",
+ "@swc/core": "^1.3.90",
+ "@swc/jest": "^0.2.29",
+ "@tsconfig/recommended": "^1.0.3",
+ "@types/uuid": "^9",
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
+ "@typescript-eslint/parser": "^6.12.0",
+ "dotenv": "^16.3.1",
+ "dpdm": "^3.12.0",
+ "eslint": "^8.33.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-config-prettier": "^8.6.0",
+ "eslint-plugin-import": "^2.27.5",
+ "eslint-plugin-no-instanceof": "^1.0.1",
+ "eslint-plugin-prettier": "^4.2.1",
+ "jest": "^29.5.0",
+ "jest-environment-node": "^29.6.4",
+ "langchain": "0.2.5",
+ "prettier": "^2.8.3",
+ "release-it": "^15.10.1",
+ "rollup": "^4.5.2",
+ "ts-jest": "^29.1.0",
+ "typescript": "<5.2.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "exports": {
+ ".": {
+ "types": {
+ "import": "./index.d.ts",
+ "require": "./index.d.cts",
+ "default": "./index.d.ts"
+ },
+ "import": "./index.js",
+ "require": "./index.cjs"
+ },
+ "./package.json": "./package.json"
+ },
+ "files": [
+ "dist/",
+ "index.cjs",
+ "index.js",
+ "index.d.ts",
+ "index.d.cts"
+ ]
+}
diff --git a/libs/langchain-baidu-qianfan/scripts/jest-setup-after-env.js b/libs/langchain-baidu-qianfan/scripts/jest-setup-after-env.js
new file mode 100644
index 000000000000..778cf7437a20
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/scripts/jest-setup-after-env.js
@@ -0,0 +1,3 @@
+import { awaitAllCallbacks } from "@langchain/core/callbacks/promises";
+
+afterAll(awaitAllCallbacks);
diff --git a/libs/langchain-baidu-qianfan/src/chat_models.ts b/libs/langchain-baidu-qianfan/src/chat_models.ts
new file mode 100644
index 000000000000..022535ed28e9
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/chat_models.ts
@@ -0,0 +1,526 @@
+import {
+ BaseChatModel,
+ type BaseChatModelParams,
+} from "@langchain/core/language_models/chat_models";
+import {
+ AIMessage,
+ AIMessageChunk,
+ BaseMessage,
+ ChatMessage,
+} from "@langchain/core/messages";
+import {
+ ChatGeneration,
+ ChatGenerationChunk,
+ ChatResult,
+} from "@langchain/core/outputs";
+import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
+import { getEnvironmentVariable } from "@langchain/core/utils/env";
+import { convertEventStreamToIterableReadableDataStream } from "@langchain/core/utils/event_source_parse";
+import { ChatCompletion } from "@baiducloud/qianfan";
+
+import { isValidModel } from "./utils.js";
+
+/**
+ * Type representing the role of a message in the Qianfan chat model.
+ */
+export type QianfanRole = "assistant" | "user";
+
+/**
+ * Interface representing a message in the Qianfan chat model.
+ */
+interface Qianfan {
+ role: QianfanRole;
+ content: string;
+}
+
+/**
+ * Interface representing the usage of tokens in a chat completion.
+ */
+interface TokenUsage {
+ completionTokens?: number;
+ promptTokens?: number;
+ totalTokens?: number;
+}
+
+/**
+ * Interface representing a request for a chat completion.
+ */
+interface ChatCompletionRequest {
+ messages: Qianfan[];
+ stream?: boolean;
+ user_id?: string;
+ temperature?: number;
+ top_p?: number;
+ penalty_score?: number;
+ system?: string;
+}
+
+/**
+ * Interface representing a response from a chat completion.
+ */
+interface ChatCompletionResponse {
+ id: string;
+ object: string;
+ created: number;
+ result: string;
+ need_clear_history: boolean;
+ usage: TokenUsage;
+}
+
+/**
+ * Interface defining the input to the ChatBaiduQianfan class.
+ */
+declare interface BaiduQianfanChatInput {
+ /**
+ * Model name to use. Available options are: ERNIE-Bot, ERNIE-Bot-turbo, ERNIE-Bot-4
+ * Alias for `model`
+ * @default "ERNIE-Bot-turbo"
+ */
+ modelName: string;
+ /** Model name to use. Available options are: ERNIE-Bot, ERNIE-Bot-turbo, ERNIE-Bot-4
+ * @default "ERNIE-Bot-turbo"
+ */
+ model: string;
+
+ /** Whether to stream the results or not. Defaults to false. */
+ streaming?: boolean;
+
+ /** Messages to pass as a prefix to the prompt */
+ prefixMessages?: Qianfan[];
+
+ /**
+ * ID of the end-user who made requests.
+ */
+ userId?: string;
+
+ /**
+ * Access key to use when making requests by Qianfan SDK. Defaults to the value of
+ * `QIANFAN_KEY` environment variable.
+ */
+ qianfanAK?: string;
+
+ /**
+ * Secret key to use when making requests by Qianfan SDK. Defaults to the value of
+ * `QIANFAN_KEY` environment variable.
+ */
+ qianfanSK?: string;
+
+ /**
+ * Access key to use when making requests by Qianfan SDK with auth. Defaults to the value of
+ * `QIANFAN_ACCESS_KEY` environment variable.
+ */
+ qianfanAccessKey?: string;
+
+ /**
+ * Secret key to use when making requests by Qianfan SDK with auth. Defaults to the value of
+ * `QIANFAN_SECRET_KEY` environment variable.
+ */
+ qianfanSecretKey?: string;
+
+ /** Amount of randomness injected into the response. Ranges
+ * from 0 to 1 (0 is not included). Use temp closer to 0 for analytical /
+ * multiple choice, and temp closer to 1 for creative
+ * and generative tasks. Defaults to 0.95.
+ */
+ temperature?: number;
+
+ /** Total probability mass of tokens to consider at each step. Range
+ * from 0 to 1.0. Defaults to 0.8.
+ */
+ topP?: number;
+
+ /** Penalizes repeated tokens according to frequency. Range
+ * from 1.0 to 2.0. Defaults to 1.0.
+ */
+ penaltyScore?: number;
+}
+
+/**
+ * Function that extracts the custom role of a generic chat message.
+ * @param message Chat message from which to extract the custom role.
+ * @returns The custom role of the chat message.
+ */
+function extractGenericMessageCustomRole(message: ChatMessage) {
+ if (message.role !== "assistant" && message.role !== "user") {
+ console.warn(`Unknown message role: ${message.role}`);
+ }
+
+ return message.role as QianfanRole;
+}
+
+/**
+ * Function that converts a base message to a Qianfan message role.
+ * @param message Base message to convert.
+ * @returns The Qianfan message role.
+ */
+function messageToQianfanRole(message: BaseMessage): QianfanRole {
+ const type = message._getType();
+ switch (type) {
+ case "ai":
+ return "assistant";
+ case "human":
+ return "user";
+ case "system":
+ throw new Error("System messages should not be here");
+ case "function":
+ throw new Error("Function messages not supported");
+ case "generic": {
+ if (!ChatMessage.isInstance(message))
+ throw new Error("Invalid generic chat message");
+ return extractGenericMessageCustomRole(message);
+ }
+ default:
+ throw new Error(`Unknown message type: ${type}`);
+ }
+}
+
+/**
+ * Wrapper around Baidu ERNIE large language models that use the Chat endpoint.
+ *
+ * To use you should have the `QIANFAN_AK` and `QIANFAN_SK`
+ * environment variable set.
+ *
+ * @augments BaseLLM
+ * @augments BaiduERNIEInput
+ * ```
+ */
+export class ChatBaiduQianfan
+ extends BaseChatModel
+ implements BaiduQianfanChatInput
+{
+ static lc_name() {
+ return "ChatBaiduQianfan";
+ }
+
+ get callKeys(): string[] {
+ return ["stop", "signal", "options"];
+ }
+
+ get lc_secrets(): { [key: string]: string } | undefined {
+ return {
+ qianfanAK: "QIANFAN_AK",
+ qianfanSK: "QIANFAN_SK",
+ qianfanAccessKey: "QIANFAN_ACCESS_KEY",
+ qianfanSecretKey: "QIANFAN_SECRET_KEY",
+ };
+ }
+
+ get lc_aliases(): { [key: string]: string } | undefined {
+ return undefined;
+ }
+
+ lc_serializable = true;
+
+ streaming = false;
+
+ prefixMessages?: Qianfan[];
+
+ userId?: string;
+
+ modelName = "ERNIE-Bot-turbo";
+
+ model = "ERNIE-Bot-turbo";
+
+ temperature?: number | undefined;
+
+ topP?: number | undefined;
+
+ penaltyScore?: number | undefined;
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ client?: any;
+
+ qianfanAK?: string;
+
+ qianfanSK?: string;
+
+ qianfanAccessKey?: string;
+
+ qianfanSecretKey?: string;
+
+ constructor(fields?: Partial & BaseChatModelParams) {
+ super(fields ?? {});
+
+ this.modelName = fields?.model ?? fields?.modelName ?? this.model;
+ this.model = this.modelName;
+
+ if (!isValidModel(this.model)) {
+ throw new Error(`Invalid model name: ${this.model}`);
+ }
+
+ this.qianfanAK = fields?.qianfanAK ?? getEnvironmentVariable("QIANFAN_AK");
+
+ this.qianfanSK = fields?.qianfanSK ?? getEnvironmentVariable("QIANFAN_SK");
+
+ this.qianfanAccessKey =
+ fields?.qianfanAccessKey ?? getEnvironmentVariable("QIANFAN_ACCESS_KEY");
+
+ this.qianfanSecretKey =
+ fields?.qianfanSecretKey ?? getEnvironmentVariable("QIANFAN_SECRET_KEY");
+
+ // 优先使用安全认证AK/SK鉴权
+ if (this.qianfanAccessKey && this.qianfanSecretKey) {
+ this.client = new ChatCompletion({
+ QIANFAN_ACCESS_KEY: this.qianfanAccessKey,
+ QIANFAN_SECRET_KEY: this.qianfanSecretKey,
+ });
+ } else if (this.qianfanAK && this.qianfanSK) {
+ this.client = new ChatCompletion({
+ QIANFAN_AK: this.qianfanAK,
+ QIANFAN_SK: this.qianfanSK,
+ });
+ } else {
+ throw new Error("Please provide AK/SK");
+ }
+
+ this.streaming = fields?.streaming ?? this.streaming;
+ this.prefixMessages = fields?.prefixMessages ?? this.prefixMessages;
+ this.userId = fields?.userId ?? this.userId;
+ this.temperature = fields?.temperature ?? this.temperature;
+ this.topP = fields?.topP ?? this.topP;
+ this.penaltyScore = fields?.penaltyScore ?? this.penaltyScore;
+ }
+
+ /**
+ * Get the parameters used to invoke the model
+ */
+ invocationParams(): Omit {
+ return {
+ stream: this.streaming,
+ user_id: this.userId,
+ temperature: this.temperature,
+ top_p: this.topP,
+ penalty_score: this.penaltyScore,
+ };
+ }
+
+ /**
+ * Get the identifying parameters for the model
+ */
+ identifyingParams() {
+ return {
+ model_name: this.model,
+ ...this.invocationParams(),
+ };
+ }
+
+ private _ensureMessages(messages: BaseMessage[]): Qianfan[] {
+ return messages.map((message) => ({
+ role: messageToQianfanRole(message),
+ content: message.text,
+ }));
+ }
+
+ /** @ignore */
+ async _generate(
+ messages: BaseMessage[],
+ _options?: this["ParsedCallOptions"],
+ runManager?: CallbackManagerForLLMRun
+ ): Promise {
+ const tokenUsage: TokenUsage = {};
+
+ const params = this.invocationParams();
+
+ // Qianfan requires the system message to be put in the params, not messages array
+ const systemMessage = messages.find(
+ (message) => message._getType() === "system"
+ );
+ if (systemMessage) {
+ // eslint-disable-next-line no-param-reassign
+ messages = messages.filter((message) => message !== systemMessage);
+ params.system = systemMessage.text;
+ }
+ const messagesMapped = this._ensureMessages(messages);
+
+ const data = params.stream
+ ? await new Promise((resolve, reject) => {
+ let rejected = false;
+ this.completionWithRetry(
+ {
+ ...params,
+ messages: messagesMapped,
+ },
+ true,
+ (event) => {
+ resolve(event.data);
+ // eslint-disable-next-line no-void
+ void runManager?.handleLLMNewToken(event.data ?? "");
+ }
+ ).catch((error) => {
+ if (!rejected) {
+ rejected = true;
+ reject(error);
+ }
+ });
+ })
+ : await this.completionWithRetry(
+ {
+ ...params,
+ messages: messagesMapped,
+ },
+ false
+ ).then((data) => {
+ if (data?.error_code) {
+ throw new Error(data?.error_msg);
+ }
+ return data;
+ });
+
+ const {
+ completion_tokens: completionTokens,
+ prompt_tokens: promptTokens,
+ total_tokens: totalTokens,
+ } = data.usage ?? {};
+
+ if (completionTokens) {
+ tokenUsage.completionTokens =
+ (tokenUsage.completionTokens ?? 0) + completionTokens;
+ }
+
+ if (promptTokens) {
+ tokenUsage.promptTokens = (tokenUsage.promptTokens ?? 0) + promptTokens;
+ }
+
+ if (totalTokens) {
+ tokenUsage.totalTokens = (tokenUsage.totalTokens ?? 0) + totalTokens;
+ }
+
+ const generations: ChatGeneration[] = [];
+ const text = data.result ?? "";
+ generations.push({
+ text,
+ message: new AIMessage(text),
+ });
+ return {
+ generations,
+ llmOutput: { tokenUsage },
+ };
+ }
+
+ /** @ignore */
+ async completionWithRetry(
+ request: ChatCompletionRequest,
+ stream: boolean,
+ onmessage?: (event: MessageEvent) => void
+ ) {
+ const makeCompletionRequest = async () => {
+ console.log(request);
+ const response = await this.client.chat(
+ {
+ messages: request.messages,
+ stream,
+ },
+ this.model
+ );
+
+ if (!stream) {
+ return response;
+ } else {
+ let streamResponse = {} as {
+ id: string;
+ object: string;
+ created: number;
+ sentence_id?: number;
+ result: string;
+ need_clear_history: boolean;
+ usage: TokenUsage;
+ };
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ for await (const message of response as AsyncIterableIterator) {
+ // 返回结果
+ if (!streamResponse) {
+ streamResponse = {
+ id: message.id,
+ object: message.object,
+ created: message.created,
+ result: message.result,
+ need_clear_history: message.need_clear_history,
+ usage: message.usage,
+ };
+ } else {
+ streamResponse.result += message.result;
+ streamResponse.created = message.created;
+ streamResponse.need_clear_history = message.need_clear_history;
+ streamResponse.usage = message.usage;
+ }
+ }
+ const event = new MessageEvent("message", {
+ data: streamResponse,
+ });
+ onmessage?.(event);
+ }
+ };
+
+ return this.caller.call(makeCompletionRequest);
+ }
+
+ private async createStream(request: ChatCompletionRequest) {
+ const response = await this.client.chat(
+ {
+ messages: request.messages,
+ stream: true,
+ },
+ this.model
+ );
+
+ return convertEventStreamToIterableReadableDataStream(response);
+ }
+
+ private _deserialize(json: string) {
+ try {
+ return JSON.parse(json);
+ } catch (e) {
+ console.warn(`Received a non-JSON parseable chunk: ${json}`);
+ }
+ }
+
+ async *_streamResponseChunks(
+ messages: BaseMessage[],
+ _options?: this["ParsedCallOptions"],
+ runManager?: CallbackManagerForLLMRun
+ ): AsyncGenerator {
+ const parameters = {
+ ...this.invocationParams(),
+ stream: true,
+ };
+
+ // Qianfan requires the system message to be put in the params, not messages array
+ const systemMessage = messages.find(
+ (message) => message._getType() === "system"
+ );
+ if (systemMessage) {
+ // eslint-disable-next-line no-param-reassign
+ messages = messages.filter((message) => message !== systemMessage);
+ parameters.system = systemMessage.text;
+ }
+ const messagesMapped = this._ensureMessages(messages);
+
+ const stream = await this.caller.call(async () =>
+ this.createStream({
+ ...parameters,
+ messages: messagesMapped,
+ })
+ );
+
+ for await (const chunk of stream) {
+ const deserializedChunk = this._deserialize(chunk);
+ const { result, is_end, id } = deserializedChunk;
+ yield new ChatGenerationChunk({
+ text: result,
+ message: new AIMessageChunk({ content: result }),
+ generationInfo: is_end
+ ? {
+ is_end,
+ request_id: id,
+ usage: chunk.usage,
+ }
+ : undefined,
+ });
+ await runManager?.handleLLMNewToken(result);
+ }
+ }
+
+ _llmType() {
+ return "baiduqianfan";
+ }
+}
diff --git a/libs/langchain-baidu-qianfan/src/embeddings.ts b/libs/langchain-baidu-qianfan/src/embeddings.ts
new file mode 100644
index 000000000000..fa87c1472cb6
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/embeddings.ts
@@ -0,0 +1,216 @@
+import { Embeddings, type EmbeddingsParams } from "@langchain/core/embeddings";
+import { chunkArray } from "@langchain/core/utils/chunk_array";
+import { getEnvironmentVariable } from "@langchain/core/utils/env";
+import { Embedding } from "@baiducloud/qianfan";
+
+export interface BaiduQianfanEmbeddingsParams extends EmbeddingsParams {
+ /** Model name to use */
+ modelName: "Embedding-V1" | "bge-large-zh" | "bge-large-en" | "tao-8k";
+
+ /**
+ * Timeout to use when making requests to BaiduQianfan.
+ */
+ timeout?: number;
+
+ /**
+ * The maximum number of characters allowed for embedding in a single request varies by model:
+ * - Embedding-V1 model: up to 1000 characters
+ * - bge-large-zh model: up to 2000 characters
+ * - bge-large-en model: up to 2000 characters
+ * - tao-8k model: up to 28000 characters
+ *
+ * Note: These limits are model-specific and should be adhered to for optimal performance.
+ */
+ batchSize?: number;
+
+ /**
+ * Whether to strip new lines from the input text.
+ */
+ stripNewLines?: boolean;
+}
+
+interface EmbeddingCreateParams {
+ input: string[];
+}
+
+interface EmbeddingResponse {
+ data: { object: "embedding"; index: number; embedding: number[] }[];
+
+ usage: {
+ prompt_tokens: number;
+ total_tokens: number;
+ };
+
+ id: string;
+}
+
+interface EmbeddingErrorResponse {
+ error_code: number | string;
+ error_msg: string;
+}
+
+export class BaiduQianfanEmbeddings
+ extends Embeddings
+ implements BaiduQianfanEmbeddingsParams
+{
+ modelName: BaiduQianfanEmbeddingsParams["modelName"] = "Embedding-V1";
+
+ batchSize = 16;
+
+ stripNewLines = true;
+
+ qianfanAK: string | undefined;
+
+ qianfanSK: string | undefined;
+
+ qianfanAccessKey: string | undefined;
+
+ qianfanSecretKey: string | undefined;
+
+ accessToken: string;
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ embeddings: any;
+
+ constructor(
+ fields?: Partial & {
+ verbose?: boolean;
+ qianfanAK?: string;
+ qianfanSK?: string;
+ qianfanAccessKey?: string;
+ qianfanSecretKey?: string;
+ }
+ ) {
+ const fieldsWithDefaults = { maxConcurrency: 2, ...fields };
+ super(fieldsWithDefaults);
+
+ this.qianfanAK =
+ fieldsWithDefaults?.qianfanAK ?? getEnvironmentVariable("QIANFAN_AK");
+
+ this.qianfanSK =
+ fieldsWithDefaults?.qianfanSK ?? getEnvironmentVariable("QIANFAN_SK");
+
+ this.qianfanAccessKey =
+ fieldsWithDefaults?.qianfanAccessKey ??
+ getEnvironmentVariable("QIANFAN_ACCESS_KEY");
+
+ this.qianfanSecretKey =
+ fieldsWithDefaults?.qianfanSecretKey ??
+ getEnvironmentVariable("QIANFAN_SECRET_KEY");
+
+ // 优先使用安全认证AK/SK鉴权
+ if (this.qianfanAccessKey && this.qianfanSecretKey) {
+ this.embeddings = new Embedding({
+ QIANFAN_ACCESS_KEY: this.qianfanAccessKey,
+ QIANFAN_SECRET_KEY: this.qianfanSecretKey,
+ });
+ } else if (this.qianfanAK && this.qianfanSK) {
+ this.embeddings = new Embedding({
+ QIANFAN_AK: this.qianfanAK,
+ QIANFAN_SK: this.qianfanSK,
+ });
+ } else {
+ throw new Error("Please provide AK/SK");
+ }
+
+ this.modelName = fieldsWithDefaults?.modelName ?? this.modelName;
+
+ if (this.modelName === "tao-8k") {
+ if (fieldsWithDefaults?.batchSize && fieldsWithDefaults.batchSize !== 1) {
+ throw new Error(
+ "tao-8k model supports only a batchSize of 1. Please adjust your batchSize accordingly"
+ );
+ }
+ this.batchSize = 1;
+ } else {
+ this.batchSize = fieldsWithDefaults?.batchSize ?? this.batchSize;
+ }
+
+ this.stripNewLines =
+ fieldsWithDefaults?.stripNewLines ?? this.stripNewLines;
+ }
+
+ /**
+ * Method to generate embeddings for an array of documents. Splits the
+ * documents into batches and makes requests to the BaiduQianFan API to generate
+ * embeddings.
+ * @param texts Array of documents to generate embeddings for.
+ * @returns Promise that resolves to a 2D array of embeddings for each document.
+ */
+ async embedDocuments(texts: string[]): Promise {
+ const batches = chunkArray(
+ this.stripNewLines ? texts.map((t) => t.replace(/\n/g, " ")) : texts,
+ this.batchSize
+ );
+
+ const batchRequests = batches.map((batch) => {
+ const params = this.getParams(batch);
+
+ return this.embeddingWithRetry(params);
+ });
+
+ const batchResponses = await Promise.all(batchRequests);
+
+ const embeddings: number[][] = [];
+
+ for (let i = 0; i < batchResponses.length; i += 1) {
+ const batch = batches[i];
+ const batchResponse = batchResponses[i] || [];
+ for (let j = 0; j < batch.length; j += 1) {
+ embeddings.push(batchResponse[j]);
+ }
+ }
+
+ return embeddings;
+ }
+
+ /**
+ * Method to generate an embedding for a single document. Calls the
+ * embeddingWithRetry method with the document as the input.
+ * @param text Document to generate an embedding for.
+ * @returns Promise that resolves to an embedding for the document.
+ */
+ async embedQuery(text: string): Promise {
+ const params = this.getParams([
+ this.stripNewLines ? text.replace(/\n/g, " ") : text,
+ ]);
+
+ const embeddings = (await this.embeddingWithRetry(params)) || [[]];
+ return embeddings[0];
+ }
+
+ /**
+ * Method to generate an embedding params.
+ * @param texts Array of documents to generate embeddings for.
+ * @returns an embedding params.
+ */
+ private getParams(
+ texts: EmbeddingCreateParams["input"]
+ ): EmbeddingCreateParams {
+ return {
+ input: texts,
+ };
+ }
+
+ /**
+ * Private method to make a request to the BaiduAI API to generate
+ * embeddings. Handles the retry logic and returns the response from the
+ * API.
+ * @param request Request to send to the BaiduAI API.
+ * @returns Promise that resolves to the response from the API.
+ */
+ private async embeddingWithRetry(body: EmbeddingCreateParams) {
+ const embeddingData: EmbeddingResponse | EmbeddingErrorResponse =
+ await this.embeddings.embedding(body, this.modelName);
+
+ if ("error_code" in embeddingData && embeddingData.error_code) {
+ throw new Error(
+ `${embeddingData.error_code}: ${embeddingData.error_msg}`
+ );
+ }
+
+ return (embeddingData as EmbeddingResponse).data.map(
+ ({ embedding }) => embedding
+ );
+ }
+}
diff --git a/libs/langchain-baidu-qianfan/src/index.ts b/libs/langchain-baidu-qianfan/src/index.ts
new file mode 100644
index 000000000000..e080d1245956
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/index.ts
@@ -0,0 +1,2 @@
+export * from "./chat_models.js";
+export * from "./embeddings.js";
diff --git a/libs/langchain-baidu-qianfan/src/tests/chat_models.int.test.ts b/libs/langchain-baidu-qianfan/src/tests/chat_models.int.test.ts
new file mode 100644
index 000000000000..863e1a33afb3
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/tests/chat_models.int.test.ts
@@ -0,0 +1,25 @@
+import { test } from "@jest/globals";
+
+import { HumanMessage } from "@langchain/core/messages";
+import { ChatBaiduQianfan } from "../chat_models.js";
+
+test("invoke", async () => {
+ const chat = new ChatBaiduQianfan({
+ model: "ERNIE-Bot-turbo",
+ });
+ const message = new HumanMessage("北京天气");
+ const res = await chat.invoke([message]);
+ console.log({ res });
+ expect(res.content.length).toBeGreaterThan(10);
+});
+
+test("invokeWithStream", async () => {
+ const chat = new ChatBaiduQianfan({
+ model: "ERNIE-Bot-turbo",
+ streaming: true,
+ });
+ const message = new HumanMessage("等额本金和等额本息有什么区别?");
+ const res = await chat.invoke([message]);
+ console.log({ res });
+ expect(res.content.length).toBeGreaterThan(10);
+});
diff --git a/libs/langchain-baidu-qianfan/src/tests/embeddings.int.test.ts b/libs/langchain-baidu-qianfan/src/tests/embeddings.int.test.ts
new file mode 100644
index 000000000000..8ee42f508521
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/tests/embeddings.int.test.ts
@@ -0,0 +1,16 @@
+import { test } from "@jest/globals";
+import { BaiduQianfanEmbeddings } from "../embeddings.js";
+
+test("embedQuery", async () => {
+ const embeddings = new BaiduQianfanEmbeddings();
+ const res = await embeddings.embedQuery("Introduce the city Beijing");
+ console.log({ res });
+ expect(res.length).toBeGreaterThan(10);
+});
+
+test("embedDocuments", async () => {
+ const embeddings = new BaiduQianfanEmbeddings();
+ const res = await embeddings.embedDocuments(["Hello world", "Bye bye"]);
+ console.log({ res });
+ expect(res.length).toBe(2);
+});
diff --git a/libs/langchain-baidu-qianfan/src/utils.ts b/libs/langchain-baidu-qianfan/src/utils.ts
new file mode 100644
index 000000000000..494ef12c75d7
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/src/utils.ts
@@ -0,0 +1,73 @@
+/**
+ * 对话请求公共服务模型列表
+ */
+export type ChatModel =
+ | "ERNIE-4.0-8K"
+ | "ERNIE-3.5-8K"
+ | "ERNIE-3.5-8K-0205"
+ | "ERNIE-3.5-8K-1222"
+ | "ERNIE-3.5-4K-0205"
+ | "ERNIE-Speed-128K"
+ | "ERNIE-Lite-8K-0922"
+ | "ERNIE-Lite-8K-0308"
+ | "ERNIE Speed-AppBuilder"
+ | "Gemma-7B-it"
+ | "Mixtral-8x7B-Instruct"
+ | "ERNIE-Bot-turbo"
+ | "ERNIE-Bot"
+ | "ERNIE-Bot-4"
+ | "ERNIE-Bot-8k"
+ | "ERNIE-Speed"
+ | "EB-turbo-AppBuilder"
+ | "BLOOMZ-7B"
+ | "Llama-2-7b-chat"
+ | "Llama-2-13b-chat"
+ | "Llama-2-70b-chat"
+ | "Qianfan-BLOOMZ-7B-compressed"
+ | "Qianfan-Chinese-Llama-2-7B"
+ | "ChatGLM2-6B-32K"
+ | "AquilaChat-7B"
+ | "XuanYuan-70B-Chat-4bit"
+ | "Qianfan-Chinese-Llama-2-13B"
+ | "ChatLaw"
+ | "SQLCoder-7B"
+ | "CodeLlama-7b-Instruct"
+ | "Yi-34B-Chat";
+
+export const CHAT_MODEL = [
+ "ERNIE-4.0-8K",
+ "ERNIE-3.5-8K",
+ "ERNIE-3.5-8K-0205",
+ "ERNIE-3.5-8K-1222",
+ "ERNIE-3.5-4K-0205",
+ "ERNIE-Speed-128K",
+ "ERNIE-Lite-8K-0922",
+ "ERNIE-Lite-8K-0308",
+ "ERNIE Speed-AppBuilder",
+ "Gemma-7B-it",
+ "Mixtral-8x7B-Instruct",
+ "ERNIE-Bot-turbo",
+ "ERNIE-Bot",
+ "ERNIE-Bot-4",
+ "ERNIE-Bot-8k",
+ "ERNIE-Speed",
+ "EB-turbo-AppBuilder",
+ "BLOOMZ-7B",
+ "Llama-2-7b-chat",
+ "Llama-2-13b-chat",
+ "Llama-2-70b-chat",
+ "Qianfan-BLOOMZ-7B-compressed",
+ "Qianfan-Chinese-Llama-2-7B",
+ "ChatGLM2-6B-32K",
+ "AquilaChat-7B",
+ "XuanYuan-70B-Chat-4bit",
+ "Qianfan-Chinese-Llama-2-13B",
+ "ChatLaw",
+ "SQLCoder-7B",
+ "CodeLlama-7b-Instruct",
+ "Yi-34B-Chat",
+];
+
+export const isValidModel = (modelName: string): boolean => {
+ return CHAT_MODEL.includes(modelName);
+};
diff --git a/libs/langchain-baidu-qianfan/tsconfig.cjs.json b/libs/langchain-baidu-qianfan/tsconfig.cjs.json
new file mode 100644
index 000000000000..3b7026ea406c
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/tsconfig.cjs.json
@@ -0,0 +1,8 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "module": "commonjs",
+ "declaration": false
+ },
+ "exclude": ["node_modules", "dist", "docs", "**/tests"]
+}
diff --git a/libs/langchain-baidu-qianfan/tsconfig.json b/libs/langchain-baidu-qianfan/tsconfig.json
new file mode 100644
index 000000000000..bc85d83b6229
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "extends": "@tsconfig/recommended",
+ "compilerOptions": {
+ "outDir": "../dist",
+ "rootDir": "./src",
+ "target": "ES2021",
+ "lib": ["ES2021", "ES2022.Object", "DOM"],
+ "module": "ES2020",
+ "moduleResolution": "nodenext",
+ "esModuleInterop": true,
+ "declaration": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "useDefineForClassFields": true,
+ "strictPropertyInitialization": false,
+ "allowJs": true,
+ "strict": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "docs"]
+}
diff --git a/libs/langchain-baidu-qianfan/turbo.json b/libs/langchain-baidu-qianfan/turbo.json
new file mode 100644
index 000000000000..d024cee15c81
--- /dev/null
+++ b/libs/langchain-baidu-qianfan/turbo.json
@@ -0,0 +1,11 @@
+{
+ "extends": ["//"],
+ "pipeline": {
+ "build": {
+ "outputs": ["**/dist/**"]
+ },
+ "build:internal": {
+ "dependsOn": ["^build:internal"]
+ }
+ }
+}
diff --git a/libs/langchain-community/src/chat_models/baiduwenxin.ts b/libs/langchain-community/src/chat_models/baiduwenxin.ts
index 70924000401d..9cac9fe24c7f 100644
--- a/libs/langchain-community/src/chat_models/baiduwenxin.ts
+++ b/libs/langchain-community/src/chat_models/baiduwenxin.ts
@@ -173,6 +173,7 @@ function messageToWenxinRole(message: BaseMessage): WenxinMessageRole {
}
/**
+ * @deprecated Install and import from @langchain/baidu-qianfan instead.
* Wrapper around Baidu ERNIE large language models that use the Chat endpoint.
*
* To use you should have the `BAIDU_API_KEY` and `BAIDU_SECRET_KEY`
diff --git a/libs/langchain-community/src/embeddings/baidu_qianfan.ts b/libs/langchain-community/src/embeddings/baidu_qianfan.ts
index 1c5d74bd83a1..25a73b7d6805 100644
--- a/libs/langchain-community/src/embeddings/baidu_qianfan.ts
+++ b/libs/langchain-community/src/embeddings/baidu_qianfan.ts
@@ -2,6 +2,7 @@ import { Embeddings, type EmbeddingsParams } from "@langchain/core/embeddings";
import { chunkArray } from "@langchain/core/utils/chunk_array";
import { getEnvironmentVariable } from "@langchain/core/utils/env";
+/** @deprecated Install and import from @langchain/baidu-qianfan instead. */
export interface BaiduQianfanEmbeddingsParams extends EmbeddingsParams {
/** Model name to use */
modelName: "embedding-v1" | "bge_large_zh" | "bge-large-en" | "tao-8k";
diff --git a/yarn.lock b/yarn.lock
index 84fb05aa3d2a..b0165b0f3afb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5858,6 +5858,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/code-frame@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/code-frame@npm:7.24.7"
+ dependencies:
+ "@babel/highlight": ^7.24.7
+ picocolors: ^1.0.0
+ checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4
+ languageName: node
+ linkType: hard
+
"@babel/compat-data@npm:^7.20.5":
version: 7.21.0
resolution: "@babel/compat-data@npm:7.21.0"
@@ -5980,6 +5990,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/generator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/generator@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ jsesc: ^2.5.1
+ checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b
+ languageName: node
+ linkType: hard
+
"@babel/helper-annotate-as-pure@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-annotate-as-pure@npm:7.22.5"
@@ -5989,6 +6011,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-annotate-as-pure@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-annotate-as-pure@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e
+ languageName: node
+ linkType: hard
+
"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5":
version: 7.22.15
resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15"
@@ -6087,6 +6118,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-environment-visitor@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-environment-visitor@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6
+ languageName: node
+ linkType: hard
+
"@babel/helper-function-name@npm:^7.21.0":
version: 7.21.0
resolution: "@babel/helper-function-name@npm:7.21.0"
@@ -6107,6 +6147,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-function-name@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-function-name@npm:7.24.7"
+ dependencies:
+ "@babel/template": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4
+ languageName: node
+ linkType: hard
+
"@babel/helper-hoist-variables@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-hoist-variables@npm:7.18.6"
@@ -6125,6 +6175,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-hoist-variables@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-hoist-variables@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d
+ languageName: node
+ linkType: hard
+
"@babel/helper-member-expression-to-functions@npm:^7.22.15":
version: 7.23.0
resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0"
@@ -6152,6 +6211,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-module-imports@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-module-imports@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054
+ languageName: node
+ linkType: hard
+
"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0":
version: 7.23.0
resolution: "@babel/helper-module-transforms@npm:7.23.0"
@@ -6213,6 +6282,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-plugin-utils@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-plugin-utils@npm:7.24.7"
+ checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68
+ languageName: node
+ linkType: hard
+
"@babel/helper-remap-async-to-generator@npm:^7.22.20, @babel/helper-remap-async-to-generator@npm:^7.22.5":
version: 7.22.20
resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20"
@@ -6284,6 +6360,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-split-export-declaration@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-split-export-declaration@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22
+ languageName: node
+ linkType: hard
+
"@babel/helper-string-parser@npm:^7.19.4":
version: 7.19.4
resolution: "@babel/helper-string-parser@npm:7.19.4"
@@ -6298,6 +6383,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-string-parser@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-string-parser@npm:7.24.7"
+ checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1":
version: 7.19.1
resolution: "@babel/helper-validator-identifier@npm:7.19.1"
@@ -6312,6 +6404,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-identifier@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-validator-identifier@npm:7.24.7"
+ checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-option@npm:^7.18.6":
version: 7.21.0
resolution: "@babel/helper-validator-option@npm:7.21.0"
@@ -6326,6 +6425,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-option@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-validator-option@npm:7.24.7"
+ checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e
+ languageName: node
+ linkType: hard
+
"@babel/helper-wrap-function@npm:^7.22.20":
version: 7.22.20
resolution: "@babel/helper-wrap-function@npm:7.22.20"
@@ -6381,6 +6487,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/highlight@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/highlight@npm:7.24.7"
+ dependencies:
+ "@babel/helper-validator-identifier": ^7.24.7
+ chalk: ^2.4.2
+ js-tokens: ^4.0.0
+ picocolors: ^1.0.0
+ checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1
+ languageName: node
+ linkType: hard
+
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.0, @babel/parser@npm:^7.21.2":
version: 7.21.2
resolution: "@babel/parser@npm:7.21.2"
@@ -6399,6 +6517,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/parser@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/parser@npm:7.24.7"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15"
@@ -6577,6 +6704,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-jsx@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-jsx@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-jsx@npm:^7.7.2":
version: 7.18.6
resolution: "@babel/plugin-syntax-jsx@npm:7.18.6"
@@ -7186,6 +7324,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-react-display-name@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a05bf83bf5e7b31f7a3b56da1bf8e2eeec76ef52ae44435ceff66363a1717fcda45b7b4b931a2c115982175f481fc3f2d0fab23f0a43c44e6d983afc396858f0
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-react-jsx-development@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5"
@@ -7197,6 +7346,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-react-jsx-development@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7"
+ dependencies:
+ "@babel/plugin-transform-react-jsx": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 653d32ea5accb12d016e324ec5a584b60a8f39e60c6a5101194b73553fdefbfa3c3f06ec2410216ec2033fddae181a2f146a1d6ed59f075c488fc4570cad2e7b
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5":
version: 7.22.15
resolution: "@babel/plugin-transform-react-jsx@npm:7.22.15"
@@ -7212,6 +7372,21 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-react-jsx@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-react-jsx@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-module-imports": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-jsx": ^7.24.7
+ "@babel/types": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: ddfe494eb4b6ad567ebf0c029246df55d006512b1eb4beead73427b83af2e7e91b6d6e6954e275a92c81a5111d1e6e1fb4a62fdfc6f77c847cc7581650a7c452
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5"
@@ -7224,6 +7399,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: d859ada3cbeb829fa3d9978a29b2d36657fcc9dcc1e4c3c3af84ec5a044a8f8db26ada406baa309e5d4d512aca53d07c520d991b891ff943bec7d8f01aae0419
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-regenerator@npm:^7.22.10":
version: 7.22.10
resolution: "@babel/plugin-transform-regenerator@npm:7.22.10"
@@ -7499,6 +7686,22 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-react@npm:^7.24.6":
+ version: 7.24.7
+ resolution: "@babel/preset-react@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-validator-option": ^7.24.7
+ "@babel/plugin-transform-react-display-name": ^7.24.7
+ "@babel/plugin-transform-react-jsx": ^7.24.7
+ "@babel/plugin-transform-react-jsx-development": ^7.24.7
+ "@babel/plugin-transform-react-pure-annotations": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 76d0365b6bca808be65c4ccb3f3384c0792084add15eb537f16b3e44184216b82fa37f945339b732ceee6f06e09ba1f39f75c45e69b9811ddcc479f05555ea9c
+ languageName: node
+ linkType: hard
+
"@babel/preset-typescript@npm:^7.18.6":
version: 7.23.2
resolution: "@babel/preset-typescript@npm:7.23.2"
@@ -7562,6 +7765,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/template@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/template@npm:7.24.7"
+ dependencies:
+ "@babel/code-frame": ^7.24.7
+ "@babel/parser": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9
+ languageName: node
+ linkType: hard
+
"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.23.2":
version: 7.23.2
resolution: "@babel/traverse@npm:7.23.2"
@@ -7598,6 +7812,24 @@ __metadata:
languageName: node
linkType: hard
+"@babel/traverse@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/traverse@npm:7.24.7"
+ dependencies:
+ "@babel/code-frame": ^7.24.7
+ "@babel/generator": ^7.24.7
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-function-name": ^7.24.7
+ "@babel/helper-hoist-variables": ^7.24.7
+ "@babel/helper-split-export-declaration": ^7.24.7
+ "@babel/parser": ^7.24.7
+ "@babel/types": ^7.24.7
+ debug: ^4.3.1
+ globals: ^11.1.0
+ checksum: 7cd366afe9e7ee77e493779fdf24f67bf5595247289364f4689e29688572505eaeb886d7a8f20ebb9c29fc2de7d0895e4ff9e203e78e39ac67239724d45aa83b
+ languageName: node
+ linkType: hard
+
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3":
version: 7.21.2
resolution: "@babel/types@npm:7.21.2"
@@ -7620,6 +7852,37 @@ __metadata:
languageName: node
linkType: hard
+"@babel/types@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/types@npm:7.24.7"
+ dependencies:
+ "@babel/helper-string-parser": ^7.24.7
+ "@babel/helper-validator-identifier": ^7.24.7
+ to-fast-properties: ^2.0.0
+ checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8
+ languageName: node
+ linkType: hard
+
+"@baiducloud/qianfan@npm:0.1.0":
+ version: 0.1.0
+ resolution: "@baiducloud/qianfan@npm:0.1.0"
+ dependencies:
+ "@babel/preset-react": ^7.24.6
+ "@rollup/plugin-inject": ^5.0.5
+ "@rollup/plugin-json": ^6.1.0
+ "@types/node-fetch": ^2.6.11
+ async-mutex: ^0.5.0
+ bottleneck: ^2.19.5
+ crypto-js: ^4.2.0
+ dotenv: ^16.4.5
+ node-fetch: 2.7.0
+ rollup: ^3.29.4
+ typescript: ^5.3.3
+ web-streams-polyfill: ^4.0.0
+ checksum: 05a607846a8e4d2e86b7ad88c798eb9d8db15cbd8bdafd2606aee522c7fda2b1aa48c30b7cbca92ac17fd2228c8f3d786f6f0b420c5dc4ee05fd8dfa5a720c5e
+ languageName: node
+ linkType: hard
+
"@bcherny/json-schema-ref-parser@npm:10.0.5-fork":
version: 10.0.5-fork
resolution: "@bcherny/json-schema-ref-parser@npm:10.0.5-fork"
@@ -9824,6 +10087,17 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+ dependencies:
+ "@jridgewell/set-array": ^1.2.1
+ "@jridgewell/sourcemap-codec": ^1.4.10
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
+ languageName: node
+ linkType: hard
+
"@jridgewell/resolve-uri@npm:3.1.0":
version: 3.1.0
resolution: "@jridgewell/resolve-uri@npm:3.1.0"
@@ -9831,6 +10105,13 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/resolve-uri@npm:^3.1.0":
+ version: 3.1.2
+ resolution: "@jridgewell/resolve-uri@npm:3.1.2"
+ checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870
+ languageName: node
+ linkType: hard
+
"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1":
version: 1.1.2
resolution: "@jridgewell/set-array@npm:1.1.2"
@@ -9838,6 +10119,13 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
+ languageName: node
+ linkType: hard
+
"@jridgewell/source-map@npm:^0.3.3":
version: 0.3.5
resolution: "@jridgewell/source-map@npm:0.3.5"
@@ -9855,7 +10143,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.15":
+"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15":
version: 1.4.15
resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
@@ -9872,6 +10160,16 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+ dependencies:
+ "@jridgewell/resolve-uri": ^3.1.0
+ "@jridgewell/sourcemap-codec": ^1.4.14
+ checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
+ languageName: node
+ linkType: hard
+
"@js-sdsl/ordered-map@npm:^4.4.2":
version: 4.4.2
resolution: "@js-sdsl/ordered-map@npm:4.4.2"
@@ -10038,6 +10336,42 @@ __metadata:
languageName: unknown
linkType: soft
+"@langchain/baidu-qianfan@workspace:*, @langchain/baidu-qianfan@workspace:libs/langchain-baidu-qianfan":
+ version: 0.0.0-use.local
+ resolution: "@langchain/baidu-qianfan@workspace:libs/langchain-baidu-qianfan"
+ dependencies:
+ "@baiducloud/qianfan": 0.1.0
+ "@jest/globals": ^29.5.0
+ "@langchain/core": ">0.1.56 <0.3.0"
+ "@langchain/openai": ~0.1.0
+ "@langchain/scripts": ~0.0.14
+ "@swc/core": ^1.3.90
+ "@swc/jest": ^0.2.29
+ "@tsconfig/recommended": ^1.0.3
+ "@types/uuid": ^9
+ "@typescript-eslint/eslint-plugin": ^6.12.0
+ "@typescript-eslint/parser": ^6.12.0
+ dotenv: ^16.3.1
+ dpdm: ^3.12.0
+ eslint: ^8.33.0
+ eslint-config-airbnb-base: ^15.0.0
+ eslint-config-prettier: ^8.6.0
+ eslint-plugin-import: ^2.27.5
+ eslint-plugin-no-instanceof: ^1.0.1
+ eslint-plugin-prettier: ^4.2.1
+ jest: ^29.5.0
+ jest-environment-node: ^29.6.4
+ langchain: 0.2.5
+ prettier: ^2.8.3
+ release-it: ^15.10.1
+ rollup: ^4.5.2
+ ts-jest: ^29.1.0
+ typescript: <5.2.0
+ zod: ^3.22.4
+ zod-to-json-schema: ^3.22.5
+ languageName: unknown
+ linkType: soft
+
"@langchain/cloudflare@workspace:*, @langchain/cloudflare@workspace:libs/langchain-cloudflare":
version: 0.0.0-use.local
resolution: "@langchain/cloudflare@workspace:libs/langchain-cloudflare"
@@ -12649,6 +12983,52 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/plugin-inject@npm:^5.0.5":
+ version: 5.0.5
+ resolution: "@rollup/plugin-inject@npm:5.0.5"
+ dependencies:
+ "@rollup/pluginutils": ^5.0.1
+ estree-walker: ^2.0.2
+ magic-string: ^0.30.3
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ checksum: 22cb772fd6f7178308b2ece95cdde5f8615f6257197832166294552a7e4c0d3976dc996cbfa6470af3151d8b86c00091aa93da5f4db6ec563f11b6db29fd1b63
+ languageName: node
+ linkType: hard
+
+"@rollup/plugin-json@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "@rollup/plugin-json@npm:6.1.0"
+ dependencies:
+ "@rollup/pluginutils": ^5.1.0
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ checksum: cc018d20c80242a2b8b44fae61a968049cf31bb8406218187cc7cda35747616594e79452dd65722e7da6dd825b392e90d4599d43cd4461a02fefa2865945164e
+ languageName: node
+ linkType: hard
+
+"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "@rollup/pluginutils@npm:5.1.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ estree-walker: ^2.0.2
+ picomatch: ^2.3.1
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ checksum: 3cc5a6d91452a6eabbfd1ae79b4dd1f1e809d2eecda6e175deb784e75b0911f47e9ecce73f8dd315d6a8b3f362582c91d3c0f66908b6ced69345b3cbe28f8ce8
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-android-arm-eabi@npm:4.8.0":
version: 4.8.0
resolution: "@rollup/rollup-android-arm-eabi@npm:4.8.0"
@@ -16908,6 +17288,16 @@ __metadata:
languageName: node
linkType: hard
+"@types/node-fetch@npm:^2.6.11":
+ version: 2.6.11
+ resolution: "@types/node-fetch@npm:2.6.11"
+ dependencies:
+ "@types/node": "*"
+ form-data: ^4.0.0
+ checksum: 180e4d44c432839bdf8a25251ef8c47d51e37355ddd78c64695225de8bc5dc2b50b7bb855956d471c026bb84bd7295688a0960085e7158cbbba803053492568b
+ languageName: node
+ linkType: hard
+
"@types/node@npm:*":
version: 18.14.6
resolution: "@types/node@npm:18.14.6"
@@ -19050,6 +19440,15 @@ __metadata:
languageName: node
linkType: hard
+"async-mutex@npm:^0.5.0":
+ version: 0.5.0
+ resolution: "async-mutex@npm:0.5.0"
+ dependencies:
+ tslib: ^2.4.0
+ checksum: be1587f4875f3bb15e34e9fcce82eac2966daef4432c8d0046e61947fb9a1b95405284601bc7ce4869319249bc07c75100880191db6af11d1498931ac2a2f9ea
+ languageName: node
+ linkType: hard
+
"async-retry@npm:1.3.3, async-retry@npm:^1.3.3":
version: 1.3.3
resolution: "async-retry@npm:1.3.3"
@@ -19601,7 +20000,7 @@ __metadata:
languageName: node
linkType: hard
-"bottleneck@npm:^2.15.3":
+"bottleneck@npm:^2.15.3, bottleneck@npm:^2.19.5":
version: 2.19.5
resolution: "bottleneck@npm:2.19.5"
checksum: c5eef1bbea12cef1f1405e7306e7d24860568b0f7ac5eeab706a86762b3fc65ef6d1c641c8a166e4db90f412fc5c948fc5ce8008a8cd3d28c7212ef9c3482bda
@@ -24377,6 +24776,13 @@ __metadata:
languageName: node
linkType: hard
+"estree-walker@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "estree-walker@npm:2.0.2"
+ checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc
+ languageName: node
+ linkType: hard
+
"estree-walker@npm:^3.0.3":
version: 3.0.3
resolution: "estree-walker@npm:3.0.3"
@@ -24481,6 +24887,7 @@ __metadata:
"@langchain/aws": "workspace:*"
"@langchain/azure-dynamic-sessions": "workspace:^"
"@langchain/azure-openai": "workspace:*"
+ "@langchain/baidu-qianfan": "workspace:*"
"@langchain/cloudflare": "workspace:*"
"@langchain/cohere": "workspace:*"
"@langchain/community": "workspace:*"
@@ -29631,6 +30038,181 @@ __metadata:
languageName: node
linkType: hard
+"langchain@npm:0.2.5":
+ version: 0.2.5
+ resolution: "langchain@npm:0.2.5"
+ dependencies:
+ "@langchain/core": ~0.2.0
+ "@langchain/openai": ~0.1.0
+ "@langchain/textsplitters": ~0.0.0
+ binary-extensions: ^2.2.0
+ js-tiktoken: ^1.0.12
+ js-yaml: ^4.1.0
+ jsonpointer: ^5.0.1
+ langchainhub: ~0.0.8
+ langsmith: ~0.1.30
+ ml-distance: ^4.0.0
+ openapi-types: ^12.1.3
+ p-retry: 4
+ uuid: ^9.0.0
+ yaml: ^2.2.1
+ zod: ^3.22.4
+ zod-to-json-schema: ^3.22.3
+ peerDependencies:
+ "@aws-sdk/client-s3": ^3.310.0
+ "@aws-sdk/client-sagemaker-runtime": ^3.310.0
+ "@aws-sdk/client-sfn": ^3.310.0
+ "@aws-sdk/credential-provider-node": ^3.388.0
+ "@azure/storage-blob": ^12.15.0
+ "@browserbasehq/sdk": "*"
+ "@gomomento/sdk": ^1.51.1
+ "@gomomento/sdk-core": ^1.51.1
+ "@gomomento/sdk-web": ^1.51.1
+ "@mendable/firecrawl-js": ^0.0.13
+ "@notionhq/client": ^2.2.10
+ "@pinecone-database/pinecone": "*"
+ "@supabase/supabase-js": ^2.10.0
+ "@vercel/kv": ^0.2.3
+ "@xata.io/client": ^0.28.0
+ apify-client: ^2.7.1
+ assemblyai: ^4.0.0
+ axios: "*"
+ cheerio: ^1.0.0-rc.12
+ chromadb: "*"
+ convex: ^1.3.1
+ couchbase: ^4.3.0
+ d3-dsv: ^2.0.0
+ epub2: ^3.0.1
+ fast-xml-parser: "*"
+ handlebars: ^4.7.8
+ html-to-text: ^9.0.5
+ ignore: ^5.2.0
+ ioredis: ^5.3.2
+ jsdom: "*"
+ mammoth: ^1.6.0
+ mongodb: ">=5.2.0"
+ node-llama-cpp: "*"
+ notion-to-md: ^3.1.0
+ officeparser: ^4.0.4
+ pdf-parse: 1.1.1
+ peggy: ^3.0.2
+ playwright: ^1.32.1
+ puppeteer: ^19.7.2
+ pyodide: ^0.24.1
+ redis: ^4.6.4
+ sonix-speech-recognition: ^2.1.1
+ srt-parser-2: ^1.2.3
+ typeorm: ^0.3.12
+ weaviate-ts-client: "*"
+ web-auth-library: ^1.0.3
+ ws: ^8.14.2
+ youtube-transcript: ^1.0.6
+ youtubei.js: ^9.1.0
+ peerDependenciesMeta:
+ "@aws-sdk/client-s3":
+ optional: true
+ "@aws-sdk/client-sagemaker-runtime":
+ optional: true
+ "@aws-sdk/client-sfn":
+ optional: true
+ "@aws-sdk/credential-provider-node":
+ optional: true
+ "@azure/storage-blob":
+ optional: true
+ "@browserbasehq/sdk":
+ optional: true
+ "@gomomento/sdk":
+ optional: true
+ "@gomomento/sdk-core":
+ optional: true
+ "@gomomento/sdk-web":
+ optional: true
+ "@mendable/firecrawl-js":
+ optional: true
+ "@notionhq/client":
+ optional: true
+ "@pinecone-database/pinecone":
+ optional: true
+ "@supabase/supabase-js":
+ optional: true
+ "@vercel/kv":
+ optional: true
+ "@xata.io/client":
+ optional: true
+ apify-client:
+ optional: true
+ assemblyai:
+ optional: true
+ axios:
+ optional: true
+ cheerio:
+ optional: true
+ chromadb:
+ optional: true
+ convex:
+ optional: true
+ couchbase:
+ optional: true
+ d3-dsv:
+ optional: true
+ epub2:
+ optional: true
+ faiss-node:
+ optional: true
+ fast-xml-parser:
+ optional: true
+ handlebars:
+ optional: true
+ html-to-text:
+ optional: true
+ ignore:
+ optional: true
+ ioredis:
+ optional: true
+ jsdom:
+ optional: true
+ mammoth:
+ optional: true
+ mongodb:
+ optional: true
+ node-llama-cpp:
+ optional: true
+ notion-to-md:
+ optional: true
+ officeparser:
+ optional: true
+ pdf-parse:
+ optional: true
+ peggy:
+ optional: true
+ playwright:
+ optional: true
+ puppeteer:
+ optional: true
+ pyodide:
+ optional: true
+ redis:
+ optional: true
+ sonix-speech-recognition:
+ optional: true
+ srt-parser-2:
+ optional: true
+ typeorm:
+ optional: true
+ weaviate-ts-client:
+ optional: true
+ web-auth-library:
+ optional: true
+ ws:
+ optional: true
+ youtube-transcript:
+ optional: true
+ youtubei.js:
+ optional: true
+ checksum: 18078968f7a788052d02cc681e1a58d85ae7d8461db039a9e53ea7f8a17057c76a186788fceed0b0d2d02be732afa519305f16f12df57e90e734159cf7518df0
+ languageName: node
+ linkType: hard
+
"langchain@workspace:*, langchain@workspace:langchain":
version: 0.0.0-use.local
resolution: "langchain@workspace:langchain"
@@ -30644,6 +31226,15 @@ __metadata:
languageName: node
linkType: hard
+"magic-string@npm:^0.30.3":
+ version: 0.30.10
+ resolution: "magic-string@npm:0.30.10"
+ dependencies:
+ "@jridgewell/sourcemap-codec": ^1.4.15
+ checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399
+ languageName: node
+ linkType: hard
+
"make-dir@npm:^1.0.0":
version: 1.3.0
resolution: "make-dir@npm:1.3.0"
@@ -35735,6 +36326,20 @@ __metadata:
languageName: node
linkType: hard
+"rollup@npm:^3.29.4":
+ version: 3.29.4
+ resolution: "rollup@npm:3.29.4"
+ dependencies:
+ fsevents: ~2.3.2
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ bin:
+ rollup: dist/bin/rollup
+ checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e
+ languageName: node
+ linkType: hard
+
"rollup@npm:^4.5.2":
version: 4.8.0
resolution: "rollup@npm:4.8.0"
@@ -38386,6 +38991,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@npm:^5.3.3":
+ version: 5.5.2
+ resolution: "typescript@npm:5.5.2"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 9c5a7982dadcb2d38d129c575dd38645ae11588ae0d4a12852fb04482bbc5a1660b2371e48fd5b33b6b605cc57cefe777670054546856945a05e77bd22c8c2cd
+ languageName: node
+ linkType: hard
+
"typescript@npm:^5.4.5":
version: 5.4.5
resolution: "typescript@npm:5.4.5"
@@ -38426,6 +39041,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@patch:typescript@^5.3.3#~builtin":
+ version: 5.5.2
+ resolution: "typescript@patch:typescript@npm%3A5.5.2#~builtin::version=5.5.2&hash=1f5320"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 9d89bac0de650e15d6846485f238d1e65f1013f2c260d9e53e86a1da6ecf8109d9fad9402575c5c36a6592dc5d4370db090e12971c8630ae84453654baabb6b4
+ languageName: node
+ linkType: hard
+
"typescript@patch:typescript@^5.4.5#~builtin":
version: 5.4.5
resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=1f5320"