feat: add ui functions to interact with RAG#9
Conversation
Kaiohz
left a comment
There was a problem hiding this comment.
🔍 Code Review - PR #9
📊 Score: 8/10
✅ Points forts
Architecture & Structure
- Architecture hexagonale respectée - Séparation claire domain/application/infrastructure
- Types TypeScript solides - Entities bien définies avec mapping snake_case ↔ camelCase
- Tests unitaires complets - ~20 fichiers de tests couvrant composants, hooks, et API
Code Quality
- Accessibilité - Bon usage des aria-labels, aria-pressed, aria-selected
- React Query patterns - Hooks bien structurés avec mutation, isPending, error handling
- Consistance UI - Design cohérent avec le reste du projet (Material Symbols, Tailwind)
Fonctionnalités
- Support dual LightRAG/Classical pipelines
- Options avancées de requête (mode, topK, threshold, LLM judge)
- Indexation fichier/dossier avec feedback utilisateur
⚠️ Points à améliorer
1. Duplication de code - Menu Index
IndexActionMenu existe mais n'est pas réutilisé. Les menus sont dupliqués dans FileRow.tsx et FolderRow.tsx.
Suggestion:
{hasIndexOptions && (
<IndexActionMenu
onIndexLightRAG={onIndexLightRAG}
onIndexClassical={onIndexClassical}
/>
)}2. Hardcoded values dans RagPage.tsx
chunkSize: 1000,
chunkOverlap: 200,Ces valeurs devraient être configurables via l'UI ou au moins définies comme constantes.
3. Props drilling excessif
onFileRead, onFileIndexLightRAG, etc. passés à travers FileList → FileRow/FolderRow
Suggestion: Considérer un context RAG ou un custom hook pour gérer ces actions.
4. Gestion d'erreur visuelle limitée
- Seuls des toasts sont affichés en cas d'erreur
- Pas d'indication visuelle inline sur les rows/folders
5. package-lock.json non filtré
- 7303 additions dans package-lock.json
📝 Suggestions mineures
- FileContentPanel.tsx - Pas de limite de hauteur sur le contenu
- WorkspaceSelector.tsx - Effet de cleanup correct
- QueryResults.tsx - Copie clipboard sans fallback
🎯 Recommandations
| Priorité | Action | Impact |
|---|---|---|
| 🔴 Haute | Refactor: utiliser IndexActionMenu | Maintenance |
| 🟡 Moyenne | Config: paramétrer chunkSize/Overlap | Flexibilité |
| 🟢 Basse | UX: ajouter loading/error par fichier | UX |
✅ Verdict
PR solide avec une architecture bien pensée et une couverture de tests satisfaisante. Les points à améliorer sont principalement de l'ordre de la maintenabilité et de l'UX.
Recommandation: Merge avec les améliorations suggérées comme follow-up.
🤖 Review par SoluBot
| size, | ||
| lastModified, | ||
| onRead, | ||
| onIndexLightRAG, |
There was a problem hiding this comment.
Le menu d'indexation est dupliqué ici alors que IndexActionMenu.tsx existe. Considérer la réutilisation du composant.
| type="button" | ||
| tabIndex={0} | ||
| onClick={onClick} | ||
| aria-label={name} |
There was a problem hiding this comment.
Même duplication du menu d'indexation. IndexActionMenu devrait être utilisé ici aussi.
|
|
||
| const handleFolderIndexLightRAG = (prefix: string) => { | ||
| const dir = workingDir || prefix; | ||
| if (!dir) return; |
There was a problem hiding this comment.
Valeurs hardcoded chunkSize: 1000, chunkOverlap: 200. Devraient être configurables ou constantes.
Kaiohz
left a comment
There was a problem hiding this comment.
✅ Review mise à jour - Corrections appliquées
Je constate que les points soulevés dans la review précédente ont été corrigés :
Corrections validées
✅ IndexActionMenu réutilisé - FileRow.tsx et FolderRow.tsx importent et utilisent maintenant correctement IndexActionMenu
✅ Constantes définies - DEFAULT_CHUNK_SIZE et DEFAULT_CHUNK_OVERLAP sont maintenant des constantes au lieu de valeurs hardcoded
📊 Score final : 8.5/10
✅ Points forts
Architecture & Structure
- Architecture hexagonale respectée (domain/application/infrastructure)
- Types TypeScript solides avec mapping snake_case ↔ camelCase
- Ports bien définis (
IRagIndexPort,IRagQueryPort,IRagFileContentPort)
Code Quality
- Accessibilité correcte (aria-labels, aria-pressed, aria-selected)
- React Query hooks bien structurés (mutations, isPending, error handling)
- Composants réutilisables (
IndexActionMenu,PipelineToggle,QueryOptions) - Design cohérent avec le reste du projet
Fonctionnalités
- Support dual LightRAG/Classical pipelines
- Options avancées de requête (mode, topK, threshold, LLM judge)
- Indexation fichier/dossier avec feedback utilisateur (toast)
- Visualisation du contenu de fichier avec tables
⚠️ Points restants à améliorer (mineurs)
1. Props drilling
onFileRead, onFileIndexLightRAG, etc. passés à travers RagPage → FileList → FileRow/FolderRow
Suggestion: Considérer un context RAG ou un custom hook useRagActions() pour réduire le drilling.
2. Gestion d"erreur visuelle
- Seuls des toasts sont affichés en cas d"erreur
- Pas d"indication visuelle inline sur les rows/folders en erreur
3. package-lock.json
- 7303 additions dans package-lock.json (normal mais pollue la diff)
🎯 Recommandations
| Priorité | Action | Impact |
|---|---|---|
| 🟢 Basse | Refactor: context RAG pour props drilling | Maintenance |
| 🟢 Basse | UX: loading/error inline par fichier | UX |
| 🟢 Basse | Config: paramétrer chunkSize/Overlap via UI | Flexibilité |
✅ Verdict
PR bien corrigée ! Le code est propre, l"architecture est respectée, et les fonctionnalités sont complètes.
Recommandation: ✅ Ready to merge
🤖 Review par SoluBot
No description provided.