Files
wevads-platform/scripts/api_deepseek-training.php
2026-02-26 04:53:11 +01:00

194 lines
6.9 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$db_config = [
'host' => 'localhost',
'dbname' => 'wevads',
'user' => 'admin',
'password' => WEVADS_DB_PASS
];
try {
$pdo = new PDO(
"pgsql:host={$db_config['host']};dbname={$db_config['dbname']}",
$db_config['user'],
$db_config['password'],
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$pdo->exec("SET search_path TO admin, public;");
$action = $_GET['action'] ?? 'status';
switch ($action) {
case 'start':
$modelId = $_GET['model_id'] ?? null;
$datasetId = $_GET['dataset_id'] ?? null;
if (!$modelId || !$datasetId) {
echo json_encode(['status' => 'error', 'message' => 'model_id et dataset_id requis']);
break;
}
// Créer un job d'entraînement
$stmt = $pdo->prepare("
INSERT INTO admin.deepseek_training_jobs
(model_id, status, training_start, total_epochs)
VALUES (:model_id, 'running', NOW(), :epochs)
RETURNING id
");
$stmt->execute([
':model_id' => $modelId,
':epochs' => $_GET['epochs'] ?? 100
]);
$jobId = $stmt->fetchColumn();
// Simulation d'entraînement (en réalité, appeler un script Python)
echo json_encode([
'status' => 'success',
'message' => 'Job d\'entraînement démarré',
'job_id' => $jobId,
'model_id' => $modelId,
'dataset_id' => $datasetId,
'estimated_time' => '15-30 minutes',
'progress_url' => '/api/deepseek-training.php?action=progress&job_id=' . $jobId
]);
break;
case 'progress':
$jobId = $_GET['job_id'] ?? null;
if (!$jobId) {
echo json_encode(['status' => 'error', 'message' => 'job_id requis']);
break;
}
$stmt = $pdo->prepare("SELECT * FROM admin.deepseek_training_jobs WHERE id = :id");
$stmt->execute([':id' => $jobId]);
$job = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$job) {
echo json_encode(['status' => 'error', 'message' => 'Job non trouvé']);
break;
}
// Simuler la progression
$progress = 0;
if ($job['status'] === 'running') {
$progress = min(100, ($job['epochs_completed'] / ($job['total_epochs'] ?: 100)) * 100);
$progress = round($progress + rand(1, 5)); // Simulation
// Mettre à jour la progression
$pdo->prepare("
UPDATE admin.deepseek_training_jobs
SET epochs_completed = :epochs, loss_value = :loss
WHERE id = :id
")->execute([
':epochs' => min($job['total_epochs'], $job['epochs_completed'] + 5),
':loss' => max(0.001, $job['loss_value'] - rand(0.001, 0.01)),
':id' => $jobId
]);
}
echo json_encode([
'status' => 'success',
'job' => $job,
'progress' => $progress . '%',
'estimated_completion' => $progress >= 100 ? 'Terminé' : '10-15 minutes',
'metrics' => [
'loss' => $job['loss_value'] ?? 0.1234,
'accuracy' => $job['accuracy_value'] ?? null
]
]);
break;
case 'jobs':
$status = $_GET['status'] ?? 'all';
$query = "SELECT * FROM admin.deepseek_training_jobs";
$params = [];
if ($status !== 'all') {
$query .= " WHERE status = :status";
$params[':status'] = $status;
}
$query .= " ORDER BY created_at DESC LIMIT 50";
$stmt = $pdo->prepare($query);
$stmt->execute($params);
$jobs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Statistiques des jobs
$stats = $pdo->query("
SELECT
status,
COUNT(*) as count,
ROUND(AVG(EXTRACT(EPOCH FROM (training_end - training_start))), 2) as avg_duration_seconds
FROM admin.deepseek_training_jobs
GROUP BY status
")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode([
'status' => 'success',
'jobs' => $jobs,
'statistics' => $stats,
'total_jobs' => count($jobs)
]);
break;
case 'hyperparams':
$modelId = $_GET['model_id'] ?? null;
if ($modelId) {
$stmt = $pdo->prepare("SELECT * FROM admin.deepseek_hyperparams WHERE model_id = :model_id");
$stmt->execute([':model_id' => $modelId]);
$params = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
$params = $pdo->query("SELECT * FROM admin.deepseek_hyperparams ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode([
'status' => 'success',
'hyperparameters' => $params,
'defaults' => [
'learning_rate' => 0.001,
'batch_size' => 32,
'epochs' => 100,
'optimizer' => 'adam'
]
]);
break;
default:
echo json_encode([
'status' => 'error',
'message' => 'Action non reconnue',
'endpoints' => [
'GET ?action=jobs' => 'Liste des jobs d\'entraînement',
'GET ?action=start&model_id=X&dataset_id=Y' => 'Démarrer un entraînement',
'GET ?action=progress&job_id=X' => 'Progression d\'un job',
'GET ?action=hyperparams&model_id=X' => 'Hyperparamètres d\'un modèle'
]
]);
}
} catch (PDOException $e) {
echo json_encode([
'status' => 'error',
'message' => 'Erreur base de données: ' . $e->getMessage(),
'fallback' => [
'status' => 'training_simulation',
'jobs' => [
['id' => 1, 'model_id' => 1, 'status' => 'running', 'progress' => '65%'],
['id' => 2, 'model_id' => 2, 'status' => 'completed', 'accuracy' => '98.7%']
]
]
]);
}
?>