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