Commit 783f7a9b authored by Joel's avatar Joel

feat: question classifer support run

parent 425e162a
...@@ -8,7 +8,8 @@ import AdvancedSetting from './components/advanced-setting' ...@@ -8,7 +8,8 @@ import AdvancedSetting from './components/advanced-setting'
import type { QuestionClassifierNodeType } from './types' import type { QuestionClassifierNodeType } from './types'
import Field from '@/app/components/workflow/nodes/_base/components/field' import Field from '@/app/components/workflow/nodes/_base/components/field'
import ModelParameterModal from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal' import ModelParameterModal from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal'
import type { NodePanelProps } from '@/app/components/workflow/types' import { InputVarType, type NodePanelProps } from '@/app/components/workflow/types'
import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'
const i18nPrefix = 'workflow.nodes.questionClassifiers' const i18nPrefix = 'workflow.nodes.questionClassifiers'
...@@ -27,56 +28,86 @@ const Panel: FC<NodePanelProps<QuestionClassifierNodeType>> = ({ ...@@ -27,56 +28,86 @@ const Panel: FC<NodePanelProps<QuestionClassifierNodeType>> = ({
handleTopicsChange, handleTopicsChange,
handleInstructionChange, handleInstructionChange,
handleMemoryChange, handleMemoryChange,
isShowSingleRun,
hideSingleRun,
runningStatus,
handleRun,
handleStop,
query,
setQuery,
} = useConfig(id, data) } = useConfig(id, data)
const model = inputs.model const model = inputs.model
return ( return (
<div className='mt-2 px-4 space-y-4'> <div>
<Field <div className='mt-2 px-4 space-y-4'>
title={t(`${i18nPrefix}.inputVars`)} <Field
> title={t(`${i18nPrefix}.inputVars`)}
<VarReferencePicker >
readonly={readOnly} <VarReferencePicker
isShowNodeName readonly={readOnly}
value={inputs.query_variable_selector} isShowNodeName
onChange={handleQueryVarChange} value={inputs.query_variable_selector}
onChange={handleQueryVarChange}
/>
</Field>
<Field
title={t(`${i18nPrefix}.model`)}
>
<ModelParameterModal
popupClassName='!w-[387px]'
isAdvancedMode={true}
mode={model?.mode}
provider={model?.provider}
completionParams={model.completion_params}
modelId={model.name}
setModel={handleModelChanged}
onCompletionParamsChange={handleCompletionParamsChange}
hideDebugWithMultipleModel
debugWithMultipleModel={false}
/>
</Field>
<Field
title={t(`${i18nPrefix}.class`)}
>
<ClassList
list={inputs.classes}
onChange={handleTopicsChange} />
</Field>
<Field
title={t(`${i18nPrefix}.advancedSetting`)}
supportFold
>
<AdvancedSetting
instruction={inputs.instruction}
onInstructionChange={handleInstructionChange}
memory={inputs.memory}
onMemoryChange={handleMemoryChange}
/>
</Field>
</div>
{isShowSingleRun && (
<BeforeRunForm
nodeName={inputs.title}
onHide={hideSingleRun}
forms={[
{
inputs: [{
label: t(`${i18nPrefix}.inputVars`)!,
variable: 'query',
type: InputVarType.paragraph,
required: true,
}],
values: { query },
onChange: keyValue => setQuery((keyValue as any).query),
},
]}
runningStatus={runningStatus}
onRun={handleRun}
onStop={handleStop}
/> />
</Field> )}
<Field
title={t(`${i18nPrefix}.model`)}
>
<ModelParameterModal
popupClassName='!w-[387px]'
isAdvancedMode={true}
mode={model?.mode}
provider={model?.provider}
completionParams={model.completion_params}
modelId={model.name}
setModel={handleModelChanged}
onCompletionParamsChange={handleCompletionParamsChange}
hideDebugWithMultipleModel
debugWithMultipleModel={false}
/>
</Field>
<Field
title={t(`${i18nPrefix}.class`)}
>
<ClassList
list={inputs.classes}
onChange={handleTopicsChange} />
</Field>
<Field
title={t(`${i18nPrefix}.advancedSetting`)}
supportFold
>
<AdvancedSetting
instruction={inputs.instruction}
onInstructionChange={handleInstructionChange}
memory={inputs.memory}
onMemoryChange={handleMemoryChange}
/>
</Field>
</div> </div>
) )
} }
......
...@@ -3,6 +3,7 @@ import produce from 'immer' ...@@ -3,6 +3,7 @@ import produce from 'immer'
import type { Memory, ValueSelector } from '../../types' import type { Memory, ValueSelector } from '../../types'
import type { QuestionClassifierNodeType } from './types' import type { QuestionClassifierNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run'
const useConfig = (id: string, payload: QuestionClassifierNodeType) => { const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
const { inputs, setInputs } = useNodeCrud<QuestionClassifierNodeType>(id, payload) const { inputs, setInputs } = useNodeCrud<QuestionClassifierNodeType>(id, payload)
...@@ -52,6 +53,31 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => { ...@@ -52,6 +53,31 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
setInputs(newInputs) setInputs(newInputs)
}, [inputs, setInputs]) }, [inputs, setInputs])
// single run
const {
isShowSingleRun,
hideSingleRun,
runningStatus,
handleRun,
handleStop,
runInputData,
setRunInputData,
} = useOneStepRun<QuestionClassifierNodeType>({
id,
data: inputs,
defaultRunInputData: {
query: 'Negative or positive sentiment?',
},
})
const query = runInputData.query
const setQuery = useCallback((newQuery: string) => {
setRunInputData({
...runInputData,
query: newQuery,
})
}, [runInputData, setRunInputData])
return { return {
inputs, inputs,
handleModelChanged, handleModelChanged,
...@@ -60,6 +86,13 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => { ...@@ -60,6 +86,13 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
handleTopicsChange: handleClassesChange, handleTopicsChange: handleClassesChange,
handleInstructionChange, handleInstructionChange,
handleMemoryChange, handleMemoryChange,
isShowSingleRun,
hideSingleRun,
runningStatus,
handleRun,
handleStop,
query,
setQuery,
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment