Markdown Processor

Le MarkdownProcessor est une étape d’optimisation cruciale dans le pipeline. Son rôle est de filtrer le Markdown brut pour n’en conserver que les parties sémantiquement liées aux horaires d’ouverture, afin de réduire la taille et le coût des requêtes envoyées au LLM.

Fonctionnalités

  • Filtrage Sémantique par Embeddings : Le processeur utilise des modèles d’embeddings (locaux ou via une API comme Mistral/OpenAI) pour convertir des phrases de référence (ex: « nos horaires ») et les segments du texte en vecteurs numériques.

  • Calcul de Similarité : Il calcule la similarité cosinus entre les vecteurs de référence et ceux du texte pour identifier les segments les plus pertinents.

  • Sélection de Contenu : Les segments de texte dont la similarité dépasse un seuil configurable sont conservés, ainsi que les segments adjacents (fenêtre de contexte) pour préserver le sens.

  • Mise à Jour de la Base de Données : Le contenu filtré et réduit est sauvegardé dans la colonne markdown_filtre de la base de données via le DatabaseProcessor.

  • Suivi des Émissions CO2 : Il enregistre et accumule les émissions de CO2 estimées lors des appels aux APIs d’embeddings.

Usage

Ce processeur s’exécute après la récupération des URLs. Il prend en entrée le markdown_nettoye, le filtre, et produit le markdown_filtre qui sera utilisé par le LLMProcessor suivant.

Modules

Processeur pour filtrer le contenu markdown et extraire les sections pertinentes aux horaires. Utilise des embeddings sémantiques pour identifier les sections les plus pertinentes.

class src.smart_watch.processing.markdown_processor.MarkdownProcessor(config: ConfigManager, logger)[source]

Bases : object

Processeur pour filtrer le contenu markdown et extraire les sections pertinentes aux horaires.

__init__(config: ConfigManager, logger)[source]
_init_embedding_client()[source]

Initialise le client approprié pour les embeddings selon la configuration.

_get_embeddings(texts: List[str]) Tuple[ndarray, float][source]

Obtient les embeddings pour une liste de textes.

_calculate_reference_embeddings()[source]

Calcule les embeddings pour les phrases de référence.

_get_pending_markdown_filtering(db_manager, execution_id: int) List[Tuple][source]

Récupère les enregistrements nécessitant un filtrage de markdown.

_extract_result_id(result: ResultatsExtraction) int | None[source]

Extrait l’ID d’un résultat SQLAlchemy de manière sécurisée.

Paramètres:

result – Objet ResultatsExtraction

Renvoie:

ID en tant qu’entier ou None si non trouvé

process_markdown_filtering(db_processor: DatabaseProcessor, execution_id: int)[source]

Filtre le markdown nettoyé par embeddings sémantiques.

Paramètres:
  • db_processor (DatabaseProcessor) – Processeur de base de données

  • execution_id (int) – ID de l’exécution

filter_markdown(markdown_content: str) Tuple[str, float][source]

Filtre le contenu markdown en gardant seulement les parties pertinentes pour les horaires.

Paramètres:

markdown_content (str) – Contenu markdown à filtrer

Renvoie:

(contenu filtré, émissions CO2 du processus)

Type renvoyé:

Tuple[str, float]

_filter_single_markdown(markdown_content: str) Tuple[str, float][source]

Filtre un contenu markdown et retourne le contenu filtré et les émissions CO2.

_split_into_chunks(text: str, chunk_size: int, chunk_overlap: int) List[str][source]

Découpe le texte en segments selon la ponctuation et les retours à la ligne.