diff --git a/api/apps/sdk/session.py b/api/apps/sdk/session.py index db388a0d9..36b407cea 100644 --- a/api/apps/sdk/session.py +++ b/api/apps/sdk/session.py @@ -1049,11 +1049,13 @@ async def retrieval_test_embedded(): use_kg = req.get("use_kg", False) top = int(req.get("top_k", 1024)) langs = req.get("cross_languages", []) + rerank_id = req.get("rerank_id", "") tenant_id = objs[0].tenant_id if not tenant_id: return get_error_data_result(message="permission denined.") async def _retrieval(): + nonlocal similarity_threshold, vector_similarity_weight, top, rerank_id local_doc_ids = list(doc_ids) if doc_ids else [] tenant_ids = [] _question = question @@ -1065,6 +1067,15 @@ async def retrieval_test_embedded(): meta_data_filter = search_config.get("meta_data_filter", {}) if meta_data_filter.get("method") in ["auto", "semi_auto"]: chat_mdl = LLMBundle(tenant_id, LLMType.CHAT, llm_name=search_config.get("chat_id", "")) + # Apply search_config settings if not explicitly provided in request + if not req.get("similarity_threshold"): + similarity_threshold = float(search_config.get("similarity_threshold", similarity_threshold)) + if not req.get("vector_similarity_weight"): + vector_similarity_weight = float(search_config.get("vector_similarity_weight", vector_similarity_weight)) + if not req.get("top_k"): + top = int(search_config.get("top_k", top)) + if not req.get("rerank_id"): + rerank_id = search_config.get("rerank_id", "") else: meta_data_filter = req.get("meta_data_filter") or {} if meta_data_filter.get("method") in ["auto", "semi_auto"]: @@ -1094,8 +1105,8 @@ async def retrieval_test_embedded(): embd_mdl = LLMBundle(kb.tenant_id, LLMType.EMBEDDING.value, llm_name=kb.embd_id) rerank_mdl = None - if req.get("rerank_id"): - rerank_mdl = LLMBundle(kb.tenant_id, LLMType.RERANK.value, llm_name=req["rerank_id"]) + if rerank_id: + rerank_mdl = LLMBundle(kb.tenant_id, LLMType.RERANK.value, llm_name=rerank_id) if req.get("keyword", False): chat_mdl = LLMBundle(kb.tenant_id, LLMType.CHAT) diff --git a/web/src/pages/next-search/search-setting.tsx b/web/src/pages/next-search/search-setting.tsx index 6b08bf184..c0bf71b9c 100644 --- a/web/src/pages/next-search/search-setting.tsx +++ b/web/src/pages/next-search/search-setting.tsx @@ -39,7 +39,7 @@ import { IKnowledge } from '@/interfaces/database/knowledge'; import { cn } from '@/lib/utils'; import { zodResolver } from '@hookform/resolvers/zod'; import { X } from 'lucide-react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -226,11 +226,21 @@ const SearchSetting: React.FC = ({ control: formMethods.control, name: 'search_config.use_rerank', }); + const aiSummaryDisabled = useWatch({ control: formMethods.control, name: 'search_config.summary', }); + // Reset top_k to 1024 only when user actively disables rerank (from true to false) + const prevRerankEnabled = useRef(undefined); + useEffect(() => { + if (prevRerankEnabled.current === true && rerankModelDisabled === false) { + formMethods.setValue('search_config.top_k', 1024); + } + prevRerankEnabled.current = rerankModelDisabled; + }, [rerankModelDisabled, formMethods]); + const { updateSearch } = useUpdateSearch(); const [formSubmitLoading, setFormSubmitLoading] = useState(false); const { data: systemSetting } = useFetchTenantInfo();