From 13fce4585609b407d1d1848844221fb59385f698 Mon Sep 17 00:00:00 2001 From: Saket Aryan Date: Mon, 31 Mar 2025 08:23:01 +0530 Subject: [PATCH] Adds Mem0 Memory Node (#4213) * Adds Mem0 Memory Node * fix: update pnpm-lock.yaml --------- Co-authored-by: Ong Chung Yau <33013947+chungyau97@users.noreply.github.com> Co-authored-by: chungyau97 --- .../credentials/Mem0MemoryApi.credential.ts | 27 + packages/components/nodes/memory/Mem0/Mem0.ts | 303 ++++++++ .../components/nodes/memory/Mem0/mem0.svg | 3 + packages/components/package.json | 1 + pnpm-lock.yaml | 685 ++++++++++++++++++ 5 files changed, 1019 insertions(+) create mode 100644 packages/components/credentials/Mem0MemoryApi.credential.ts create mode 100644 packages/components/nodes/memory/Mem0/Mem0.ts create mode 100644 packages/components/nodes/memory/Mem0/mem0.svg diff --git a/packages/components/credentials/Mem0MemoryApi.credential.ts b/packages/components/credentials/Mem0MemoryApi.credential.ts new file mode 100644 index 000000000..dcb3010d5 --- /dev/null +++ b/packages/components/credentials/Mem0MemoryApi.credential.ts @@ -0,0 +1,27 @@ +import { INodeParams, INodeCredential } from '../src/Interface' + +class Mem0MemoryApi implements INodeCredential { + label: string + name: string + version: number + description: string + inputs: INodeParams[] + + constructor() { + this.label = 'Mem0 Memory API' + this.name = 'mem0MemoryApi' + this.version = 1.0 + this.description = + 'Visit Mem0 Platform to get your API credentials' + this.inputs = [ + { + label: 'API Key', + name: 'apiKey', + type: 'password', + description: 'API Key from Mem0 dashboard' + } + ] + } +} + +module.exports = { credClass: Mem0MemoryApi } diff --git a/packages/components/nodes/memory/Mem0/Mem0.ts b/packages/components/nodes/memory/Mem0/Mem0.ts new file mode 100644 index 000000000..06f56454e --- /dev/null +++ b/packages/components/nodes/memory/Mem0/Mem0.ts @@ -0,0 +1,303 @@ +import { Mem0Memory as BaseMem0Memory, Mem0MemoryInput, ClientOptions } from '@mem0/community' +import { MemoryOptions, SearchOptions } from 'mem0ai' +import { BaseMessage } from '@langchain/core/messages' +import { InputValues, MemoryVariables, OutputValues } from '@langchain/core/memory' +import { ICommonObject, IDatabaseEntity } from '../../../src' +import { IMessage, INode, INodeData, INodeParams, MemoryMethods, MessageType } from '../../../src/Interface' +import { getBaseClasses, getCredentialData, getCredentialParam, mapChatMessageToBaseMessage } from '../../../src/utils' +import { DataSource } from 'typeorm' +import { v4 as uuidv4 } from 'uuid' + +interface BufferMemoryExtendedInput { + sessionId: string + appDataSource: DataSource + databaseEntities: IDatabaseEntity + chatflowid: string +} + +class Mem0_Memory implements INode { + label: string + name: string + version: number + description: string + type: string + icon: string + category: string + baseClasses: string[] + credential: INodeParams + inputs: INodeParams[] + + constructor() { + this.label = 'Mem0' + this.name = 'mem0' + this.version = 1.0 + this.type = 'Mem0' + this.icon = 'mem0.svg' + this.category = 'Memory' + this.description = 'Stores and manages chat memory using Mem0 service' + this.baseClasses = [this.type, ...getBaseClasses(BaseMem0Memory)] + this.credential = { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + optional: false, + description: 'Configure API Key for Mem0 service', + credentialNames: ['mem0MemoryApi'] + } + this.inputs = [ + { + label: 'User ID', + name: 'user_id', + type: 'string', + description: 'Unique identifier for the user', + default: 'flowise-default-user', + optional: false + }, + { + label: 'Search Only', + name: 'searchOnly', + type: 'boolean', + description: 'Search only mode', + default: false, + optional: true, + additionalParams: true + }, + { + label: 'Run ID', + name: 'run_id', + type: 'string', + description: 'Unique identifier for the run session', + default: '', + optional: true, + additionalParams: true + }, + { + label: 'Agent ID', + name: 'agent_id', + type: 'string', + description: 'Identifier for the agent', + default: '', + optional: true, + additionalParams: true + }, + { + label: 'App ID', + name: 'app_id', + type: 'string', + description: 'Identifier for the application', + default: '', + optional: true, + additionalParams: true + }, + { + label: 'Project ID', + name: 'project_id', + type: 'string', + description: 'Identifier for the project', + default: '', + optional: true, + additionalParams: true + }, + { + label: 'Organization ID', + name: 'org_id', + type: 'string', + description: 'Identifier for the organization', + default: '', + optional: true, + additionalParams: true + }, + { + label: 'Memory Key', + name: 'memoryKey', + type: 'string', + default: 'history', + optional: true, + additionalParams: true + }, + { + label: 'Input Key', + name: 'inputKey', + type: 'string', + default: 'input', + optional: true, + additionalParams: true + }, + { + label: 'Output Key', + name: 'outputKey', + type: 'string', + default: 'text', + optional: true, + additionalParams: true + } + ] + } + + async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { + return await initializeMem0(nodeData, options) + } +} + +const initializeMem0 = async (nodeData: INodeData, options: ICommonObject): Promise => { + const userId = nodeData.inputs?.user_id as string + if (!userId) { + throw new Error('user_id is required for Mem0Memory') + } + + const credentialData = await getCredentialData(nodeData.credential ?? '', options) + const apiKey = getCredentialParam('apiKey', credentialData, nodeData) + + const mem0Options: ClientOptions = { + apiKey: apiKey, + host: nodeData.inputs?.host as string, + organizationId: nodeData.inputs?.org_id as string, + projectId: nodeData.inputs?.project_id as string + } + + const memoryOptions: MemoryOptions & SearchOptions = { + user_id: userId, + run_id: (nodeData.inputs?.run_id as string) || undefined, + agent_id: (nodeData.inputs?.agent_id as string) || undefined, + app_id: (nodeData.inputs?.app_id as string) || undefined, + project_id: (nodeData.inputs?.project_id as string) || undefined, + org_id: (nodeData.inputs?.org_id as string) || undefined, + api_version: (nodeData.inputs?.api_version as string) || undefined, + enable_graph: (nodeData.inputs?.enable_graph as boolean) || false, + metadata: (nodeData.inputs?.metadata as Record) || {}, + filters: (nodeData.inputs?.filters as Record) || {} + } + + const obj: Mem0MemoryInput & Mem0MemoryExtendedInput & BufferMemoryExtendedInput & { searchOnly: boolean } = { + apiKey: apiKey, + humanPrefix: nodeData.inputs?.humanPrefix as string, + aiPrefix: nodeData.inputs?.aiPrefix as string, + inputKey: nodeData.inputs?.inputKey as string, + sessionId: nodeData.inputs?.user_id as string, + mem0Options: mem0Options, + memoryOptions: memoryOptions, + separateMessages: false, + returnMessages: false, + appDataSource: options.appDataSource as DataSource, + databaseEntities: options.databaseEntities as IDatabaseEntity, + chatflowid: options.chatflowid as string, + searchOnly: (nodeData.inputs?.searchOnly as boolean) || false + } + + return new Mem0MemoryExtended(obj) +} + +interface Mem0MemoryExtendedInput extends Mem0MemoryInput { + memoryOptions?: MemoryOptions | SearchOptions +} + +class Mem0MemoryExtended extends BaseMem0Memory implements MemoryMethods { + userId: string + memoryKey: string + inputKey: string + appDataSource: DataSource + databaseEntities: IDatabaseEntity + chatflowid: string + searchOnly: boolean + + constructor(fields: Mem0MemoryInput & Mem0MemoryExtendedInput & BufferMemoryExtendedInput & { searchOnly: boolean }) { + super(fields) + this.userId = fields.memoryOptions?.user_id ?? '' + this.memoryKey = 'history' + this.inputKey = fields.inputKey ?? 'input' + this.appDataSource = fields.appDataSource + this.databaseEntities = fields.databaseEntities + this.chatflowid = fields.chatflowid + this.searchOnly = fields.searchOnly + } + + async loadMemoryVariables(values: InputValues, overrideUserId = ''): Promise { + if (overrideUserId) { + this.userId = overrideUserId + } + return super.loadMemoryVariables(values) + } + + async saveContext(inputValues: InputValues, outputValues: OutputValues, overrideUserId = ''): Promise { + if (overrideUserId) { + this.userId = overrideUserId + } + if (this.searchOnly) { + return + } + return super.saveContext(inputValues, outputValues) + } + + async clear(overrideUserId = ''): Promise { + if (overrideUserId) { + this.userId = overrideUserId + } + return super.clear() + } + + async getChatMessages( + overrideUserId = '', + returnBaseMessages = false, + prependMessages?: IMessage[] + ): Promise { + const id = overrideUserId ? overrideUserId : this.userId + if (!id) return [] + + let chatMessage = await this.appDataSource.getRepository(this.databaseEntities['ChatMessage']).find({ + where: { + sessionId: id, + chatflowid: this.chatflowid + }, + order: { + createdDate: 'DESC' + }, + take: 10 + }) + + chatMessage = chatMessage.reverse() + + let returnIMessages: IMessage[] = [] + for (const m of chatMessage) { + returnIMessages.push({ + message: m.content as string, + type: m.role + }) + } + + if (prependMessages?.length) { + chatMessage.unshift(...prependMessages) + } + + if (returnBaseMessages) { + const memoryVariables = await this.loadMemoryVariables({}, id) + let baseMessages = memoryVariables[this.memoryKey] + + const systemMessage = { ...chatMessage[0] } + systemMessage.content = baseMessages + systemMessage.id = uuidv4() + systemMessage.role = 'apiMessage' + + chatMessage.unshift(systemMessage) + return await mapChatMessageToBaseMessage(chatMessage) + } + + return returnIMessages + } + + async addChatMessages(msgArray: { text: string; type: MessageType }[], overrideUserId = ''): Promise { + const id = overrideUserId ? overrideUserId : this.userId + const input = msgArray.find((msg) => msg.type === 'userMessage') + const output = msgArray.find((msg) => msg.type === 'apiMessage') + const inputValues = { [this.inputKey ?? 'input']: input?.text } + const outputValues = { output: output?.text } + + await this.saveContext(inputValues, outputValues, id) + } + + async clearChatMessages(overrideUserId = ''): Promise { + const id = overrideUserId ? overrideUserId : this.userId + await this.clear(id) + } +} + +module.exports = { nodeClass: Mem0_Memory } diff --git a/packages/components/nodes/memory/Mem0/mem0.svg b/packages/components/nodes/memory/Mem0/mem0.svg new file mode 100644 index 000000000..42a7d6d90 --- /dev/null +++ b/packages/components/nodes/memory/Mem0/mem0.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/components/package.json b/packages/components/package.json index 36f161538..264cd82dd 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -56,6 +56,7 @@ "@langchain/qdrant": "^0.0.5", "@langchain/weaviate": "^0.0.1", "@langchain/xai": "^0.0.1", + "@mem0/community": "^0.0.1", "@mendable/firecrawl-js": "^0.0.28", "@mistralai/mistralai": "0.1.3", "@modelcontextprotocol/sdk": "^1.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8b950840..2fc6f57be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,6 +228,9 @@ importers: '@langchain/xai': specifier: ^0.0.1 version: 0.0.1(@langchain/core@0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)))(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@mem0/community': + specifier: ^0.0.1 + version: 0.0.1(e5052a461693a99134dc3e8d18ab0a6e) '@mendable/firecrawl-js': specifier: ^0.0.28 version: 0.0.28 @@ -4089,6 +4092,386 @@ packages: youtubei.js: optional: true + '@langchain/community@0.3.37': + resolution: { integrity: sha512-Ifug3Gc6JHOFNWr0bxT1ie0AUKn3hWkZ4PG+EGqVz8MyeNr68lOhchY4oj51pQCC65KryfZ5CPhXrvbd5Il1GQ== } + engines: { node: '>=18' } + peerDependencies: + '@arcjet/redact': ^v1.0.0-alpha.23 + '@aws-crypto/sha256-js': ^5.0.0 + '@aws-sdk/client-bedrock-agent-runtime': ^3.749.0 + '@aws-sdk/client-bedrock-runtime': ^3.749.0 + '@aws-sdk/client-dynamodb': ^3.749.0 + '@aws-sdk/client-kendra': ^3.749.0 + '@aws-sdk/client-lambda': ^3.749.0 + '@aws-sdk/client-s3': ^3.749.0 + '@aws-sdk/client-sagemaker-runtime': ^3.749.0 + '@aws-sdk/client-sfn': ^3.749.0 + '@aws-sdk/credential-provider-node': ^3.388.0 + '@aws-sdk/dsql-signer': '*' + '@azure/search-documents': ^12.0.0 + '@azure/storage-blob': ^12.15.0 + '@browserbasehq/sdk': '*' + '@browserbasehq/stagehand': ^1.0.0 + '@clickhouse/client': ^0.2.5 + '@cloudflare/ai': '*' + '@datastax/astra-db-ts': ^1.0.0 + '@elastic/elasticsearch': ^8.4.0 + '@getmetal/metal-sdk': '*' + '@getzep/zep-cloud': ^1.0.6 + '@getzep/zep-js': ^0.9.0 + '@gomomento/sdk': ^1.51.1 + '@gomomento/sdk-core': ^1.51.1 + '@google-ai/generativelanguage': '*' + '@google-cloud/storage': ^6.10.1 || ^7.7.0 + '@gradientai/nodejs-sdk': ^1.2.0 + '@huggingface/inference': ^2.6.4 + '@huggingface/transformers': ^3.2.3 + '@ibm-cloud/watsonx-ai': '*' + '@lancedb/lancedb': ^0.12.0 + '@langchain/core': 0.3.37 + '@layerup/layerup-security': ^1.5.12 + '@libsql/client': ^0.14.0 + '@mendable/firecrawl-js': ^1.4.3 + '@mlc-ai/web-llm': '*' + '@mozilla/readability': '*' + '@neondatabase/serverless': '*' + '@notionhq/client': ^2.2.10 + '@opensearch-project/opensearch': '*' + '@pinecone-database/pinecone': '*' + '@planetscale/database': ^1.8.0 + '@premai/prem-sdk': ^0.3.25 + '@qdrant/js-client-rest': ^1.8.2 + '@raycast/api': ^1.55.2 + '@rockset/client': ^0.9.1 + '@smithy/eventstream-codec': ^2.0.5 + '@smithy/protocol-http': ^3.0.6 + '@smithy/signature-v4': ^2.0.10 + '@smithy/util-utf8': ^2.0.0 + '@spider-cloud/spider-client': ^0.0.21 + '@supabase/supabase-js': ^2.45.0 + '@tensorflow-models/universal-sentence-encoder': '*' + '@tensorflow/tfjs-converter': '*' + '@tensorflow/tfjs-core': '*' + '@upstash/ratelimit': ^1.1.3 || ^2.0.3 + '@upstash/redis': ^1.20.6 + '@upstash/vector': ^1.1.1 + '@vercel/kv': '*' + '@vercel/postgres': '*' + '@writerai/writer-sdk': ^0.40.2 + '@xata.io/client': ^0.28.0 + '@zilliz/milvus2-sdk-node': '>=2.3.5' + apify-client: ^2.7.1 + assemblyai: ^4.6.0 + better-sqlite3: '>=9.4.0 <12.0.0' + cassandra-driver: ^4.7.2 + cborg: ^4.1.1 + cheerio: ^1.0.0-rc.12 + chromadb: '*' + closevector-common: 0.1.3 + closevector-node: 0.1.6 + closevector-web: 0.1.6 + cohere-ai: '*' + convex: ^1.3.1 + crypto-js: ^4.2.0 + d3-dsv: ^2.0.0 + discord.js: ^14.14.1 + dria: ^0.0.3 + duck-duck-scrape: ^2.2.5 + epub2: ^3.0.1 + fast-xml-parser: '*' + firebase-admin: ^11.9.0 || ^12.0.0 + google-auth-library: '*' + googleapis: '*' + hnswlib-node: ^3.0.0 + html-to-text: ^9.0.5 + ibm-cloud-sdk-core: '*' + ignore: ^5.2.0 + interface-datastore: ^8.2.11 + ioredis: ^5.3.2 + it-all: ^3.0.4 + jsdom: '*' + jsonwebtoken: ^9.0.2 + llmonitor: ^0.5.9 + lodash: ^4.17.21 + lunary: ^0.7.10 + mammoth: ^1.6.0 + mariadb: ^3.4.0 + mem0ai: ^2.1.8 + mongodb: '>=5.2.0' + mysql2: ^3.9.8 + neo4j-driver: '*' + notion-to-md: ^3.1.0 + officeparser: ^4.0.4 + openai: 4.82.0 + pdf-parse: 1.1.1 + pg: ^8.11.0 + pg-copy-streams: ^6.0.5 + pickleparser: ^0.2.1 + playwright: ^1.32.1 + portkey-ai: ^0.1.11 + puppeteer: '*' + pyodide: '>=0.24.1 <0.27.0' + redis: '*' + replicate: '*' + sonix-speech-recognition: ^2.1.1 + srt-parser-2: ^1.2.3 + typeorm: ^0.3.20 + typesense: ^1.5.3 + usearch: ^1.1.1 + voy-search: 0.6.2 + weaviate-ts-client: '*' + web-auth-library: ^1.0.3 + word-extractor: '*' + ws: ^8.14.2 + youtubei.js: '*' + peerDependenciesMeta: + '@arcjet/redact': + optional: true + '@aws-crypto/sha256-js': + optional: true + '@aws-sdk/client-bedrock-agent-runtime': + optional: true + '@aws-sdk/client-bedrock-runtime': + optional: true + '@aws-sdk/client-dynamodb': + optional: true + '@aws-sdk/client-kendra': + optional: true + '@aws-sdk/client-lambda': + optional: true + '@aws-sdk/client-s3': + optional: true + '@aws-sdk/client-sagemaker-runtime': + optional: true + '@aws-sdk/client-sfn': + optional: true + '@aws-sdk/credential-provider-node': + optional: true + '@aws-sdk/dsql-signer': + optional: true + '@azure/search-documents': + optional: true + '@azure/storage-blob': + optional: true + '@browserbasehq/sdk': + optional: true + '@clickhouse/client': + optional: true + '@cloudflare/ai': + optional: true + '@datastax/astra-db-ts': + optional: true + '@elastic/elasticsearch': + optional: true + '@getmetal/metal-sdk': + optional: true + '@getzep/zep-cloud': + optional: true + '@getzep/zep-js': + optional: true + '@gomomento/sdk': + optional: true + '@gomomento/sdk-core': + optional: true + '@google-ai/generativelanguage': + optional: true + '@google-cloud/storage': + optional: true + '@gradientai/nodejs-sdk': + optional: true + '@huggingface/inference': + optional: true + '@huggingface/transformers': + optional: true + '@lancedb/lancedb': + optional: true + '@layerup/layerup-security': + optional: true + '@libsql/client': + optional: true + '@mendable/firecrawl-js': + optional: true + '@mlc-ai/web-llm': + optional: true + '@mozilla/readability': + optional: true + '@neondatabase/serverless': + optional: true + '@notionhq/client': + optional: true + '@opensearch-project/opensearch': + optional: true + '@pinecone-database/pinecone': + optional: true + '@planetscale/database': + optional: true + '@premai/prem-sdk': + optional: true + '@qdrant/js-client-rest': + optional: true + '@raycast/api': + optional: true + '@rockset/client': + optional: true + '@smithy/eventstream-codec': + optional: true + '@smithy/protocol-http': + optional: true + '@smithy/signature-v4': + optional: true + '@smithy/util-utf8': + optional: true + '@spider-cloud/spider-client': + optional: true + '@supabase/supabase-js': + optional: true + '@tensorflow-models/universal-sentence-encoder': + optional: true + '@tensorflow/tfjs-converter': + optional: true + '@tensorflow/tfjs-core': + optional: true + '@upstash/ratelimit': + optional: true + '@upstash/redis': + optional: true + '@upstash/vector': + optional: true + '@vercel/kv': + optional: true + '@vercel/postgres': + optional: true + '@writerai/writer-sdk': + optional: true + '@xata.io/client': + optional: true + '@zilliz/milvus2-sdk-node': + optional: true + apify-client: + optional: true + assemblyai: + optional: true + better-sqlite3: + optional: true + cassandra-driver: + optional: true + cborg: + optional: true + cheerio: + optional: true + chromadb: + optional: true + closevector-common: + optional: true + closevector-node: + optional: true + closevector-web: + optional: true + cohere-ai: + optional: true + convex: + optional: true + crypto-js: + optional: true + d3-dsv: + optional: true + discord.js: + optional: true + dria: + optional: true + duck-duck-scrape: + optional: true + epub2: + optional: true + fast-xml-parser: + optional: true + firebase-admin: + optional: true + google-auth-library: + optional: true + googleapis: + optional: true + hnswlib-node: + optional: true + html-to-text: + optional: true + ignore: + optional: true + interface-datastore: + optional: true + ioredis: + optional: true + it-all: + optional: true + jsdom: + optional: true + jsonwebtoken: + optional: true + llmonitor: + optional: true + lodash: + optional: true + lunary: + optional: true + mammoth: + optional: true + mariadb: + optional: true + mem0ai: + optional: true + mongodb: + optional: true + mysql2: + optional: true + neo4j-driver: + optional: true + notion-to-md: + optional: true + officeparser: + optional: true + pdf-parse: + optional: true + pg: + optional: true + pg-copy-streams: + optional: true + pickleparser: + optional: true + playwright: + optional: true + portkey-ai: + optional: true + puppeteer: + optional: true + pyodide: + optional: true + redis: + optional: true + replicate: + optional: true + sonix-speech-recognition: + optional: true + srt-parser-2: + optional: true + typeorm: + optional: true + typesense: + optional: true + usearch: + optional: true + voy-search: + optional: true + weaviate-ts-client: + optional: true + web-auth-library: + optional: true + word-extractor: + optional: true + ws: + optional: true + youtubei.js: + optional: true + '@langchain/core@0.3.37': resolution: { integrity: sha512-LFk9GqHxcyCFx0oXvCBP7vDZIOUHYzzNU7JR+2ofIMnfkBLzcCKzBLySQDfPtd13PrpGHkaeOeLq8H1Tqi9lSw== } engines: { node: '>=18' } @@ -4229,6 +4612,10 @@ packages: resolution: { integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== } hasBin: true + '@mem0/community@0.0.1': + resolution: { integrity: sha512-4XVBpn/xtHkYdGNxPPAqsKZimGgmH/jVXiiGlw9x0iOBLC2bhknA5/X6+znRa9YforTmPtCDiM+euWui50VqdQ== } + engines: { node: '>=18' } + '@mendable/firecrawl-js@0.0.28': resolution: { integrity: sha512-Xa+ZbBQkoR/KHM1ZpvJBdLWSCdRoRGyllDNoVvhKxGv9qXZk9h/lBxbqp3Kc1Kg2L2JJnJCkmeaTUCAn8y33GA== } @@ -6629,6 +7016,9 @@ packages: '@types/sockjs@0.3.36': resolution: { integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== } + '@types/sqlite3@3.1.11': + resolution: { integrity: sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w== } + '@types/stack-utils@2.0.3': resolution: { integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== } @@ -12076,6 +12466,23 @@ packages: resolution: { integrity: sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw== } engines: { node: '>=12' } + mem0ai@2.1.12: + resolution: { integrity: sha512-lFHgiEZkRh+WjsuVjhFCC4LAzTbCrAACoaIJccwX7qkTGl17N+8zLmWY+ozKKnXMVgRbyfjLm8XUdAPjs+RJSw== } + engines: { node: '>=18' } + peerDependencies: + '@anthropic-ai/sdk': 0.18.0 + '@qdrant/js-client-rest': 1.13.0 + '@supabase/supabase-js': ^2.49.1 + '@types/jest': 29.5.14 + '@types/pg': 8.11.0 + '@types/sqlite3': 3.1.11 + groq-sdk: 0.3.0 + neo4j-driver: ^5.28.1 + ollama: ^0.5.14 + pg: 8.11.3 + redis: 4.7.0 + sqlite3: 5.1.7 + memfs@3.5.3: resolution: { integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== } engines: { node: '>= 4.0.0' } @@ -21714,6 +22121,102 @@ snapshots: - handlebars - peggy + '@langchain/community@0.3.37(d5752614a5e55f41344311ecfe9f8dee)': + dependencies: + '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.49.1)(bufferutil@4.0.8)(deepmerge@4.3.1)(dotenv@16.4.5)(encoding@0.1.13)(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4))(utf-8-validate@6.0.4)(zod@3.22.4) + '@ibm-cloud/watsonx-ai': 1.1.2 + '@langchain/core': 0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)) + '@langchain/openai': 0.4.4(@langchain/core@0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)))(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + binary-extensions: 2.2.0 + expr-eval: 2.0.2 + flat: 5.0.2 + ibm-cloud-sdk-core: 5.1.0 + js-yaml: 4.1.0 + langchain: 0.3.5(eee077d91dbaef8a94033f91f2cb9ade) + langsmith: 0.2.15(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)) + openai: 4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4) + uuid: 10.0.0 + zod: 3.22.4 + zod-to-json-schema: 3.24.1(zod@3.22.4) + optionalDependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-bedrock-agent-runtime': 3.755.0 + '@aws-sdk/client-bedrock-runtime': 3.422.0 + '@aws-sdk/client-dynamodb': 3.529.1 + '@aws-sdk/client-kendra': 3.750.0 + '@aws-sdk/client-s3': 3.529.1 + '@aws-sdk/credential-provider-node': 3.529.1 + '@browserbasehq/sdk': 2.0.0(encoding@0.1.13) + '@datastax/astra-db-ts': 1.5.0 + '@elastic/elasticsearch': 8.12.2 + '@getzep/zep-cloud': 1.0.7(@langchain/core@0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(eee077d91dbaef8a94033f91f2cb9ade)) + '@getzep/zep-js': 0.9.0 + '@gomomento/sdk': 1.68.1(encoding@0.1.13) + '@gomomento/sdk-core': 1.68.1 + '@google-ai/generativelanguage': 2.6.0(encoding@0.1.13) + '@huggingface/inference': 2.6.4 + '@mendable/firecrawl-js': 0.0.28 + '@notionhq/client': 2.2.14(encoding@0.1.13) + '@opensearch-project/opensearch': 1.2.0 + '@pinecone-database/pinecone': 4.0.0 + '@qdrant/js-client-rest': 1.9.0(typescript@5.5.2) + '@smithy/eventstream-codec': 2.1.4 + '@smithy/protocol-http': 3.2.2 + '@smithy/signature-v4': 2.1.4 + '@smithy/util-utf8': 2.2.0 + '@supabase/supabase-js': 2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@upstash/redis': 1.22.1(encoding@0.1.13) + '@upstash/vector': 1.1.5 + '@zilliz/milvus2-sdk-node': 2.3.5 + apify-client: 2.9.3 + assemblyai: 4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + cheerio: 1.0.0-rc.12 + chromadb: 1.10.0(@google/generative-ai@0.22.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)) + cohere-ai: 7.10.0(encoding@0.1.13) + crypto-js: 4.2.0 + d3-dsv: 2.0.0 + epub2: 3.0.2(ts-toolbelt@9.6.0) + fast-xml-parser: 4.4.1 + google-auth-library: 9.6.3(encoding@0.1.13) + html-to-text: 9.0.5 + ignore: 5.3.1 + ioredis: 5.3.2 + jsdom: 22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4) + jsonwebtoken: 9.0.2 + lodash: 4.17.21 + lunary: 0.7.12(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4))(react@18.2.0) + mammoth: 1.7.0 + mem0ai: 2.1.12(@anthropic-ai/sdk@0.37.0(encoding@0.1.13))(@qdrant/js-client-rest@1.9.0(typescript@5.5.2))(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/jest@29.5.12)(@types/pg@8.11.2)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.5.0(encoding@0.1.13))(neo4j-driver@5.27.0)(ollama@0.5.11)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + mongodb: 6.3.0(socks@2.8.1) + mysql2: 3.11.4 + neo4j-driver: 5.27.0 + notion-to-md: 3.1.1(encoding@0.1.13) + pdf-parse: 1.1.1 + pg: 8.11.3 + playwright: 1.42.1 + portkey-ai: 0.1.16 + puppeteer: 20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4) + pyodide: 0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + redis: 4.6.13 + replicate: 0.31.1 + srt-parser-2: 1.2.3 + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@22.13.9)(typescript@5.5.2)) + weaviate-ts-client: 1.6.0(encoding@0.1.13)(graphql@16.8.1) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + transitivePeerDependencies: + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cohere' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - axios + - encoding + - handlebars + - peggy + '@langchain/core@0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4))': dependencies: '@cfworker/json-schema': 4.1.0 @@ -21941,6 +22444,161 @@ snapshots: - encoding - supports-color + '@mem0/community@0.0.1(e5052a461693a99134dc3e8d18ab0a6e)': + dependencies: + '@langchain/community': 0.3.37(d5752614a5e55f41344311ecfe9f8dee) + '@langchain/core': 0.3.37(openai@4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4)) + axios: 1.7.9(debug@4.3.4) + mem0ai: 2.1.12(@anthropic-ai/sdk@0.37.0(encoding@0.1.13))(@qdrant/js-client-rest@1.9.0(typescript@5.5.2))(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/jest@29.5.12)(@types/pg@8.11.2)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.5.0(encoding@0.1.13))(neo4j-driver@5.27.0)(ollama@0.5.11)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + uuid: 9.0.1 + zod: 3.22.4 + transitivePeerDependencies: + - '@anthropic-ai/sdk' + - '@arcjet/redact' + - '@aws-crypto/sha256-js' + - '@aws-sdk/client-bedrock-agent-runtime' + - '@aws-sdk/client-bedrock-runtime' + - '@aws-sdk/client-dynamodb' + - '@aws-sdk/client-kendra' + - '@aws-sdk/client-lambda' + - '@aws-sdk/client-s3' + - '@aws-sdk/client-sagemaker-runtime' + - '@aws-sdk/client-sfn' + - '@aws-sdk/credential-provider-node' + - '@aws-sdk/dsql-signer' + - '@azure/search-documents' + - '@azure/storage-blob' + - '@browserbasehq/sdk' + - '@browserbasehq/stagehand' + - '@clickhouse/client' + - '@cloudflare/ai' + - '@datastax/astra-db-ts' + - '@elastic/elasticsearch' + - '@getmetal/metal-sdk' + - '@getzep/zep-cloud' + - '@getzep/zep-js' + - '@gomomento/sdk' + - '@gomomento/sdk-core' + - '@google-ai/generativelanguage' + - '@google-cloud/storage' + - '@gradientai/nodejs-sdk' + - '@huggingface/inference' + - '@huggingface/transformers' + - '@ibm-cloud/watsonx-ai' + - '@lancedb/lancedb' + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cohere' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - '@layerup/layerup-security' + - '@libsql/client' + - '@mendable/firecrawl-js' + - '@mlc-ai/web-llm' + - '@mozilla/readability' + - '@neondatabase/serverless' + - '@notionhq/client' + - '@opensearch-project/opensearch' + - '@pinecone-database/pinecone' + - '@planetscale/database' + - '@premai/prem-sdk' + - '@qdrant/js-client-rest' + - '@raycast/api' + - '@rockset/client' + - '@smithy/eventstream-codec' + - '@smithy/protocol-http' + - '@smithy/signature-v4' + - '@smithy/util-utf8' + - '@spider-cloud/spider-client' + - '@supabase/supabase-js' + - '@tensorflow-models/universal-sentence-encoder' + - '@tensorflow/tfjs-converter' + - '@tensorflow/tfjs-core' + - '@types/jest' + - '@types/pg' + - '@types/sqlite3' + - '@upstash/ratelimit' + - '@upstash/redis' + - '@upstash/vector' + - '@vercel/kv' + - '@vercel/postgres' + - '@writerai/writer-sdk' + - '@xata.io/client' + - '@zilliz/milvus2-sdk-node' + - apify-client + - assemblyai + - better-sqlite3 + - cassandra-driver + - cborg + - cheerio + - chromadb + - closevector-common + - closevector-node + - closevector-web + - cohere-ai + - convex + - crypto-js + - d3-dsv + - debug + - discord.js + - dria + - duck-duck-scrape + - encoding + - epub2 + - fast-xml-parser + - firebase-admin + - google-auth-library + - googleapis + - groq-sdk + - handlebars + - hnswlib-node + - html-to-text + - ibm-cloud-sdk-core + - ignore + - interface-datastore + - ioredis + - it-all + - jsdom + - jsonwebtoken + - llmonitor + - lodash + - lunary + - mammoth + - mariadb + - mongodb + - mysql2 + - neo4j-driver + - notion-to-md + - officeparser + - ollama + - openai + - pdf-parse + - peggy + - pg + - pg-copy-streams + - pickleparser + - playwright + - portkey-ai + - puppeteer + - pyodide + - redis + - replicate + - sonix-speech-recognition + - sqlite3 + - srt-parser-2 + - typeorm + - typesense + - usearch + - voy-search + - weaviate-ts-client + - web-auth-library + - word-extractor + - ws + - youtubei.js + '@mendable/firecrawl-js@0.0.28': dependencies: axios: 1.7.9(debug@4.3.4) @@ -25193,6 +25851,10 @@ snapshots: dependencies: '@types/node': 22.13.9 + '@types/sqlite3@3.1.11': + dependencies: + '@types/node': 22.13.9 + '@types/stack-utils@2.0.3': {} '@types/streamx@2.9.5': @@ -32399,6 +33061,29 @@ snapshots: vinyl: 2.2.1 vinyl-file: 3.0.0 + mem0ai@2.1.12(@anthropic-ai/sdk@0.37.0(encoding@0.1.13))(@qdrant/js-client-rest@1.9.0(typescript@5.5.2))(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/jest@29.5.12)(@types/pg@8.11.2)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.5.0(encoding@0.1.13))(neo4j-driver@5.27.0)(ollama@0.5.11)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)): + dependencies: + '@anthropic-ai/sdk': 0.37.0(encoding@0.1.13) + '@qdrant/js-client-rest': 1.9.0(typescript@5.5.2) + '@supabase/supabase-js': 2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@types/jest': 29.5.12 + '@types/pg': 8.11.2 + '@types/sqlite3': 3.1.11 + axios: 1.7.9(debug@4.3.4) + groq-sdk: 0.5.0(encoding@0.1.13) + neo4j-driver: 5.27.0 + ollama: 0.5.11 + openai: 4.82.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(zod@3.22.4) + pg: 8.11.3 + redis: 4.6.13 + sqlite3: 5.1.7 + uuid: 9.0.1 + zod: 3.22.4 + transitivePeerDependencies: + - debug + - encoding + - ws + memfs@3.5.3: dependencies: fs-monkey: 1.0.5