- JetBrains Full Line Code Completion (FLCC) est une fonctionnalité d’autocomplétion basée sur l’IA, disponible dans PyCharm et GoLand, qui améliore fortement la rédaction efficace de logs et la productivité de développement
- Elle réduit la corvée liée à l’écriture répétitive de syntaxes de logs en f-string ou à l’accès aux variables/dataframes, et l’IA génère automatiquement des logs concis et clairs adaptés au contexte
- Le modèle concerné est un petit LLM qui fonctionne sur le PC local, avec une inférence rapide, une faible consommation mémoire (autour de 1 Go) et sans risque de fuite de données personnelles
- Selon un article de JetBrains, un petit Transformer spécialisé Python (100M de paramètres) a été entraîné pour prendre en charge l’autocomplétion d’une ligne dans une fenêtre de contexte de 384 caractères, en intégrant aussi activement les spécificités du code Python dans les phases de prétraitement et de tokenization
- Le succès de FLCC montre bien à quel point un petit modèle orienté objectif, plutôt qu’un grand LLM, peut accroître la productivité dans le développement réel
Rédaction automatique de logs par l’IA : un vrai changement pour la productivité des développeurs
- JetBrains Full Line Code Completion (FLCC) fournit dans PyCharm (intégré par défaut fin 2023), GoLand et d’autres IDE une fonction d’autocomplétion de lignes de logs entières
- Dans le traitement séquentiel de données, les appels d’API asynchrones ou les opérations vectorielles, le debug via
print et les logs détaillés sont indispensables
- Mais à cause des saisies répétitives — f-string, accès aux variables/listes/dataframes, choix du logger (
loguru vs logging) — le flux de débogage était souvent interrompu
- Par exemple, avec
loguru, une ligne comme logger.info(f'Adding a log for {your_variable} and {len(my_list)} and {df.head(0)}') semble simple, mais implique en réalité plusieurs niveaux de charge cognitive : parenthèses, noms de variables, syntaxe dataframe, type de logger, etc.
Comment FLCC a changé le flux de développement et les habitudes d’écriture des logs
- Full Line Code Completion combine toutes les informations de contexte — extension du fichier, chemin, code au-dessus du curseur, etc. — dans le prompt du modèle pour compléter automatiquement la formulation de log la plus naturelle
- Les logs proposés sont optimisés pour le contexte des variables, dataframes et opérations, au point d’être souvent plus clairs que ceux écrits à la main
- Grâce à des logs concis, on n’a plus forcément besoin de les supprimer une fois le débogage terminé, et leur qualité est suffisante pour les laisser tels quels en production
-
Exemples
- Lors de la vérification d’une URL Redis :
redis = aioredis.from_url(settings.redis_url, decode_responses=True) → l’IA propose automatiquement un log de connexion Redis
- Lors du profiling d’un DataFrame : après avoir défini les données/colonnes, des lignes de log de profiling comme la
shape de df sont proposées automatiquement
Caractéristiques techniques et implémentation du modèle FLCC de JetBrains
-
Fonctionnement entièrement en local
- L’inférence du modèle et les suggestions de code sont traitées uniquement sur le PC local, ce qui est sûr et évite toute inquiétude liée à la fuite de données personnelles ou de code
- Sur Mac, la taille du modèle est d’environ 1 Go, avec une faible charge mémoire et une très grande rapidité
- Inutile de recourir à une infrastructure de grands LLM dans le cloud comme vLLM, SGLM, Ray ou PagedAttention
-
Architecture de petit LLM spécialisé Python
- Implémentation initiale en Transformer decoder-only de style GPT-2 (100M de paramètres) basé sur PyTorch, puis amélioration vers une architecture de type llama2
- Sur un sous-ensemble de The Stack (30 langages) représentant 6 To, seuls 45 Go ont été utilisés, avec suppression des commentaires de code et des imports inutiles pour se concentrer sur la génération effective de code
- Pour refléter les spécificités de Python, le tokenizer en BPE convertit des structures comme l’indentation et le scope en tokens
<SCOPE_IN> / <SCOPE_OUT>, afin d’éviter le gaspillage de tokens dû aux différences d’espacement
- La taille du vocabulaire du tokenizer a été optimisée à 16 384
- Comme en Python on ajoute souvent les imports en fin de code, cet usage a aussi été pris en compte dans l’entraînement, et les imports ont été supprimés des données
-
Entraînement et optimisation
- Entraînement pendant plusieurs jours sur 8 GPU NVIDIA A100, avec évaluation via la cross-entropy loss
- Grâce à la quantization, le modèle FP32 a été converti en INT8 (400 Mo → 100 Mo) pour être chargé en mémoire sur PC sans contrainte
- Inférence CPU via ONNX RT, puis migration du serveur vers une architecture
llama.cpp
- Utilisation du Beam Search (
k=20) pour générer différentes séquences de tokens, avec arrêt du résultat sur caractère de fin de ligne
- Sur la fenêtre de contexte de 384 caractères, 50 % sont préfetchés et mis en cache à l’avance, ce qui permet une réponse immédiate quand le curseur revient sur du code précédent, sans nouvelle inférence
-
Structure des plugins et de l’intégration
- Le plugin PyCharm est écrit en Kotlin et fournit les tokens d’inférence via un serveur natif local en C++
- API propre, réponse rapide, stratégie de cache : l’ensemble est optimisé pour le workflow réel des développeurs
Les gains concrets de productivité apportés par FLCC
-
Amélioration simultanée de la qualité et de l’efficacité des logs
- Grâce aux logs autocomplétés par l’IA, la qualité des logs de débogage via
print et des logs d’exploitation progresse en même temps que l’efficacité de rédaction
- Des logs courts et clairs sont proposés automatiquement, sans casser le flux de débogage
-
La valeur métier des petits LLM spécialisés
- Au lieu d’un grand LLM, un petit modèle d’IA optimisé pour un objectif précis (complétion de code sur une ligne) peut apporter en pratique une forte amélioration de productivité dans le développement
- C’est aussi un cas représentatif montrant que des modèles compacts orientés objectif peuvent améliorer concrètement les workflows réels dans d’autres domaines
5 commentaires
J’aimerais bien que ce genre de chose arrive aussi en C++ !
Dépenser 20 à 200 $ par mois juste pour ça, c’est un peu…
Cette personne semble parler du coût de l’abonnement à l’IDE. FLCC n’est pas proposé dans la version gratuite.
Mais ce n’est pas non plus pour ça seulement que les gens paient.
Ah, d’accord, ce n’est pas disponible dans la version gratuite. J’avais mal compris 😅
Comme c’est une exécution locale, il ne devrait pas y avoir de frais.