import { RETRIEVE_METHOD, type RetrievalConfig } from '@/types/app' import type { DefaultModelResponse, Model, } from '@/app/components/header/account-setting/model-provider-page/declarations' import { RerankingModeEnum } from '@/models/datasets' export const isReRankModelSelected = ({ rerankDefaultModel, isRerankDefaultModelValid, retrievalConfig, rerankModelList, indexMethod, }: { rerankDefaultModel?: DefaultModelResponse isRerankDefaultModelValid: boolean retrievalConfig: RetrievalConfig rerankModelList: Model[] indexMethod?: string }) => { const rerankModelSelected = (() => { if (retrievalConfig.reranking_model?.reranking_model_name) { const provider = rerankModelList.find(({ provider }) => provider === retrievalConfig.reranking_model?.reranking_provider_name) return provider?.models.find(({ model }) => model === retrievalConfig.reranking_model?.reranking_model_name) } if (isRerankDefaultModelValid) return !!rerankDefaultModel return false })() if ( indexMethod === 'high_quality' && (retrievalConfig.search_method === RETRIEVE_METHOD.hybrid && retrievalConfig.reranking_mode !== RerankingModeEnum.WeightedScore) && !rerankModelSelected ) return false return true } export const ensureRerankModelSelected = ({ rerankDefaultModel, indexMethod, retrievalConfig, }: { rerankDefaultModel: DefaultModelResponse retrievalConfig: RetrievalConfig indexMethod?: string }) => { const rerankModel = retrievalConfig.reranking_model?.reranking_model_name ? retrievalConfig.reranking_model : undefined if ( indexMethod === 'high_quality' && (retrievalConfig.reranking_enable || retrievalConfig.search_method === RETRIEVE_METHOD.hybrid) && !rerankModel && rerankDefaultModel ) { return { ...retrievalConfig, reranking_model: { reranking_provider_name: rerankDefaultModel.provider.provider, reranking_model_name: rerankDefaultModel.model, }, } } return retrievalConfig }