check-rerank-model.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { RETRIEVE_METHOD, type RetrievalConfig } from '@/types/app'
  2. import type {
  3. DefaultModelResponse,
  4. Model,
  5. } from '@/app/components/header/account-setting/model-provider-page/declarations'
  6. import { RerankingModeEnum } from '@/models/datasets'
  7. export const isReRankModelSelected = ({
  8. retrievalConfig,
  9. rerankModelList,
  10. indexMethod,
  11. }: {
  12. retrievalConfig: RetrievalConfig
  13. rerankModelList: Model[]
  14. indexMethod?: string
  15. }) => {
  16. const rerankModelSelected = (() => {
  17. if (retrievalConfig.reranking_model?.reranking_model_name) {
  18. const provider = rerankModelList.find(({ provider }) => provider === retrievalConfig.reranking_model?.reranking_provider_name)
  19. return provider?.models.find(({ model }) => model === retrievalConfig.reranking_model?.reranking_model_name)
  20. }
  21. return false
  22. })()
  23. if (
  24. indexMethod === 'high_quality'
  25. && ([RETRIEVE_METHOD.semantic, RETRIEVE_METHOD.fullText].includes(retrievalConfig.search_method))
  26. && retrievalConfig.reranking_enable
  27. && !rerankModelSelected
  28. )
  29. return false
  30. if (
  31. indexMethod === 'high_quality'
  32. && (retrievalConfig.search_method === RETRIEVE_METHOD.hybrid && retrievalConfig.reranking_mode !== RerankingModeEnum.WeightedScore)
  33. && !rerankModelSelected
  34. )
  35. return false
  36. return true
  37. }
  38. export const ensureRerankModelSelected = ({
  39. rerankDefaultModel,
  40. indexMethod,
  41. retrievalConfig,
  42. }: {
  43. rerankDefaultModel: DefaultModelResponse
  44. retrievalConfig: RetrievalConfig
  45. indexMethod?: string
  46. }) => {
  47. const rerankModel = retrievalConfig.reranking_model?.reranking_model_name ? retrievalConfig.reranking_model : undefined
  48. if (
  49. indexMethod === 'high_quality'
  50. && (retrievalConfig.reranking_enable || retrievalConfig.search_method === RETRIEVE_METHOD.hybrid)
  51. && !rerankModel
  52. && rerankDefaultModel
  53. ) {
  54. return {
  55. ...retrievalConfig,
  56. reranking_model: {
  57. reranking_provider_name: rerankDefaultModel.provider.provider,
  58. reranking_model_name: rerankDefaultModel.model,
  59. },
  60. }
  61. }
  62. return retrievalConfig
  63. }