diff --git a/web/app/(commonLayout)/datasets/Container.tsx b/web/app/(commonLayout)/datasets/Container.tsx
index bfe487a52b..2bb94f979a 100644
--- a/web/app/(commonLayout)/datasets/Container.tsx
+++ b/web/app/(commonLayout)/datasets/Container.tsx
@@ -2,7 +2,7 @@
// Libraries
import { useEffect, useMemo, useRef, useState } from 'react'
-import { useRouter, useSearchParams } from 'next/navigation'
+import { useRouter } from 'next/navigation'
import { useTranslation } from 'react-i18next'
import { useDebounceFn } from 'ahooks'
import useSWR from 'swr'
@@ -35,17 +35,6 @@ const Container = () => {
const { currentWorkspace } = useAppContext()
const showTagManagementModal = useTagStore(s => s.showTagManagementModal)
const { showExternalApiPanel, setShowExternalApiPanel } = useExternalApiPanel()
- const searchParams = useSearchParams()
-
- useEffect(() => {
- const openPanel = searchParams.get('openExternalApiPanel')
- if (openPanel === 'true') {
- setTimeout(() => {
- setShowExternalApiPanel(true)
- window.history.replaceState({}, '', '/datasets')
- }, 500)
- }
- }, [searchParams, setShowExternalApiPanel])
const options = useMemo(() => {
return [
diff --git a/web/app/(commonLayout)/datasets/DatasetCard.tsx b/web/app/(commonLayout)/datasets/DatasetCard.tsx
index fa0625a528..e8ccddbcb7 100644
--- a/web/app/(commonLayout)/datasets/DatasetCard.tsx
+++ b/web/app/(commonLayout)/datasets/DatasetCard.tsx
@@ -142,7 +142,7 @@ const DatasetCard = ({
{dataset.provider === 'external'
? <>
diff --git a/web/app/components/app/configuration/dataset-config/settings-modal/index.tsx b/web/app/components/app/configuration/dataset-config/settings-modal/index.tsx
index 05e7b46ced..7b3b4abc0f 100644
--- a/web/app/components/app/configuration/dataset-config/settings-modal/index.tsx
+++ b/web/app/components/app/configuration/dataset-config/settings-modal/index.tsx
@@ -61,6 +61,7 @@ const SettingsModal: FC = ({
const ref = useRef(null)
const [topK, setTopK] = useState(currentDataset?.external_retrieval_model.top_k ?? 2)
const [scoreThreshold, setScoreThreshold] = useState(currentDataset?.external_retrieval_model.score_threshold ?? 0.5)
+ const [scoreThresholdEnabled, setScoreThresholdEnabled] = useState(currentDataset?.external_retrieval_model.score_threshold_enabled ?? false)
const { setShowAccountSettingModal } = useModalContext()
const [loading, setLoading] = useState(false)
@@ -78,11 +79,13 @@ const SettingsModal: FC = ({
const [isHideChangedTip, setIsHideChangedTip] = useState(false)
const isRetrievalChanged = !isEqual(retrievalConfig, localeCurrentDataset?.retrieval_model_dict) || indexMethod !== localeCurrentDataset?.indexing_technique
- const handleSettingsChange = (data: { top_k?: number; score_threshold?: number }) => {
+ const handleSettingsChange = (data: { top_k?: number; score_threshold?: number; score_threshold_enabled?: boolean }) => {
if (data.top_k !== undefined)
setTopK(data.top_k)
if (data.score_threshold !== undefined)
setScoreThreshold(data.score_threshold)
+ if (data.score_threshold_enabled !== undefined)
+ setScoreThresholdEnabled(data.score_threshold_enabled)
}
const handleSave = async () => {
@@ -122,6 +125,7 @@ const SettingsModal: FC = ({
external_retrieval_model: {
top_k: topK,
score_threshold: scoreThreshold,
+ score_threshold_enabled: scoreThresholdEnabled,
},
retrieval_model: {
...postRetrievalConfig,
@@ -287,6 +291,7 @@ const SettingsModal: FC = ({
diff --git a/web/app/components/datasets/documents/detail/completed/SegmentCard.tsx b/web/app/components/datasets/documents/detail/completed/SegmentCard.tsx
index 839b2be399..5b76acc936 100644
--- a/web/app/components/datasets/documents/detail/completed/SegmentCard.tsx
+++ b/web/app/components/datasets/documents/detail/completed/SegmentCard.tsx
@@ -211,7 +211,7 @@ const SegmentCard: FC = ({
-
+
= ({ items, value, onSelect }) => {
const { t } = useTranslation()
const [isOpen, setIsOpen] = useState(false)
- const router = useRouter()
const [selectedItem, setSelectedItem] = useState(
items.find(item => item.value === value) || null,
)
+ const { setShowExternalKnowledgeAPIModal } = useModalContext()
+ const { mutateExternalKnowledgeApis } = useExternalKnowledgeApi()
+ const router = useRouter()
useEffect(() => {
const newSelectedItem = items.find(item => item.value === value) || null
@@ -33,7 +37,17 @@ const ExternalApiSelect: React.FC = ({ items, value, onS
}, [value, items])
const handleAddNewAPI = () => {
- router.push('/datasets?openExternalApiPanel=true')
+ setShowExternalKnowledgeAPIModal({
+ payload: { name: '', settings: { endpoint: '', api_key: '' } },
+ onSaveCallback: async () => {
+ mutateExternalKnowledgeApis()
+ router.refresh()
+ },
+ onCancelCallback: () => {
+ mutateExternalKnowledgeApis()
+ },
+ isEditMode: false,
+ })
}
const handleSelect = (item: ApiItem) => {
@@ -51,7 +65,7 @@ const ExternalApiSelect: React.FC = ({ items, value, onS
>
{selectedItem
? (
-
+
{selectedItem.name}
diff --git a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx
index d3a5325d38..c910d9b2a7 100644
--- a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx
+++ b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx
@@ -7,6 +7,7 @@ import { useRouter } from 'next/navigation'
import ExternalApiSelect from './ExternalApiSelect'
import Input from '@/app/components/base/input'
import Button from '@/app/components/base/button'
+import { useModalContext } from '@/context/modal-context'
import { useExternalKnowledgeApi } from '@/context/external-knowledge-api-context'
type ExternalApiSelectionProps = {
@@ -20,6 +21,8 @@ const ExternalApiSelection: React.FC
= ({ external_kn
const router = useRouter()
const { externalKnowledgeApiList } = useExternalKnowledgeApi()
const [selectedApiId, setSelectedApiId] = useState(external_knowledge_api_id)
+ const { setShowExternalKnowledgeAPIModal } = useModalContext()
+ const { mutateExternalKnowledgeApis } = useExternalKnowledgeApi()
const apiItems = externalKnowledgeApiList.map(api => ({
value: api.id,
@@ -37,7 +40,17 @@ const ExternalApiSelection: React.FC = ({ external_kn
}, [apiItems, external_knowledge_api_id, external_knowledge_id, onChange])
const handleAddNewAPI = () => {
- router.push('/datasets?openExternalApiPanel=true')
+ setShowExternalKnowledgeAPIModal({
+ payload: { name: '', settings: { endpoint: '', api_key: '' } },
+ onSaveCallback: async () => {
+ mutateExternalKnowledgeApis()
+ router.refresh()
+ },
+ onCancelCallback: () => {
+ mutateExternalKnowledgeApis()
+ },
+ isEditMode: false,
+ })
}
useEffect(() => {
diff --git a/web/app/components/datasets/external-knowledge-base/create/KnowledgeBaseInfo.tsx b/web/app/components/datasets/external-knowledge-base/create/KnowledgeBaseInfo.tsx
index ca2f93d7a6..1a2e83d2d6 100644
--- a/web/app/components/datasets/external-knowledge-base/create/KnowledgeBaseInfo.tsx
+++ b/web/app/components/datasets/external-knowledge-base/create/KnowledgeBaseInfo.tsx
@@ -42,7 +42,7 @@ const KnowledgeBaseInfo: React.FC = ({ name, description
value={description}
onChange={ e => handleDescriptionChange(e)}
placeholder={t('dataset.externalKnowledgeDescriptionPlaceholder') ?? ''}
- className={`flex h-20 p-2 self-stretch items-start rounded-lg bg-components-input-bg-normal ${description ? 'text-components-input-text-filled' : 'text-components-input-text-placeholder'} system-sm-regular`}
+ className={`flex h-20 py-2 p-3 self-stretch items-start rounded-lg bg-components-input-bg-normal ${description ? 'text-components-input-text-filled' : 'text-components-input-text-placeholder'} system-sm-regular`}
/>
void
+ onChange: (data: { top_k?: number; score_threshold?: number; score_threshold_enabled?: boolean }) => void
}
-const RetrievalSettings: FC = ({ topK, scoreThreshold, onChange, isInHitTesting = false, isInRetrievalSetting = false }) => {
- const [scoreThresholdEnabled, setScoreThresholdEnabled] = useState(false)
+const RetrievalSettings: FC = ({
+ topK,
+ scoreThreshold,
+ scoreThresholdEnabled,
+ onChange,
+ isInHitTesting = false,
+ isInRetrievalSetting = false,
+}) => {
const { t } = useTranslation()
+
+ const handleScoreThresholdChange = (enabled: boolean) => {
+ onChange({ score_threshold_enabled: enabled })
+ }
+
return (
{!isInHitTesting && !isInRetrievalSetting &&
@@ -44,7 +56,7 @@ const RetrievalSettings: FC = ({ topK, scoreThreshold, o
onChange={(_key, v) => onChange({ score_threshold: v })}
enable={scoreThresholdEnabled}
hasSwitch={true}
- onSwitchChange={(_key, v) => setScoreThresholdEnabled(v)}
+ onSwitchChange={(_key, v) => handleScoreThresholdChange(v)}
/>
diff --git a/web/app/components/datasets/external-knowledge-base/create/declarations.ts b/web/app/components/datasets/external-knowledge-base/create/declarations.ts
index bf16e1d3a9..271caf33df 100644
--- a/web/app/components/datasets/external-knowledge-base/create/declarations.ts
+++ b/web/app/components/datasets/external-knowledge-base/create/declarations.ts
@@ -7,5 +7,6 @@ export type CreateKnowledgeBaseReq = {
external_retrieval_model: {
top_k: number
score_threshold: number
+ score_threshold_enabled: boolean
}
}
diff --git a/web/app/components/datasets/external-knowledge-base/create/index.tsx b/web/app/components/datasets/external-knowledge-base/create/index.tsx
index 41662ce907..921050e218 100644
--- a/web/app/components/datasets/external-knowledge-base/create/index.tsx
+++ b/web/app/components/datasets/external-knowledge-base/create/index.tsx
@@ -28,6 +28,7 @@ const ExternalKnowledgeBaseCreate: React.FC =
external_retrieval_model: {
top_k: 2,
score_threshold: 0.5,
+ score_threshold_enabled: false,
},
provider: 'external',
@@ -91,6 +92,7 @@ const ExternalKnowledgeBaseCreate: React.FC =
handleFormChange({
...formData,
external_retrieval_model: {
diff --git a/web/app/components/datasets/hit-testing/hit-detail.tsx b/web/app/components/datasets/hit-testing/hit-detail.tsx
index 9d12ff4494..066e2238c8 100644
--- a/web/app/components/datasets/hit-testing/hit-detail.tsx
+++ b/web/app/components/datasets/hit-testing/hit-detail.tsx
@@ -35,33 +35,31 @@ const HitDetail: FC = ({ segInfo }) => {
{renderContent()}
:
-
-
-
-
-
- {segInfo?.word_count} {t('datasetDocuments.segment.characters')}
-
-
-
- {segInfo?.hit_count} {t('datasetDocuments.segment.hitCount')}
-
-
-
-
{renderContent()}
-
- {t('datasetDocuments.segment.keywords')}
-
-
- {!segInfo?.keywords?.length
- ? '-'
- : segInfo?.keywords?.map((word, index) => {
- return
{word}
- })}
-
+
+
+
+
+ {segInfo?.word_count} {t('datasetDocuments.segment.characters')}
+
+
+
+ {segInfo?.hit_count} {t('datasetDocuments.segment.hitCount')}
+
+
+
+
{renderContent()}
+
+ {t('datasetDocuments.segment.keywords')}
+
+
+ {!segInfo?.keywords?.length
+ ? '-'
+ : segInfo?.keywords?.map((word, index) => {
+ return
{word}
+ })}
)
diff --git a/web/app/components/datasets/hit-testing/index.tsx b/web/app/components/datasets/hit-testing/index.tsx
index 2e21c268e4..1aae42e16d 100644
--- a/web/app/components/datasets/hit-testing/index.tsx
+++ b/web/app/components/datasets/hit-testing/index.tsx
@@ -218,7 +218,7 @@ const HitTesting: FC
= ({ datasetId }: Props) => {
{
setCurrParagraph({ showModal: false })
diff --git a/web/app/components/datasets/hit-testing/modify-external-retrieval-modal.tsx b/web/app/components/datasets/hit-testing/modify-external-retrieval-modal.tsx
index 3234a2ae35..fd99c698bb 100644
--- a/web/app/components/datasets/hit-testing/modify-external-retrieval-modal.tsx
+++ b/web/app/components/datasets/hit-testing/modify-external-retrieval-modal.tsx
@@ -9,9 +9,10 @@ import ActionButton from '@/app/components/base/action-button'
type ModifyExternalRetrievalModalProps = {
onClose: () => void
- onSave: (data: { top_k: number; score_threshold: number }) => void
+ onSave: (data: { top_k: number; score_threshold: number; score_threshold_enabled: boolean }) => void
initialTopK: number
initialScoreThreshold: number
+ initialScoreThresholdEnabled: boolean
}
const ModifyExternalRetrievalModal: React.FC = ({
@@ -19,20 +20,24 @@ const ModifyExternalRetrievalModal: React.FC
onSave,
initialTopK,
initialScoreThreshold,
+ initialScoreThresholdEnabled,
}) => {
const { t } = useTranslation()
const [topK, setTopK] = useState(initialTopK)
const [scoreThreshold, setScoreThreshold] = useState(initialScoreThreshold)
+ const [scoreThresholdEnabled, setScoreThresholdEnabled] = useState(initialScoreThresholdEnabled)
- const handleSettingsChange = (data: { top_k?: number; score_threshold?: number }) => {
+ const handleSettingsChange = (data: { top_k?: number; score_threshold?: number; score_threshold_enabled?: boolean }) => {
if (data.top_k !== undefined)
setTopK(data.top_k)
if (data.score_threshold !== undefined)
setScoreThreshold(data.score_threshold)
+ if (data.score_threshold_enabled !== undefined)
+ setScoreThresholdEnabled(data.score_threshold_enabled)
}
const handleSave = () => {
- onSave({ top_k: topK, score_threshold: scoreThreshold })
+ onSave({ top_k: topK, score_threshold: scoreThreshold, score_threshold_enabled: scoreThresholdEnabled })
onClose()
}
@@ -50,6 +55,7 @@ const ModifyExternalRetrievalModal: React.FC
diff --git a/web/app/components/datasets/hit-testing/textarea.tsx b/web/app/components/datasets/hit-testing/textarea.tsx
index 0c5ac18118..5d228dfa36 100644
--- a/web/app/components/datasets/hit-testing/textarea.tsx
+++ b/web/app/components/datasets/hit-testing/textarea.tsx
@@ -51,9 +51,10 @@ const TextAreaWithButton = ({
const [externalRetrievalSettings, setExternalRetrievalSettings] = useState({
top_k: 2,
score_threshold: 0.5,
+ score_threshold_enabled: false,
})
- const handleSaveExternalRetrievalSettings = (data: { top_k: number; score_threshold: number }) => {
+ const handleSaveExternalRetrievalSettings = (data: { top_k: number; score_threshold: number; score_threshold_enabled: boolean }) => {
setExternalRetrievalSettings(data)
setIsSettingsOpen(false)
}
@@ -90,6 +91,7 @@ const TextAreaWithButton = ({
external_retrieval_model: {
top_k: externalRetrievalSettings.top_k,
score_threshold: externalRetrievalSettings.score_threshold,
+ score_threshold_enabled: externalRetrievalSettings.score_threshold_enabled,
},
}) as Promise,
)
diff --git a/web/app/components/datasets/settings/form/index.tsx b/web/app/components/datasets/settings/form/index.tsx
index 243f00290e..ed0865f871 100644
--- a/web/app/components/datasets/settings/form/index.tsx
+++ b/web/app/components/datasets/settings/form/index.tsx
@@ -60,6 +60,7 @@ const Form = () => {
const [permission, setPermission] = useState(currentDataset?.permission)
const [topK, setTopK] = useState(currentDataset?.external_retrieval_model.top_k ?? 2)
const [scoreThreshold, setScoreThreshold] = useState(currentDataset?.external_retrieval_model.score_threshold ?? 0.5)
+ const [scoreThresholdEnabled, setScoreThresholdEnabled] = useState(currentDataset?.external_retrieval_model.score_threshold_enabled ?? false)
const [selectedMemberIDs, setSelectedMemberIDs] = useState(currentDataset?.partial_member_list || [])
const [memberList, setMemberList] = useState([])
const [indexMethod, setIndexMethod] = useState(currentDataset?.indexing_technique)
@@ -90,11 +91,13 @@ const Form = () => {
setMemberList(accounts)
}
- const handleSettingsChange = (data: { top_k?: number; score_threshold?: number }) => {
+ const handleSettingsChange = (data: { top_k?: number; score_threshold?: number; score_threshold_enabled?: boolean }) => {
if (data.top_k !== undefined)
setTopK(data.top_k)
if (data.score_threshold !== undefined)
setScoreThreshold(data.score_threshold)
+ if (data.score_threshold_enabled !== undefined)
+ setScoreThresholdEnabled(data.score_threshold_enabled)
}
useMount(() => {
@@ -141,6 +144,7 @@ const Form = () => {
external_retrieval_model: {
top_k: topK,
score_threshold: scoreThreshold,
+ score_threshold_enabled: scoreThresholdEnabled,
},
retrieval_model: {
...postRetrievalConfig,
@@ -268,6 +272,7 @@ const Form = () => {
diff --git a/web/models/datasets.ts b/web/models/datasets.ts
index 9930728df9..7f52ad6b0f 100644
--- a/web/models/datasets.ts
+++ b/web/models/datasets.ts
@@ -42,6 +42,7 @@ export type DataSet = {
external_retrieval_model: {
top_k: number
score_threshold: number
+ score_threshold_enabled: boolean
}
}
diff --git a/web/service/datasets.ts b/web/service/datasets.ts
index 68daf80fe4..efc483a62f 100644
--- a/web/service/datasets.ts
+++ b/web/service/datasets.ts
@@ -245,7 +245,7 @@ export const hitTesting: Fetcher(`/datasets/${datasetId}/hit-testing`, { body: { query: queryText, retrieval_model } })
}
-export const externalKnowledgeBaseHitTesting: Fetcher = ({ datasetId, query, external_retrieval_model }) => {
+export const externalKnowledgeBaseHitTesting: Fetcher = ({ datasetId, query, external_retrieval_model }) => {
return post(`/datasets/${datasetId}/external-hit-testing`, { body: { query, external_retrieval_model } })
}