Automatisch code comments bijwerken met large language models
Het tijdperk van “Large Language Models” is aangebroken. Op iedere virtuele straathoek staat er wel eentje klaar om je te helpen met het wegnemen van al je zorgen, stress en pijn. Heel mooi dus dat onze stage bij Infi ons de kans geeft om ook zo’n rol als pijnverlichter aan te nemen. Noem ons gerust dokter.
Welke pijn willen we wegnemen?
Stel je voor: een legacy repo. It’s not pretty. Er staan comments in, maar de comments lijken niet of maar deels te kloppen met de code die erbij staat. Jij wil eigenlijk gewoon functionaliteit X erbij bouwen, maar dat zou wel sneller gaan als iemand de comment had bijgewerkt.
Afijn, je gaat aan de slag en na een tijdje snap je de code. Je vergeet vervolgens wel om de comment bij te werken, want dat was niet eens deel van de taak die je eigenlijk aan het uitvoeren was en dus is het je even ontschoten. Jij wilde gewoon functionaliteit X erbij bouwen.
Het resultaat:
- Als de comment up to date was geweest, had jij sneller functionaliteit X kunnen bouwen.
- De comment is nog steeds out-of-date en dus zal dit probleem zich vroeger of later opnieuw voordoen.
Natuurlijk is zelf-documenterende code het streven van iedereen, maar comments maken nu eenmaal deel uit van ons leven, en dus is het fijn als ze gewoon up-to-date zijn en blijven.
AI to the rescue
Tijdens onze stage zijn we begonnen met het bouwen van een AI-tool die in repo’s out-of-date comments kan vinden en kan updaten. De gebruiker krijgt vervolgens de optie om deze bijgewerkte comments over te nemen, of te negeren.
We gaan proberen dit er in de praktijk ongeveer zo uit te laten zien:
- Maak verbinding met Gitlab via onze tool.
- Kies een van de repo’s die je wilt analyseren.
- Pak een kop koffie.
- Pak nog een kop koffie (of ga iets nuttigs doen).
- De analyse is klaar, en de tool heeft een nieuwe branch en een merge request voor die branch aangemaakt.
- Nu kan je inzien welke comments zijn bijgewerkt, en per comment kiezen of je die wijziging wil behouden of juist niet. Je kan ook duidelijk zien hoe de comment er voorheen uitzag en dus gemakkelijk bepalen of de nieuwe comment beter is.
Hoelang je koffie moet drinken voordat het hierboven beschreven proces klaar is, is nog niet duidelijk op dit moment. De kern is dat we automatisch comments kunnen updaten met AI.
Of de volledige integratie met GitLab er komt is ook zeker nog niet duidelijk. Voor onze stage is de core functionality het belangrijkste doel, en dat is automatisch comments bijwerken.
Large language models
We maken, om dit alles te realiseren, gebruik van de ondertussen welbekende large language models (LLM’s). Welke van de velen het precies gaat worden is nog niet 100% duidelijk, maar op dit moment zijn we bezig met de open-source Llama LLM’s. In onze eerste tests kwam de LLM GPT-4 wel beter uit de verf dan het Code-Llama LLM, maar bij verdere tests met andere Llama soorten ging het al beter dus wie weet wat de toekomst ons zal brengen!
De reden dat we een voorkeur hebben voor de opensource Llama LLM’s is dat deze beschikbaar zijn op meerdere plekken en vaak met lagere kosten en minimale setup, maar wel met volledige controle over hoe het model werkt door middel van parameters zoals temperature.
Daarnaast is GPT-4 wel een heel goed (waarschijnlijk het beste) model, maar ook heel traag en dus duurder om te draaien.
We zijn aan het experimenteren met de volgende modellen:
Code-Llama
Een model dat specifiek is gericht op het afmaken van stukken code. Dit model werkt dus in het gebruik, anders dan bijvoorbeeld een op chatten gericht model. Je bent niet in een gesprek verwikkeld met het Code-Llama LLM. Hij maakt je code af zoals je toetsenbord op je mobiel probeert je zin af te maken.
In een chat gefocuste versie van een model gaat een interactie als volgt:
User:
Generate a simple addition for me.AI:
Sure, here is an example of a simple addition function in Python:def add(a, b): return a + b
Zoals je kunt zien snapt de AI dat we hem in een soort mens-tot-mens interactie om iets vragen (ofwel chat interactie).
In een algemeen model dat niet specifiek is getraind om zich te gedragen als een chat/ander persoon:
User:
Generate a simple addition for me.AI:
#include <stdio.h> int main(void) { int x = 1, y = 2; printf("%d", x+y); return 0; }Comment: What is the problem you are having?
Comment: I think the question is pretty clear.
In voorbeeld 2 komt er een heel ander resultaat uit de AI. Hij lijkt compleet niet te snappen wat we van hem willen. Uiteindelijk zijn large language models gewoon grote auto correctie machines. Een beetje zoals auto correctie op je mobiele toetsenbord, maar dan veel intelligenter. Alleen als je hem traint om als mens te snappen en te reageren, reageert ie logisch zoals we met Chatgpt gewend zijn.
Llama-2
Van Llama-2 (waar CodeLlama op is gebaseerd) bestaan ook meerdere versies, waaronder een chatversie. Met Llama 2 hebben we het meeste succes gehad met de 70B-chatversie. Of we met meer experimentatie naar een kleiner model kunnen gaan, wat zou leiden tot snellere reacties en lagere kosten… We hopen het, maar de tijd zal het ons leren.
GPT-4 & GPT-3.5
GPT-4 is, zoals hierboven vermeld, de beste keuze, maar ook de duurste en traagste. Daarom overwegen we dit model niet. GPT-3.5 is op dit moment geen optie maar kan dit nog wel worden. Hierover meer bij het Providers hoofdstuk. Er zijn speculaties dat de prijzen van de GPT-modellen met wel 20x verlaagd zullen worden, maar zolang dat nog niet daadwerkelijk is gebeurd, blijven we vertrouwen op de Llama-modellen. Wel gebruiken we GPT-3.5 & GPT-4 om voorbeelden te genereren voor de Llama modellen, dus op die manier komen ze ons toch nog van pas.
Providers
Azure
Ons eerste idee was om via Azure te werk te gaan. Dan heb je toch een privacy garantie, maar schieten de kosten ook snel de lucht in. Die kosten gingen zo snel de lucht in dat we bijna zeker ons 100 euro Azure budget op zouden maken tenzij we extra gingen micro managen. Misschien wel een optie waar we op terug moeten vallen als het niet lukt via de Llama modellen op Replicate.
HuggingFace
HuggingFace, hoewel bekend in de AI-gemeenschap, heeft een privacybeleid dat niet volledig voldoet aan onze gegevensbeschermingseisen. We waren ontevreden over het gebrek aan duidelijkheid over gegevensretentie en de rechten van de gegevenssubjecten. Bovendien waren er geen expliciete vermeldingen van beveiligingsmaatregelen die zijn geïmplementeerd om gebruikersgegevens te beschermen. We hebben HuggingFace gemaild voor meer uitleg hierover maar ze verwezen ons terug naar de privacy policy.
Replicate
Hierna vonden we Replicate, een bedrijf dat LLM modellen via hun API beschikbaar stelt.
In tegenstelling tot Huggingface, heeft Replicate een privacybeleid dat meer in lijn is met onze gegevensbeschermingsvereisten. Het biedt heldere definities, uitleg over gegevensgebruik en vermeldt stappen om de gegevensveiligheid tijdens overdrachten te waarborgen, in overeenstemming met de GDPR-voorschriften.
Daarnaast betaal je ze alleen voor de gebruikte tijd, en hoeven we niet zelf een AI model op te zetten.
De gebruikte tijd? Het systeem is heel simpel. Zij beheren de endpoints naar de modellen, en wij hoeven alleen te betalen voor de secondes dat we de endpoint gebruiken. Het soort hardware waar de API gebruikt van maakt zorgt wel voor een verschil in prijs. Een CPU only model is het goedkoopste en traagst met $0.000100 per seconde of $0.36 per uur. Een Nvidia A100 (80GB) is het duurste en snelste met $0.001400 per seconde of $5.04 per uur.
Dit is allemaal perfect voor onze use case. De enige limitatie is dat ook zij geen GPT-modellen beschikbaar stellen.
De huidige status van de AI-tool
We zijn op dit moment bezig met het bouwen van een API en een test frontend. De frontend wordt gebruikt om sneller feedback te verzamelen tijdens de bouwfase. De API kan op dit moment volledige repo’s die als .zip binnenkomen of direct van GitLab gedownload worden doorwerken op zoek naar de ondersteunde bestandstypen. Daarna kan de AI deze bestanden doorsturen naar Replicate met een prompt, en de response van het LLM ontvangen.
Hopelijk kunnen we binnenkort allemaal onze comments automatisch updaten met AI!
Wil je meer weten? Binnenkort lees je het in de volgende blogpost!