mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 15:00:57 +03:00
Merge pull request #908 from FlowiseAI/feature/Analytic
Feature/Add analytic
This commit is contained in:
@@ -14,6 +14,7 @@ export interface IChatFlow {
|
||||
deployed?: boolean
|
||||
isPublic?: boolean
|
||||
apikeyid?: string
|
||||
analytic?: string
|
||||
chatbotConfig?: string
|
||||
apiConfig?: any
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ export class NodesPool {
|
||||
*/
|
||||
async initialize() {
|
||||
await this.initializeNodes()
|
||||
await this.initializeCrdentials()
|
||||
await this.initializeCredentials()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -34,8 +34,6 @@ export class NodesPool {
|
||||
const newNodeInstance = new nodeModule.nodeClass()
|
||||
newNodeInstance.filePath = file
|
||||
|
||||
this.componentNodes[newNodeInstance.name] = newNodeInstance
|
||||
|
||||
// Replace file icon with absolute path
|
||||
if (
|
||||
newNodeInstance.icon &&
|
||||
@@ -46,7 +44,7 @@ export class NodesPool {
|
||||
const filePath = file.replace(/\\/g, '/').split('/')
|
||||
filePath.pop()
|
||||
const nodeIconAbsolutePath = `${filePath.join('/')}/${newNodeInstance.icon}`
|
||||
this.componentNodes[newNodeInstance.name].icon = nodeIconAbsolutePath
|
||||
newNodeInstance.icon = nodeIconAbsolutePath
|
||||
|
||||
// Store icon path for componentCredentials
|
||||
if (newNodeInstance.credential) {
|
||||
@@ -55,6 +53,11 @@ export class NodesPool {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const skipCategories = ['Analytic']
|
||||
if (!skipCategories.includes(newNodeInstance.category)) {
|
||||
this.componentNodes[newNodeInstance.name] = newNodeInstance
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -64,7 +67,7 @@ export class NodesPool {
|
||||
/**
|
||||
* Initialize credentials
|
||||
*/
|
||||
private async initializeCrdentials() {
|
||||
private async initializeCredentials() {
|
||||
const packagePath = getNodeModulesPackagePath('flowise-components')
|
||||
const nodesPath = path.join(packagePath, 'dist', 'credentials')
|
||||
const nodeFiles = await this.getFiles(nodesPath)
|
||||
|
||||
@@ -28,6 +28,9 @@ export class ChatFlow implements IChatFlow {
|
||||
@Column({ nullable: true, type: 'text' })
|
||||
apiConfig?: string
|
||||
|
||||
@Column({ nullable: true, type: 'text' })
|
||||
analytic?: string
|
||||
|
||||
@CreateDateColumn()
|
||||
createdDate: Date
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class AddAnalytic1694432361423 implements MigrationInterface {
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`analytic\` TEXT;`)
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`analytic\`;`)
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import { ModifyChatMessage1693999022236 } from './1693999022236-ModifyChatMessag
|
||||
import { ModifyCredential1693999261583 } from './1693999261583-ModifyCredential'
|
||||
import { ModifyTool1694001465232 } from './1694001465232-ModifyTool'
|
||||
import { AddApiConfig1694099200729 } from './1694099200729-AddApiConfig'
|
||||
import { AddAnalytic1694432361423 } from './1694432361423-AddAnalytic'
|
||||
|
||||
export const mysqlMigrations = [
|
||||
Init1693840429259,
|
||||
@@ -11,5 +12,6 @@ export const mysqlMigrations = [
|
||||
ModifyChatMessage1693999022236,
|
||||
ModifyCredential1693999261583,
|
||||
ModifyTool1694001465232,
|
||||
AddApiConfig1694099200729
|
||||
AddApiConfig1694099200729,
|
||||
AddAnalytic1694432361423
|
||||
]
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class AddAnalytic1694432361423 implements MigrationInterface {
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "chat_flow" ADD COLUMN "analytic" TEXT;`)
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "chat_flow" DROP COLUMN "analytic";`)
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import { ModifyChatMessage1693996694528 } from './1693996694528-ModifyChatMessag
|
||||
import { ModifyCredential1693997070000 } from './1693997070000-ModifyCredential'
|
||||
import { ModifyTool1693997339912 } from './1693997339912-ModifyTool'
|
||||
import { AddApiConfig1694099183389 } from './1694099183389-AddApiConfig'
|
||||
import { AddAnalytic1694432361423 } from './1694432361423-AddAnalytic'
|
||||
|
||||
export const postgresMigrations = [
|
||||
Init1693891895163,
|
||||
@@ -11,5 +12,6 @@ export const postgresMigrations = [
|
||||
ModifyChatMessage1693996694528,
|
||||
ModifyCredential1693997070000,
|
||||
ModifyTool1693997339912,
|
||||
AddApiConfig1694099183389
|
||||
AddApiConfig1694099183389,
|
||||
AddAnalytic1694432361423
|
||||
]
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class AddAnalytic1694432361423 implements MigrationInterface {
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "chat_flow" ADD COLUMN "analytic" TEXT;`)
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "chat_flow" DROP COLUMN "analytic";`)
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import { ModifyChatMessage1693921865247 } from './1693921865247-ModifyChatMessag
|
||||
import { ModifyCredential1693923551694 } from './1693923551694-ModifyCredential'
|
||||
import { ModifyTool1693924207475 } from './1693924207475-ModifyTool'
|
||||
import { AddApiConfig1694090982460 } from './1694090982460-AddApiConfig'
|
||||
import { AddAnalytic1694432361423 } from './1694432361423-AddAnalytic'
|
||||
|
||||
export const sqliteMigrations = [
|
||||
Init1693835579790,
|
||||
@@ -11,5 +12,6 @@ export const sqliteMigrations = [
|
||||
ModifyChatMessage1693921865247,
|
||||
ModifyCredential1693923551694,
|
||||
ModifyTool1693924207475,
|
||||
AddApiConfig1694090982460
|
||||
AddApiConfig1694090982460,
|
||||
AddAnalytic1694432361423
|
||||
]
|
||||
|
||||
@@ -980,13 +980,15 @@ export class App {
|
||||
socketIOClientId: incomingInput.socketIOClientId,
|
||||
logger,
|
||||
appDataSource: this.AppDataSource,
|
||||
databaseEntities
|
||||
databaseEntities,
|
||||
analytic: chatflow.analytic
|
||||
})
|
||||
: await nodeInstance.run(nodeToExecuteData, incomingInput.question, {
|
||||
chatHistory: incomingInput.history,
|
||||
logger,
|
||||
appDataSource: this.AppDataSource,
|
||||
databaseEntities
|
||||
databaseEntities,
|
||||
analytic: chatflow.analytic
|
||||
})
|
||||
|
||||
logger.debug(`[server]: Finished running ${nodeToExecuteData.label} (${nodeToExecuteData.id})`)
|
||||
|
||||
@@ -448,9 +448,10 @@ export const replaceInputsWithConfig = (flowNodeData: INodeData, overrideConfig:
|
||||
// If overrideConfig[key] is object
|
||||
if (overrideConfig[config] && typeof overrideConfig[config] === 'object') {
|
||||
const nodeIds = Object.keys(overrideConfig[config])
|
||||
if (!nodeIds.includes(flowNodeData.id)) continue
|
||||
else paramsObj[config] = overrideConfig[config][flowNodeData.id]
|
||||
continue
|
||||
if (nodeIds.includes(flowNodeData.id)) {
|
||||
paramsObj[config] = overrideConfig[config][flowNodeData.id]
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
let paramValue = overrideConfig[config] ?? paramsObj[config]
|
||||
@@ -877,12 +878,14 @@ export const decryptCredentialData = async (
|
||||
* @returns {Credential}
|
||||
*/
|
||||
export const transformToCredentialEntity = async (body: ICredentialReqBody): Promise<Credential> => {
|
||||
const encryptedData = await encryptCredentialData(body.plainDataObj)
|
||||
|
||||
const credentialBody = {
|
||||
const credentialBody: ICommonObject = {
|
||||
name: body.name,
|
||||
credentialName: body.credentialName,
|
||||
encryptedData
|
||||
credentialName: body.credentialName
|
||||
}
|
||||
|
||||
if (body.plainDataObj) {
|
||||
const encryptedData = await encryptCredentialData(body.plainDataObj)
|
||||
credentialBody.encryptedData = encryptedData
|
||||
}
|
||||
|
||||
const newCredential = new Credential()
|
||||
|
||||
Reference in New Issue
Block a user