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(undefined) export function ModelProvider({ children }: { children: React.ReactNode }) { const [progress, setProgress] = useState(0) const [status, setStatus] = useState('idle') const [modelInfo, setModelInfo] = useState({} as ModelInfo) const [models, setModels] = useState([] as ModelInfoResponse[]) const [pipeline, setPipeline] = useState('text-classification') const [selectedQuantization, setSelectedQuantization] = useState('int8') const [activeWorker, setActiveWorker] = useState(null) const [workerLoaded, setWorkerLoaded] = useState(false) // set progress to 0 when model is changed useEffect(() => { setProgress(0) }, [modelInfo.name]) return ( {children} ) } export function useModel() { const context = useContext(ModelContext) if (context === undefined) { throw new Error('useModel must be used within a ModelProvider') } return context }