- 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.
151 lines
6.1 KiB
Markdown
151 lines
6.1 KiB
Markdown
# 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 :
|
|
```yaml
|
|
---
|
|
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 :
|
|
```nim
|
|
# 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
|