balibabu
feat: remove KnowledgeSearching and add knowledge configuration page and add a run button to the document (#64)
f3d0ebd
import { KnowledgeRouteKey } from '@/constants/knowledge'; | |
import { useKnowledgeBaseId } from '@/hooks/knowledgeHook'; | |
import { Button, Form, Input, Radio, Select, Space, Tag } from 'antd'; | |
import { useCallback, useEffect, useState } from 'react'; | |
import { useDispatch, useNavigate, useSelector } from 'umi'; | |
import Configuration from './configuration'; | |
import styles from './index.less'; | |
const { CheckableTag } = Tag; | |
const layout = { | |
labelCol: { span: 8 }, | |
wrapperCol: { span: 16 }, | |
labelAlign: 'left' as const, | |
}; | |
const { Option } = Select; | |
const KnowledgeSetting = () => { | |
const dispatch = useDispatch(); | |
const settingModel = useSelector((state: any) => state.settingModel); | |
let navigate = useNavigate(); | |
const { tenantIfo = {} } = settingModel; | |
const parser_ids = tenantIfo?.parser_ids ?? ''; | |
const embd_id = tenantIfo?.embd_id ?? ''; | |
const [form] = Form.useForm(); | |
const [selectedTag, setSelectedTag] = useState(''); | |
const values = Form.useWatch([], form); | |
const knowledgeBaseId = useKnowledgeBaseId(); | |
const getTenantInfo = useCallback(async () => { | |
dispatch({ | |
type: 'settingModel/getTenantInfo', | |
payload: {}, | |
}); | |
if (knowledgeBaseId) { | |
const data = await dispatch<any>({ | |
type: 'kSModel/getKbDetail', | |
payload: { | |
kb_id: knowledgeBaseId, | |
}, | |
}); | |
if (data.retcode === 0) { | |
const { description, name, permission, embd_id } = data.data; | |
form.setFieldsValue({ description, name, permission, embd_id }); | |
setSelectedTag(data.data.parser_id); | |
} | |
} | |
}, [knowledgeBaseId, dispatch, form]); | |
const onFinish = async () => { | |
try { | |
await form.validateFields(); | |
if (knowledgeBaseId) { | |
dispatch({ | |
type: 'kSModel/updateKb', | |
payload: { | |
...values, | |
parser_id: selectedTag, | |
kb_id: knowledgeBaseId, | |
embd_id: undefined, | |
}, | |
}); | |
} else { | |
const retcode = await dispatch<any>({ | |
type: 'kSModel/createKb', | |
payload: { | |
...values, | |
parser_id: selectedTag, | |
}, | |
}); | |
if (retcode === 0) { | |
navigate( | |
`/knowledge/${KnowledgeRouteKey.Dataset}?id=${knowledgeBaseId}`, | |
); | |
} | |
} | |
} catch (error) { | |
console.warn(error); | |
} | |
}; | |
useEffect(() => { | |
getTenantInfo(); | |
}, [getTenantInfo]); | |
const handleChange = (tag: string, checked: boolean) => { | |
const nextSelectedTag = checked ? tag : selectedTag; | |
console.log('You are interested in: ', nextSelectedTag); | |
setSelectedTag(nextSelectedTag); | |
}; | |
return ( | |
<Form | |
{...layout} | |
form={form} | |
name="validateOnly" | |
style={{ maxWidth: 1000, padding: 14 }} | |
> | |
<Form.Item name="name" label="知识库名称" rules={[{ required: true }]}> | |
<Input /> | |
</Form.Item> | |
<Form.Item name="description" label="知识库描述"> | |
<Input.TextArea /> | |
</Form.Item> | |
<Form.Item name="permission" label="可见权限"> | |
<Radio.Group> | |
<Radio value="me">只有我</Radio> | |
<Radio value="team">所有团队成员</Radio> | |
</Radio.Group> | |
</Form.Item> | |
<Form.Item | |
name="embd_id" | |
label="Embedding 模型" | |
hasFeedback | |
rules={[{ required: true, message: 'Please select your country!' }]} | |
> | |
<Select placeholder="Please select a country"> | |
{embd_id.split(',').map((item: string) => { | |
return ( | |
<Option value={item} key={item}> | |
{item} | |
</Option> | |
); | |
})} | |
</Select> | |
</Form.Item> | |
<div style={{ marginTop: '5px' }}> | |
修改Embedding 模型,请去<span style={{ color: '#1677ff' }}>设置</span> | |
</div> | |
<Space size={[0, 8]} wrap> | |
<div className={styles.tags}> | |
{parser_ids.split(',').map((tag: string) => { | |
return ( | |
<CheckableTag | |
key={tag} | |
checked={selectedTag === tag} | |
onChange={(checked) => handleChange(tag, checked)} | |
> | |
{tag} | |
</CheckableTag> | |
); | |
})} | |
</div> | |
</Space> | |
<Space size={[0, 8]} wrap></Space> | |
<div className={styles.preset}> | |
<div className={styles.left}>xxxxx文章</div> | |
<div className={styles.right}>预估份数</div> | |
</div> | |
<Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 8 }}> | |
<Button type="primary" onClick={onFinish}> | |
保存并处理 | |
</Button> | |
<Button htmlType="button" style={{ marginLeft: '20px' }}> | |
取消 | |
</Button> | |
</Form.Item> | |
</Form> | |
); | |
}; | |
// export default KnowledgeSetting; | |
export default Configuration; | |