File size: 2,674 Bytes
0c10cf2 ad5cef3 fb852fe ad5cef3 96812c9 673d22a 59a1fe9 6ebf2fd e7ba29d 4d810fa 63dbafb fb852fe 96812c9 fb852fe 96812c9 ad5cef3 673d22a ad5cef3 4a70176 ad5cef3 e7ba29d 4d810fa 63dbafb 4d810fa fb852fe 96812c9 673d22a fb852fe 96812c9 59a1fe9 6ebf2fd e7ba29d 4d810fa 63dbafb 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 82 83 84 85 86 87 88 89 90 91 |
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 | null
setModelInfo: (model: ModelInfo | null) => 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
isFetching: boolean
setIsFetching: (isFetching: boolean) => void
hasBeenLoaded: boolean
setHasBeenLoaded: (hasBeenLoaded: boolean) => void
errorText: string
setErrorText: (errorText: string) => 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 | null>(null)
const [models, setModels] = useState<ModelInfoResponse[]>(
[] as ModelInfoResponse[]
)
const [pipeline, setPipeline] = useState<string>('feature-extraction') //text-generation
const [selectedQuantization, setSelectedQuantization] =
useState<QuantizationType>('int8')
const [activeWorker, setActiveWorker] = useState<Worker | null>(null)
const [isFetching, setIsFetching] = useState(false)
const [hasBeenLoaded, setHasBeenLoaded] = useState(false)
const [errorText, setErrorText] = useState('')
// 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,
isFetching,
setIsFetching,
hasBeenLoaded,
setHasBeenLoaded,
errorText,
setErrorText
}}
>
{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
}
|