Skip to content

Commit

Permalink
Feature/Community Node (FlowiseAI#2902)
Browse files Browse the repository at this point in the history
add feature to enable community node
  • Loading branch information
HenryHengZJ authored Jul 29, 2024
1 parent b5d969b commit 27cb143
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 31 deletions.
5 changes: 3 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Flowise has 3 different modules in a single mono repository.
Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables)

| Variable | Description | Type | Default |
| ---------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------ |-------------------------------------|
| ---------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- |
| PORT | The HTTP port Flowise runs on | Number | 3000 |
| CORS_ORIGINS | The allowed origins for all cross-origin HTTP calls | String | |
| IFRAME_ORIGINS | The allowed origins for iframe src embedding | String | |
Expand All @@ -133,7 +133,7 @@ Flowise support different environment variables to configure your instance. You
| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` |
| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` |
| LOG_JSON_SPACES | Spaces to beautify JSON logs | | 2 |
| APIKEY_STORAGE_TYPE | To store api keys on a JSON file or database. Default is `json` | Enum String: `json`, `db` | `json` |
| APIKEY_STORAGE_TYPE | To store api keys on a JSON file or database. Default is `json` | Enum String: `json`, `db` | `json` |
| APIKEY_PATH | Location where api keys are saved when `APIKEY_STORAGE_TYPE` is `json` | String | `your-path/Flowise/packages/server` |
| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | |
| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | |
Expand All @@ -157,6 +157,7 @@ Flowise support different environment variables to configure your instance. You
| S3_STORAGE_SECRET_ACCESS_KEY | AWS Secret Key | String | |
| S3_STORAGE_REGION | Region for S3 bucket | String | |
| S3_ENDPOINT_URL | Custom Endpoint for S3 | String | |
| SHOW_COMMUNITY_NODES | Show nodes created by community | Boolean | |

You can also specify the env variables when using `npx`. For example:

Expand Down
1 change: 1 addition & 0 deletions docker/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,4 @@ BLOB_STORAGE_PATH=/root/.flowise/storage
# S3_ENDPOINT_URL=<custom-s3-endpoint-url>

# APIKEY_STORAGE_TYPE=json (json | db)
# SHOW_COMMUNITY_NODES=true
1 change: 1 addition & 0 deletions i18n/CONTRIBUTING-ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ Flowise 支持不同的环境变量来配置您的实例。您可以在 `package
| S3_STORAGE_SECRET_ACCESS_KEY | AWS 密钥 (Secret Key) | 字符串 | |
| S3_STORAGE_REGION | S3 存储地区 | 字符串 | |
| S3_ENDPOINT_URL | S3 端点 URL | 字符串 | |
| SHOW_COMMUNITY_NODES | 显示由社区创建的节点 | 布尔值 | |

您也可以在使用 `npx` 时指定环境变量。例如:

Expand Down
1 change: 1 addition & 0 deletions packages/components/src/Interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export interface INodeProperties {
badge?: string
deprecateMessage?: string
hideOutput?: boolean
author?: string
}

export interface INode extends INodeProperties {
Expand Down
1 change: 1 addition & 0 deletions packages/server/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,4 @@ PORT=3000
# S3_ENDPOINT_URL=<custom-s3-endpoint-url>

# APIKEY_STORAGE_TYPE=json (json | db)
# SHOW_COMMUNITY_NODES=true
3 changes: 2 additions & 1 deletion packages/server/src/AppConfig.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export const appConfig = {
apiKeys: {
storageType: process.env.APIKEY_STORAGE_TYPE ? process.env.APIKEY_STORAGE_TYPE.toLowerCase() : 'json'
}
},
showCommunityNodes: process.env.SHOW_COMMUNITY_NODES ? process.env.SHOW_COMMUNITY_NODES.toLowerCase() === 'true' : false
// todo: add more config options here like database, log, storage, credential and allow modification from UI
}
10 changes: 9 additions & 1 deletion packages/server/src/NodesPool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { getNodeModulesPackagePath } from './utils'
import { promises } from 'fs'
import { ICommonObject } from 'flowise-components'
import logger from './utils/logger'
import { appConfig } from './AppConfig'

export class NodesPool {
componentNodes: IComponentNodes = {}
Expand Down Expand Up @@ -57,7 +58,14 @@ export class NodesPool {
}

const skipCategories = ['Analytic', 'SpeechToText']
if (!skipCategories.includes(newNodeInstance.category)) {
const conditionOne = !skipCategories.includes(newNodeInstance.category)

const isCommunityNodesAllowed = appConfig.showCommunityNodes
const isAuthorPresent = newNodeInstance.author
let conditionTwo = true
if (!isCommunityNodesAllowed && isAuthorPresent) conditionTwo = false

if (conditionOne && conditionTwo) {
this.componentNodes[newNodeInstance.name] = newNodeInstance
}
}
Expand Down
4 changes: 3 additions & 1 deletion packages/server/src/commands/start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ export default class Start extends Command {
S3_STORAGE_ACCESS_KEY_ID: Flags.string(),
S3_STORAGE_SECRET_ACCESS_KEY: Flags.string(),
S3_STORAGE_REGION: Flags.string(),
S3_ENDPOINT_URL: Flags.string()
S3_ENDPOINT_URL: Flags.string(),
SHOW_COMMUNITY_NODES: Flags.string()
}

async stopProcess() {
Expand Down Expand Up @@ -97,6 +98,7 @@ export default class Start extends Command {
if (flags.DEBUG) process.env.DEBUG = flags.DEBUG
if (flags.NUMBER_OF_PROXIES) process.env.NUMBER_OF_PROXIES = flags.NUMBER_OF_PROXIES
if (flags.DISABLE_CHATFLOW_REUSE) process.env.DISABLE_CHATFLOW_REUSE = flags.DISABLE_CHATFLOW_REUSE
if (flags.SHOW_COMMUNITY_NODES) process.env.SHOW_COMMUNITY_NODES = flags.SHOW_COMMUNITY_NODES

// Authorization
if (flags.FLOWISE_USERNAME) process.env.FLOWISE_USERNAME = flags.FLOWISE_USERNAME
Expand Down
66 changes: 40 additions & 26 deletions packages/ui/src/views/canvas/AddNodes.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -491,35 +491,49 @@ const AddNodes = ({ nodesData, node, isAgentCanvas }) => {
<ListItemText
sx={{ ml: 1 }}
primary={
<div
style={{
display: 'flex',
flexDirection: 'row',
alignItems: 'center'
}}
>
<span>{node.label}</span>
&nbsp;
{node.badge && (
<Chip
sx={{
width: 'max-content',
fontWeight: 700,
<>
<div
style={{
display: 'flex',
flexDirection: 'row',
alignItems: 'center'
}}
>
<span>{node.label}</span>
&nbsp;
{node.badge && (
<Chip
sx={{
width: 'max-content',
fontWeight: 700,
fontSize: '0.65rem',
background:
node.badge === 'DEPRECATING'
? theme.palette.warning
.main
: theme.palette.teal
.main,
color:
node.badge !== 'DEPRECATING'
? 'white'
: 'inherit'
}}
size='small'
label={node.badge}
/>
)}
</div>
{node.author && (
<span
style={{
fontSize: '0.65rem',
background:
node.badge === 'DEPRECATING'
? theme.palette.warning.main
: theme.palette.teal.main,
color:
node.badge !== 'DEPRECATING'
? 'white'
: 'inherit'
fontWeight: 700
}}
size='small'
label={node.badge}
/>
>
By {node.author}
</span>
)}
</div>
</>
}
secondary={node.description}
/>
Expand Down

0 comments on commit 27cb143

Please sign in to comment.