markdown_parser/prompt.md
Bruno Charest 18ee8a1cfd feat: Add report generation module for tracking metadata changes
- Implemented `report.nim` to create structured reports on metadata modifications.
- Added functionality to merge reports and convert them to formatted strings.

docs: Create prompt documentation for Markdown parser project

- Added `prompt.md` detailing the requirements and functionalities for the Markdown parser.
- Included specifications, usage examples, and testing guidelines.

docs: Generate code review report for Markdown parser

- Created `rapport_revue_code.md` outlining security vulnerabilities, code quality issues, and suggested improvements.
- Provided a detailed analysis of the codebase with actionable recommendations.

test: Add test data for Markdown parser

- Included various Markdown files and a JPG image in `test_data` to simulate different scenarios.
- Ensured that the parser can handle both valid and invalid metadata.

chore: Add version management file

- Created `version.nim` for automatic versioning of the Markdown parser.
- Established constants for major, minor, patch, and build versions.
2026-04-19 12:56:55 -04:00

6.1 KiB

Prompt pour Windsurf : Parser de structure de fichiers Markdown en Nim

Nom

nom du fichier : markdown_parser.exe

Contexte

J'ai besoin d'un programme en Nim qui analyse une structure de fichiers Markdown et crée une nouvelle structure avec ces mêmes fichiers en s'assurant que chaque fichier contient les métadonnées requises.

Fonctionnalités requises

Le programme doit :

  1. Prendre en paramètre soit :

    • Un chemin vers un répertoire contenant des fichiers Markdown
    • Une liste de fichiers Markdown spécifiés individuellement
    • avoir l'option verbose pour afficher les informations sur l'analyse
  2. Analyser tous les fichiers Markdown trouvés (.md) d'une structure de répertoire et sous-répertoires

  3. Pour chaque fichier, vérifier la présence des métadonnées suivantes en format YAML en début de fichier :

    ---
    Titre: [titre du document]
    Description: [description du document]
    tags:
      - tag1
      - tag2
      - tag3
      - ...
    Date de création: YYYY-MM-DD
    Heure de création: HH:MM:SS
    Date de modification: YYYY-MM-DD
    Heure de modification: HH:MM:SS
    Author: [nom de l'auteur]
    URL: [url associée]
    Lang: [langue du document]
    Catégorie: [catégorie du document]
    ---
    
  4. Si les métadonnées sont absentes ou incomplètes :

    • Extraire le titre à l'aide d'un api IA
    • Générer une description basée sur le contenu à l'aide d'un api IA
    • Proposer des tags basés sur l'analyse du contenu à l'aide d'un api IA
    • Utiliser la date et heure de création du fichier comme date de création si absente
    • Changer la date et heure de modification pour la date et heure actuelle
    • Utiliser une valeur par défaut pour l'auteur si absent
    • Laisser l'URL vide si absente
    • Déduire la langue si possible, sinon utiliser une valeur par défaut
    • Proposer une catégorie basée sur le contenu ou l'emplacement du fichier
  5. Intégrer l'utilisation d'une IA via LM Studio pour améliorer la qualité des métadonnées générées :

    • Utiliser l'API LM Studio disponible à l'adresse http://192.168.20.163:2222
    • Envoyer le contenu du fichier Markdown à l'IA pour analyse
    • Demander à l'IA de générer :
      • Un titre pertinent basé sur le contenu si non présent
      • Une description complète et informative
      • Entre 5 et 10 tags pertinents qui capturent les sujets abordés dans le document
    • Intégrer une gestion des erreurs en cas d'indisponibilité de l'API
    • Exemple d'appel à l'API :
      # Exemple d'implémentation de l'appel à l'API LM Studio
      proc analyzeWithAI(content: string): tuple[title: string, description: string, tags: seq[string]] =
        # Construction de la requête pour l'API LM Studio
        let apiUrl = "http://192.168.20.163:2222/v1/chat/completions"
        let prompt = """Analyze the following Markdown content and provide:
        1. A concise title (max 10 words)
        2. A comprehensive description (max 50 words)
        3. Between 5-10 relevant tags
      
        Format your response in YAML:
        ---
        title: [your generated title]
        description: [your generated description]
        tags:
          - [tag1]
          - [tag2]
          ...
        ---
      
        Here's the content to analyze:
      
        """ & content
      
        let requestBody = %*{
          "model": "qwen2.5-7b-instruct-1m",
          "messages": [
            {"role": "system", "content": "You are an expert at analyzing documents and generating metadata."},
            {"role": "user", "content": prompt}
          ],
          "temperature": 0.3,
          "max_tokens": -1,
          "stream": false
        }
      
        # ... code pour envoyer la requête et parser la réponse ...
      
  6. Recréer une structure de répertoires identique dans un dossier cible, avec tous les fichiers Markdown normalisés incluant les métadonnées complètes

  7. Fournir un rapport sur les modifications effectuées

Spécifications techniques

  • Le programme doit être écrit en Nim
  • Il doit gérer correctement les chemins de fichiers sous différents systèmes d'exploitation
  • Il doit pouvoir traiter de grandes quantités de fichiers efficacement
  • Il doit pouvoir traiter des répertoires avec des sous-répertoires récursivement
  • Il doit gérer les erreurs gracieusement (fichiers inaccessibles, problèmes de permissions, etc.)
  • Il doit proposer une interface en ligne de commande simple avec des options claires
  • Il doit être modulaire et facilement extensible
  • Il doit y avoir un option verbose pour afficher les informations sur l'analyse
  • Il doit y avoir un option help pour afficher l'aide
  • Il doit y avoir un option version pour afficher la version
  • suite au traitement il doit y être afficher un rapport sur les modifications effectuées

Exemple d'utilisation

./markdown_parser --source=/chemin/vers/dossier/source --target=/chemin/vers/dossier/cible

ou

./markdown_parser --files=fichier1.md,fichier2.md,fichier3.md --target=/chemin/vers/dossier/cible

ou

./markdown_parser -s=/chemin/vers/dossier/source -t=/chemin/vers/dossier/cible

Résultat attendu

Une structure de dossiers dans le répertoire cible, contenant tous les fichiers Markdown de la source, avec des métadonnées complètes et standardisées au format YAML en en-tête de chaque fichier.

Tests à effectuer

  • Faire la création d'un dossier et plusieurs sous-dossiers de test.
  • Faire la création d'un fichier Markdown de test.
  • Faire la création d'un fichier autre que Markdown de test.
  • Faire la création d'un fichier Markdown avec des métadonnées incomplètes de test.
  • Faire la création d'un fichier Markdown avec des métadonnées complètes de test.
  • Faire la création d'un fichier Markdown avec des métadonnées incomplètes et des métadonnées complètes de test.
  • Faire la création d'un fichier Markdown avec des métadonnées incomplètes et des métadonnées complètes de test.

Contraintes

  • Le contenu original des fichiers (hors métadonnées) ne doit pas être modifié
  • Les fichiers autres que Markdown doivent être ignorés
  • Le programme doit être efficace en termes de mémoire et de CPU