Commit e4701e26 authored by Joel's avatar Joel

feat: add datasets

parent 04515698
'use client'
import { useBoolean } from 'ahooks'
import type { FC } from 'react'
import React, { useCallback } from 'react'
import AddButton from '@/app/components/base/button/add-button'
import SelectDataset from '@/app/components/app/configuration/dataset-config/select-dataset'
import type { DataSet } from '@/models/datasets'
type Props = {
selectedIds: string[]
onChange: (dataSets: DataSet[]) => void
}
const AddDataset: FC<Props> = ({
selectedIds,
onChange,
}) => {
const [isShowModal, {
setTrue: showModal,
setFalse: hideModal,
}] = useBoolean(false)
const handleSelect = useCallback((datasets: DataSet[]) => {
onChange(datasets)
hideModal()
}, [onChange, hideModal])
return (
<div>
<AddButton onClick={showModal} />
{isShowModal && (
<SelectDataset
isShow={isShowModal}
onClose={hideModal}
selectedIds={selectedIds}
onSelect={handleSelect}
/>
)}
</div>
)
}
export default React.memo(AddDataset)
......@@ -39,7 +39,6 @@ const RetrievalConfig: FC<Props> = ({
const {
defaultModel: rerankDefaultModel,
currentModel: isRerankDefaultModelVaild,
} = useModelListAndDefaultModelAndCurrentProviderAndModel(3)
const { multiple_retrieval_config } = payload
......
......@@ -4,6 +4,7 @@ import VarReferencePicker from '../_base/components/variable/var-reference-picke
import useConfig from './use-config'
import { mockData } from './mock'
import RetrievalConfig from './components/retrieval-config'
import AddKnowledge from './components/add-dataset'
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'
......@@ -18,6 +19,7 @@ const Panel: FC = () => {
handleQueryVarChange,
handleRetrievalModeChange,
handleMultipleRetrievalConfigChange,
handleOnDatasetsChange,
} = useConfig(mockData)
return (
......@@ -37,7 +39,7 @@ const Panel: FC = () => {
<Field
title={t(`${i18nPrefix}.knowledge`)}
operations={
<div className='flex'>
<div className='flex items-center space-x-1'>
<RetrievalConfig
payload={{
retrieval_mode: inputs.retrieval_mode,
......@@ -46,10 +48,15 @@ const Panel: FC = () => {
onRetrievalModeChange={handleRetrievalModeChange}
onMultipleRetrievalConfigChange={handleMultipleRetrievalConfigChange}
/>
<div className='w-px h-3 bg-gray-200'></div>
<AddKnowledge
selectedIds={inputs.dataset_ids}
onChange={handleOnDatasetsChange}
/>
</div>
}
>
list
</Field>
</div>
......
......@@ -3,10 +3,11 @@ import produce from 'immer'
import type { ValueSelector } from '../../types'
import type { KnowledgeRetrievalNodeType, MultipleRetrievalConfig } from './types'
import type { RETRIEVE_TYPE } from '@/types/app'
import type { DataSet } from '@/models/datasets'
const useConfig = (initInputs: KnowledgeRetrievalNodeType) => {
const [inputs, setInputs] = useState<KnowledgeRetrievalNodeType>(initInputs)
const [selectedDatasets, setSelectedDatasets] = useState<DataSet[]>([])
const handleQueryVarChange = useCallback((newVar: ValueSelector) => {
const newInputs = produce(inputs, (draft) => {
draft.query_variable_selector = newVar
......@@ -28,11 +29,20 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => {
setInputs(newInputs)
}, [inputs, setInputs])
const handleOnDatasetsChange = useCallback((newDatasets: DataSet[]) => {
const newInputs = produce(inputs, (draft) => {
draft.dataset_ids = newDatasets.map(d => d.id)
})
setInputs(newInputs)
setSelectedDatasets(newDatasets)
}, [inputs, setInputs])
return {
inputs,
handleQueryVarChange,
handleRetrievalModeChange,
handleMultipleRetrievalConfigChange,
handleOnDatasetsChange,
}
}
......
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