feat: get var list hooks

This commit is contained in:
Joel 2024-03-28 16:44:11 +08:00
parent 08650339d7
commit 615178dafa
3 changed files with 40 additions and 1 deletions

View File

@ -0,0 +1,27 @@
import {
useIsChatMode,
useWorkflow,
} from '@/app/components/workflow/hooks'
import { toNodeOutputVars } from '@/app/components/workflow/nodes/_base/components/variable/utils'
import type { ValueSelector, Var } from '@/app/components/workflow/types'
type Params = {
onlyLeafNodeVar?: boolean
filterVar: (payload: Var, selector: ValueSelector) => boolean
}
const useAvailableVarList = (nodeId: string, {
onlyLeafNodeVar,
filterVar,
}: Params = {
onlyLeafNodeVar: false,
filterVar: () => true,
}) => {
const { getTreeLeafNodes, getBeforeNodesInSameBranch } = useWorkflow()
const isChatMode = useIsChatMode()
const availableNodes = onlyLeafNodeVar ? getTreeLeafNodes(nodeId) : getBeforeNodesInSameBranch(nodeId)
const availableVars = toNodeOutputVars(availableNodes, isChatMode, filterVar).map(item => item.vars)
return availableVars
}
export default useAvailableVarList

View File

@ -3,8 +3,9 @@ import type { FC } from 'react'
import React, { useCallback } from 'react' import React, { useCallback } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import produce from 'immer' import produce from 'immer'
import type { PromptItem } from '../../../types' import type { PromptItem, ValueSelector, Var } from '../../../types'
import { PromptRole } from '../../../types' import { PromptRole } from '../../../types'
import useAvailableVarList from '../../_base/hooks/use-available-var-list'
import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor' import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor'
import AddButton from '@/app/components/workflow/nodes/_base/components/add-button' import AddButton from '@/app/components/workflow/nodes/_base/components/add-button'
import TypeSelector from '@/app/components/workflow/nodes/_base/components/selector' import TypeSelector from '@/app/components/workflow/nodes/_base/components/selector'
@ -15,6 +16,8 @@ const i18nPrefix = 'workflow.nodes.llm'
type Props = { type Props = {
readOnly: boolean readOnly: boolean
nodeId: string
filterVar: (payload: Var, selector: ValueSelector) => boolean
isChatModel: boolean isChatModel: boolean
isChatApp: boolean isChatApp: boolean
payload: PromptItem | PromptItem[] payload: PromptItem | PromptItem[]
@ -30,6 +33,8 @@ type Props = {
const ConfigPrompt: FC<Props> = ({ const ConfigPrompt: FC<Props> = ({
readOnly, readOnly,
nodeId,
filterVar,
isChatModel, isChatModel,
isChatApp, isChatApp,
payload, payload,
@ -39,6 +44,11 @@ const ConfigPrompt: FC<Props> = ({
hasSetBlockStatus, hasSetBlockStatus,
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
const availableVarList = useAvailableVarList(nodeId, {
onlyLeafNodeVar: false,
filterVar,
})
console.log('availableVarList', availableVarList)
const handleChatModePromptChange = useCallback((index: number) => { const handleChatModePromptChange = useCallback((index: number) => {
return (prompt: string) => { return (prompt: string) => {

View File

@ -171,6 +171,8 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
{model.name && ( {model.name && (
<ConfigPrompt <ConfigPrompt
readOnly={readOnly} readOnly={readOnly}
nodeId={id}
filterVar={filterVar}
isChatModel={isChatModel} isChatModel={isChatModel}
isChatApp={isChatMode} isChatApp={isChatMode}
isShowContext isShowContext