| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 
							- 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
 
 
  |