Skip to content
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

feat(cosmosdbnosql): Add Semantic Cache Integration #7033

Merged
merged 36 commits into from
Nov 5, 2024
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ea34aa7
add semantic cache
aditishree1 Oct 20, 2024
ceb00af
add test
aditishree1 Oct 20, 2024
0ee6a31
Merge branch 'langchain-ai:main' into add-semanticCache
aditishree1 Oct 21, 2024
d306cf9
format and fix lint errors
aditishree1 Oct 21, 2024
75f496b
fix example
aditishree1 Oct 21, 2024
72e790d
add integration tests
aditishree1 Oct 21, 2024
77f0b0b
set default db and container name
aditishree1 Oct 21, 2024
421a60c
fix int test
aditishree1 Oct 21, 2024
b753e8e
Merge branch 'langchain-ai:main' into add-semanticCache
aditishree1 Oct 22, 2024
2aa22b2
add semantic cache
aditishree1 Oct 20, 2024
1023ddb
add test
aditishree1 Oct 20, 2024
8482390
format and fix lint errors
aditishree1 Oct 21, 2024
7dc12d0
fix example
aditishree1 Oct 21, 2024
116624f
add integration tests
aditishree1 Oct 21, 2024
3914e11
set default db and container name
aditishree1 Oct 21, 2024
e3a0077
fix int test
aditishree1 Oct 21, 2024
fc7ead0
add docs and example
aditishree1 Oct 22, 2024
b21e09b
Merge branch 'add-semanticCache' of https://github.com/aditishree1/la…
aditishree1 Oct 22, 2024
1de4cb3
update doc
aditishree1 Oct 22, 2024
cfff31a
update link
aditishree1 Oct 22, 2024
5f3397b
Revert "update link"
aditishree1 Oct 22, 2024
2ef6d9a
update link
aditishree1 Oct 22, 2024
e0533e5
Update libs/langchain-azure-cosmosdb/src/caches.ts
aditishree1 Oct 24, 2024
dc35153
Update libs/langchain-azure-cosmosdb/src/caches.ts
aditishree1 Oct 24, 2024
75b9d6f
update user-agent
aditishree1 Oct 24, 2024
4800919
update user agent
aditishree1 Oct 24, 2024
369b199
fix docs
aditishree1 Oct 25, 2024
079eb03
add link in doc and remove defaultdb from cache
aditishree1 Oct 29, 2024
f41d737
Move documentation pages
jacoblee93 Oct 29, 2024
193fe00
Merge branch 'main' of github.com:langchain-ai/langchainjs into 7033
jacoblee93 Oct 29, 2024
f0a3f0c
add similarity Score threshold
aditishree1 Oct 30, 2024
1bec699
Update examples/src/caches/azure_cosmosdb_nosql/azure_cosmosdb_nosql.ts
aditishree1 Oct 30, 2024
2156145
update tests
aditishree1 Nov 1, 2024
26bccdf
Merge remote-tracking branch 'origin' into add-semanticCache
aditishree1 Nov 1, 2024
6c20e33
Format
jacoblee93 Nov 5, 2024
be89aba
Merge branch 'main' into add-semanticCache
jacoblee93 Nov 5, 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
82 changes: 44 additions & 38 deletions docs/core_docs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,18 @@ 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/tools/tavily_search.md
docs/integrations/tools/tavily_search.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/vectorstores/weaviate.md
docs/integrations/vectorstores/weaviate.mdx
docs/integrations/vectorstores/upstash.md
Expand All @@ -250,22 +262,20 @@ 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/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/retrievers/tavily.md
docs/integrations/retrievers/tavily.mdx
docs/integrations/retrievers/kendra-retriever.md
docs/integrations/retrievers/kendra-retriever.mdx
docs/integrations/retrievers/exa.md
docs/integrations/retrievers/exa.mdx
docs/integrations/retrievers/bm25.md
docs/integrations/retrievers/bm25.mdx
docs/integrations/retrievers/bedrock-knowledge-bases.md
docs/integrations/retrievers/bedrock-knowledge-bases.mdx
docs/integrations/text_embedding/togetherai.md
docs/integrations/text_embedding/togetherai.mdx
docs/integrations/text_embedding/openai.md
Expand All @@ -274,6 +284,8 @@ docs/integrations/text_embedding/ollama.md
docs/integrations/text_embedding/ollama.mdx
docs/integrations/text_embedding/mistralai.md
docs/integrations/text_embedding/mistralai.mdx
docs/integrations/text_embedding/ibm.md
docs/integrations/text_embedding/ibm.mdx
docs/integrations/text_embedding/google_vertex_ai.md
docs/integrations/text_embedding/google_vertex_ai.mdx
docs/integrations/text_embedding/google_generativeai.md
Expand All @@ -296,6 +308,8 @@ docs/integrations/llms/ollama.md
docs/integrations/llms/ollama.mdx
docs/integrations/llms/mistral.md
docs/integrations/llms/mistral.mdx
docs/integrations/llms/ibm.md
docs/integrations/llms/ibm.mdx
docs/integrations/llms/google_vertex_ai.md
docs/integrations/llms/google_vertex_ai.mdx
docs/integrations/llms/fireworks.md
Expand All @@ -310,32 +324,6 @@ docs/integrations/llms/azure.md
docs/integrations/llms/azure.mdx
docs/integrations/llms/arcjet.md
docs/integrations/llms/arcjet.mdx
docs/integrations/retrievers/tavily.md
docs/integrations/retrievers/tavily.mdx
docs/integrations/retrievers/kendra-retriever.md
docs/integrations/retrievers/kendra-retriever.mdx
docs/integrations/retrievers/exa.md
docs/integrations/retrievers/exa.mdx
docs/integrations/retrievers/bm25.md
docs/integrations/retrievers/bm25.mdx
docs/integrations/retrievers/bedrock-knowledge-bases.md
docs/integrations/retrievers/bedrock-knowledge-bases.mdx
docs/integrations/retrievers/self_query/weaviate.md
docs/integrations/retrievers/self_query/weaviate.mdx
docs/integrations/retrievers/self_query/vectara.md
docs/integrations/retrievers/self_query/vectara.mdx
docs/integrations/retrievers/self_query/supabase.md
docs/integrations/retrievers/self_query/supabase.mdx
docs/integrations/retrievers/self_query/qdrant.md
docs/integrations/retrievers/self_query/qdrant.mdx
docs/integrations/retrievers/self_query/pinecone.md
docs/integrations/retrievers/self_query/pinecone.mdx
docs/integrations/retrievers/self_query/memory.md
docs/integrations/retrievers/self_query/memory.mdx
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/chat/togetherai.md
docs/integrations/chat/togetherai.mdx
docs/integrations/chat/openai.md
Expand All @@ -344,6 +332,8 @@ docs/integrations/chat/ollama.md
docs/integrations/chat/ollama.mdx
docs/integrations/chat/mistral.md
docs/integrations/chat/mistral.mdx
docs/integrations/chat/ibm.md
docs/integrations/chat/ibm.mdx
docs/integrations/chat/groq.md
docs/integrations/chat/groq.mdx
docs/integrations/chat/google_vertex_ai.md
Expand All @@ -366,6 +356,22 @@ docs/integrations/chat/arcjet.md
docs/integrations/chat/arcjet.mdx
docs/integrations/chat/anthropic.md
docs/integrations/chat/anthropic.mdx
docs/integrations/retrievers/self_query/weaviate.md
docs/integrations/retrievers/self_query/weaviate.mdx
docs/integrations/retrievers/self_query/vectara.md
docs/integrations/retrievers/self_query/vectara.mdx
docs/integrations/retrievers/self_query/supabase.md
docs/integrations/retrievers/self_query/supabase.mdx
docs/integrations/retrievers/self_query/qdrant.md
docs/integrations/retrievers/self_query/qdrant.mdx
docs/integrations/retrievers/self_query/pinecone.md
docs/integrations/retrievers/self_query/pinecone.mdx
docs/integrations/retrievers/self_query/memory.md
docs/integrations/retrievers/self_query/memory.mdx
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/web_loaders/web_puppeteer.md
docs/integrations/document_loaders/web_loaders/web_puppeteer.mdx
docs/integrations/document_loaders/web_loaders/web_cheerio.md
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Azure Cosmos DB NoSQL Semantic Cache

> The Semantic Cache feature is supported with Azure Cosmos DB for NoSQL integration, enabling users to retrieve cached responses based on semantic similarity between the user input and previously cached results. It leverages [AzureCosmosDBNoSQLVectorStore](/docs/integrations/vectorstores/azure_cosmosdb_nosql), which stores vector embeddings of cached prompts. These embeddings enable similarity-based searches, allowing the system to retrieve relevant cached results.

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 @langchain/core
```

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. If you are using Managed Identity, you need to have the endpoint. You can find them in the Azure Portal, under the "Settings / Keys" section of your instance.

import CodeBlock from "@theme/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

import Example from "@examples/caches/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)
14 changes: 14 additions & 0 deletions docs/core_docs/docs/integrations/llm_caching/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
sidebar_class_name: hidden
hide_table_of_contents: true
---

# Model caches

[Caching LLM calls](/docs/how_to/chat_model_caching) can be useful for testing, cost savings, and speed.

Below are some integrations that allow you to cache results of individual LLM calls using different caches with different strategies.

import { IndexTable } from "@theme/FeatureTables";

<IndexTable />
18 changes: 18 additions & 0 deletions docs/core_docs/docs/integrations/platforms/microsoft.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,24 @@ See a [usage example](/docs/integrations/vectorstores/azure_cosmosdb_mongodb).
import { AzureCosmosDBMongoDBVectorStore } from "@langchain/azure-cosmosdb";
```

## Semantic Cache

### Azure Cosmos DB NoSQL Semantic Cache

> The Semantic Cache feature is supported with Azure Cosmos DB for NoSQL integration, enabling users to retrieve cached responses based on semantic similarity between the user input and previously cached results. It leverages [AzureCosmosDBNoSQLVectorStore](/docs/integrations/vectorstores/azure_cosmosdb_nosql), which stores vector embeddings of cached prompts. These embeddings enable similarity-based searches, allowing the system to retrieve relevant cached results.

<IntegrationInstallTooltip></IntegrationInstallTooltip>

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

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

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

## Document loaders

### Azure Blob Storage
Expand Down
16 changes: 16 additions & 0 deletions docs/core_docs/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,22 @@ module.exports = {
slug: "integrations/document_transformers",
},
},
{
type: "category",
label: "Model caches",
collapsible: false,
items: [
{
type: "autogenerated",
dirName: "integrations/llm_caching",
className: "hidden",
},
],
link: {
type: "doc",
id: "integrations/llm_caching/index",
},
},
{
type: "category",
label: "Graphs",
Expand Down
49 changes: 49 additions & 0 deletions examples/src/caches/azure_cosmosdb_nosql/azure_cosmosdb_nosql.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {
AzureCosmosDBNoSQLConfig,
AzureCosmosDBNoSQLSemanticCache,
} from "@langchain/azure-cosmosdb";
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";

const embeddings = new OpenAIEmbeddings();
const config: AzureCosmosDBNoSQLConfig = {
databaseName: "<DATABASE_NAME>",
containerName: "<CONTAINER_NAME>",
// use endpoint to initiate client with managed identity
connectionString: "<CONNECTION_STRING>",
};

/**
* Sets the threshold similarity score for returning cached results based on vector distance.
* Cached output is returned only if the similarity score meets or exceeds this threshold;
* otherwise, a new result is generated. Default is 0.6, adjustable via the constructor
* to suit various distance functions and use cases.
* (see: https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/query/vectordistance).
*/

const similarityScoreThreshold = 0.5;
const cache = new AzureCosmosDBNoSQLSemanticCache(
embeddings,
config,
similarityScoreThreshold
);

const model = new ChatOpenAI({ cache });

// Invoke the model to perform an action
const response1 = await model.invoke("Do something random!");
console.log(response1);
/*
AIMessage {
content: "Sure! I'll generate a random number for you: 37",
additional_kwargs: {}
}
*/

const response2 = await model.invoke("Do something random!");
console.log(response2);
/*
AIMessage {
content: "Sure! I'll generate a random number for you: 37",
additional_kwargs: {}
}
*/
6 changes: 3 additions & 3 deletions libs/langchain-azure-cosmosdb/src/azure_cosmosdb_nosql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export interface AzureCosmosDBNoSQLConfig
readonly metadataKey?: string;
}

const USER_AGENT_PREFIX = "langchainjs-azure-cosmosdb-nosql";
const USER_AGENT_SUFFIX = "langchainjs-cdbnosql-vectorstore-javascript";

/**
* Azure Cosmos DB for NoSQL vCore vector store.
Expand Down Expand Up @@ -151,14 +151,14 @@ export class AzureCosmosDBNoSQLVectorStore extends VectorStore {
this.client = new CosmosClient({
endpoint,
key,
userAgentSuffix: USER_AGENT_PREFIX,
userAgentSuffix: USER_AGENT_SUFFIX,
});
} else {
// Use managed identity
this.client = new CosmosClient({
endpoint,
aadCredentials: dbConfig.credentials ?? new DefaultAzureCredential(),
userAgentSuffix: USER_AGENT_PREFIX,
userAgentSuffix: USER_AGENT_SUFFIX,
} as CosmosClientOptions);
}
}
Expand Down
Loading