Datavision / frontend /src /store /cvStore.ts
DataVision CI/CD Bot
release: clean production build for HuggingFace Space
09801ca
Raw
History Blame Contribute Delete
4.17 kB
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import {
CVProject,
CVDataset,
CVTrainingJob,
CVExperiment,
CVPrediction,
TrainingMode,
CVModel
} from '../types/cv';
interface CVState {
activeProject: CVProject | null;
datasets: CVDataset[];
activeDatasetId: string | null;
trainingJobs: CVTrainingJob[];
activeJobId: string | null;
experiments: CVExperiment[];
models: CVModel[];
predictions: CVPrediction[];
activeTab: 'overview' | 'data' | 'vision_tasks' | 'training' | 'live_training' | 'results' | 'prediction' | 'experiments' | 'deploy' | 'hub' | 'model_hub';
trainingMode: TrainingMode;
cvCache: Record<string, any>;
// Actions
setActiveProject: (project: CVProject | null) => void;
setDatasets: (datasets: CVDataset[]) => void;
addDataset: (dataset: CVDataset) => void;
deleteDataset: (id: string) => Promise<void>;
setActiveDatasetId: (id: string | null) => void;
setTrainingJobs: (jobs: CVTrainingJob[]) => void;
addTrainingJob: (job: CVTrainingJob) => void;
updateTrainingJob: (id: string, updates: Partial<CVTrainingJob>) => void;
setActiveJobId: (id: string | null) => void;
setExperiments: (experiments: CVExperiment[]) => void;
setModels: (models: CVModel[]) => void;
setPredictions: (predictions: CVPrediction[]) => void;
setActiveTab: (tab: CVState['activeTab']) => void;
setTrainingMode: (mode: TrainingMode) => void;
setCvCache: (key: string, data: any) => void;
clearCvCache: (key?: string) => void;
}
export const useCVStore = create<CVState>()(
persist(
(set) => ({
activeProject: null,
datasets: [],
activeDatasetId: null,
trainingJobs: [],
activeJobId: null,
experiments: [],
models: [],
predictions: [],
activeTab: 'overview',
trainingMode: 'fast',
cvCache: {},
setActiveProject: (project) => set({ activeProject: project }),
setDatasets: (datasets) => set({ datasets }),
addDataset: (dataset) => set((state) => ({
datasets: [dataset, ...state.datasets],
activeDatasetId: dataset.id
})),
deleteDataset: async (id: string) => {
try {
const response = await fetch(`/api/v1/cv/datasets/${id}`, { method: 'DELETE' });
if (response.ok) {
set((state) => ({
datasets: state.datasets.filter(d => d.id !== id),
activeDatasetId: state.activeDatasetId === id ? null : state.activeDatasetId
}));
}
} catch (error) {
console.error("Failed to delete dataset:", error);
}
},
setActiveDatasetId: (id) => set({ activeDatasetId: id }),
setTrainingJobs: (jobs) => set({ trainingJobs: jobs }),
addTrainingJob: (job) => set((state) => ({ trainingJobs: [...state.trainingJobs, job] })),
updateTrainingJob: (id, updates) => set((state) => ({
trainingJobs: state.trainingJobs.map(job =>
job.id === id ? { ...job, ...updates } : job
)
})),
setActiveJobId: (id) => set({ activeJobId: id }),
setExperiments: (experiments) => set({ experiments }),
setModels: (models) => set({ models }),
setPredictions: (predictions) => set({ predictions }),
setActiveTab: (tab) => set({ activeTab: tab }),
setTrainingMode: (mode) => set({ trainingMode: mode }),
setCvCache: (key, data) => set((state) => ({
cvCache: { ...state.cvCache, [key]: data }
})),
clearCvCache: (key) => set((state) => {
if (key) {
const newCache = { ...state.cvCache };
delete newCache[key];
return { cvCache: newCache };
}
return { cvCache: {} };
}),
}),
{
name: 'datavision-cv-store',
partialize: (state) => ({
activeProject: state.activeProject,
activeTab: state.activeTab,
trainingMode: state.trainingMode,
cvCache: state.cvCache,
activeDatasetId: state.activeDatasetId,
activeJobId: state.activeJobId
}), // Persist specific fields
}
)
);