LocalFileStore
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.
The path passed to the .fromPath
must be a directory, not a file.
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
Class | Package | Local | PY support | Package downloads | Package latest |
---|---|---|---|---|---|
LocalFileStore | langchain | ✅ | ✅ |
Setup
Installation
The LangChain LocalFileStore
integration lives in the langchain
package:
- npm
- yarn
- pnpm
npm i langchain @langchain/core
yarn add langchain @langchain/core
pnpm 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