diff --git a/docs/core_docs/docs/integrations/memory/azure_cosmos_mongo_vcore.mdx b/docs/core_docs/docs/integrations/memory/azure_cosmos_mongo_vcore.mdx new file mode 100644 index 000000000000..c7d21f495c07 --- /dev/null +++ b/docs/core_docs/docs/integrations/memory/azure_cosmos_mongo_vcore.mdx @@ -0,0 +1,36 @@ +--- +hide_table_of_contents: true +--- + +import CodeBlock from "@theme/CodeBlock"; + +# Azure Cosmos DB Mongo vCore Chat Message History + +The AzureCosmosDBMongoChatMessageHistory uses Azure Cosmos DB Mongo vCore to store chat message history. For longer-term persistence across chat sessions, you can swap out the default in-memory `chatHistory` that backs chat memory classes like `BufferMemory`. +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: + +```bash npm2yarn +npm install @langchain/azure-cosmosdb @langchain/core +``` + +import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx"; + + + +```bash npm2yarn +npm install @langchain/openai @langchain/community @langchain/core +``` + +You'll also need to have an Azure Cosmos DB mongo vCore instance running. You can deploy a free version on Azure Portal without any cost, following [this guide](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/quickstart-portal). + +Once you have your instance running, make sure you have the connection string. + +## Usage + +import Example from "@examples/memory/azure_cosmosdb_mongo.ts"; + +{Example} diff --git a/docs/core_docs/docs/integrations/platforms/microsoft.mdx b/docs/core_docs/docs/integrations/platforms/microsoft.mdx index d3d9a6416f83..8f0633f54c46 100644 --- a/docs/core_docs/docs/integrations/platforms/microsoft.mdx +++ b/docs/core_docs/docs/integrations/platforms/microsoft.mdx @@ -166,6 +166,20 @@ See [usage example](/docs/integrations/memory/azure_cosmosdb_nosql.mdx). import { AzureCosmosDBNoSQLChatMessageHistory } from "@langchain/azure-cosmosdb"; ``` +### Azure Cosmos DB MongoDB vCore Chat Message History + +> The AzureCosmosDBMongoChatMessageHistory uses Cosmos DB Mongo vCore to store chat message history. For longer-term persistence across chat sessions, you can swap out the default in-memory `chatHistory` that backs chat memory classes like `BufferMemory`. + +```bash npm2yarn +npm install @langchain/azure-cosmosdb @langchain/core +``` + +See a [usage example](/docs/integrations/memory/azure_cosmos_mongo_vcore.mdx). + +```typescript +import { AzureCosmosDBMongoChatMessageHistory } from "@langchain/azure-cosmosdb"; +``` + ## Document loaders ### Azure Blob Storage diff --git a/examples/src/memory/azure_cosmosdb_mongo.ts b/examples/src/memory/azure_cosmosdb_mongo.ts new file mode 100644 index 000000000000..bf954d560729 --- /dev/null +++ b/examples/src/memory/azure_cosmosdb_mongo.ts @@ -0,0 +1,86 @@ +import { ChatOpenAI } from "@langchain/openai"; +import { + AzureCosmosDBMongoChatMessageHistory, + AzureCosmosDBMongoChatHistoryDBConfig, +} from "@langchain/azure-cosmosdb"; +import { RunnableWithMessageHistory } from "@langchain/core/runnables"; +import { StringOutputParser } from "@langchain/core/output_parsers"; +import { + ChatPromptTemplate, + MessagesPlaceholder, +} from "@langchain/core/prompts"; + +const model = new ChatOpenAI({ + model: "gpt-3.5-turbo", + temperature: 0, +}); + +const prompt = ChatPromptTemplate.fromMessages([ + [ + "system", + "You are a helpful assistant. Answer all questions to the best of your ability.", + ], + new MessagesPlaceholder("chat_history"), + ["human", "{input}"], +]); + +const chain = prompt.pipe(model).pipe(new StringOutputParser()); + +const dbcfg: AzureCosmosDBMongoChatHistoryDBConfig = { + connectionString: process.env.AZURE_COSMOSDB_MONGODB_CONNECTION_STRING, + databaseName: "langchain", + collectionName: "chathistory", +}; + +const chainWithHistory = new RunnableWithMessageHistory({ + runnable: chain, + inputMessagesKey: "input", + historyMessagesKey: "chat_history", + getMessageHistory: async (sessionId) => { + const chatHistory = new AzureCosmosDBMongoChatMessageHistory( + dbcfg, + sessionId, + "user-id" + ); + return chatHistory; + }, +}); + +const res1 = await chainWithHistory.invoke( + { input: "Hi! I'm Jim." }, + { configurable: { sessionId: "langchain-test-session" } } +); +console.log({ res1 }); +/* + { res1: 'Hi Jim! How can I assist you today?' } + */ + +const res2 = await chainWithHistory.invoke( + { input: "What did I just say my name was?" }, + { configurable: { sessionId: "langchain-test-session" } } +); +console.log({ res2 }); +/* + { res2: { response: 'You said your name was Jim.' } + */ + +// Give this session a title +const chatHistory = (await chainWithHistory.getMessageHistory( + "langchain-test-session" +)) as AzureCosmosDBMongoChatMessageHistory; + +await chatHistory.setContext({ title: "Introducing Jim" }); + +// List all session for the user +const sessions = await chatHistory.getAllSessions(); + +console.log(sessions); +/* +[ + { + id: 'langchain-test-session', + user_id: 'user-id', + context: { title: 'Introducing Jim' } + } +] + */