UNPKG

n8n-nodes-zep-stemx-memory

Version:
426 lines (425 loc) 18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZepMemory = void 0; class ZepMemory { constructor() { this.description = { displayName: 'Zep Memory (Stemx)', name: 'zepMemoryStemx', icon: 'file:zep.svg', group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with Zep AI Memory Service', defaults: { name: 'Zep Memory (Stemx)', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'zepApiStemx-Api', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'User', value: 'user', }, { name: 'Session', value: 'session', }, { name: 'Memory', value: 'memory', }, ], default: 'memory', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['user'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new user', action: 'Create a user', }, { name: 'Delete', value: 'delete', description: 'Delete a user', action: 'Delete a user', }, { name: 'Get', value: 'get', description: 'Get a user', action: 'Get a user', }, { name: 'List', value: 'list', description: 'List users', action: 'List users', }, { name: 'Update', value: 'update', description: 'Update a user', action: 'Update a user', }, ], default: 'create', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['session'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new session', action: 'Create a session', }, { name: 'Delete', value: 'delete', description: 'Delete a session', action: 'Delete a session', }, { name: 'Get', value: 'get', description: 'Get a session', action: 'Get a session', }, { name: 'List', value: 'list', description: 'List sessions', action: 'List sessions', }, { name: 'Update', value: 'update', description: 'Update a session', action: 'Update a session', }, ], default: 'create', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['memory'], }, }, options: [ { name: 'Add', value: 'add', description: 'Add messages to memory', action: 'Add memory', }, { name: 'Delete', value: 'delete', description: 'Delete session memory', action: 'Delete memory', }, { name: 'Get', value: 'get', description: 'Get session memory', action: 'Get memory', }, ], default: 'get', }, // User fields { displayName: 'User ID', name: 'userId', type: 'string', required: true, displayOptions: { show: { resource: ['user'], operation: ['create', 'get', 'update', 'delete'], }, }, default: '', description: 'The unique identifier for the user', }, { displayName: 'Email', name: 'email', type: 'string', placeholder: 'name@email.com', displayOptions: { show: { resource: ['user'], operation: ['create', 'update'], }, }, default: '', description: 'User email address', }, { displayName: 'First Name', name: 'firstName', type: 'string', displayOptions: { show: { resource: ['user'], operation: ['create', 'update'], }, }, default: '', description: 'User first name', }, { displayName: 'Last Name', name: 'lastName', type: 'string', displayOptions: { show: { resource: ['user'], operation: ['create', 'update'], }, }, default: '', description: 'User last name', }, // Session fields { displayName: 'Session ID', name: 'sessionId', type: 'string', required: true, displayOptions: { show: { resource: ['session', 'memory'], }, }, default: '', description: 'The unique identifier for the session', }, { displayName: 'User ID', name: 'userId', type: 'string', displayOptions: { show: { resource: ['session'], operation: ['create', 'update'], }, }, default: '', description: 'The user ID to associate with the session', }, // Memory fields { displayName: 'Messages', name: 'messages', type: 'json', required: true, displayOptions: { show: { resource: ['memory'], operation: ['add'], }, }, default: '[{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi there!"}]', description: 'Array of message objects with role and content', }, { displayName: 'Metadata', name: 'metadata', type: 'json', displayOptions: { show: { resource: ['user', 'session'], operation: ['create', 'update'], }, }, default: '{}', description: 'Additional metadata as JSON object', }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); const credentials = await this.getCredentials('zepApiStemx-Api'); const baseUrl = credentials.baseUrl; const apiKey = credentials.apiKey; for (let i = 0; i < items.length; i++) { try { const options = { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, returnFullResponse: false, url: '', method: 'GET', }; if (resource === 'user') { if (operation === 'list') { options.url = `${baseUrl}/users`; options.method = 'GET'; } else if (operation === 'create') { const userId = this.getNodeParameter('userId', i); const email = this.getNodeParameter('email', i); const firstName = this.getNodeParameter('firstName', i); const lastName = this.getNodeParameter('lastName', i); const metadata = this.getNodeParameter('metadata', i); options.url = `${baseUrl}/users`; options.method = 'POST'; options.body = { user_id: userId, email: email || undefined, first_name: firstName || undefined, last_name: lastName || undefined, metadata: metadata ? JSON.parse(metadata) : undefined, }; } else if (operation === 'get') { const userId = this.getNodeParameter('userId', i); options.url = `${baseUrl}/users/${userId}`; options.method = 'GET'; } else if (operation === 'update') { const userId = this.getNodeParameter('userId', i); const email = this.getNodeParameter('email', i); const firstName = this.getNodeParameter('firstName', i); const lastName = this.getNodeParameter('lastName', i); const metadata = this.getNodeParameter('metadata', i); options.url = `${baseUrl}/users/${userId}`; options.method = 'PUT'; options.body = { user_id: userId, email: email || undefined, first_name: firstName || undefined, last_name: lastName || undefined, metadata: metadata ? JSON.parse(metadata) : undefined, }; } else if (operation === 'delete') { const userId = this.getNodeParameter('userId', i); options.url = `${baseUrl}/users/${userId}`; options.method = 'DELETE'; } } else if (resource === 'session') { if (operation === 'list') { options.url = `${baseUrl}/sessions`; options.method = 'GET'; } else if (operation === 'create') { const sessionId = this.getNodeParameter('sessionId', i); const userId = this.getNodeParameter('userId', i); const metadata = this.getNodeParameter('metadata', i); options.url = `${baseUrl}/sessions`; options.method = 'POST'; options.body = { session_id: sessionId, user_id: userId || undefined, metadata: metadata ? JSON.parse(metadata) : undefined, }; } else if (operation === 'get') { const sessionId = this.getNodeParameter('sessionId', i); options.url = `${baseUrl}/sessions/${sessionId}`; options.method = 'GET'; } else if (operation === 'update') { const sessionId = this.getNodeParameter('sessionId', i); const userId = this.getNodeParameter('userId', i); const metadata = this.getNodeParameter('metadata', i); options.url = `${baseUrl}/sessions/${sessionId}`; options.method = 'PUT'; options.body = { session_id: sessionId, user_id: userId || undefined, metadata: metadata ? JSON.parse(metadata) : undefined, }; } else if (operation === 'delete') { const sessionId = this.getNodeParameter('sessionId', i); options.url = `${baseUrl}/sessions/${sessionId}`; options.method = 'DELETE'; } } else if (resource === 'memory') { if (operation === 'get') { const sessionId = this.getNodeParameter('sessionId', i); options.url = `${baseUrl}/memory/${sessionId}`; options.method = 'GET'; } else if (operation === 'add') { const sessionId = this.getNodeParameter('sessionId', i); const messages = this.getNodeParameter('messages', i); options.url = `${baseUrl}/memory`; options.method = 'POST'; options.body = { session_id: sessionId, messages: JSON.parse(messages), }; } else if (operation === 'delete') { const sessionId = this.getNodeParameter('sessionId', i); options.url = `${baseUrl}/memory/${sessionId}`; options.method = 'DELETE'; } } const responseData = await this.helpers.request(options); const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } }); returnData.push(...executionData); continue; } throw error; } } return [returnData]; } } exports.ZepMemory = ZepMemory;