feat: Session is selector for memory nodes (#8736)

This commit is contained in:
Michael Kret
2024-02-27 15:01:15 +02:00
committed by GitHub
parent 5f6da7b84e
commit 2aaf211dfc
7 changed files with 188 additions and 22 deletions

View File

@@ -14,6 +14,8 @@ import type { RedisClientOptions } from 'redis';
import { createClient } from 'redis';
import { logWrapper } from '../../../utils/logWrapper';
import { getConnectionHintNoticeField } from '../../../utils/sharedFields';
import { sessionIdOption, sessionKeyProperty } from '../descriptions';
import { getSessionId } from '../../../utils/helpers';
export class MemoryRedisChat implements INodeType {
description: INodeTypeDescription = {
@@ -21,7 +23,7 @@ export class MemoryRedisChat implements INodeType {
name: 'memoryRedisChat',
icon: 'file:redis.svg',
group: ['transform'],
version: [1, 1.1],
version: [1, 1.1, 1.2],
description: 'Stores the chat history in Redis.',
defaults: {
name: 'Redis Chat Memory',
@@ -76,6 +78,15 @@ export class MemoryRedisChat implements INodeType {
},
},
},
{
...sessionIdOption,
displayOptions: {
show: {
'@version': [{ _cnd: { gte: 1.2 } }],
},
},
},
sessionKeyProperty,
{
displayName: 'Session Time To Live',
name: 'sessionTTL',
@@ -89,9 +100,18 @@ export class MemoryRedisChat implements INodeType {
async supplyData(this: IExecuteFunctions, itemIndex: number): Promise<SupplyData> {
const credentials = await this.getCredentials('redis');
const sessionKey = this.getNodeParameter('sessionKey', itemIndex) as string;
const nodeVersion = this.getNode().typeVersion;
const sessionTTL = this.getNodeParameter('sessionTTL', itemIndex, 0) as number;
let sessionId;
if (nodeVersion >= 1.2) {
sessionId = getSessionId(this, itemIndex);
} else {
sessionId = this.getNodeParameter('sessionKey', itemIndex) as string;
}
const redisOptions: RedisClientOptions = {
socket: {
host: credentials.host as string,
@@ -115,7 +135,7 @@ export class MemoryRedisChat implements INodeType {
const redisChatConfig: RedisChatMessageHistoryInput = {
client,
sessionId: sessionKey,
sessionId,
};
if (sessionTTL > 0) {