,
checked={selectedSegmentIds.includes(segItem.id)}
onCheck={() => onSelected(segItem.id)}
/>
-
+
= ({ datasetId, documentId }) => {
const embedding = ['queuing', 'indexing', 'paused'].includes((documentDetail?.display_status || '').toLowerCase())
+ const invalidChunkList = useInvalid(useSegmentListKey)
+ const invalidChildChunkList = useInvalid(useChildSegmentListKey)
+
const handleOperate = (operateName?: string) => {
- if (operateName === 'delete')
+ if (operateName === 'delete') {
backToPrev()
- else
+ }
+ else {
detailMutate()
+ setTimeout(() => {
+ invalidChunkList()
+ invalidChildChunkList()
+ }, 5000)
+ }
}
const mode = useMemo(() => {
@@ -245,7 +255,7 @@ const DocumentDetail: FC = ({ datasetId, documentId }) => {
{isDetailLoading
?
- :
{embedding
diff --git a/web/app/components/datasets/documents/index.tsx b/web/app/components/datasets/documents/index.tsx
index 7365ff9850..c9df2f28e2 100644
--- a/web/app/components/datasets/documents/index.tsx
+++ b/web/app/components/datasets/documents/index.tsx
@@ -24,6 +24,10 @@ import { DataSourceType } from '@/models/datasets'
import IndexFailed from '@/app/components/datasets/common/document-status-with-action/index-failed'
import { useProviderContext } from '@/context/provider-context'
import cn from '@/utils/classnames'
+import { useInvalidDocumentDetailKey } from '@/service/knowledge/use-document'
+import { useInvalid } from '@/service/use-base'
+import { useChildSegmentListKey, useSegmentListKey } from '@/service/knowledge/use-segment'
+
const FolderPlusIcon = ({ className }: React.SVGProps
) => {
return
+ }
+ triggerClassName='ml-1 w-4 h-4'
+ />
+ )
+ }
{
scene === 'detail' && (
@@ -152,16 +162,6 @@ export const StatusItem: FC<{
)
}
- {
- errorMessage && (
-
{errorMessage}
- }
- triggerClassName='ml-1 w-4 h-4'
- />
- )
- }
}
@@ -561,18 +561,14 @@ const DocumentList: FC
= ({
-
-
- {doc?.data_source_type === DataSourceType.NOTION &&
- }
+
+
+ {doc?.data_source_type === DataSourceType.NOTION && }
{doc?.data_source_type === DataSourceType.FILE && }
- {doc?.data_source_type === DataSourceType.WEB &&
- }
- {
- doc.name
- }
-
-
+ {doc?.data_source_type === DataSourceType.WEB && }
+
+ {doc.name}
+
diff --git a/web/app/components/datasets/hit-testing/components/child-chunks-item.tsx b/web/app/components/datasets/hit-testing/components/child-chunks-item.tsx
index 043aa3cea7..3c01e3d0b3 100644
--- a/web/app/components/datasets/hit-testing/components/child-chunks-item.tsx
+++ b/web/app/components/datasets/hit-testing/components/child-chunks-item.tsx
@@ -17,7 +17,7 @@ const ChildChunks: FC = ({
const { id, score, content, position } = payload
return (
C-{position}
diff --git a/web/app/components/datasets/hit-testing/components/chunk-detail-modal.tsx b/web/app/components/datasets/hit-testing/components/chunk-detail-modal.tsx
index 8d49cef3d0..fe2f2b8f36 100644
--- a/web/app/components/datasets/hit-testing/components/chunk-detail-modal.tsx
+++ b/web/app/components/datasets/hit-testing/components/chunk-detail-modal.tsx
@@ -56,7 +56,7 @@ const ChunkDetailModal: FC = ({
-
+
{content}
{!isParentChildRetrieval && keywords && keywords.length > 0 && (
diff --git a/web/app/components/datasets/hit-testing/components/result-item.tsx b/web/app/components/datasets/hit-testing/components/result-item.tsx
index 36ee541161..3c8c146d53 100644
--- a/web/app/components/datasets/hit-testing/components/result-item.tsx
+++ b/web/app/components/datasets/hit-testing/components/result-item.tsx
@@ -43,13 +43,8 @@ const ResultItem: FC = ({
setFalse: hideDetailModal,
}] = useBoolean(false)
- const handleClickCard = () => {
- if (!isParentChildRetrieval)
- showDetailModal()
- }
-
return (
-
+
{/* Meta info */}
@@ -66,7 +61,7 @@ const ResultItem: FC = ({
{/* Main */}
- {content}
+ {content}
{isParentChildRetrieval && (
diff --git a/web/app/components/datasets/hit-testing/components/score.tsx b/web/app/components/datasets/hit-testing/components/score.tsx
index 175b00b7e7..76914318e0 100644
--- a/web/app/components/datasets/hit-testing/components/score.tsx
+++ b/web/app/components/datasets/hit-testing/components/score.tsx
@@ -12,15 +12,15 @@ const Score: FC = ({
value,
besideChunkName,
}) => {
- if (!value)
+ if (!value || isNaN(value))
return null
-
return (
-
+
score
- {value.toFixed(2)}
+ {value?.toFixed(2)}
)
diff --git a/web/app/components/datasets/hit-testing/index.tsx b/web/app/components/datasets/hit-testing/index.tsx
index 30be6fb7e7..ccc200bbe6 100644
--- a/web/app/components/datasets/hit-testing/index.tsx
+++ b/web/app/components/datasets/hit-testing/index.tsx
@@ -192,7 +192,7 @@ const HitTesting: FC = ({ datasetId }: Props) => {
}
- setIsShowModifyRetrievalModal(false)} footer={null} mask={isMobile} panelClassname='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'>
+ setIsShowModifyRetrievalModal(false)} footer={null} mask={isMobile} panelClassname='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'>
= ({
const {
modelList: rerankModelList,
- defaultModel: rerankDefaultModel,
- currentModel: isRerankDefaultModelValid,
} = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
const handleSave = () => {
if (
!isReRankModelSelected({
- rerankDefaultModel,
- isRerankDefaultModelValid: !!isRerankDefaultModelValid,
rerankModelList,
retrievalConfig,
indexMethod,
@@ -56,14 +51,7 @@ const ModifyRetrievalModal: FC = ({
Toast.notify({ type: 'error', message: t('appDebug.datasetConfig.rerankModelRequired') })
return
}
- onSave(ensureRerankModelSelected({
- rerankDefaultModel: rerankDefaultModel!,
- retrievalConfig: {
- ...retrievalConfig,
- reranking_enable: retrievalConfig.reranking_mode === RerankingModeEnum.RerankingModel,
- },
- indexMethod,
- }))
+ onSave(retrievalConfig)
}
if (!isShow)
diff --git a/web/app/components/datasets/settings/form/index.tsx b/web/app/components/datasets/settings/form/index.tsx
index 5f6fc00eb7..760954d6cb 100644
--- a/web/app/components/datasets/settings/form/index.tsx
+++ b/web/app/components/datasets/settings/form/index.tsx
@@ -17,11 +17,11 @@ import Input from '@/app/components/base/input'
import Textarea from '@/app/components/base/textarea'
import { ApiConnectionMod } from '@/app/components/base/icons/src/vender/solid/development'
import { updateDatasetSetting } from '@/service/datasets'
-import { type DataSetListResponse, RerankingModeEnum } from '@/models/datasets'
+import { type DataSetListResponse } from '@/models/datasets'
import DatasetDetailContext from '@/context/dataset-detail'
import { type RetrievalConfig } from '@/types/app'
import { useAppContext } from '@/context/app-context'
-import { ensureRerankModelSelected, isReRankModelSelected } from '@/app/components/datasets/common/check-rerank-model'
+import { isReRankModelSelected } from '@/app/components/datasets/common/check-rerank-model'
import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
import {
useModelList,
@@ -74,8 +74,6 @@ const Form = () => {
)
const {
modelList: rerankModelList,
- defaultModel: rerankDefaultModel,
- currentModel: isRerankDefaultModelValid,
} = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
const { data: embeddingModelList } = useModelList(ModelTypeEnum.textEmbedding)
@@ -109,8 +107,6 @@ const Form = () => {
}
if (
!isReRankModelSelected({
- rerankDefaultModel,
- isRerankDefaultModelValid: !!isRerankDefaultModelValid,
rerankModelList,
retrievalConfig,
indexMethod,
@@ -119,17 +115,9 @@ const Form = () => {
notify({ type: 'error', message: t('appDebug.datasetConfig.rerankModelRequired') })
return
}
- const postRetrievalConfig = ensureRerankModelSelected({
- rerankDefaultModel: rerankDefaultModel!,
- retrievalConfig: {
- ...retrievalConfig,
- reranking_enable: retrievalConfig.reranking_mode === RerankingModeEnum.RerankingModel,
- },
- indexMethod,
- })
- if (postRetrievalConfig.weights) {
- postRetrievalConfig.weights.vector_setting.embedding_provider_name = currentDataset?.embedding_model_provider || ''
- postRetrievalConfig.weights.vector_setting.embedding_model_name = currentDataset?.embedding_model || ''
+ if (retrievalConfig.weights) {
+ retrievalConfig.weights.vector_setting.embedding_provider_name = currentDataset?.embedding_model_provider || ''
+ retrievalConfig.weights.vector_setting.embedding_model_name = currentDataset?.embedding_model || ''
}
try {
setLoading(true)
@@ -141,8 +129,8 @@ const Form = () => {
permission,
indexing_technique: indexMethod,
retrieval_model: {
- ...postRetrievalConfig,
- score_threshold: postRetrievalConfig.score_threshold_enabled ? postRetrievalConfig.score_threshold : 0,
+ ...retrievalConfig,
+ score_threshold: retrievalConfig.score_threshold_enabled ? retrievalConfig.score_threshold : 0,
},
embedding_model: embeddingModel.model,
embedding_model_provider: embeddingModel.provider,
diff --git a/web/app/components/header/account-setting/model-provider-page/model-selector/model-trigger.tsx b/web/app/components/header/account-setting/model-provider-page/model-selector/model-trigger.tsx
index 556a2ef66f..aba7ff5f64 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-selector/model-trigger.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-selector/model-trigger.tsx
@@ -36,6 +36,7 @@ const ModelTrigger: FC = ({
className={classNames(
'group flex items-center px-2 h-8 rounded-lg bg-components-input-bg-normal',
!readonly && 'hover:bg-components-input-bg-hover cursor-pointer',
+ !!readonly && 'opacity-50',
className,
open && '!bg-components-input-bg-hover',
model.status !== ModelStatusEnum.active && '!bg-[#FFFAEB]',
diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/components/retrieval-config.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/components/retrieval-config.tsx
index b335b62e33..d3e2079733 100644
--- a/web/app/components/workflow/nodes/knowledge-retrieval/components/retrieval-config.tsx
+++ b/web/app/components/workflow/nodes/knowledge-retrieval/components/retrieval-config.tsx
@@ -59,7 +59,8 @@ const RetrievalConfig: FC = ({
}, [onOpenFromPropsChange])
const {
- defaultModel: rerankDefaultModel,
+ currentProvider: validRerankDefaultProvider,
+ currentModel: validRerankDefaultModel,
} = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
const { multiple_retrieval_config } = payload
@@ -75,8 +76,8 @@ const RetrievalConfig: FC = ({
? undefined
: (!configs.reranking_model?.reranking_provider_name
? {
- provider: rerankDefaultModel?.provider?.provider || '',
- model: rerankDefaultModel?.model || '',
+ provider: validRerankDefaultProvider?.provider || '',
+ model: validRerankDefaultModel?.model || '',
}
: {
provider: configs.reranking_model?.reranking_provider_name,
@@ -86,7 +87,7 @@ const RetrievalConfig: FC = ({
weights: configs.weights as any,
reranking_enable: configs.reranking_enable,
})
- }, [onMultipleRetrievalConfigChange, payload.retrieval_mode, rerankDefaultModel?.provider?.provider, rerankDefaultModel?.model, onRetrievalModeChange])
+ }, [onMultipleRetrievalConfigChange, payload.retrieval_mode, validRerankDefaultProvider, validRerankDefaultModel, onRetrievalModeChange])
return (
{
})
setInputs(newInput)
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [currentProvider?.provider, currentModel, rerankDefaultModel])
+ }, [currentProvider?.provider, currentModel, currentRerankModel, rerankDefaultModel])
const [selectedDatasets, setSelectedDatasets] = useState([])
const [rerankModelOpen, setRerankModelOpen] = useState(false)
const handleRetrievalModeChange = useCallback((newMode: RETRIEVE_TYPE) => {
diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/utils.ts b/web/app/components/workflow/nodes/knowledge-retrieval/utils.ts
index 794fcbca4a..c7b48c1eaa 100644
--- a/web/app/components/workflow/nodes/knowledge-retrieval/utils.ts
+++ b/web/app/components/workflow/nodes/knowledge-retrieval/utils.ts
@@ -126,7 +126,7 @@ export const getMultipleRetrievalConfig = (
reranking_mode,
reranking_model,
weights,
- reranking_enable: ((allInternal && allEconomic) || allExternal) ? reranking_enable : true,
+ reranking_enable: ((allInternal && allEconomic) || allExternal) ? reranking_enable : shouldSetWeightDefaultValue,
}
const setDefaultWeights = () => {
@@ -152,16 +152,20 @@ export const getMultipleRetrievalConfig = (
if (allEconomic || mixtureHighQualityAndEconomic || inconsistentEmbeddingModel || allExternal || mixtureInternalAndExternal) {
result.reranking_mode = RerankingModeEnum.RerankingModel
-
- if (rerankModelIsValid) {
- result.reranking_mode = RerankingModeEnum.RerankingModel
- result.reranking_model = {
- provider: validRerankModel?.provider || '',
- model: validRerankModel?.model || '',
+ if (!result.reranking_model?.provider || !result.reranking_model?.model) {
+ if (rerankModelIsValid) {
+ result.reranking_enable = true
+ result.reranking_model = {
+ provider: validRerankModel?.provider || '',
+ model: validRerankModel?.model || '',
+ }
+ }
+ else {
+ result.reranking_model = {
+ provider: '',
+ model: '',
+ }
}
- }
- else {
- result.reranking_model = undefined
}
}
@@ -169,6 +173,7 @@ export const getMultipleRetrievalConfig = (
if (!reranking_mode) {
if (validRerankModel?.provider && validRerankModel?.model) {
result.reranking_mode = RerankingModeEnum.RerankingModel
+ result.reranking_enable = true
result.reranking_model = {
provider: validRerankModel.provider,
model: validRerankModel.model,
@@ -186,6 +191,7 @@ export const getMultipleRetrievalConfig = (
if (reranking_mode === RerankingModeEnum.WeightedScore && weights && shouldSetWeightDefaultValue) {
if (rerankModelIsValid) {
result.reranking_mode = RerankingModeEnum.RerankingModel
+ result.reranking_enable = true
result.reranking_model = {
provider: validRerankModel.provider || '',
model: validRerankModel.model || '',
@@ -199,6 +205,13 @@ export const getMultipleRetrievalConfig = (
result.reranking_mode = RerankingModeEnum.WeightedScore
setDefaultWeights()
}
+ if (reranking_mode === RerankingModeEnum.RerankingModel && rerankModelIsValid) {
+ result.reranking_enable = true
+ result.reranking_model = {
+ provider: validRerankModel.provider || '',
+ model: validRerankModel.model || '',
+ }
+ }
}
return result
diff --git a/web/i18n/en-US/app-debug.ts b/web/i18n/en-US/app-debug.ts
index 266da820a0..9c1b883871 100644
--- a/web/i18n/en-US/app-debug.ts
+++ b/web/i18n/en-US/app-debug.ts
@@ -483,7 +483,7 @@ const translation = {
title: 'Multi-path retrieval',
description: 'Based on user intent, queries across all Knowledge, retrieves relevant text from multi-sources, and selects the best results matching the user query after reranking. ',
},
- rerankModelRequired: 'Rerank model is required',
+ rerankModelRequired: 'A configured Rerank Model is required',
params: 'Params',
top_k: 'Top K',
top_kTip: 'Used to filter chunks that are most similar to user questions. The system will also dynamically adjust the value of Top K, according to max_tokens of the selected model.',
diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts
index 0dfa8883eb..42b7048f85 100644
--- a/web/i18n/en-US/workflow.ts
+++ b/web/i18n/en-US/workflow.ts
@@ -183,7 +183,7 @@ const translation = {
},
errorMsg: {
fieldRequired: '{{field}} is required',
- rerankModelRequired: 'Before turning on the Rerank Model, please confirm that the model has been successfully configured in the settings.',
+ rerankModelRequired: 'A configured Rerank Model is required',
authRequired: 'Authorization is required',
invalidJson: '{{field}} is invalid JSON',
fields: {
@@ -191,7 +191,7 @@ const translation = {
variableValue: 'Variable Value',
code: 'Code',
model: 'Model',
- rerankModel: 'Rerank Model',
+ rerankModel: 'A configured Rerank Model',
visionVariable: 'Vision Variable',
},
invalidVariable: 'Invalid variable',
diff --git a/web/i18n/zh-Hans/app-debug.ts b/web/i18n/zh-Hans/app-debug.ts
index 4e3f18ad7f..14f1358dd6 100644
--- a/web/i18n/zh-Hans/app-debug.ts
+++ b/web/i18n/zh-Hans/app-debug.ts
@@ -475,7 +475,7 @@ const translation = {
title: '多路召回',
description: '根据用户意图同时匹配所有知识库,从多路知识库查询相关文本片段,经过重排序步骤,从多路查询结果中选择匹配用户问题的最佳结果。',
},
- rerankModelRequired: '请选择 Rerank 模型',
+ rerankModelRequired: '未配置 Rerank 模型',
params: '参数设置',
top_k: 'Top K',
top_kTip: '用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整分段数量。',
diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts
index 91451b486b..93ebda4ce9 100644
--- a/web/i18n/zh-Hans/workflow.ts
+++ b/web/i18n/zh-Hans/workflow.ts
@@ -183,7 +183,7 @@ const translation = {
},
errorMsg: {
fieldRequired: '{{field}} 不能为空',
- rerankModelRequired: '开启 Rerank 模型前,请务必确认模型已在设置中成功配置。',
+ rerankModelRequired: '未配置 Rerank 模型',
authRequired: '请先授权',
invalidJson: '{{field}} 是非法的 JSON',
fields: {
diff --git a/web/service/knowledge/use-document.ts b/web/service/knowledge/use-document.ts
index 2b9981f22f..02e523bd90 100644
--- a/web/service/knowledge/use-document.ts
+++ b/web/service/knowledge/use-document.ts
@@ -29,6 +29,10 @@ export const useDocumentList = (payload: {
})
}
+export const useInvalidDocumentList = () => {
+ return useInvalid(useDocumentListKey)
+}
+
const useAutoDisabledDocumentKey = [NAME_SPACE, 'autoDisabledDocument']
export const useAutoDisabledDocuments = (datasetId: string) => {
return useQuery({
@@ -94,7 +98,7 @@ export const useSyncWebsite = () => {
})
}
-const useDocumentDetailKey = [NAME_SPACE, 'documentDetail']
+const useDocumentDetailKey = [NAME_SPACE, 'documentDetail', 'withoutMetaData']
export const useDocumentDetail = (payload: {
datasetId: string
documentId: string
@@ -114,7 +118,7 @@ export const useDocumentMetadata = (payload: {
}) => {
const { datasetId, documentId, params } = payload
return useQuery({
- queryKey: [...useDocumentDetailKey, 'withMetaData', datasetId, documentId],
+ queryKey: [...useDocumentDetailKey, 'onlyMetaData', datasetId, documentId],
queryFn: () => get(`/datasets/${datasetId}/documents/${documentId}`, { params }),
})
}
|