first commit

This commit is contained in:
Urtzi Alfaro
2025-07-17 13:54:51 +02:00
parent 347ff51bd7
commit 5bb3e93da4
41 changed files with 10084 additions and 94 deletions

View File

@@ -0,0 +1,67 @@
// frontend/dashboard/src/api/hooks/useTraining.ts
/**
* Training-specific hooks
*/
import { useState, useEffect, useRef } from 'react';
import { TrainingJobStatus, TrainingRequest } from '../../types/api';
import { trainingApi } from '../index';
import { useApi, useAsyncAction } from './useApi';
export function useTraining() {
const { data: jobs, loading, error, refetch } = useApi(() => trainingApi.getTrainingJobs());
const { data: models, refetch: refetchModels } = useApi(() => trainingApi.getTrainedModels());
const { execute: startTraining, loading: startingTraining } = useAsyncAction(
trainingApi.startTraining.bind(trainingApi)
);
return {
jobs: jobs || [],
models: models || [],
loading,
error,
startingTraining,
startTraining: async (request: TrainingRequest) => {
const job = await startTraining(request);
await refetch();
return job;
},
refresh: refetch,
refreshModels: refetchModels,
};
}
export function useTrainingProgress(jobId: string | null) {
const [progress, setProgress] = useState<TrainingJobStatus | null>(null);
const [error, setError] = useState<string | null>(null);
const wsRef = useRef<WebSocket | null>(null);
useEffect(() => {
if (!jobId) return;
// Initial status fetch
trainingApi.getTrainingStatus(jobId).then(setProgress).catch(setError);
// Set up WebSocket for real-time updates
wsRef.current = trainingApi.subscribeToTrainingProgress(
jobId,
(updatedProgress) => {
setProgress(updatedProgress);
setError(null);
},
(wsError) => {
setError(wsError.message);
}
);
return () => {
if (wsRef.current) {
wsRef.current.close();
}
};
}, [jobId]);
return { progress, error };
}