| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 
                        - import type { FC } from 'react'
 - import {
 -   memo,
 -   useCallback,
 - } from 'react'
 - import { useTranslation } from 'react-i18next'
 - import VarReferencePicker from '../_base/components/variable/var-reference-picker'
 - import useConfig from './use-config'
 - import RetrievalConfig from './components/retrieval-config'
 - import AddKnowledge from './components/add-dataset'
 - import DatasetList from './components/dataset-list'
 - import type { KnowledgeRetrievalNodeType } from './types'
 - import Field from '@/app/components/workflow/nodes/_base/components/field'
 - import Split from '@/app/components/workflow/nodes/_base/components/split'
 - import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars'
 - import { InputVarType, type NodePanelProps } from '@/app/components/workflow/types'
 - import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'
 - import ResultPanel from '@/app/components/workflow/run/result-panel'
 - 
 - const i18nPrefix = 'workflow.nodes.knowledgeRetrieval'
 - 
 - const Panel: FC<NodePanelProps<KnowledgeRetrievalNodeType>> = ({
 -   id,
 -   data,
 - }) => {
 -   const { t } = useTranslation()
 - 
 -   const {
 -     readOnly,
 -     inputs,
 -     handleQueryVarChange,
 -     filterVar,
 -     handleModelChanged,
 -     handleCompletionParamsChange,
 -     handleRetrievalModeChange,
 -     handleMultipleRetrievalConfigChange,
 -     selectedDatasets,
 -     handleOnDatasetsChange,
 -     isShowSingleRun,
 -     hideSingleRun,
 -     runningStatus,
 -     handleRun,
 -     handleStop,
 -     query,
 -     setQuery,
 -     runResult,
 -     rerankModelOpen,
 -     setRerankModelOpen,
 -   } = useConfig(id, data)
 - 
 -   const handleOpenFromPropsChange = useCallback((openFromProps: boolean) => {
 -     setRerankModelOpen(openFromProps)
 -   }, [setRerankModelOpen])
 - 
 -   return (
 -     <div className='mt-2'>
 -       <div className='px-4 pb-4 space-y-4'>
 -         {/* {JSON.stringify(inputs, null, 2)} */}
 -         <Field
 -           title={t(`${i18nPrefix}.queryVariable`)}
 -         >
 -           <VarReferencePicker
 -             nodeId={id}
 -             readonly={readOnly}
 -             isShowNodeName
 -             value={inputs.query_variable_selector}
 -             onChange={handleQueryVarChange}
 -             filterVar={filterVar}
 -           />
 -         </Field>
 - 
 -         <Field
 -           title={t(`${i18nPrefix}.knowledge`)}
 -           operations={
 -             <div className='flex items-center space-x-1'>
 -               <RetrievalConfig
 -                 payload={{
 -                   retrieval_mode: inputs.retrieval_mode,
 -                   multiple_retrieval_config: inputs.multiple_retrieval_config,
 -                   single_retrieval_config: inputs.single_retrieval_config,
 -                 }}
 -                 onRetrievalModeChange={handleRetrievalModeChange}
 -                 onMultipleRetrievalConfigChange={handleMultipleRetrievalConfigChange}
 -                 singleRetrievalModelConfig={inputs.single_retrieval_config?.model}
 -                 onSingleRetrievalModelChange={handleModelChanged as any}
 -                 onSingleRetrievalModelParamsChange={handleCompletionParamsChange}
 -                 readonly={readOnly || !selectedDatasets.length}
 -                 openFromProps={rerankModelOpen}
 -                 onOpenFromPropsChange={handleOpenFromPropsChange}
 -                 selectedDatasets={selectedDatasets}
 -               />
 -               {!readOnly && (<div className='w-px h-3 bg-gray-200'></div>)}
 -               {!readOnly && (
 -                 <AddKnowledge
 -                   selectedIds={inputs.dataset_ids}
 -                   onChange={handleOnDatasetsChange}
 -                 />
 -               )}
 -             </div>
 -           }
 -         >
 -           <DatasetList
 -             list={selectedDatasets}
 -             onChange={handleOnDatasetsChange}
 -             readonly={readOnly}
 -           />
 -         </Field>
 -       </div>
 - 
 -       <Split />
 -       <div className='px-4 pt-4 pb-2'>
 -         <OutputVars>
 -           <>
 -             <VarItem
 -               name='result'
 -               type='Array[Object]'
 -               description={t(`${i18nPrefix}.outputVars.output`)}
 -               subItems={[
 -                 {
 -                   name: 'content',
 -                   type: 'string',
 -                   description: t(`${i18nPrefix}.outputVars.content`),
 -                 },
 -                 // url, title, link like bing search reference result: link, link page title, link page icon
 -                 {
 -                   name: 'title',
 -                   type: 'string',
 -                   description: t(`${i18nPrefix}.outputVars.title`),
 -                 },
 -                 {
 -                   name: 'url',
 -                   type: 'string',
 -                   description: t(`${i18nPrefix}.outputVars.url`),
 -                 },
 -                 {
 -                   name: 'icon',
 -                   type: 'string',
 -                   description: t(`${i18nPrefix}.outputVars.icon`),
 -                 },
 -                 {
 -                   name: 'metadata',
 -                   type: 'object',
 -                   description: t(`${i18nPrefix}.outputVars.metadata`),
 -                 },
 -               ]}
 -             />
 - 
 -           </>
 -         </OutputVars>
 -         {isShowSingleRun && (
 -           <BeforeRunForm
 -             nodeName={inputs.title}
 -             onHide={hideSingleRun}
 -             forms={[
 -               {
 -                 inputs: [{
 -                   label: t(`${i18nPrefix}.queryVariable`)!,
 -                   variable: 'query',
 -                   type: InputVarType.paragraph,
 -                   required: true,
 -                 }],
 -                 values: { query },
 -                 onChange: keyValue => setQuery((keyValue as any).query),
 -               },
 -             ]}
 -             runningStatus={runningStatus}
 -             onRun={handleRun}
 -             onStop={handleStop}
 -             result={<ResultPanel {...runResult} showSteps={false} />}
 -           />
 -         )}
 -       </div>
 -     </div>
 -   )
 - }
 - 
 - export default memo(Panel)
 
 
  |