Skip to content

community[minor], azure-cosmosdb[major]: add new integration for Azure CosmosDB for NoSQL #6133

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 62 commits into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
a6b9087
refactor: rename azure cosmosdb for mongodb vcore integration
sinedied Jul 16, 2024
4b161ab
feat: add compatibility import
sinedied Jul 17, 2024
afc0cb0
refactor: update old imports
sinedied Jul 17, 2024
2496b46
feat: add Azure CosmosDB for NoSQL VectorStore integration
sinedied Jul 17, 2024
2e0ad02
fix: connection string
sinedied Jul 17, 2024
bbe62cb
refactor: formatting
sinedied Jul 17, 2024
ea85945
chore: add imports
sinedied Jul 17, 2024
d12b608
fix: connection string parsing
sinedied Jul 17, 2024
423c55e
refactor: do not use bulk for document creation
sinedied Jul 17, 2024
eacc200
fix: split delete operations into batches of 100
sinedied Jul 17, 2024
7f3cd3e
fix: search results and metadata storage
sinedied Jul 17, 2024
2042435
docs: add Azure CosmosDB for NoSQL example
sinedied Jul 17, 2024
b7c6801
fix: embedding key init
sinedied Jul 17, 2024
ab9a654
fix: filter where clause
sinedied Jul 17, 2024
acf8b8d
refactor: improve delete
sinedied Jul 17, 2024
3660f2c
fix: delete
sinedied Jul 17, 2024
54f2c4b
fix: mmr search
sinedied Jul 17, 2024
53720f1
docs: fix typo
sinedied Jul 17, 2024
b1abb0a
test: add integration tests
sinedied Jul 17, 2024
2a92c8c
refactor: format and lint
sinedied Jul 17, 2024
d9f1d07
fix: id usage during create
sinedied Jul 18, 2024
3f6d43d
test: add unit tests
sinedied Jul 18, 2024
8eb145a
chore: create new langchain-azure-cosmosdb package
sinedied Jul 18, 2024
cbb0ad8
chore: add deprecated message to community vcore
sinedied Jul 18, 2024
ff2c20e
refactor: migrate code to the new pakcage
sinedied Jul 18, 2024
19429fc
chore: update example env file
sinedied Jul 18, 2024
2d06057
test: update tests
sinedied Jul 18, 2024
ffaea73
chore: clean up
sinedied Jul 18, 2024
92d79f7
docs: update docs to use the new package
sinedied Jul 18, 2024
fc30576
chore: update examples to use the new package
sinedied Jul 18, 2024
e54bb9f
chore: lint/formatting
sinedied Jul 18, 2024
74c1c46
test: fix wrong id format
sinedied Jul 18, 2024
71816bd
fix: wrong naming
sinedied Jul 18, 2024
5088122
feat: add support for managed identity
sinedied Jul 18, 2024
1c43edc
docs: add note on managed identity
sinedied Jul 18, 2024
22d587a
test: add unit test for managed identity
sinedied Jul 18, 2024
93bf6ff
chore: fix package name
sinedied Jul 18, 2024
67657dc
chore: fix mongodb version
sinedied Jul 18, 2024
0eecd35
chore: revert old integration renaming
sinedied Jul 18, 2024
1b80af4
chore: revert old package renaming (part 2)
sinedied Jul 18, 2024
1805b54
chore: revert renaming old integration (part 3)
sinedied Jul 18, 2024
9948be4
Merge branch 'main' into cosmosdb
sinedied Jul 18, 2024
d90d497
Merge branch 'main' into cosmosdb
sinedied Jul 19, 2024
a3a1262
Merge branch 'main' into cosmosdb
sinedied Jul 22, 2024
d8c6ebc
feat: make filters more generic to allow offset limit filters
sinedied Jul 24, 2024
e7dc493
Merge branch 'main' into cosmosdb
sinedied Jul 24, 2024
306f5e3
Merge branch 'main' into cosmosdb
sinedied Jul 29, 2024
eb0dce7
chore: update lockfile
sinedied Jul 30, 2024
5c3eee5
fix: example name
sinedied Jul 30, 2024
5fea208
Merge branch 'main' into cosmosdb
sinedied Jul 30, 2024
dbe9f70
chore: remove todo
sinedied Aug 5, 2024
072d59d
chore: update langchain versions
sinedied Aug 5, 2024
7b01de5
refactor: defer init outside of constructor
sinedied Aug 5, 2024
920ef60
refactor: defer init to initialize method
sinedied Aug 5, 2024
9e6b1aa
Merge branch 'main' into cosmosdb
sinedied Aug 6, 2024
cccc572
chore: update lockfile
sinedied Aug 6, 2024
0eb9915
refactor: rename CosmosDB for MongoDB integration
sinedied Aug 6, 2024
b88c7f1
docs: add related links (auto)
sinedied Aug 6, 2024
2aee251
Merge branch 'main' into cosmosdb
sinedied Aug 7, 2024
ac2d1bc
Merge
jacoblee93 Aug 7, 2024
3063e29
Lint + format
jacoblee93 Aug 7, 2024
f94de65
Fix build
jacoblee93 Aug 7, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/core_docs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,12 @@ docs/how_to/assign.md
docs/how_to/assign.mdx
docs/how_to/agent_executor.md
docs/how_to/agent_executor.mdx
docs/integrations/tools/duckduckgo_search.md
docs/integrations/tools/duckduckgo_search.mdx
docs/integrations/toolkits/sql.md
docs/integrations/toolkits/sql.mdx
docs/integrations/toolkits/openapi.md
docs/integrations/toolkits/openapi.mdx
docs/integrations/text_embedding/togetherai.md
docs/integrations/text_embedding/togetherai.mdx
docs/integrations/text_embedding/openai.md
Expand Down
24 changes: 20 additions & 4 deletions docs/core_docs/docs/integrations/platforms/microsoft.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -100,20 +100,36 @@ See a [usage example](/docs/integrations/vectorstores/azure_aisearch).
import { AzureAISearchVectorStore } from "@langchain/community/vectorstores/azure_aisearch";
```

### Azure Cosmos DB for NoSQL

> [Azure Cosmos DB for NoSQL](https://learn.microsoft.com/azure/cosmos-db/nosql/) provides support for querying items with flexible schemas and native support for JSON. It now offers vector indexing and search. This feature is designed to handle high-dimensional vectors, enabling efficient and accurate vector search at any scale. You can now store vectors directly in the documents alongside your data. Each document in your database can contain not only traditional schema-free data, but also high-dimensional vectors as other properties of the documents.

<IntegrationInstallTooltip></IntegrationInstallTooltip>

```bash npm2yarn
npm install @langchain/azure-cosmosdb
```

See a [usage example](/docs/integrations/vectorstores/azure_cosmosdb_nosql).

```typescript
import { AzureCosmosDBNoSQLVectorStore } from "@langchain/azure-cosmosdb";
```

### Azure Cosmos DB for MongoDB vCore

> [Azure Cosmos DB for MongoDB vCore](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/) makes it easy to create a database with full native MongoDB support. You can apply your MongoDB experience and continue to use your favorite MongoDB drivers, SDKs, and tools by pointing your application to the API for MongoDB vCore account’s connection string. Use vector search in Azure Cosmos DB for MongoDB vCore to seamlessly integrate your AI-based applications with your data that’s stored in Azure Cosmos DB.
> [Azure Cosmos DB for MongoDB vCore](https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/) makes it easy to create a database with full native MongoDB support. You can apply your MongoDB experience and continue to use your favorite MongoDB drivers, SDKs, and tools by pointing your application to the API for MongoDB vCore account’s connection string. Use vector search in Azure Cosmos DB for MongoDB vCore to seamlessly integrate your AI-based applications with your data that’s stored in Azure Cosmos DB.

<IntegrationInstallTooltip></IntegrationInstallTooltip>

```bash npm2yarn
npm install @langchain/community mongodb
npm install @langchain/azure-cosmosdb
```

See a [usage example](/docs/integrations/vectorstores/azure_cosmosdb).
See a [usage example](/docs/integrations/vectorstores/azure_cosmosdb_mongodb).

```typescript
import { AzureCosmosDBVectorStore } from "@langchain/community/vectorstores/azure_cosmosdb";
import { AzureCosmosDBMongoDBVectorStore } from "@langchain/azure-cosmosdb";
```

## Document loaders
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
# Azure Cosmos DB
# Azure Cosmos DB for MongoDB vCore

> [Azure Cosmos DB for MongoDB vCore](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/) makes it easy to create a database with full native MongoDB support. You can apply your MongoDB experience and continue to use your favorite MongoDB drivers, SDKs, and tools by pointing your application to the API for MongoDB vCore account’s connection string. Use vector search in Azure Cosmos DB for MongoDB vCore to seamlessly integrate your AI-based applications with your data that’s stored in Azure Cosmos DB.
> [Azure Cosmos DB for MongoDB vCore](https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/) makes it easy to create a database with full native MongoDB support. You can apply your MongoDB experience and continue to use your favorite MongoDB drivers, SDKs, and tools by pointing your application to the API for MongoDB vCore account’s connection string. Use vector search in Azure Cosmos DB for MongoDB vCore to seamlessly integrate your AI-based applications with your data that’s stored in Azure Cosmos DB.

Azure Cosmos DB for MongoDB vCore provides developers with a fully managed MongoDB-compatible database service for building modern applications with a familiar architecture.

Learn how to leverage the vector search capabilities of Azure Cosmos DB for MongoDB vCore from [this page](https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/vector-search). If you don't have an Azure account, you can [create a free account](https://azure.microsoft.com/free/) to get started.

## Setup

You'll first need to install the `mongodb` SDK and the [`@langchain/community`](https://www.npmjs.com/package/@langchain/community) package:
You'll first need to install the [`@langchain/azure-cosmosdb`](https://www.npmjs.com/package/@langchain/azure-cosmosdb) package:

import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";

<IntegrationInstallTooltip></IntegrationInstallTooltip>

```bash npm2yarn
npm install @langchain/community mongodb
npm install @langchain/azure-cosmosdb
```

You'll also need to have an Azure Cosmos DB for MongoDB vCore instance running. You can deploy a free version on Azure Portal without any cost, following [this guide](https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/quickstart-portal).

Once you have your instance running, make sure you have the connection string and the admin key. You can find them in the Azure Portal, under the "Connection strings" section of your instance. Then you need to set the following environment variables:

import CodeBlock from "@theme/CodeBlock";
import EnvVars from "@examples/indexes/vector_stores/azure_cosmosdb/.env.example";
import EnvVars from "@examples/indexes/vector_stores/azure_cosmosdb_mongodb/.env.example";

<CodeBlock language="text">{EnvVars}</CodeBlock>

Expand All @@ -32,7 +32,7 @@ import EnvVars from "@examples/indexes/vector_stores/azure_cosmosdb/.env.example
Below is an example that indexes documents from a file in Azure Cosmos DB for MongoDB vCore, runs a vector search query, and finally uses a chain to answer a question in natural language
based on the retrieved documents.

import Example from "@examples/indexes/vector_stores/azure_cosmosdb/azure_cosmosdb.ts";
import Example from "@examples/indexes/vector_stores/azure_cosmosdb_mongodb/azure_cosmosdb_mongodb.ts";

<CodeBlock language="typescript">{Example}</CodeBlock>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Azure Cosmos DB for NoSQL

> [Azure Cosmos DB for NoSQL](https://learn.microsoft.com/azure/cosmos-db/nosql/) provides support for querying items with flexible schemas and native support for JSON. It now offers vector indexing and search. This feature is designed to handle high-dimensional vectors, enabling efficient and accurate vector search at any scale. You can now store vectors directly in the documents alongside your data. Each document in your database can contain not only traditional schema-free data, but also high-dimensional vectors as other properties of the documents.

Learn how to leverage the vector search capabilities of Azure Cosmos DB for NoSQL from [this page](https://learn.microsoft.com/azure/cosmos-db/nosql/vector-search). If you don't have an Azure account, you can [create a free account](https://azure.microsoft.com/free/) to get started.

## Setup

You'll first need to install the [`@langchain/azure-cosmosdb`](https://www.npmjs.com/package/@langchain/azure-cosmosdb) package:

import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";

<IntegrationInstallTooltip></IntegrationInstallTooltip>

```bash npm2yarn
npm install @langchain/azure-cosmosdb
```

You'll also need to have an Azure Cosmos DB for NoSQL instance running. You can deploy a free version on Azure Portal without any cost, following [this guide](https://learn.microsoft.com/azure/cosmos-db/nosql/quickstart-portal).

Once you have your instance running, make sure you have the connection string. You can find them in the Azure Portal, under the "Settings / Keys" section of your instance. Then you need to set the following environment variables:

import CodeBlock from "@theme/CodeBlock";
import EnvVars from "@examples/indexes/vector_stores/azure_cosmosdb_nosql/.env.example";

<CodeBlock language="text">{EnvVars}</CodeBlock>

### Using Azure Managed Identity

If you're using Azure Managed Identity, you can configure the credentials like this:

import ManagedIdentityExample from "@examples/indexes/vector_stores/azure_cosmosdb_nosql/azure_cosmosdb_nosql-managed_identity.ts";

<CodeBlock language="typescript">{ManagedIdentityExample}</CodeBlock>

:::info

When using Azure Managed Identity and role-based access control, you must ensure that the database and container have been created beforehand. RBAC does not provide permissions to create databases and containers. You can get more information about the permission model in the [Azure Cosmos DB documentation](https://learn.microsoft.com/azure/cosmos-db/how-to-setup-rbac#permission-model).

:::

## Usage example

Below is an example that indexes documents from a file in Azure Cosmos DB for NoSQL, runs a vector search query, and finally uses a chain to answer a question in natural language
based on the retrieved documents.

import Example from "@examples/indexes/vector_stores/azure_cosmosdb_nosql/azure_cosmosdb_nosql.ts";

<CodeBlock language="typescript">{Example}</CodeBlock>

## Related

- Vector store [conceptual guide](/docs/concepts/#vectorstores)
- Vector store [how-to guides](/docs/how_to/#vectorstores)
1 change: 1 addition & 0 deletions examples/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"@google/generative-ai": "^0.7.0",
"@langchain/anthropic": "workspace:*",
"@langchain/aws": "workspace:*",
"@langchain/azure-cosmosdb": "workspace:*",
"@langchain/azure-dynamic-sessions": "workspace:^",
"@langchain/azure-openai": "workspace:*",
"@langchain/baidu-qianfan": "workspace:*",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
AZURE_COSMOSDB_MONGODB_CONNECTION_STRING=
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
AzureCosmosDBVectorStore,
AzureCosmosDBSimilarityType,
} from "@langchain/community/vectorstores/azure_cosmosdb";
AzureCosmosDBMongoDBVectorStore,
AzureCosmosDBMongoDBSimilarityType,
} from "@langchain/azure-cosmosdb";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
import { createStuffDocumentsChain } from "langchain/chains/combine_documents";
Expand All @@ -18,8 +18,8 @@ const splitter = new RecursiveCharacterTextSplitter({
});
const documents = await splitter.splitDocuments(rawDocuments);

// Create Azure Cosmos DB vector store
const store = await AzureCosmosDBVectorStore.fromDocuments(
// Create Azure Cosmos DB for MongoDB vCore vector store
const store = await AzureCosmosDBMongoDBVectorStore.fromDocuments(
documents,
new OpenAIEmbeddings(),
{
Expand All @@ -28,7 +28,7 @@ const store = await AzureCosmosDBVectorStore.fromDocuments(
indexOptions: {
numLists: 100,
dimensions: 1536,
similarity: AzureCosmosDBSimilarityType.COS,
similarity: AzureCosmosDBMongoDBSimilarityType.COS,
},
}
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Use connection string to authenticate
AZURE_COSMOSDB_NOSQL_CONNECTION_STRING=

# Use managed identity to authenticate
AZURE_COSMOSDB_NOSQL_ENDPOINT=
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { AzureCosmosDBNoSQLVectorStore } from "@langchain/azure-cosmosdb";
import { OpenAIEmbeddings } from "@langchain/openai";

// Create Azure Cosmos DB vector store
const store = new AzureCosmosDBNoSQLVectorStore(new OpenAIEmbeddings(), {
// Or use environment variable AZURE_COSMOSDB_NOSQL_ENDPOINT
endpoint: "https://my-cosmosdb.documents.azure.com:443/",

// Database and container must already exist
databaseName: "my-database",
containerName: "my-container",
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { AzureCosmosDBNoSQLVectorStore } from "@langchain/azure-cosmosdb";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
import { createStuffDocumentsChain } from "langchain/chains/combine_documents";
import { createRetrievalChain } from "langchain/chains/retrieval";
import { TextLoader } from "langchain/document_loaders/fs/text";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

// Load documents from file
const loader = new TextLoader("./state_of_the_union.txt");
const rawDocuments = await loader.load();
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 1000,
chunkOverlap: 0,
});
const documents = await splitter.splitDocuments(rawDocuments);

// Create Azure Cosmos DB vector store
const store = await AzureCosmosDBNoSQLVectorStore.fromDocuments(
documents,
new OpenAIEmbeddings(),
{
databaseName: "langchain",
containerName: "documents",
}
);

// Performs a similarity search
const resultDocuments = await store.similaritySearch(
"What did the president say about Ketanji Brown Jackson?"
);

console.log("Similarity search results:");
console.log(resultDocuments[0].pageContent);
/*
Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections.

Tonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service.

One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court.

And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.
*/

// Use the store as part of a chain
const model = new ChatOpenAI({ model: "gpt-3.5-turbo-1106" });
const questionAnsweringPrompt = ChatPromptTemplate.fromMessages([
[
"system",
"Answer the user's questions based on the below context:\n\n{context}",
],
["human", "{input}"],
]);

const combineDocsChain = await createStuffDocumentsChain({
llm: model,
prompt: questionAnsweringPrompt,
});

const chain = await createRetrievalChain({
retriever: store.asRetriever(),
combineDocsChain,
});

const res = await chain.invoke({
input: "What is the president's top priority regarding prices?",
});

console.log("Chain response:");
console.log(res.answer);
/*
The president's top priority is getting prices under control.
*/

// Clean up
await store.delete();
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Azure CosmosDB for NoSQL connection string
AZURE_COSMOSDB_NOSQL_CONNECTION_STRING=

# Azure CosmosDB for NoSQL endpoint (if you're using managed identity)
AZURE_COSMOSDB_NOSQL_ENDPOINT=

# Azure CosmosDB for MongoDB vCore connection string
AZURE_COSMOSDB_CONNECTION_STRING=
AZURE_COSMOSDB_MONGODB_CONNECTION_STRING=

# If you're using Azure OpenAI API, you'll need to set these variables
AZURE_OPENAI_API_KEY=
Expand Down
66 changes: 66 additions & 0 deletions libs/langchain-azure-cosmosdb/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
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",
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 }],
},
};
7 changes: 7 additions & 0 deletions libs/langchain-azure-cosmosdb/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
index.cjs
index.js
index.d.ts
index.d.cts
node_modules
dist
.yarn
19 changes: 19 additions & 0 deletions libs/langchain-azure-cosmosdb/.prettierrc
Original file line number Diff line number Diff line change
@@ -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"
}
Loading
Loading