Refonte identification des séries : PDF-first en deux étapes

Avant : le LLM devait simultanément grouper les notes ET les matcher
aux titres du site → résultats incohérents, séries perdues si pas de
correspondance sur le site.

Après (pipeline en 4 étapes) :
1. cluster_notes_into_series : LLM groupe les notes du PDF en séries
   canoniques, SANS le catalogue du site
2. scrape_catalog : enrichissement optionnel (+ extraction des dates
   de représentation depuis chaque page événement)
3. match_series_to_catalog : correspondance canonique→site pour
   enrichir le titre et la description (null si pas de match)
4. Génération ICS pour TOUTES les séries PDF, même sans correspondance
   site (répétitions seules incluses)

Autres changements :
- _build_description : inclut les dates du site et l'URL quand dispo
- clear_cache : inclut series_clusters.json et series_site_match.json
- _parse_json_response : helper robuste pour parser les réponses LLM

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sylvain
2026-03-08 16:27:20 +01:00
parent 9ed22fb14a
commit da14137bd9
2 changed files with 218 additions and 101 deletions
+2 -1
View File
@@ -300,7 +300,8 @@ async def cache_status(user: str = Depends(get_current_user)):
async def clear_cache(user: str = Depends(get_current_user)):
cache_dir = DATA_DIR / "cache"
deleted = []
for name in ["website_catalog.json", "series_mapping.json"]:
for name in ["website_catalog.json", "series_mapping.json",
"series_clusters.json", "series_site_match.json"]:
p = cache_dir / name
if p.exists():
p.unlink()