Skip to content

Commit

Permalink
fix: workflow parallel limit in ifelse node (langgenius#8242)
Browse files Browse the repository at this point in the history
  • Loading branch information
zxhlyh authored and cuiks committed Sep 26, 2024
1 parent bfded81 commit 5cc7c0d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
13 changes: 5 additions & 8 deletions web/app/components/workflow/hooks/use-workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,15 +283,12 @@ export const useWorkflow = () => {
return isUsed
}, [isVarUsedInNodes])

const checkParallelLimit = useCallback((nodeId: string) => {
const checkParallelLimit = useCallback((nodeId: string, nodeHandle = 'source') => {
const {
getNodes,
edges,
} = store.getState()
const nodes = getNodes()
const currentNode = nodes.find(node => node.id === nodeId)!
const sourceNodeOutgoers = getOutgoers(currentNode, nodes, edges)
if (sourceNodeOutgoers.length > PARALLEL_LIMIT - 1) {
const connectedEdges = edges.filter(edge => edge.source === nodeId && edge.sourceHandle === nodeHandle)
if (connectedEdges.length > PARALLEL_LIMIT - 1) {
const { setShowTips } = workflowStore.getState()
setShowTips(t('workflow.common.parallelTip.limit', { num: PARALLEL_LIMIT }))
return false
Expand Down Expand Up @@ -322,7 +319,7 @@ export const useWorkflow = () => {
return true
}, [t, workflowStore])

const isValidConnection = useCallback(({ source, target }: Connection) => {
const isValidConnection = useCallback(({ source, sourceHandle, target }: Connection) => {
const {
edges,
getNodes,
Expand All @@ -331,7 +328,7 @@ export const useWorkflow = () => {
const sourceNode: Node = nodes.find(node => node.id === source)!
const targetNode: Node = nodes.find(node => node.id === target)!

if (!checkParallelLimit(source!))
if (!checkParallelLimit(source!, sourceHandle || 'source'))
return false

if (sourceNode.type === CUSTOM_NOTE_NODE || targetNode.type === CUSTOM_NOTE_NODE)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
memo,
useCallback,
useState,
} from 'react'
import { useTranslation } from 'react-i18next'
import {
Expand All @@ -10,6 +11,7 @@ import {
useAvailableBlocks,
useNodesInteractions,
useNodesReadOnly,
useWorkflow,
} from '@/app/components/workflow/hooks'
import BlockSelector from '@/app/components/workflow/block-selector'
import type {
Expand All @@ -30,9 +32,11 @@ const Add = ({
isParallel,
}: AddProps) => {
const { t } = useTranslation()
const [open, setOpen] = useState(false)
const { handleNodeAdd } = useNodesInteractions()
const { nodesReadOnly } = useNodesReadOnly()
const { availableNextBlocks } = useAvailableBlocks(nodeData.type, nodeData.isInIteration)
const { checkParallelLimit } = useWorkflow()

const handleSelect = useCallback<OnSelectBlock>((type, toolDefaultValue) => {
handleNodeAdd(
Expand All @@ -47,6 +51,13 @@ const Add = ({
)
}, [nodeId, sourceHandle, handleNodeAdd])

const handleOpenChange = useCallback((newOpen: boolean) => {
if (newOpen && !checkParallelLimit(nodeId, sourceHandle))
return

setOpen(newOpen)
}, [checkParallelLimit, nodeId, sourceHandle])

const renderTrigger = useCallback((open: boolean) => {
return (
<div
Expand All @@ -73,6 +84,8 @@ const Add = ({

return (
<BlockSelector
open={open}
onOpenChange={handleOpenChange}
disabled={nodesReadOnly}
onSelect={handleSelect}
placement='top'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,9 @@ export const NodeSourceHandle = memo(({
}, [])
const handleHandleClick = useCallback((e: MouseEvent) => {
e.stopPropagation()
if (checkParallelLimit(id))
if (checkParallelLimit(id, handleId))
setOpen(v => !v)
}, [checkParallelLimit, id])
}, [checkParallelLimit, id, handleId])
const handleSelect = useCallback((type: BlockEnum, toolDefaultValue?: ToolDefaultValue) => {
handleNodeAdd(
{
Expand Down

0 comments on commit 5cc7c0d

Please sign in to comment.