| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 | import {  uniq,  xorBy,} from 'lodash-es'import type { MultipleRetrievalConfig } from './types'import type {  DataSet,  SelectedDatasetsMode,} from '@/models/datasets'import {  DEFAULT_WEIGHTED_SCORE,  RerankingModeEnum,} from '@/models/datasets'import { RETRIEVE_METHOD } from '@/types/app'import { DATASET_DEFAULT } from '@/config'export const checkNodeValid = () => {  return true}export const getSelectedDatasetsMode = (datasets: DataSet[] = []) => {  if (datasets === null)    datasets = []  let allHighQuality = true  let allHighQualityVectorSearch = true  let allHighQualityFullTextSearch = true  let allEconomic = true  let mixtureHighQualityAndEconomic = true  let allExternal = true  let allInternal = true  let mixtureInternalAndExternal = true  let inconsistentEmbeddingModel = false  if (!datasets.length) {    allHighQuality = false    allHighQualityVectorSearch = false    allHighQualityFullTextSearch = false    allEconomic = false    mixtureHighQualityAndEconomic = false    inconsistentEmbeddingModel = false    allExternal = false    allInternal = false    mixtureInternalAndExternal = false  }  datasets.forEach((dataset) => {    if (dataset.indexing_technique === 'economy') {      allHighQuality = false      allHighQualityVectorSearch = false      allHighQualityFullTextSearch = false    }    if (dataset.indexing_technique === 'high_quality') {      allEconomic = false      if (dataset.retrieval_model_dict.search_method !== RETRIEVE_METHOD.semantic)        allHighQualityVectorSearch = false      if (dataset.retrieval_model_dict.search_method !== RETRIEVE_METHOD.fullText)        allHighQualityFullTextSearch = false    }    if (dataset.provider !== 'external') {      allExternal = false    }    else {      allInternal = false      allHighQuality = false      allHighQualityVectorSearch = false      allHighQualityFullTextSearch = false      mixtureHighQualityAndEconomic = false    }  })  if (allExternal || allInternal)    mixtureInternalAndExternal = false  if (allHighQuality || allEconomic)    mixtureHighQualityAndEconomic = false  if (allHighQuality)    inconsistentEmbeddingModel = uniq(datasets.map(item => item.embedding_model)).length > 1  return {    allHighQuality,    allHighQualityVectorSearch,    allHighQualityFullTextSearch,    allEconomic,    mixtureHighQualityAndEconomic,    allInternal,    allExternal,    mixtureInternalAndExternal,    inconsistentEmbeddingModel,  } as SelectedDatasetsMode}export const getMultipleRetrievalConfig = (  multipleRetrievalConfig: MultipleRetrievalConfig,  selectedDatasets: DataSet[],  originalDatasets: DataSet[],  validRerankModel?: { provider?: string; model?: string },) => {  const shouldSetWeightDefaultValue = xorBy(selectedDatasets, originalDatasets, 'id').length > 0  const rerankModelIsValid = validRerankModel?.provider && validRerankModel?.model  const {    allHighQuality,    allHighQualityVectorSearch,    allHighQualityFullTextSearch,    allEconomic,    mixtureHighQualityAndEconomic,    allInternal,    allExternal,    mixtureInternalAndExternal,    inconsistentEmbeddingModel,  } = getSelectedDatasetsMode(selectedDatasets)  const {    top_k = DATASET_DEFAULT.top_k,    score_threshold,    reranking_mode,    reranking_model,    weights,    reranking_enable,  } = multipleRetrievalConfig || { top_k: DATASET_DEFAULT.top_k }  const result = {    top_k,    score_threshold,    reranking_mode,    reranking_model,    weights,    reranking_enable: ((allInternal && allEconomic) || allExternal) ? reranking_enable : shouldSetWeightDefaultValue,  }  const setDefaultWeights = () => {    result.weights = {      vector_setting: {        vector_weight: allHighQualityVectorSearch          ? DEFAULT_WEIGHTED_SCORE.allHighQualityVectorSearch.semantic          : allHighQualityFullTextSearch            ? DEFAULT_WEIGHTED_SCORE.allHighQualityFullTextSearch.semantic            : DEFAULT_WEIGHTED_SCORE.other.semantic,        embedding_provider_name: selectedDatasets[0].embedding_model_provider,        embedding_model_name: selectedDatasets[0].embedding_model,      },      keyword_setting: {        keyword_weight: allHighQualityVectorSearch          ? DEFAULT_WEIGHTED_SCORE.allHighQualityVectorSearch.keyword          : allHighQualityFullTextSearch            ? DEFAULT_WEIGHTED_SCORE.allHighQualityFullTextSearch.keyword            : DEFAULT_WEIGHTED_SCORE.other.keyword,      },    }  }  if (allEconomic || mixtureHighQualityAndEconomic || inconsistentEmbeddingModel || allExternal || mixtureInternalAndExternal) {    result.reranking_mode = RerankingModeEnum.RerankingModel    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_enable = true    }  }  if (allHighQuality && !inconsistentEmbeddingModel && allInternal) {    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,        }      }      else {        result.reranking_mode = RerankingModeEnum.WeightedScore        setDefaultWeights()      }    }    if (reranking_mode === RerankingModeEnum.WeightedScore && !weights)      setDefaultWeights()    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 || '',        }      }      else {        setDefaultWeights()      }    }    if (reranking_mode === RerankingModeEnum.RerankingModel && !rerankModelIsValid && shouldSetWeightDefaultValue) {      result.reranking_mode = RerankingModeEnum.WeightedScore      setDefaultWeights()    }  }  return result}export const checkoutRerankModelConfigedInRetrievalSettings = (  datasets: DataSet[],  multipleRetrievalConfig?: MultipleRetrievalConfig,) => {  if (!multipleRetrievalConfig)    return true  const {    allEconomic,    allExternal,  } = getSelectedDatasetsMode(datasets)  const {    reranking_enable,    reranking_mode,    reranking_model,  } = multipleRetrievalConfig  if (reranking_mode === RerankingModeEnum.RerankingModel && (!reranking_model?.provider || !reranking_model?.model)) {    if ((allEconomic || allExternal) && !reranking_enable)      return true    return false  }  return true}
 |