Refactoring AI candidate analysis: UI improvements, data normalization, provider management and real-time score clamping

This commit is contained in:
jeremy bayse
2026-04-21 06:41:37 +02:00
parent abfe01190b
commit 2216de1a02
19 changed files with 1793 additions and 1402 deletions

View File

@@ -23,8 +23,8 @@ class AIAnalysisController extends Controller
}
// Restriction: Une analyse tous les 7 jours maximum par candidat
// Le super_admin peut outrepasser cette restriction via le paramètre 'force'
$shouldCheckRestriction = !($request->force && auth()->user()->isSuperAdmin());
// Tout admin peut outrepasser cette restriction s'il utilise l'option 'force'
$shouldCheckRestriction = !$request->input('force', false);
if ($shouldCheckRestriction && $candidate->ai_analysis && isset($candidate->ai_analysis['analyzed_at'])) {
$lastAnalysis = Carbon::parse($candidate->ai_analysis['analyzed_at']);

View File

@@ -149,7 +149,7 @@ class AttemptController extends Controller
$this->authorizeAdmin();
$request->validate([
'score' => 'required|numeric|min:0'
'score' => 'required|numeric|min:0|max:' . $answer->question->points
]);
$answer->update(['score' => $request->score]);

View File

@@ -103,12 +103,12 @@ class CandidateController extends Controller
'jobPositions' => \App\Models\JobPosition::all(),
'ai_config' => [
'default' => env('AI_DEFAULT_PROVIDER', 'ollama'),
'enabled_providers' => array_filter([
'ollama' => true, // Toujours dispo car local ou simulé
'providers' => array_keys(array_filter([
'ollama' => true,
'openai' => !empty(env('OPENAI_API_KEY')),
'anthropic' => !empty(env('ANTHROPIC_API_KEY')),
'gemini' => !empty(env('GEMINI_API_KEY')),
], function($v) { return $v; })
])),
]
];