This commit is contained in:
penguin218 2026-05-09 06:35:59 +08:00 committed by GitHub
commit ca267804fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 7 deletions

View File

@ -17,7 +17,7 @@ import {
RiPlayCircleLine,
} from '@remixicon/react'
import * as React from 'react'
import { useCallback, useMemo, useState } from 'react'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { v4 as uuid4 } from 'uuid'
import ImageUploaderInRetrievalTesting from '@/app/components/datasets/common/image-uploader/image-uploader-in-retrieval-testing'
@ -65,6 +65,7 @@ const QueryInput = ({
}: QueryInputProps) => {
const { t } = useTranslation()
const isMultimodal = useDatasetDetailContextWithSelector(s => !!s.dataset?.is_multimodal)
const datasetExternalRetrievalModel = useDatasetDetailContextWithSelector(s => s.dataset?.external_retrieval_model)
const [isSettingsOpen, setIsSettingsOpen] = useState(false)
const [externalRetrievalSettings, setExternalRetrievalSettings] = useState({
top_k: 4,
@ -72,6 +73,23 @@ const QueryInput = ({
score_threshold_enabled: false,
})
// dataset 是异步加载的,首次挂载时 external_retrieval_model 为 undefined
// useState 的初始值会被固化为上面的默认值。此处在 dataset 第一次就绪后
// 一次性同步到本地 state后续用户通过「设置」弹窗修改的值不会被覆盖。
const hasSyncedExternalRetrievalSettingsRef = useRef(false)
useEffect(() => {
if (hasSyncedExternalRetrievalSettingsRef.current)
return
if (!datasetExternalRetrievalModel)
return
setExternalRetrievalSettings({
top_k: datasetExternalRetrievalModel.top_k ?? 4,
score_threshold: datasetExternalRetrievalModel.score_threshold ?? 0.5,
score_threshold_enabled: datasetExternalRetrievalModel.score_threshold_enabled ?? false,
})
hasSyncedExternalRetrievalSettingsRef.current = true
}, [datasetExternalRetrievalModel])
const text = useMemo(() => {
return queries.find(query => query.content_type === 'text_query')?.content ?? ''
}, [queries])

View File

@ -132,7 +132,7 @@ export const useFormState = () => {
return
}
if (retrievalConfig.weights) {
if (retrievalConfig?.weights) {
retrievalConfig.weights.vector_setting.embedding_provider_name = embeddingModel.provider || ''
retrievalConfig.weights.vector_setting.embedding_model_name = embeddingModel.model || ''
}
@ -191,20 +191,19 @@ export const useFormState = () => {
}
}
// Computed values
const showMultiModalTip = useMemo(() => {
return checkShowMultiModalTip({
embeddingModel,
rerankingEnable: retrievalConfig.reranking_enable,
rerankingEnable: retrievalConfig?.reranking_enable,
rerankModel: {
rerankingProviderName: retrievalConfig.reranking_model.reranking_provider_name,
rerankingModelName: retrievalConfig.reranking_model.reranking_model_name,
rerankingProviderName: retrievalConfig?.reranking_model?.reranking_provider_name ?? '',
rerankingModelName: retrievalConfig?.reranking_model?.reranking_model_name ?? '',
},
indexMethod,
embeddingModelList,
rerankModelList,
})
}, [embeddingModel, rerankModelList, retrievalConfig.reranking_enable, retrievalConfig.reranking_model, embeddingModelList, indexMethod])
}, [embeddingModel, rerankModelList, retrievalConfig?.reranking_enable, retrievalConfig?.reranking_model, embeddingModelList, indexMethod])
return {
// Context values