mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-26 00:18:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import React, { useState } from 'react'
 | |
| import produce from 'immer'
 | |
| import type { AnnotationReplyConfig } from '@/models/debug'
 | |
| import { queryAnnotationJobStatus, updateAnnotationStatus } from '@/service/annotation'
 | |
| import type { EmbeddingModelConfig } from '@/app/components/app/annotation/type'
 | |
| import { AnnotationEnableStatus, JobStatus } from '@/app/components/app/annotation/type'
 | |
| import { sleep } from '@/utils'
 | |
| import { ANNOTATION_DEFAULT } from '@/config'
 | |
| import { useProviderContext } from '@/context/provider-context'
 | |
| 
 | |
| type Params = {
 | |
|   appId: string
 | |
|   annotationConfig: AnnotationReplyConfig
 | |
|   setAnnotationConfig: (annotationConfig: AnnotationReplyConfig) => void
 | |
| }
 | |
| const useAnnotationConfig = ({
 | |
|   appId,
 | |
|   annotationConfig,
 | |
|   setAnnotationConfig,
 | |
| }: Params) => {
 | |
|   const { plan, enableBilling } = useProviderContext()
 | |
|   const isAnnotationFull = (enableBilling && plan.usage.annotatedResponse >= plan.total.annotatedResponse)
 | |
|   const [isShowAnnotationFullModal, setIsShowAnnotationFullModal] = useState(false)
 | |
|   const [isShowAnnotationConfigInit, doSetIsShowAnnotationConfigInit] = React.useState(false)
 | |
|   const setIsShowAnnotationConfigInit = (isShow: boolean) => {
 | |
|     if (isShow) {
 | |
|       if (isAnnotationFull) {
 | |
|         setIsShowAnnotationFullModal(true)
 | |
|         return
 | |
|       }
 | |
|     }
 | |
|     doSetIsShowAnnotationConfigInit(isShow)
 | |
|   }
 | |
|   const ensureJobCompleted = async (jobId: string, status: AnnotationEnableStatus) => {
 | |
|     let isCompleted = false
 | |
|     while (!isCompleted) {
 | |
|       const res: any = await queryAnnotationJobStatus(appId, status, jobId)
 | |
|       isCompleted = res.job_status === JobStatus.completed
 | |
|       if (isCompleted)
 | |
|         break
 | |
| 
 | |
|       await sleep(2000)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const handleEnableAnnotation = async (embeddingModel: EmbeddingModelConfig, score?: number) => {
 | |
|     if (isAnnotationFull)
 | |
|       return
 | |
| 
 | |
|     const { job_id: jobId }: any = await updateAnnotationStatus(appId, AnnotationEnableStatus.enable, embeddingModel, score)
 | |
|     await ensureJobCompleted(jobId, AnnotationEnableStatus.enable)
 | |
|     setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
 | |
|       draft.enabled = true
 | |
|       draft.embedding_model = embeddingModel
 | |
|       if (!draft.score_threshold)
 | |
|         draft.score_threshold = ANNOTATION_DEFAULT.score_threshold
 | |
|     }))
 | |
|   }
 | |
| 
 | |
|   const setScore = (score: number, embeddingModel?: EmbeddingModelConfig) => {
 | |
|     setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
 | |
|       draft.score_threshold = score
 | |
|       if (embeddingModel)
 | |
|         draft.embedding_model = embeddingModel
 | |
|     }))
 | |
|   }
 | |
| 
 | |
|   const handleDisableAnnotation = async (embeddingModel: EmbeddingModelConfig) => {
 | |
|     if (!annotationConfig.enabled)
 | |
|       return
 | |
| 
 | |
|     await updateAnnotationStatus(appId, AnnotationEnableStatus.disable, embeddingModel)
 | |
|     setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
 | |
|       draft.enabled = false
 | |
|     }))
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     handleEnableAnnotation,
 | |
|     handleDisableAnnotation,
 | |
|     isShowAnnotationConfigInit,
 | |
|     setIsShowAnnotationConfigInit,
 | |
|     isShowAnnotationFullModal,
 | |
|     setIsShowAnnotationFullModal,
 | |
|     setScore,
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default useAnnotationConfig
 | 
