File size: 2,147 Bytes
ad5cef3 fb852fe ad5cef3 96812c9 59a1fe9 6ebf2fd e7ba29d fb852fe 96812c9 fb852fe 96812c9 ad5cef3 96812c9 ad5cef3 e7ba29d ad5cef3 e7ba29d fb852fe 96812c9 fb852fe 96812c9 59a1fe9 6ebf2fd e7ba29d ad5cef3 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 75 76 77 78 79 80 81 |
import React, {
createContext,
useContext,
useEffect,
useState
} from 'react'
import {
ModelInfo,
ModelInfoResponse,
QuantizationType,
WorkerStatus
} from '../types'
interface ModelContextType {
status: WorkerStatus
setStatus: (status: WorkerStatus) => void
progress: number
setProgress: (progress: number) => 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
}
const ModelContext = createContext<ModelContextType | undefined>(undefined)
export function ModelProvider({ children }: { children: React.ReactNode }) {
const [progress, setProgress] = useState<number>(0)
const [status, setStatus] = useState<WorkerStatus>('initiate')
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)
// 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
}}
>
{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
}
|