File size: 2,294 Bytes
e7ba29d
6ebf2fd
fb852fe
 
96812c9
 
 
 
 
 
59a1fe9
 
 
 
6ebf2fd
 
e7ba29d
 
 
 
fb852fe
 
96812c9
fb852fe
 
96812c9
 
 
59a1fe9
e7ba29d
6ebf2fd
e7ba29d
 
 
fb852fe
 
 
96812c9
 
fb852fe
 
 
96812c9
 
 
 
 
 
59a1fe9
 
 
 
 
6ebf2fd
 
e7ba29d
 
 
 
96812c9
fb852fe
 
 
96812c9
fb852fe
 
 
96812c9
fb852fe
96812c9
fb852fe
96812c9
fb852fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import React, { createContext, RefObject, useContext, useEffect, useRef, useState } from 'react'
import { ModelInfo, ModelInfoResponse, QuantizationType } from '../types'

interface ModelContextType {
  progress: number
  status: string
  setProgress: (progress: number) => void
  setStatus: (status: string) => void
  modelInfo: ModelInfo
  setModelInfo: (model: ModelInfo) => void
  pipeline: string
  setPipeline: (pipeline: string) => void
  models: ModelInfoResponse[]
  setModels: (models: ModelInfoResponse[]) => void
  selectedQuantization: QuantizationType
  setSelectedQuantization: (quantization: QuantizationType) => void
  activeWorker: Worker | null
  setActiveWorker: (worker: Worker | null) => void
  workerLoaded: boolean
  setWorkerLoaded: (workerLoaded: boolean) => void
}

const ModelContext = createContext<ModelContextType | undefined>(undefined)

export function ModelProvider({ children }: { children: React.ReactNode }) {
  const [progress, setProgress] = useState<number>(0)
  const [status, setStatus] = useState<string>('idle')
  const [modelInfo, setModelInfo] = useState<ModelInfo>({} as ModelInfo)
  const [models, setModels] = useState<ModelInfoResponse[]>([] as ModelInfoResponse[])
  const [pipeline, setPipeline] = useState<string>('text-classification')
  const [selectedQuantization, setSelectedQuantization] = useState<QuantizationType>('int8')
  const [activeWorker, setActiveWorker] = useState<Worker | null>(null)
  const [workerLoaded, setWorkerLoaded] = useState<boolean>(false)
  

  // set progress to 0 when model is changed
  useEffect(() => {
    setProgress(0)
  }, [modelInfo.name])

  return (
    <ModelContext.Provider
      value={{
        progress,
        setProgress,
        status,
        setStatus,
        modelInfo,
        setModelInfo,
        models,
        setModels,
        pipeline,
        setPipeline,
        selectedQuantization,
        setSelectedQuantization,
        activeWorker,
        setActiveWorker,
        workerLoaded,
        setWorkerLoaded
      }}
    >
      {children}
    </ModelContext.Provider>
  )
}

export function useModel() {
  const context = useContext(ModelContext)
  if (context === undefined) {
    throw new Error('useModel must be used within a ModelProvider')
  }
  return context
}