utils.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { uniq } from 'lodash-es'
  2. import type { MultipleRetrievalConfig } from './types'
  3. import type {
  4. DataSet,
  5. SelectedDatasetsMode,
  6. } from '@/models/datasets'
  7. import {
  8. DEFAULT_WEIGHTED_SCORE,
  9. RerankingModeEnum,
  10. } from '@/models/datasets'
  11. import { RETRIEVE_METHOD } from '@/types/app'
  12. import { DATASET_DEFAULT } from '@/config'
  13. export const checkNodeValid = () => {
  14. return true
  15. }
  16. export const getSelectedDatasetsMode = (datasets: DataSet[]) => {
  17. let allHighQuality = true
  18. let allHighQualityVectorSearch = true
  19. let allHighQualityFullTextSearch = true
  20. let allEconomic = true
  21. let mixtureHighQualityAndEconomic = true
  22. let inconsistentEmbeddingModel = false
  23. if (!datasets.length) {
  24. allHighQuality = false
  25. allHighQualityVectorSearch = false
  26. allHighQualityFullTextSearch = false
  27. allEconomic = false
  28. mixtureHighQualityAndEconomic = false
  29. inconsistentEmbeddingModel = false
  30. }
  31. datasets.forEach((dataset) => {
  32. if (dataset.indexing_technique === 'economy') {
  33. allHighQuality = false
  34. allHighQualityVectorSearch = false
  35. allHighQualityFullTextSearch = false
  36. }
  37. if (dataset.indexing_technique === 'high_quality') {
  38. allEconomic = false
  39. if (dataset.retrieval_model_dict.search_method !== RETRIEVE_METHOD.semantic)
  40. allHighQualityVectorSearch = false
  41. if (dataset.retrieval_model_dict.search_method !== RETRIEVE_METHOD.fullText)
  42. allHighQualityFullTextSearch = false
  43. }
  44. })
  45. if (allHighQuality || allEconomic)
  46. mixtureHighQualityAndEconomic = false
  47. if (allHighQuality)
  48. inconsistentEmbeddingModel = uniq(datasets.map(item => item.embedding_model)).length > 1
  49. return {
  50. allHighQuality,
  51. allHighQualityVectorSearch,
  52. allHighQualityFullTextSearch,
  53. allEconomic,
  54. mixtureHighQualityAndEconomic,
  55. inconsistentEmbeddingModel,
  56. } as SelectedDatasetsMode
  57. }
  58. export const getMultipleRetrievalConfig = (multipleRetrievalConfig: MultipleRetrievalConfig, selectedDatasets: DataSet[]) => {
  59. const {
  60. allHighQuality,
  61. allHighQualityVectorSearch,
  62. allHighQualityFullTextSearch,
  63. allEconomic,
  64. mixtureHighQualityAndEconomic,
  65. inconsistentEmbeddingModel,
  66. } = getSelectedDatasetsMode(selectedDatasets)
  67. const {
  68. top_k = DATASET_DEFAULT.top_k,
  69. score_threshold,
  70. reranking_mode,
  71. reranking_model,
  72. weights,
  73. reranking_enable,
  74. } = multipleRetrievalConfig || { top_k: DATASET_DEFAULT.top_k }
  75. const result = {
  76. top_k,
  77. score_threshold,
  78. reranking_mode,
  79. reranking_model,
  80. weights,
  81. reranking_enable,
  82. }
  83. if (allEconomic || mixtureHighQualityAndEconomic || inconsistentEmbeddingModel)
  84. result.reranking_mode = RerankingModeEnum.RerankingModel
  85. if (allHighQuality && !inconsistentEmbeddingModel && reranking_mode === undefined)
  86. result.reranking_mode = RerankingModeEnum.WeightedScore
  87. if (allHighQuality && !inconsistentEmbeddingModel && (reranking_mode === RerankingModeEnum.WeightedScore || reranking_mode === undefined) && !weights) {
  88. result.weights = {
  89. vector_setting: {
  90. vector_weight: allHighQualityVectorSearch
  91. ? DEFAULT_WEIGHTED_SCORE.allHighQualityVectorSearch.semantic
  92. : allHighQualityFullTextSearch
  93. ? DEFAULT_WEIGHTED_SCORE.allHighQualityFullTextSearch.semantic
  94. : DEFAULT_WEIGHTED_SCORE.other.semantic,
  95. embedding_provider_name: selectedDatasets[0].embedding_model_provider,
  96. embedding_model_name: selectedDatasets[0].embedding_model,
  97. },
  98. keyword_setting: {
  99. keyword_weight: allHighQualityVectorSearch
  100. ? DEFAULT_WEIGHTED_SCORE.allHighQualityVectorSearch.keyword
  101. : allHighQualityFullTextSearch
  102. ? DEFAULT_WEIGHTED_SCORE.allHighQualityFullTextSearch.keyword
  103. : DEFAULT_WEIGHTED_SCORE.other.keyword,
  104. },
  105. }
  106. }
  107. return result
  108. }