Feature description
Implémenter le job NestJS one-shot qui lit la vue v_courses_for_embedding, construit le text blob et le payload pour chaque cours, génère le vecteur via bge-m3 (Transformers.js), et upsert dans la collection Qdrant courses_bge_m3. Le job est déclenché après le sync des jobs existants.
Proposed solution
Construction du text blob. Sérialisation en français naturel depuis les colonnes de la vue. Mapping de type appliqué ici (pas dans la vue) :
CONCE → "cours optionnel" | TRONC → "tronc commun" | PROFI → "cours de profil"
Format cible :
LOG635 — Intelligence artificielle. [description]. Préalables : LOG320.
Type : cours optionnel. Programmes : génie logiciel. Cycle : 1.
Embedding. Appel à bge-m3 quantisé via Transformers.js avec input_type=passage. Exécuté dans un worker_threads Worker pour ne pas bloquer l'event loop NestJS. Dimension de sortie : 1024.
Payload. Construit depuis les mêmes colonnes de la vue, clés en anglais, types strictement typés (pas de null dans les tableaux).
Upsert Qdrant. upsertPoints avec id=course_id, vector, payload. Opération par batch de 50 cours (ou plus, à voir) pour limiter la pression mémoire.
Gestion d'erreurs. Échec sur un cours → log warning + skip, le job continue. Échec Qdrant persistant → log error, wait, retry, if its not a transient error, log error and exit.
Definition of Done
Feature description
Implémenter le job NestJS one-shot qui lit la vue
v_courses_for_embedding, construit le text blob et le payload pour chaque cours, génère le vecteur via bge-m3 (Transformers.js), et upsert dans la collection Qdrantcourses_bge_m3. Le job est déclenché après le sync des jobs existants.Proposed solution
Construction du text blob. Sérialisation en français naturel depuis les colonnes de la vue. Mapping de type appliqué ici (pas dans la vue) :
Format cible :
Embedding. Appel à bge-m3 quantisé via Transformers.js avec
input_type=passage. Exécuté dans unworker_threadsWorker pour ne pas bloquer l'event loop NestJS. Dimension de sortie : 1024.Payload. Construit depuis les mêmes colonnes de la vue, clés en anglais, types strictement typés (pas de
nulldans les tableaux).Upsert Qdrant.
upsertPointsavecid=course_id,vector,payload. Opération par batch de 50 cours (ou plus, à voir) pour limiter la pression mémoire.Gestion d'erreurs. Échec sur un cours → log warning + skip, le job continue. Échec Qdrant persistant → log error, wait, retry, if its not a transient error, log error and exit.
Definition of Done
yarn run job:indexou équivalent)courses_bge_m3créée avec la bonne dimension (1024) si elle n'existe pasgetPoints)N cours indexés en X secondes, M erreurs)