From d33c54d602ad1af9f90149f1b00b06f6ca9c600c Mon Sep 17 00:00:00 2001 From: ucev Date: Tue, 31 Dec 2024 23:05:14 +0800 Subject: [PATCH 1/9] feat: add Bytedance Doubao Embeddings --- .../text_embedding/bytedance_doubao.mdx | 33 ++++ examples/.env.example | 3 +- examples/src/embeddings/bytedance_doubao.ts | 9 + libs/langchain-community/.gitignore | 4 + libs/langchain-community/langchain.config.js | 1 + libs/langchain-community/package.json | 13 ++ .../src/embeddings/bytedance_doubao.ts | 175 ++++++++++++++++++ .../tests/bytedance_doubao.int.test.ts | 40 ++++ .../src/load/import_map.ts | 1 + 9 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx create mode 100644 examples/src/embeddings/bytedance_doubao.ts create mode 100644 libs/langchain-community/src/embeddings/bytedance_doubao.ts create mode 100644 libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts diff --git a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx new file mode 100644 index 000000000000..d897235126fa --- /dev/null +++ b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx @@ -0,0 +1,33 @@ +--- +sidebar_class_name: node-only +--- + +# ByteDance Doubao + +The `ByteDanceDoubaoEmbeddings` class uses the ByteDance Doubao API to generate embeddings for a given text. + +## Setup + +You'll need to sign up for an ByteDance API key and set it as an environment variable named `ARK_API_KEY`. + +Then, you'll need to install the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package: + +import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx"; + + + +```bash npm2yarn +npm install @langchain/community @langchain/core +``` + +## Usage + +import CodeBlock from "@theme/CodeBlock"; +import ByteDanceDoubaoExample from "@examples/embeddings/bytedance_doubao.ts"; + +{ByteDanceDoubaoExample} + +## Related + +- Embedding model [conceptual guide](/docs/concepts/embedding_models) +- Embedding model [how-to guides](/docs/how_to/#embedding-models) diff --git a/examples/.env.example b/examples/.env.example index 2abb8d8e6912..25730a68857e 100644 --- a/examples/.env.example +++ b/examples/.env.example @@ -83,4 +83,5 @@ FRIENDLI_TEAM=ADD_YOURS_HERE # https://suite.friendli.ai/ HANA_HOST=HANA_DB_ADDRESS HANA_PORT=HANA_DB_PORT HANA_UID=HANA_DB_USER -HANA_PWD=HANA_DB_PASSWORD \ No newline at end of file +HANA_PWD=HANA_DB_PASSWORD +ARK_API_KEY=ADD_YOURS_HERE # https://console.volcengine.com/ \ No newline at end of file diff --git a/examples/src/embeddings/bytedance_doubao.ts b/examples/src/embeddings/bytedance_doubao.ts new file mode 100644 index 000000000000..db0112b683ff --- /dev/null +++ b/examples/src/embeddings/bytedance_doubao.ts @@ -0,0 +1,9 @@ +import { ByteDanceDoubaoEmbeddings } from "@langchain/community/embeddings/bytedance_doubao"; + +const model = new ByteDanceDoubaoEmbeddings({ + modelName: 'ep-xxx-xxx' +}); +const res = await model.embedQuery( + "What would be a good company name a company that makes colorful socks?" +); +console.log({ res }); diff --git a/libs/langchain-community/.gitignore b/libs/langchain-community/.gitignore index dcef7c9a15d9..2f2abe352f2c 100644 --- a/libs/langchain-community/.gitignore +++ b/libs/langchain-community/.gitignore @@ -146,6 +146,10 @@ embeddings/bedrock.cjs embeddings/bedrock.js embeddings/bedrock.d.ts embeddings/bedrock.d.cts +embeddings/bytedance_doubao.cjs +embeddings/bytedance_doubao.js +embeddings/bytedance_doubao.d.ts +embeddings/bytedance_doubao.d.cts embeddings/cloudflare_workersai.cjs embeddings/cloudflare_workersai.js embeddings/cloudflare_workersai.d.ts diff --git a/libs/langchain-community/langchain.config.js b/libs/langchain-community/langchain.config.js index f0c1914d5e78..496e015280e7 100644 --- a/libs/langchain-community/langchain.config.js +++ b/libs/langchain-community/langchain.config.js @@ -72,6 +72,7 @@ export const config = { "embeddings/alibaba_tongyi": "embeddings/alibaba_tongyi", "embeddings/baidu_qianfan": "embeddings/baidu_qianfan", "embeddings/bedrock": "embeddings/bedrock", + "embeddings/bytedance_doubao": "embeddings/bytedance_doubao", "embeddings/cloudflare_workersai": "embeddings/cloudflare_workersai", "embeddings/cohere": "embeddings/cohere", "embeddings/deepinfra": "embeddings/deepinfra", diff --git a/libs/langchain-community/package.json b/libs/langchain-community/package.json index bceb60def832..50795f2c3cef 100644 --- a/libs/langchain-community/package.json +++ b/libs/langchain-community/package.json @@ -1050,6 +1050,15 @@ "import": "./embeddings/bedrock.js", "require": "./embeddings/bedrock.cjs" }, + "./embeddings/bytedance_doubao": { + "types": { + "import": "./embeddings/bytedance_doubao.d.ts", + "require": "./embeddings/bytedance_doubao.d.cts", + "default": "./embeddings/bytedance_doubao.d.ts" + }, + "import": "./embeddings/bytedance_doubao.js", + "require": "./embeddings/bytedance_doubao.cjs" + }, "./embeddings/cloudflare_workersai": { "types": { "import": "./embeddings/cloudflare_workersai.d.ts", @@ -3308,6 +3317,10 @@ "embeddings/bedrock.js", "embeddings/bedrock.d.ts", "embeddings/bedrock.d.cts", + "embeddings/bytedance_doubao.cjs", + "embeddings/bytedance_doubao.js", + "embeddings/bytedance_doubao.d.ts", + "embeddings/bytedance_doubao.d.cts", "embeddings/cloudflare_workersai.cjs", "embeddings/cloudflare_workersai.js", "embeddings/cloudflare_workersai.d.ts", diff --git a/libs/langchain-community/src/embeddings/bytedance_doubao.ts b/libs/langchain-community/src/embeddings/bytedance_doubao.ts new file mode 100644 index 000000000000..9d655bfd325e --- /dev/null +++ b/libs/langchain-community/src/embeddings/bytedance_doubao.ts @@ -0,0 +1,175 @@ +import { getEnvironmentVariable } from "@langchain/core/utils/env"; +import { Embeddings, type EmbeddingsParams } from "@langchain/core/embeddings"; +import { chunkArray } from "@langchain/core/utils/chunk_array"; + +export interface ByteDanceDoubaoEmbeddingsParams extends EmbeddingsParams { + /** Model name to use */ + modelName: string; + + /** + * Timeout to use when making requests to ByteDanceDoubao. + */ + timeout?: number; + + /** + * The maximum number of documents to embed in a single request. This is + * limited by the ByteDanceDoubao API to a maximum of 2048. + */ + batchSize?: number; + + /** + * Whether to strip new lines from the input text. + */ + stripNewLines?: boolean; +} + +interface EmbeddingCreateParams { + model: ByteDanceDoubaoEmbeddingsParams["modelName"]; + input: string[]; + encoding_format?: "float"; +} + +interface EmbeddingResponse { + data: { + index: number; + embedding: number[]; + }[]; + + usage: { + prompt_tokens: number; + total_tokens: number; + }; + + id: string; +} + +interface EmbeddingErrorResponse { + type: string; + code: string; + param: string; + message: string; +} + +export class ByteDanceDoubaoEmbeddings + extends Embeddings + implements ByteDanceDoubaoEmbeddingsParams { + modelName: ByteDanceDoubaoEmbeddingsParams["modelName"] = ""; + + batchSize = 24; + + stripNewLines = true; + + apiKey: string; + + constructor( + fields?: Partial & { + verbose?: boolean; + apiKey?: string; + } + ) { + const fieldsWithDefaults = { maxConcurrency: 2, ...fields }; + super(fieldsWithDefaults); + + const apiKey = + fieldsWithDefaults?.apiKey ?? getEnvironmentVariable("ARK_API_KEY"); + + if (!apiKey) throw new Error("ByteDanceDoubao API key not found"); + + this.apiKey = apiKey; + + this.modelName = fieldsWithDefaults?.modelName ?? this.modelName; + 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 ByteDanceDoubao 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 { + model: this.modelName, + input: texts, + }; + } + + /** + * Private method to make a request to the OpenAI API to generate + * embeddings. Handles the retry logic and returns the response from the + * API. + * @param request Request to send to the OpenAI API. + * @returns Promise that resolves to the response from the API. + */ + private async embeddingWithRetry(body: EmbeddingCreateParams) { + return fetch("https://ark.cn-beijing.volces.com/api/v3/embeddings", { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${this.apiKey}`, + }, + body: JSON.stringify(body), + }).then(async (response) => { + const embeddingData: EmbeddingResponse | EmbeddingErrorResponse = + await response.json(); + + if ("code" in embeddingData && embeddingData.code) { + throw new Error(`${embeddingData.code}: ${embeddingData.message}`); + } + + return (embeddingData as EmbeddingResponse).data.map( + ({ embedding }) => embedding + ); + }); + } +} diff --git a/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts new file mode 100644 index 000000000000..048da7166762 --- /dev/null +++ b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts @@ -0,0 +1,40 @@ +import { test, expect } from "@jest/globals"; +import { ByteDanceDoubaoEmbeddings } from "../bytedance_doubao.js"; + +const modelName = 'ep-xxx-xxx'; +test.skip("Test ByteDanceDoubaoEmbeddings.embedQuery", async () => { + const embeddings = new ByteDanceDoubaoEmbeddings({ + modelName, + }); + const res = await embeddings.embedQuery("Hello world"); + expect(typeof res[0]).toBe("number"); +}); + +test.skip("Test ByteDanceDoubaoEmbeddings.embedDocuments", async () => { + const embeddings = new ByteDanceDoubaoEmbeddings({ + modelName, + }); + const res = await embeddings.embedDocuments(["Hello world", "Bye bye"]); + expect(res).toHaveLength(2); + expect(typeof res[0][0]).toBe("number"); + expect(typeof res[1][0]).toBe("number"); +}); + +test.skip("Test ByteDanceDoubaoEmbeddings concurrency", async () => { + const embeddings = new ByteDanceDoubaoEmbeddings({ + modelName, + batchSize: 1, + }); + const res = await embeddings.embedDocuments([ + "Hello world", + "Bye bye", + "Hello world", + "Bye bye", + "Hello world", + "Bye bye", + ]); + expect(res).toHaveLength(6); + expect(res.find((embedding) => typeof embedding[0] !== "number")).toBe( + undefined + ); +}); diff --git a/libs/langchain-community/src/load/import_map.ts b/libs/langchain-community/src/load/import_map.ts index 2ec7b20bc542..6d00b2f172f9 100644 --- a/libs/langchain-community/src/load/import_map.ts +++ b/libs/langchain-community/src/load/import_map.ts @@ -27,6 +27,7 @@ export * as agents__toolkits__base from "../agents/toolkits/base.js"; export * as agents__toolkits__connery from "../agents/toolkits/connery/index.js"; export * as embeddings__alibaba_tongyi from "../embeddings/alibaba_tongyi.js"; export * as embeddings__baidu_qianfan from "../embeddings/baidu_qianfan.js"; +export * as embeddings__bytedance_doubao from "../embeddings/bytedance_doubao.js"; export * as embeddings__deepinfra from "../embeddings/deepinfra.js"; export * as embeddings__fireworks from "../embeddings/fireworks.js"; export * as embeddings__minimax from "../embeddings/minimax.js"; From 69469d11e0b3a7e88608c3efe5d4cfb1c11d6353 Mon Sep 17 00:00:00 2001 From: ucev Date: Thu, 9 Jan 2025 13:30:20 +0800 Subject: [PATCH 2/9] feat: modelName -> model --- examples/src/embeddings/bytedance_doubao.ts | 2 +- .../src/embeddings/bytedance_doubao.ts | 10 +++++----- .../src/embeddings/tests/bytedance_doubao.int.test.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/src/embeddings/bytedance_doubao.ts b/examples/src/embeddings/bytedance_doubao.ts index db0112b683ff..2948f7a747c7 100644 --- a/examples/src/embeddings/bytedance_doubao.ts +++ b/examples/src/embeddings/bytedance_doubao.ts @@ -1,7 +1,7 @@ import { ByteDanceDoubaoEmbeddings } from "@langchain/community/embeddings/bytedance_doubao"; const model = new ByteDanceDoubaoEmbeddings({ - modelName: 'ep-xxx-xxx' + model: 'ep-xxx-xxx' }); const res = await model.embedQuery( "What would be a good company name a company that makes colorful socks?" diff --git a/libs/langchain-community/src/embeddings/bytedance_doubao.ts b/libs/langchain-community/src/embeddings/bytedance_doubao.ts index 9d655bfd325e..6ea32648bccb 100644 --- a/libs/langchain-community/src/embeddings/bytedance_doubao.ts +++ b/libs/langchain-community/src/embeddings/bytedance_doubao.ts @@ -4,7 +4,7 @@ import { chunkArray } from "@langchain/core/utils/chunk_array"; export interface ByteDanceDoubaoEmbeddingsParams extends EmbeddingsParams { /** Model name to use */ - modelName: string; + model: string; /** * Timeout to use when making requests to ByteDanceDoubao. @@ -24,7 +24,7 @@ export interface ByteDanceDoubaoEmbeddingsParams extends EmbeddingsParams { } interface EmbeddingCreateParams { - model: ByteDanceDoubaoEmbeddingsParams["modelName"]; + model: ByteDanceDoubaoEmbeddingsParams["model"]; input: string[]; encoding_format?: "float"; } @@ -53,7 +53,7 @@ interface EmbeddingErrorResponse { export class ByteDanceDoubaoEmbeddings extends Embeddings implements ByteDanceDoubaoEmbeddingsParams { - modelName: ByteDanceDoubaoEmbeddingsParams["modelName"] = ""; + model = ""; batchSize = 24; @@ -77,7 +77,7 @@ export class ByteDanceDoubaoEmbeddings this.apiKey = apiKey; - this.modelName = fieldsWithDefaults?.modelName ?? this.modelName; + this.model = fieldsWithDefaults?.model ?? this.model; this.batchSize = fieldsWithDefaults?.batchSize ?? this.batchSize; this.stripNewLines = fieldsWithDefaults?.stripNewLines ?? this.stripNewLines; @@ -139,7 +139,7 @@ export class ByteDanceDoubaoEmbeddings texts: EmbeddingCreateParams["input"] ): EmbeddingCreateParams { return { - model: this.modelName, + model: this.model, input: texts, }; } diff --git a/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts index 048da7166762..007518dd87c2 100644 --- a/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts +++ b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts @@ -4,7 +4,7 @@ import { ByteDanceDoubaoEmbeddings } from "../bytedance_doubao.js"; const modelName = 'ep-xxx-xxx'; test.skip("Test ByteDanceDoubaoEmbeddings.embedQuery", async () => { const embeddings = new ByteDanceDoubaoEmbeddings({ - modelName, + model: modelName, }); const res = await embeddings.embedQuery("Hello world"); expect(typeof res[0]).toBe("number"); @@ -12,7 +12,7 @@ test.skip("Test ByteDanceDoubaoEmbeddings.embedQuery", async () => { test.skip("Test ByteDanceDoubaoEmbeddings.embedDocuments", async () => { const embeddings = new ByteDanceDoubaoEmbeddings({ - modelName, + model: modelName, }); const res = await embeddings.embedDocuments(["Hello world", "Bye bye"]); expect(res).toHaveLength(2); @@ -22,7 +22,7 @@ test.skip("Test ByteDanceDoubaoEmbeddings.embedDocuments", async () => { test.skip("Test ByteDanceDoubaoEmbeddings concurrency", async () => { const embeddings = new ByteDanceDoubaoEmbeddings({ - modelName, + model: modelName, batchSize: 1, }); const res = await embeddings.embedDocuments([ From ef22c617404bda46c4f276d7af5caf9b4ae506b3 Mon Sep 17 00:00:00 2001 From: ucev Date: Thu, 9 Jan 2025 14:55:27 +0800 Subject: [PATCH 3/9] feat: bytedance_doubao embedding ipynb --- .../text_embedding/bytedance_doubao.ipynb | 299 ++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb diff --git a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb new file mode 100644 index 000000000000..e26e2c5fd073 --- /dev/null +++ b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "raw", + "id": "afaf8039", + "metadata": { + "vscode": { + "languageId": "raw" + } + }, + "source": [ + "---\n", + "sidebar_label: ByteDance Doubao\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "9a3d6f34", + "metadata": {}, + "source": [ + "# ByteDanceDoubaoEmbeddings\n", + "\n", + "This will help you get started with ByteDanceDoubao [embedding models](/docs/concepts/embedding_models) using LangChain.\n", + "\n", + "## Overview\n", + "### Integration details\n", + "\n", + "| Class | Package | Local | Py support | Package downloads | Package latest |\n", + "| :--- | :--- | :---: | :---: | :---: | :---: |\n", + "| [ByteDanceDoubaoEmbeddings]() | [@langchain/community](https://api.js.langchain.com/modules/_langchain_community.html) | ❌ | ❌ | ![NPM - Downloads](https://img.shields.io/npm/dm/@langchain/community?style=flat-square&label=%20&) | ![NPM - Version](https://img.shields.io/npm/v/@langchain/community?style=flat-square&label=%20&) |\n", + "\n", + "## Setup\n", + "\n", + "You'll need to sign up for an [ARK API key](https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey) and set it as an environment variable named `ARK_API_KEY`. Then you should [create a entrypoint](https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint) for embedding models, and use the entrypoint's name as modelName.\n", + "\n", + "Then, you'll need to install the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package\n", + "\n", + "### Credentials\n", + "\n", + "If you want to get automated tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:\n", + "\n", + "```bash\n", + "# export LANGCHAIN_TRACING_V2=\"true\"\n", + "# export LANGCHAIN_API_KEY=\"your-api-key\"\n", + "```\n", + "\n", + "### Installation\n", + "\n", + "The LangChain ByteDanceDoubaoEmbeddings integration lives in the `@langchain/community` package:\n", + "\n", + "```{=mdx}\n", + "import IntegrationInstallTooltip from \"@mdx_components/integration_install_tooltip.mdx\";\n", + "import Npm2Yarn from \"@theme/Npm2Yarn\";\n", + "\n", + "\n", + "\n", + "\n", + " @langchain/community\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "45dd1724", + "metadata": {}, + "source": [ + "## Instantiation\n", + "\n", + "Now we can instantiate our model object and embed text:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9ea7a09b", + "metadata": {}, + "outputs": [], + "source": [ + "import { ByteDanceDoubaoEmbeddings } from \"@langchain/community/embeddings/bytedance_doubao\";\n", + "\n", + "const embeddings = new ByteDanceDoubaoEmbeddings({\n", + " model: 'ep-xxx-xxx' // your entrypoint's name\n", + "});" + ] + }, + { + "cell_type": "markdown", + "id": "77d271b6", + "metadata": {}, + "source": [ + "## Indexing and Retrieval\n", + "\n", + "Embedding models are often used in retrieval-augmented generation (RAG) flows, both as part of indexing data as well as later retrieving it. For more detailed instructions, please see our RAG tutorials under the [working with external knowledge tutorials](/docs/tutorials/#working-with-external-knowledge).\n", + "\n", + "Below, see how to index and retrieve data using the `embeddings` object we initialized above. In this example, we will index and retrieve a sample document using the demo [`MemoryVectorStore`](/docs/integrations/vectorstores/memory)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d817716b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LangChain is the framework for building context-aware reasoning applications\n" + ] + } + ], + "source": [ + "// Create a vector store with a sample text\n", + "import { MemoryVectorStore } from \"langchain/vectorstores/memory\";\n", + "\n", + "const text = \"LangChain is the framework for building context-aware reasoning applications\";\n", + "\n", + "const vectorstore = await MemoryVectorStore.fromDocuments(\n", + " [{ pageContent: text, metadata: {} }],\n", + " embeddings,\n", + ");\n", + "\n", + "// Use the vector store as a retriever that returns a single document\n", + "const retriever = vectorstore.asRetriever(1);\n", + "\n", + "// Retrieve the most similar text\n", + "const retrievedDocuments = await retriever.invoke(\"What is LangChain?\");\n", + "\n", + "retrievedDocuments[0].pageContent;" + ] + }, + { + "cell_type": "markdown", + "id": "e02b9855", + "metadata": {}, + "source": [ + "## Direct Usage\n", + "\n", + "Under the hood, the vectorstore and retriever implementations are calling `embeddings.embedDocument(...)` and `embeddings.embedQuery(...)` to create embeddings for the text(s) used in `fromDocuments` and the retriever's `invoke` operations, respectively.\n", + "\n", + "You can directly call these methods to get embeddings for your own use cases.\n", + "\n", + "### Embed single texts\n", + "\n", + "You can embed queries for search with `embedQuery`. This generates a vector representation specific to the query:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0d2befcd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " 0.026051683, 0.029081265, -0.040726297, -0.015116953, -0.010691089,\n", + " 0.030181013, -0.0065084146, -0.02079503, 0.013575795, 0.03452527,\n", + " 0.009578291, 0.007026421, -0.030110886, 0.013489622, -0.04294787,\n", + " 0.011141899, -0.043768786, -0.00362867, -0.0081198225, -0.03426076,\n", + " 0.010075142, 0.027787417, -0.09052663, -0.06039698, -0.009462592,\n", + " 0.06232288, 0.051121354, 0.011977532, 0.089046724, 0.059000008,\n", + " 0.031860664, -0.034242127, 0.020339863, 0.011483523, -0.05429335,\n", + " -0.04963588, 0.03263794, -0.05581542, 0.013908403, -0.012356067,\n", + " -0.007802118, -0.010027855, 0.00281217, -0.101886116, -0.079341754,\n", + " 0.011269771, 0.0035983133, -0.027667878, 0.032092705, -0.052843474,\n", + " -0.045283325, 0.0382421, 0.0193055, 0.011050924, 0.021132186,\n", + " -0.037696265, 0.0006107435, 0.0043520257, -0.028798066, 0.049155913,\n", + " 0.03590549, -0.0040995986, 0.019772101, -0.076119535, 0.0031298609,\n", + " 0.03368174, 0.039398745, -0.011813277, -0.019313531, -0.013108803,\n", + " -0.044905286, -0.022326004, -0.01656178, -0.06658457, 0.016789088,\n", + " 0.049952697, 0.006615693, -0.01694402, -0.018105473, 0.0049101883,\n", + " -0.004966945, 0.049762275, -0.03556957, -0.015986584, -0.03190983,\n", + " -0.05336687, -0.0020468342, -0.0016106658, -0.035291273, -0.029783724,\n", + " -0.010153295, 0.052100364, 0.05528949, 0.01379487, -0.024542747,\n", + " 0.028773975, 0.010087022, 0.030448131, -0.042391222, 0.016596776\n", + "]\n" + ] + } + ], + "source": [ + "const singleVector = await embeddings.embedQuery(text);\n", + "\n", + "console.log(singleVector.slice(0, 100));" + ] + }, + { + "cell_type": "markdown", + "id": "1b5a7d03", + "metadata": {}, + "source": [ + "### Embed multiple texts\n", + "\n", + "You can embed multiple texts for indexing with `embedDocuments`. The internals used for this method may (but do not have to) differ from embedding queries:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2f4d6e97", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " 0.026051683, 0.029081265, -0.040726297, -0.015116953, -0.010691089,\n", + " 0.030181013, -0.0065084146, -0.02079503, 0.013575795, 0.03452527,\n", + " 0.009578291, 0.007026421, -0.030110886, 0.013489622, -0.04294787,\n", + " 0.011141899, -0.043768786, -0.00362867, -0.0081198225, -0.03426076,\n", + " 0.010075142, 0.027787417, -0.09052663, -0.06039698, -0.009462592,\n", + " 0.06232288, 0.051121354, 0.011977532, 0.089046724, 0.059000008,\n", + " 0.031860664, -0.034242127, 0.020339863, 0.011483523, -0.05429335,\n", + " -0.04963588, 0.03263794, -0.05581542, 0.013908403, -0.012356067,\n", + " -0.007802118, -0.010027855, 0.00281217, -0.101886116, -0.079341754,\n", + " 0.011269771, 0.0035983133, -0.027667878, 0.032092705, -0.052843474,\n", + " -0.045283325, 0.0382421, 0.0193055, 0.011050924, 0.021132186,\n", + " -0.037696265, 0.0006107435, 0.0043520257, -0.028798066, 0.049155913,\n", + " 0.03590549, -0.0040995986, 0.019772101, -0.076119535, 0.0031298609,\n", + " 0.03368174, 0.039398745, -0.011813277, -0.019313531, -0.013108803,\n", + " -0.044905286, -0.022326004, -0.01656178, -0.06658457, 0.016789088,\n", + " 0.049952697, 0.006615693, -0.01694402, -0.018105473, 0.0049101883,\n", + " -0.004966945, 0.049762275, -0.03556957, -0.015986584, -0.03190983,\n", + " -0.05336687, -0.0020468342, -0.0016106658, -0.035291273, -0.029783724,\n", + " -0.010153295, 0.052100364, 0.05528949, 0.01379487, -0.024542747,\n", + " 0.028773975, 0.010087022, 0.030448131, -0.042391222, 0.016596776\n", + "]\n", + "[\n", + " 0.0558515, 0.028698817, -0.037476595, 0.0048659276, -0.019229038,\n", + " -0.04713716, -0.020947812, -0.017550547, 0.01205507, 0.027693441,\n", + " -0.011791304, 0.009862203, 0.019662278, -0.037511427, -0.022662448,\n", + " 0.036224432, -0.051760387, -0.030165697, -0.008899774, -0.024518963,\n", + " 0.010077767, 0.032209765, -0.0854303, -0.038666975, -0.036021013,\n", + " 0.060899545, 0.045867186, 0.003365381, 0.09387081, 0.038216405,\n", + " 0.011449426, -0.016495887, 0.020602569, -0.02368503, -0.014733645,\n", + " -0.065408126, -0.0065152845, -0.027103946, 0.00038956117, -0.08648814,\n", + " 0.029316466, -0.054449145, 0.034129277, -0.055225655, -0.043182302,\n", + " 0.0011148591, 0.044116337, -0.046552557, 0.032423045, -0.03269365,\n", + " -0.05062933, 0.021473562, -0.011019348, -0.019621233, -0.0003149565,\n", + " -0.0046085776, 0.0052610254, -0.0029293327, -0.035793293, 0.034469575,\n", + " 0.037724957, 0.009572597, 0.014198464, -0.0878237, 0.0056973165,\n", + " 0.023563445, 0.030928325, 0.025520306, 0.01836824, -0.016456697,\n", + " -0.061934732, 0.009764942, -0.035812028, -0.04429064, 0.031323086,\n", + " 0.056027107, -0.0019782048, -0.015204176, -0.008684945, -0.0010460864,\n", + " 0.054642987, 0.044149086, -0.032964867, -0.012044753, -0.019075096,\n", + " -0.027932597, 0.018542245, -0.02602878, -0.04645578, -0.020976603,\n", + " 0.018999187, 0.050663687, 0.016725155, 0.0076955976, 0.011448177,\n", + " 0.053931057, -0.03234989, 0.024429373, -0.023123834, 0.02197912\n", + "]\n" + ] + } + ], + "source": [ + "const text2 = \"LangGraph is a library for building stateful, multi-actor applications with LLMs\";\n", + "\n", + "const vectors = await embeddings.embedDocuments([text, text2]);\n", + "\n", + "console.log(vectors[0].slice(0, 100));\n", + "console.log(vectors[1].slice(0, 100));" + ] + }, + { + "cell_type": "markdown", + "id": "b48d41bb", + "metadata": {}, + "source": [ + "## Related\n", + "\n", + "- Embedding model [conceptual guide](/docs/concepts/embedding_models)\n", + "- Embedding model [how-to guides](/docs/how_to/#embedding-models)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "TypeScript", + "language": "typescript", + "name": "tslab" + }, + "language_info": { + "codemirror_mode": { + "mode": "typescript", + "name": "javascript", + "typescript": true + }, + "file_extension": ".ts", + "mimetype": "text/typescript", + "name": "typescript", + "version": "3.7.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 355f2db26fa0602d9cf5f72a867fb133847336d7 Mon Sep 17 00:00:00 2001 From: ucev Date: Thu, 9 Jan 2025 14:56:32 +0800 Subject: [PATCH 4/9] feat: delete mdx --- .../text_embedding/bytedance_doubao.mdx | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx diff --git a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx deleted file mode 100644 index d897235126fa..000000000000 --- a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -sidebar_class_name: node-only ---- - -# ByteDance Doubao - -The `ByteDanceDoubaoEmbeddings` class uses the ByteDance Doubao API to generate embeddings for a given text. - -## Setup - -You'll need to sign up for an ByteDance API key and set it as an environment variable named `ARK_API_KEY`. - -Then, you'll need to install the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package: - -import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx"; - - - -```bash npm2yarn -npm install @langchain/community @langchain/core -``` - -## Usage - -import CodeBlock from "@theme/CodeBlock"; -import ByteDanceDoubaoExample from "@examples/embeddings/bytedance_doubao.ts"; - -{ByteDanceDoubaoExample} - -## Related - -- Embedding model [conceptual guide](/docs/concepts/embedding_models) -- Embedding model [how-to guides](/docs/how_to/#embedding-models) From 70f093366300bc43f8a513f001185708162cbd95 Mon Sep 17 00:00:00 2001 From: ucev Date: Thu, 9 Jan 2025 16:43:35 +0800 Subject: [PATCH 5/9] feat: add .gitignore --- docs/core_docs/.gitignore | 82 ++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/docs/core_docs/.gitignore b/docs/core_docs/.gitignore index 01a0e487fd41..9353e462637e 100644 --- a/docs/core_docs/.gitignore +++ b/docs/core_docs/.gitignore @@ -34,16 +34,16 @@ yarn-error.log* /.quarto/ # AUTO_GENERATED_DOCS +docs/tutorials/summarization.md +docs/tutorials/summarization.mdx +docs/tutorials/sql_qa.md +docs/tutorials/sql_qa.mdx +docs/tutorials/retrievers.md +docs/tutorials/retrievers.mdx docs/tutorials/rag.md docs/tutorials/rag.mdx -docs/tutorials/query_analysis.md -docs/tutorials/query_analysis.mdx docs/tutorials/qa_chat_history.md docs/tutorials/qa_chat_history.mdx -docs/tutorials/pdf_qa.md -docs/tutorials/pdf_qa.mdx -docs/tutorials/local_rag.md -docs/tutorials/local_rag.mdx docs/tutorials/llm_chain.md docs/tutorials/llm_chain.mdx docs/tutorials/graph.md @@ -54,8 +54,6 @@ docs/tutorials/classification.md docs/tutorials/classification.mdx docs/tutorials/chatbot.md docs/tutorials/chatbot.mdx -docs/concepts/t.md -docs/concepts/t.mdx docs/how_to/trim_messages.md docs/how_to/trim_messages.mdx docs/how_to/tools_prompting.md @@ -218,6 +216,8 @@ docs/how_to/assign.md docs/how_to/assign.mdx docs/how_to/agent_executor.md docs/how_to/agent_executor.mdx +docs/concepts/t.md +docs/concepts/t.mdx docs/versions/migrating_memory/conversation_summary_memory.md docs/versions/migrating_memory/conversation_summary_memory.mdx docs/versions/migrating_memory/conversation_buffer_window_memory.md @@ -226,6 +226,12 @@ docs/versions/migrating_memory/chat_history.md docs/versions/migrating_memory/chat_history.mdx docs/troubleshooting/errors/INVALID_TOOL_RESULTS.md docs/troubleshooting/errors/INVALID_TOOL_RESULTS.mdx +docs/integrations/toolkits/vectorstore.md +docs/integrations/toolkits/vectorstore.mdx +docs/integrations/toolkits/sql.md +docs/integrations/toolkits/sql.mdx +docs/integrations/toolkits/openapi.md +docs/integrations/toolkits/openapi.mdx docs/integrations/vectorstores/weaviate.md docs/integrations/vectorstores/weaviate.mdx docs/integrations/vectorstores/upstash.md @@ -252,22 +258,10 @@ docs/integrations/vectorstores/elasticsearch.md docs/integrations/vectorstores/elasticsearch.mdx docs/integrations/vectorstores/chroma.md docs/integrations/vectorstores/chroma.mdx -docs/integrations/tools/tavily_search.md -docs/integrations/tools/tavily_search.mdx -docs/integrations/tools/serpapi.md -docs/integrations/tools/serpapi.mdx -docs/integrations/tools/google_scholar.md -docs/integrations/tools/google_scholar.mdx -docs/integrations/tools/exa_search.md -docs/integrations/tools/exa_search.mdx -docs/integrations/tools/duckduckgo_search.md -docs/integrations/tools/duckduckgo_search.mdx -docs/integrations/toolkits/vectorstore.md -docs/integrations/toolkits/vectorstore.mdx -docs/integrations/toolkits/sql.md -docs/integrations/toolkits/sql.mdx -docs/integrations/toolkits/openapi.md -docs/integrations/toolkits/openapi.mdx +docs/integrations/stores/in_memory.md +docs/integrations/stores/in_memory.mdx +docs/integrations/stores/file_system.md +docs/integrations/stores/file_system.mdx docs/integrations/text_embedding/togetherai.md docs/integrations/text_embedding/togetherai.mdx docs/integrations/text_embedding/pinecone.md @@ -290,14 +284,12 @@ docs/integrations/text_embedding/cohere.md docs/integrations/text_embedding/cohere.mdx docs/integrations/text_embedding/cloudflare_ai.md docs/integrations/text_embedding/cloudflare_ai.mdx +docs/integrations/text_embedding/bytedance_doubao.md +docs/integrations/text_embedding/bytedance_doubao.mdx docs/integrations/text_embedding/bedrock.md docs/integrations/text_embedding/bedrock.mdx docs/integrations/text_embedding/azure_openai.md docs/integrations/text_embedding/azure_openai.mdx -docs/integrations/stores/in_memory.md -docs/integrations/stores/in_memory.mdx -docs/integrations/stores/file_system.md -docs/integrations/stores/file_system.mdx docs/integrations/retrievers/tavily.md docs/integrations/retrievers/tavily.mdx docs/integrations/retrievers/kendra-retriever.md @@ -360,6 +352,8 @@ docs/integrations/chat/cohere.md docs/integrations/chat/cohere.mdx docs/integrations/chat/cloudflare_workersai.md docs/integrations/chat/cloudflare_workersai.mdx +docs/integrations/chat/cerebras.md +docs/integrations/chat/cerebras.mdx docs/integrations/chat/bedrock_converse.md docs/integrations/chat/bedrock_converse.mdx docs/integrations/chat/bedrock.md @@ -370,6 +364,16 @@ docs/integrations/chat/arcjet.md docs/integrations/chat/arcjet.mdx docs/integrations/chat/anthropic.md docs/integrations/chat/anthropic.mdx +docs/integrations/tools/tavily_search.md +docs/integrations/tools/tavily_search.mdx +docs/integrations/tools/serpapi.md +docs/integrations/tools/serpapi.mdx +docs/integrations/tools/google_scholar.md +docs/integrations/tools/google_scholar.mdx +docs/integrations/tools/exa_search.md +docs/integrations/tools/exa_search.mdx +docs/integrations/tools/duckduckgo_search.md +docs/integrations/tools/duckduckgo_search.mdx docs/integrations/retrievers/self_query/weaviate.md docs/integrations/retrievers/self_query/weaviate.mdx docs/integrations/retrievers/self_query/vectara.md @@ -386,6 +390,16 @@ docs/integrations/retrievers/self_query/hnswlib.md docs/integrations/retrievers/self_query/hnswlib.mdx docs/integrations/retrievers/self_query/chroma.md docs/integrations/retrievers/self_query/chroma.mdx +docs/integrations/document_loaders/file_loaders/unstructured.md +docs/integrations/document_loaders/file_loaders/unstructured.mdx +docs/integrations/document_loaders/file_loaders/text.md +docs/integrations/document_loaders/file_loaders/text.mdx +docs/integrations/document_loaders/file_loaders/pdf.md +docs/integrations/document_loaders/file_loaders/pdf.mdx +docs/integrations/document_loaders/file_loaders/directory.md +docs/integrations/document_loaders/file_loaders/directory.mdx +docs/integrations/document_loaders/file_loaders/csv.md +docs/integrations/document_loaders/file_loaders/csv.mdx docs/integrations/document_loaders/web_loaders/web_puppeteer.md docs/integrations/document_loaders/web_loaders/web_puppeteer.mdx docs/integrations/document_loaders/web_loaders/web_cheerio.md @@ -397,14 +411,4 @@ docs/integrations/document_loaders/web_loaders/pdf.mdx docs/integrations/document_loaders/web_loaders/langsmith.md docs/integrations/document_loaders/web_loaders/langsmith.mdx docs/integrations/document_loaders/web_loaders/firecrawl.md -docs/integrations/document_loaders/web_loaders/firecrawl.mdx -docs/integrations/document_loaders/file_loaders/unstructured.md -docs/integrations/document_loaders/file_loaders/unstructured.mdx -docs/integrations/document_loaders/file_loaders/text.md -docs/integrations/document_loaders/file_loaders/text.mdx -docs/integrations/document_loaders/file_loaders/pdf.md -docs/integrations/document_loaders/file_loaders/pdf.mdx -docs/integrations/document_loaders/file_loaders/directory.md -docs/integrations/document_loaders/file_loaders/directory.mdx -docs/integrations/document_loaders/file_loaders/csv.md -docs/integrations/document_loaders/file_loaders/csv.mdx \ No newline at end of file +docs/integrations/document_loaders/web_loaders/firecrawl.mdx \ No newline at end of file From d72a6362e2c85570927360bbdeee544b2bae0020 Mon Sep 17 00:00:00 2001 From: ucev Date: Thu, 9 Jan 2025 23:09:31 +0800 Subject: [PATCH 6/9] feat: add api reference --- .../text_embedding/bytedance_doubao.ipynb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb index e26e2c5fd073..000fb9b09886 100644 --- a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb +++ b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb @@ -21,14 +21,14 @@ "source": [ "# ByteDanceDoubaoEmbeddings\n", "\n", - "This will help you get started with ByteDanceDoubao [embedding models](/docs/concepts/embedding_models) using LangChain.\n", + "This will help you get started with ByteDanceDoubao [embedding models](/docs/concepts/embedding_models) using LangChain. For detailed documentation on `ByteDanceDoubaoEmbeddings` features and configuration options, please refer to the [API reference](https://api.js.langchain.com/classes/_langchain_community.embeddings_bytedance_doubao.ByteDanceDoubaoEmbeddings.html).\n", "\n", "## Overview\n", "### Integration details\n", "\n", "| Class | Package | Local | Py support | Package downloads | Package latest |\n", "| :--- | :--- | :---: | :---: | :---: | :---: |\n", - "| [ByteDanceDoubaoEmbeddings]() | [@langchain/community](https://api.js.langchain.com/modules/_langchain_community.html) | ❌ | ❌ | ![NPM - Downloads](https://img.shields.io/npm/dm/@langchain/community?style=flat-square&label=%20&) | ![NPM - Version](https://img.shields.io/npm/v/@langchain/community?style=flat-square&label=%20&) |\n", + "| [ByteDanceDoubaoEmbeddings](https://api.js.langchain.com/classes/_langchain_community.embeddings_bytedance_doubao.ByteDanceDoubaoEmbeddings.html) | [@langchain/community](https://api.js.langchain.com/modules/_langchain_community.html) | ❌ | ❌ | ![NPM - Downloads](https://img.shields.io/npm/dm/@langchain/community?style=flat-square&label=%20&) | ![NPM - Version](https://img.shields.io/npm/v/@langchain/community?style=flat-square&label=%20&) |\n", "\n", "## Setup\n", "\n", @@ -274,6 +274,16 @@ "- Embedding model [conceptual guide](/docs/concepts/embedding_models)\n", "- Embedding model [how-to guides](/docs/how_to/#embedding-models)" ] + }, + { + "cell_type": "markdown", + "id": "eacd89fe", + "metadata": {}, + "source": [ + "## API reference\n", + "\n", + "For detailed documentation of all ByteDanceDoubaoEmbeddings features and configurations head to the API reference: https://api.js.langchain.com/classes/_langchain_community.embeddings_bytedance_doubao.ByteDanceDoubaoEmbeddings.html" + ] } ], "metadata": { From f2dc2a61542af485b399c44db8d83cc6ee762d99 Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Fri, 10 Jan 2025 13:48:00 -0800 Subject: [PATCH 7/9] Update bytedance_doubao.ipynb --- .../docs/integrations/text_embedding/bytedance_doubao.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb index 000fb9b09886..f5f8fcaee35d 100644 --- a/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb +++ b/docs/core_docs/docs/integrations/text_embedding/bytedance_doubao.ipynb @@ -32,7 +32,7 @@ "\n", "## Setup\n", "\n", - "You'll need to sign up for an [ARK API key](https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey) and set it as an environment variable named `ARK_API_KEY`. Then you should [create a entrypoint](https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint) for embedding models, and use the entrypoint's name as modelName.\n", + "You'll need to sign up for an [ARK API key](https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey) and set it as an environment variable named `ARK_API_KEY`. Then you should [create a entrypoint](https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint) for embedding models, and use the entrypoint's name as `model`.\n", "\n", "Then, you'll need to install the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package\n", "\n", From cc1282edf532c46b619bfd291560499bb095f7c2 Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Fri, 10 Jan 2025 13:50:15 -0800 Subject: [PATCH 8/9] Remove unnecessary default --- libs/langchain-community/src/embeddings/bytedance_doubao.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langchain-community/src/embeddings/bytedance_doubao.ts b/libs/langchain-community/src/embeddings/bytedance_doubao.ts index 6ea32648bccb..b15877c61787 100644 --- a/libs/langchain-community/src/embeddings/bytedance_doubao.ts +++ b/libs/langchain-community/src/embeddings/bytedance_doubao.ts @@ -53,7 +53,7 @@ interface EmbeddingErrorResponse { export class ByteDanceDoubaoEmbeddings extends Embeddings implements ByteDanceDoubaoEmbeddingsParams { - model = ""; + model: string; batchSize = 24; From 374df031bcb8ee238a95ad5d3a76bc1968b5ae28 Mon Sep 17 00:00:00 2001 From: jacoblee93 Date: Fri, 10 Jan 2025 14:04:55 -0800 Subject: [PATCH 9/9] Format --- examples/src/embeddings/bytedance_doubao.ts | 2 +- libs/langchain-community/src/embeddings/bytedance_doubao.ts | 3 ++- .../src/embeddings/tests/bytedance_doubao.int.test.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/src/embeddings/bytedance_doubao.ts b/examples/src/embeddings/bytedance_doubao.ts index 2948f7a747c7..a7a669decb6b 100644 --- a/examples/src/embeddings/bytedance_doubao.ts +++ b/examples/src/embeddings/bytedance_doubao.ts @@ -1,7 +1,7 @@ import { ByteDanceDoubaoEmbeddings } from "@langchain/community/embeddings/bytedance_doubao"; const model = new ByteDanceDoubaoEmbeddings({ - model: 'ep-xxx-xxx' + model: "ep-xxx-xxx", }); const res = await model.embedQuery( "What would be a good company name a company that makes colorful socks?" diff --git a/libs/langchain-community/src/embeddings/bytedance_doubao.ts b/libs/langchain-community/src/embeddings/bytedance_doubao.ts index b15877c61787..d542bc14c989 100644 --- a/libs/langchain-community/src/embeddings/bytedance_doubao.ts +++ b/libs/langchain-community/src/embeddings/bytedance_doubao.ts @@ -52,7 +52,8 @@ interface EmbeddingErrorResponse { export class ByteDanceDoubaoEmbeddings extends Embeddings - implements ByteDanceDoubaoEmbeddingsParams { + implements ByteDanceDoubaoEmbeddingsParams +{ model: string; batchSize = 24; diff --git a/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts index 007518dd87c2..f584e1dfbba2 100644 --- a/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts +++ b/libs/langchain-community/src/embeddings/tests/bytedance_doubao.int.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@jest/globals"; import { ByteDanceDoubaoEmbeddings } from "../bytedance_doubao.js"; -const modelName = 'ep-xxx-xxx'; +const modelName = "ep-xxx-xxx"; test.skip("Test ByteDanceDoubaoEmbeddings.embedQuery", async () => { const embeddings = new ByteDanceDoubaoEmbeddings({ model: modelName,