# Documentation mgrep

Bienvenue dans la documentation complète de mgrep ! 📚

# Ordre de lecture recommandé

Si vous découvrez mgrep, lisez dans cet ordre :

  1. Embeddings - Comprendre comment le code est converti en vecteurs
  2. Modèles - Différences entre CodeBERT, Jina, MPNet, etc.
  3. Architecture - Vue d'ensemble du système
  4. Compromis - Trade-offs précision vs performance
  5. Cas d'usage - Configurations pratiques selon vos besoins

# Vue d'ensemble des documents

# 1-embeddings.md

Pour qui : Tout le monde Temps de lecture : 10 min Contenu :

  • Qu'est-ce qu'un embedding ?
  • Comment ça marche dans mgrep ?
  • Dimensions (384 vs 768)
  • Le problème du "mean pooling"

Ă€ retenir :

Un embedding transforme du code en vecteur de nombres. La similarité entre vecteurs = similarité sémantique du code.


# 2-modeles.md

Pour qui : Utilisateurs qui veulent optimiser la qualité Temps de lecture : 15 min Contenu :

  • 3 types de modèles (BERT+pooling, natifs gĂ©nĂ©riques, spĂ©cialisĂ©s code)
  • Comparaison dĂ©taillĂ©e CodeBERT vs Jina vs MPNet
  • Pourquoi Jina Code est recommandĂ©
  • Tests et rĂ©sultats attendus

Ă€ retenir :

Jina Code (jinaai/jina-embeddings-v2-base-code) est le meilleur modèle pour mgrep. CodeBERT avec mean pooling est sous-optimal.


# 3-compromis.md

Pour qui : Utilisateurs avancés, optimisation Temps de lecture : 20 min Contenu :

  • Taille des chunks (10 vs 20 vs 50 lignes)
  • Overlap : avantages et coĂ»ts
  • Modèles : vitesse vs qualitĂ©
  • Configurations selon taille du projet

Ă€ retenir :

Chaque choix a un trade-off. La config actuelle (20 lignes, Jina Code, pas d'overlap) est un bon équilibre pour la plupart des cas.


# 4-architecture.md

Pour qui : Développeurs qui veulent contribuer Temps de lecture : 25 min Contenu :

  • Flow complet indexation → recherche
  • RĂ´le de chaque composant (Tree-sitter, Elasticsearch, etc.)
  • SchĂ©mas et exemples de code
  • Points d'optimisation possibles

Ă€ retenir :

mgrep = Tree-sitter (parse) + Chunking (découpe) + Sentence-transformers (embeddings) + Elasticsearch (index/search)


# 5-cas-usage.md

Pour qui : Tous les utilisateurs Temps de lecture : 15 min Contenu :

  • 7 cas d'usage concrets (exploration, debug, refactoring, etc.)
  • Configuration recommandĂ©e pour chaque cas
  • Workflows pratiques
  • Scripts d'exemple

Ă€ retenir :

Adapter la configuration selon votre besoin : debug = rapide, refactoring = overlap 50%, exploration = k=10


# Quick Start

# Installation

# 1. Cloner et installer
git clone <repo>
cd mgrep
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 2. Configurer
cp .env.example .env
# Éditer .env avec vos credentials Elasticsearch

# 3. Créer l'index
python recreate_index.py

# 4. Indexer votre code
python watcher.py /path/to/your/code

# Première recherche

# Recherche simple
python sgrep.py "user authentication"

# Avec affichage du code
python sgrep.py "database connection" --show-code

# Plus de résultats
python sgrep.py "error handling" -k 10

# FAQ

# Quel modèle utiliser ?

  • Meilleure qualitĂ© : jinaai/jina-embeddings-v2-base-code
  • Compromis : all-mpnet-base-v2
  • Le plus rapide : all-MiniLM-L6-v2

Configuration dans .env :

EMBEDDING_MODEL=jinaai/jina-embeddings-v2-base-code

# Chunks de quelle taille ?

  • Très prĂ©cis : 15 lignes
  • ÉquilibrĂ© (recommandĂ©) : 20 lignes
  • Rapide : 30-50 lignes

Modifier dans watcher.py :

MAX_CHUNK_LINES = 20  # Ligne 44

# Faut-il de l'overlap ?

OUI si :

  • Refactoring (besoin de tout trouver)
  • Projet complexe avec fonctions longues

NON si :

  • Projet petit/moyen
  • Contraintes de stockage
  • Première utilisation (tester sans d'abord)

# Pourquoi le message "mean pooling" ?

C'est un avertissement que CodeBERT n'est pas optimal. Utilisez Jina Code ou MPNet Ă  la place.

Voir : 2-modeles.md pour l'explication complète.

# Les résultats ne sont pas pertinents ?

Checklist :

  1. Modèle utilisé : Jina Code ou MPNet ? (pas CodeBERT)
  2. Chunks : 20 lignes max ?
  3. Index récent : python watcher.py a tourné ?
  4. Requête : assez spécifique ? ("auth" vs "user authentication")

Voir : 5-cas-usage.md pour des exemples de requĂŞtes efficaces.

# Fichiers de référence

En plus de cette documentation :

# Contribuer

Pour améliorer cette documentation :

  1. Les docs sont en Markdown dans docs/
  2. Chaque fichier = 1 sujet
  3. Garder un ton pédagogique avec exemples concrets
  4. Ajouter des schémas ASCII quand utile

# Support

  • 📖 Lire cette documentation
  • 🐛 Issues : problèmes techniques
  • 💡 Discussions : questions, suggestions

Bonne lecture ! 🚀