Objectif: pouvoir debugger la fiabilité des données depuis l'admin. Parser - fix split "and": _CITY_SPLIT ne coupe plus sur " and "/"&" (cassait "Tyne and Wear", "Bosnia and Herzegovina", "Newcastle upon Tyne"). Garde uniquement "/" et "\" (séparateurs canoniques Metal Archives). Traçabilité LLM - migration 011: llm_cache reçoit ma_id + location_raw + country (+ index) pour relier chaque appel Groq au groupe déclencheur - groq_worker: renseigne ces colonnes à l'insertion Admin — lecture par groupe - GET /admin/api/bands/:ma_id renvoie désormais aussi les band_locations (steps, statut, provider, confiance, coords, essais, erreur, query) et les appels LLM (modèle, extraction, tokens, coût, prompt/réponse) - modal band: section "Provenance & géocodage" (crawl MA / géocodage / LLM + champs verrouillés manuels) Admin — stats & debug LLM - GET /admin/api/geocoding: breakdown par provider (avg confiance) + par modèle LLM (dont city=null); nouvelle carte "LLM null" - nouveau GET /admin/api/llm + onglet "LLM": liste filtrable des appels Groq, prompt/réponse dépliables, lien vers le groupe Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
2.1 KiB
HTML
57 lines
2.1 KiB
HTML
<!doctype html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title>Admin — metalfrom.eu</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link href="https://fonts.googleapis.com/css2?family=UnifrakturCook:wght@700&family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="styles.css">
|
|
</head>
|
|
<body>
|
|
|
|
<div id="login-screen" class="login-screen">
|
|
<form id="login-form" class="login-card">
|
|
<div class="brand">Admin</div>
|
|
<p class="login-sub">metalfrom.eu — accès restreint</p>
|
|
<label>Utilisateur
|
|
<input type="text" id="login-username" autocomplete="username" required>
|
|
</label>
|
|
<label>Mot de passe
|
|
<input type="password" id="login-password" autocomplete="current-password" required>
|
|
</label>
|
|
<button type="submit" class="btn btn-primary">Se connecter</button>
|
|
<div id="login-error" class="login-error"></div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="app" class="app hidden">
|
|
<header id="topbar">
|
|
<div class="brand">Admin</div>
|
|
<nav id="nav" class="nav">
|
|
<a href="#/dashboard" data-view="dashboard">Dashboard</a>
|
|
<a href="#/bands" data-view="bands">Bands</a>
|
|
<a href="#/conflicts" data-view="conflicts">Conflits</a>
|
|
<a href="#/queue" data-view="queue">Queue</a>
|
|
<a href="#/runs" data-view="runs">Crawl runs</a>
|
|
<a href="#/monitor" data-view="monitor">Monitor</a>
|
|
<a href="#/logs" data-view="logs">Historique</a>
|
|
<a href="#/geocoding" data-view="geocoding">Géocodage</a>
|
|
<a href="#/llm" data-view="llm">LLM</a>
|
|
<a href="#/jobs" data-view="jobs">Jobs</a>
|
|
<a href="#/checkpoints" data-view="checkpoints">Checkpoints</a>
|
|
<a href="#/audit" data-view="audit">Audit</a>
|
|
</nav>
|
|
<div class="topbar-right">
|
|
<span id="whoami" class="whoami"></span>
|
|
<button id="logout-btn" class="btn btn-mini">Déconnexion</button>
|
|
</div>
|
|
</header>
|
|
|
|
<main id="content" class="content"></main>
|
|
</div>
|
|
|
|
<script src="app.js"></script>
|
|
</body>
|
|
</html>
|