-
-
Notifications
You must be signed in to change notification settings - Fork 17.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature/Add dedicated agent memory nodes (#3649)
add dedicated agent memory nodes
- Loading branch information
1 parent
fe2ed26
commit cadc3b8
Showing
12 changed files
with
330 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
112 changes: 112 additions & 0 deletions
112
packages/components/nodes/memory/AgentMemory/MySQLAgentMemory/MySQLAgentMemory.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../../src/utils' | ||
import { SaverOptions } from '../interface' | ||
import { ICommonObject, IDatabaseEntity, INode, INodeData, INodeParams } from '../../../../src/Interface' | ||
import { DataSource } from 'typeorm' | ||
import { MySQLSaver } from './mysqlSaver' | ||
|
||
class MySQLAgentMemory_Memory implements INode { | ||
label: string | ||
name: string | ||
version: number | ||
description: string | ||
type: string | ||
icon: string | ||
category: string | ||
badge: string | ||
baseClasses: string[] | ||
inputs: INodeParams[] | ||
credential: INodeParams | ||
|
||
constructor() { | ||
this.label = 'MySQL Agent Memory' | ||
this.name = 'mySQLAgentMemory' | ||
this.version = 1.0 | ||
this.type = 'AgentMemory' | ||
this.icon = 'mysql.png' | ||
this.category = 'Memory' | ||
this.description = 'Memory for agentflow to remember the state of the conversation using MySQL database' | ||
this.baseClasses = [this.type, ...getBaseClasses(MySQLSaver)] | ||
this.credential = { | ||
label: 'Connect Credential', | ||
name: 'credential', | ||
type: 'credential', | ||
credentialNames: ['MySQLApi'], | ||
optional: true | ||
} | ||
this.inputs = [ | ||
{ | ||
label: 'Host', | ||
name: 'host', | ||
type: 'string' | ||
}, | ||
{ | ||
label: 'Database', | ||
name: 'database', | ||
type: 'string' | ||
}, | ||
{ | ||
label: 'Port', | ||
name: 'port', | ||
type: 'number', | ||
default: '3306' | ||
}, | ||
{ | ||
label: 'Additional Connection Configuration', | ||
name: 'additionalConfig', | ||
type: 'json', | ||
additionalParams: true, | ||
optional: true | ||
} | ||
] | ||
} | ||
|
||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> { | ||
const additionalConfig = nodeData.inputs?.additionalConfig as string | ||
const databaseEntities = options.databaseEntities as IDatabaseEntity | ||
const chatflowid = options.chatflowid as string | ||
const appDataSource = options.appDataSource as DataSource | ||
|
||
let additionalConfiguration = {} | ||
if (additionalConfig) { | ||
try { | ||
additionalConfiguration = typeof additionalConfig === 'object' ? additionalConfig : JSON.parse(additionalConfig) | ||
} catch (exception) { | ||
throw new Error('Invalid JSON in the Additional Configuration: ' + exception) | ||
} | ||
} | ||
|
||
const threadId = options.sessionId || options.chatId | ||
|
||
let datasourceOptions: ICommonObject = { | ||
...additionalConfiguration, | ||
type: 'mysql' | ||
} | ||
|
||
const credentialData = await getCredentialData(nodeData.credential ?? '', options) | ||
const user = getCredentialParam('user', credentialData, nodeData) | ||
const password = getCredentialParam('password', credentialData, nodeData) | ||
const _port = (nodeData.inputs?.port as string) || '3306' | ||
const port = parseInt(_port) | ||
datasourceOptions = { | ||
...datasourceOptions, | ||
host: nodeData.inputs?.host as string, | ||
port, | ||
database: nodeData.inputs?.database as string, | ||
username: user, | ||
user: user, | ||
password: password, | ||
charset: 'utf8mb4' | ||
} | ||
const args: SaverOptions = { | ||
datasourceOptions, | ||
threadId, | ||
appDataSource, | ||
databaseEntities, | ||
chatflowid | ||
} | ||
const recordManager = new MySQLSaver(args) | ||
return recordManager | ||
} | ||
} | ||
|
||
module.exports = { nodeClass: MySQLAgentMemory_Memory } |
Binary file added
BIN
+3.66 KB
packages/components/nodes/memory/AgentMemory/MySQLAgentMemory/mysql.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
111 changes: 111 additions & 0 deletions
111
packages/components/nodes/memory/AgentMemory/PostgresAgentMemory/PostgresAgentMemory.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../../src/utils' | ||
import { SaverOptions } from '../interface' | ||
import { ICommonObject, IDatabaseEntity, INode, INodeData, INodeParams } from '../../../../src/Interface' | ||
import { DataSource } from 'typeorm' | ||
import { PostgresSaver } from './pgSaver' | ||
|
||
class PostgresAgentMemory_Memory implements INode { | ||
label: string | ||
name: string | ||
version: number | ||
description: string | ||
type: string | ||
icon: string | ||
category: string | ||
badge: string | ||
baseClasses: string[] | ||
inputs: INodeParams[] | ||
credential: INodeParams | ||
|
||
constructor() { | ||
this.label = 'Postgres Agent Memory' | ||
this.name = 'postgresAgentMemory' | ||
this.version = 1.0 | ||
this.type = 'AgentMemory' | ||
this.icon = 'postgres.svg' | ||
this.category = 'Memory' | ||
this.description = 'Memory for agentflow to remember the state of the conversation using Postgres database' | ||
this.baseClasses = [this.type, ...getBaseClasses(PostgresSaver)] | ||
this.credential = { | ||
label: 'Connect Credential', | ||
name: 'credential', | ||
type: 'credential', | ||
credentialNames: ['PostgresApi'], | ||
optional: true | ||
} | ||
this.inputs = [ | ||
{ | ||
label: 'Host', | ||
name: 'host', | ||
type: 'string' | ||
}, | ||
{ | ||
label: 'Database', | ||
name: 'database', | ||
type: 'string' | ||
}, | ||
{ | ||
label: 'Port', | ||
name: 'port', | ||
type: 'number', | ||
default: '5432' | ||
}, | ||
{ | ||
label: 'Additional Connection Configuration', | ||
name: 'additionalConfig', | ||
type: 'json', | ||
additionalParams: true, | ||
optional: true | ||
} | ||
] | ||
} | ||
|
||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> { | ||
const additionalConfig = nodeData.inputs?.additionalConfig as string | ||
const databaseEntities = options.databaseEntities as IDatabaseEntity | ||
const chatflowid = options.chatflowid as string | ||
const appDataSource = options.appDataSource as DataSource | ||
|
||
let additionalConfiguration = {} | ||
if (additionalConfig) { | ||
try { | ||
additionalConfiguration = typeof additionalConfig === 'object' ? additionalConfig : JSON.parse(additionalConfig) | ||
} catch (exception) { | ||
throw new Error('Invalid JSON in the Additional Configuration: ' + exception) | ||
} | ||
} | ||
|
||
const threadId = options.sessionId || options.chatId | ||
|
||
let datasourceOptions: ICommonObject = { | ||
...additionalConfiguration, | ||
type: 'postgres' | ||
} | ||
|
||
const credentialData = await getCredentialData(nodeData.credential ?? '', options) | ||
const user = getCredentialParam('user', credentialData, nodeData) | ||
const password = getCredentialParam('password', credentialData, nodeData) | ||
const _port = (nodeData.inputs?.port as string) || '5432' | ||
const port = parseInt(_port) | ||
datasourceOptions = { | ||
...datasourceOptions, | ||
host: nodeData.inputs?.host as string, | ||
port, | ||
database: nodeData.inputs?.database as string, | ||
username: user, | ||
user: user, | ||
password: password | ||
} | ||
const args: SaverOptions = { | ||
datasourceOptions, | ||
threadId, | ||
appDataSource, | ||
databaseEntities, | ||
chatflowid | ||
} | ||
const recordManager = new PostgresSaver(args) | ||
return recordManager | ||
} | ||
} | ||
|
||
module.exports = { nodeClass: PostgresAgentMemory_Memory } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
packages/components/nodes/memory/AgentMemory/PostgresAgentMemory/postgres.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.