mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 04:43:09 +00:00 
			
		
		
		
	Co-authored-by: NFish <douxc512@gmail.com> Co-authored-by: nite-knite <nkCoding@gmail.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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 = ({
 | 
						|
  retrievalConfig,
 | 
						|
  rerankModelList,
 | 
						|
  indexMethod,
 | 
						|
}: {
 | 
						|
  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)
 | 
						|
    }
 | 
						|
 | 
						|
    return false
 | 
						|
  })()
 | 
						|
 | 
						|
  if (
 | 
						|
    indexMethod === 'high_quality'
 | 
						|
    && ([RETRIEVE_METHOD.semantic, RETRIEVE_METHOD.fullText].includes(retrievalConfig.search_method))
 | 
						|
    && retrievalConfig.reranking_enable
 | 
						|
    && !rerankModelSelected
 | 
						|
  )
 | 
						|
    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
 | 
						|
}
 |