From f8232bd20165a6bfcf3bfdb393e5422ec1f9360d Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Tue, 23 May 2023 21:34:37 +0700 Subject: [PATCH 1/2] add Buffer Window Memory --- .../BufferWindowMemory/BufferWindowMemory.ts | 61 +++++++++++++++++++ .../memory/BufferWindowMemory/memory.svg | 8 +++ 2 files changed, 69 insertions(+) create mode 100644 packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts create mode 100644 packages/components/nodes/memory/BufferWindowMemory/memory.svg diff --git a/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts b/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts new file mode 100644 index 000000000..0f6a9542b --- /dev/null +++ b/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts @@ -0,0 +1,61 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { BufferWindowMemory, BufferWindowMemoryInput } from 'langchain/memory' + +class BufferWindowMemory_Memory implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Buffer Window Memory' + this.name = 'bufferWindowMemory' + this.type = 'BufferWindowMemory' + this.icon = 'memory.svg' + this.category = 'Memory' + this.description = 'Uses a window of size k to surface the last k back-and-forths to use as memory' + this.baseClasses = [this.type, ...getBaseClasses(BufferWindowMemory)] + this.inputs = [ + { + label: 'Memory Key', + name: 'memoryKey', + type: 'string', + default: 'chat_history' + }, + { + label: 'Input Key', + name: 'inputKey', + type: 'string', + default: 'input' + }, + { + label: 'Size', + name: 'k', + type: 'number', + default: '4' + } + ] + } + + async init(nodeData: INodeData): Promise { + const memoryKey = nodeData.inputs?.memoryKey as string + const inputKey = nodeData.inputs?.inputKey as string + const k = nodeData.inputs?.k as string + + const obj: Partial = { + returnMessages: true, + memoryKey: memoryKey, + inputKey: inputKey, + k: parseInt(k, 10) + } + + return new BufferWindowMemory(obj) + } +} + +module.exports = { nodeClass: BufferWindowMemory_Memory } diff --git a/packages/components/nodes/memory/BufferWindowMemory/memory.svg b/packages/components/nodes/memory/BufferWindowMemory/memory.svg new file mode 100644 index 000000000..ca8e17da1 --- /dev/null +++ b/packages/components/nodes/memory/BufferWindowMemory/memory.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From baf958f5c26c7bc5ac72a0d9f0819aea078c4f00 Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 24 May 2023 21:41:30 +0700 Subject: [PATCH 2/2] add description --- .../nodes/memory/BufferWindowMemory/BufferWindowMemory.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts b/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts index 0f6a9542b..ae783fec8 100644 --- a/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts +++ b/packages/components/nodes/memory/BufferWindowMemory/BufferWindowMemory.ts @@ -37,7 +37,8 @@ class BufferWindowMemory_Memory implements INode { label: 'Size', name: 'k', type: 'number', - default: '4' + default: '4', + description: 'Window of size k to surface the last k back-and-forths to use as memory.' } ] }