Skip to main content

LocalFileStore

Compatibility

Only available on Node.js.

This will help you get started with LocalFileStore. For detailed documentation of all LocalFileStore features and configurations head to the API reference.

Overview

The LocalFileStore is a wrapper around the fs module for storing data as key-value pairs. Each key value pair has its own file nested inside the directory passed to the .fromPath method. The file name is the key and inside contains the value of the key.

info

The path passed to the .fromPath must be a directory, not a file.

danger

This file store can alter any text file in the provided directory and any subfolders. Make sure that the path you specify when initializing the store is free of other files.

Integration details

ClassPackageLocalPY supportPackage downloadsPackage latest
LocalFileStorelangchainNPM - DownloadsNPM - Version

Setup

Installation

The LangChain LocalFileStore integration lives in the langchain package:

yarn add langchain @langchain/core

Instantiation

Now we can instantiate our byte store:

import { LocalFileStore } from "langchain/storage/file_system";

const kvStore = await LocalFileStore.fromPath("./messages");

Define an encoder and decoder for converting the data to Uint8Array and back:

const encoder = new TextEncoder();
const decoder = new TextDecoder();

Usage

You can set data under keys like this using the mset method:

await kvStore.mset([
["key1", encoder.encode("value1")],
["key2", encoder.encode("value2")],
]);

const results = await kvStore.mget(["key1", "key2"]);
console.log(results.map((v) => decoder.decode(v)));
[ 'value1', 'value2' ]

And you can delete data using the mdelete method:

await kvStore.mdelete(["key1", "key2"]);

await kvStore.mget(["key1", "key2"]);
[ undefined, undefined ]

Yielding values

If you want to get back all the keys you can call the yieldKeys method. Optionally, you can pass a key prefix to only get back keys which match that prefix.

import { LocalFileStore } from "langchain/storage/file_system";

const kvStoreForYield = await LocalFileStore.fromPath("./messages");

const encoderForYield = new TextEncoder();

// Add some data to the store
await kvStoreForYield.mset([
["message:id:key1", encoderForYield.encode("value1")],
["message:id:key2", encoderForYield.encode("value2")],
]);

const yieldedKeys = [];
for await (const key of kvStoreForYield.yieldKeys("message:id:")) {
yieldedKeys.push(key);
}

console.log(yieldedKeys);
[ 'message:id:key1', 'message:id:key2' ]
import fs from "fs";

// Cleanup
await fs.promises.rm("./messages", { recursive: true, force: true });

API reference

For detailed documentation of all LocalFileStore features and configurations, head to the API reference


Was this page helpful?


You can also leave detailed feedback on GitHub.