ADK, Gemini & Javelit = đ
Tandis que les Ă©pisodes de notre podcast Zenikast se succĂšdent, la nĂ©cessitĂ© de produire la transcription de chaque Ă©pisode est bien entendu toujours dâactualitĂ© (cf prĂ©cĂ©dent article).
Si une premiĂšre approche sâĂ©tait rĂ©vĂ©lĂ©e concluante avec Vertex AI, une solution qui nous avait clairement aidĂ© dans la production de qualitĂ© de ces transcriptions, nous voulions aller plus loin en rendant disponible ce moyen de transcription Ă lâensemble des collaborateurs·trices de Zenika, via une interface graphique, indĂ©pendamment de leur connaissance en Vertex AI, Google Cloud Platform ou autre item technique.
En tant que dĂ©veloppeur, lâidĂ©e de dĂ©marrer un projet, un âniĂšme side projectâ, vient rapidement Ă lâesprit đ. Javaiste depuis mes Ă©tudes, il Ă©tait Ă©vident pour moi que ce nouveau projet allait se faire avec du Java !
đ€ ADK
La premiĂšre question tourne autour du âcommentâ. Comment intĂ©grer Gemini dans une API? Une librairie de bas niveau de Google, java-genia, couvre clairement ce besoin.
Mais mon regard sâest finalement portĂ© vers Agent Development Kit (ADK), un framework créé par Google facilitant la crĂ©ation dâagents. Initialement créé en Python, des versions Java et derniĂšrement en Go sont disponibles.
AprÚs avoir créé votre projet maven, vous aurez besoin de cette dépendance :
<dependency> <groupId>com.google.adk</groupId>
<artifactId>google-adk</artifactId>
<version>${adk-java-version}</version>
</dependency>
La librairie google-adk amÚne plusieurs classes dont voici les 3 principales et nécessaires que vous allez manipuler :
- BaseAgent
- LlmAgent
- InMemoryRunner
La classe LlmAgent reprĂ©sente le builder de votre agent. Câest Ă cet endroit que vous allez dĂ©finir votre agent avec un nom, une description, le modĂšle Ă utiliser et des instructions.
return LlmAgent.builder().name("agent name")
.description("This is my first agent").model("model name")
.instruction("Your prompt")
.build();
> Ă noter que le choix du modĂšle est libre et peut ĂȘtre un autre modĂšle que Gemini.
Une instance de InMemoryRunner permet dâinitier et de gĂ©rer le cycle de vie de votre agent, notamment lâallocation mĂ©moire Ă son fonctionnement.
InMemoryRunner runner = new InMemoryRunner(YourAgent.build(), APP_NAME);
Une session est ensuite Ă initier Ă partir de ce runner afin de maintenir lâĂ©tat conversationnel avec lâagent :
Session session = runner
.sessionService()
.createSession(runner.appName(), APP_NAME)
.blockingGet();
LâexĂ©cution de votre agent peut se faire avec cet exemple :
Flowable<Event> events = runner.runAsync(session.userId(), session.id(),
Content.fromParts(Part.fromText("Vos instructions")));
Le rĂ©sultat est rĂ©cupĂ©rĂ© Ă partir de lâevents :
events.blockingForEach(event -> {
System.out.println(event.stringifyContent());
});
Une fois configurĂ©, lâagent est exĂ©cutĂ© avec cette commande et lorsque la rĂ©ponse sera obtenue, votre programme sera arrĂȘtĂ©. Votre agent est fonctionnel đ.
mvn compile exec:java -Dexec.mainClass="yourPackage.YourAgent" -Dexec.args="--adk.agents.source-dir=."
ADK met à disposition une seconde dépendance, google-adk-dev, offrant une interface graphique pour tester, utiliser et debbuger vos agents.
â ïž Cette dĂ©pendance est Ă utiliser lors de vos dĂ©veloppements.
<dependency> <groupId>com.google.adk</groupId>
<artifactId>google-adk-dev</artifactId>
</dependency>
La commande Ă exĂ©cuter est lĂ©gĂšrement diffĂ©rente. Elle exĂ©cute la classe `AdkWebServer`disponible dans la dĂ©pendance dâADK.
mvn compile exec:java \ -Dexec.mainClass="com.google.adk.web.AdkWebServer" \
-Dexec.args="--adk.agents.source-dir=. --server.port=8000"
Cette interface est composĂ©e de deux parties. La premiĂšre, le menu de gauche, dĂ©taille les diffĂ©rents Ă©vĂ©nements et Ă©tapes de rĂ©flexions de votre agent, comme les logs, lâĂ©tat des sessions en cours et passĂ©es ainsi que les outils que lâagent peut ĂȘtre amenĂ© Ă utiliser.

La partie centrale quant Ă elle, est une zone de conversation oĂč vous interagissez avec votre agent. Dans cet exemple, je lui envoie un passage audio pour vĂ©rifier la qualitĂ© de la transcription (et de mon prompt associĂ©).

đRetrouvez toute la documentation dâADK sur https://google.github.io/adk-docs .
âïž Gemini 3
La sortie de la version 3 de Gemini a Ă©tĂ© remarquĂ©e de par sa progression par rapport Ă la prĂ©cĂ©dente version et notamment grĂące Ă son entraĂźnement multimodal. Google a sorti une gamme de modĂšles trĂšs performant, que ce soit Gemini 3 pro, mais aussi sur son modĂšle dâimages, Nano Banana ou bien vidĂ©o avec Veo 3.
AprĂšs avoir testĂ© Gemini 3 pour nos transcriptions, lâamĂ©lioration de la qualitĂ© est clairement prĂ©sente.
đš Javelit
Javelit est un projet créé par Cyril de Catheu. InspirĂ© de Streamlit, une librairie de crĂ©ation de composants graphiques en Python, Javelit est une variante pour ⊠Java. Ce projet nâa pas vocation Ă concurrencer les frameworks Front end comme Angular, Vue ou React. Il offre la possibilitĂ© de crĂ©er rapidement des applications web dans le mĂȘme langage que votre API, et ça, câest super intĂ©ressant.
A partir de lâimport de la dĂ©pendance et du package core, vous avez accĂšs Ă des classes qui vous permettent dâavoir votre premier composant graphique en Java.
<dependency>
<groupId>io.javelit</groupId>
<artifactId>javelit</artifactId>
</dependency>
import io.javelit.core.Jt;
public class MyFirstJavelitApp {
public static void main(String[] args) {
Jt.markdown("# Vive Java â !").use();
}
}
Dans cet exemple, je mentionne un composant âmarkdownâ mais le catalogue de composants est trĂšs complet, avec par exemple :
- Jt.title pour mettre un titre Ă votre page
- Jt.text pour afficher du texte
- Jt.code pour afficher du code
- Jt.html pour afficher du code HTML lâexĂ©cution de Javascript nâest pas possible
- Jt.echarts pour afficher des graphiques (basés sur la librairie ECharts)
- Jt.button, Jt.radio, Jt.textInput pour faire des formulaires
đRetrouvez la documentation complĂšte sur https://docs.javelit.io/.
đ ADK + Javelit = â„ïž
La puissance et la simplicitĂ© dâADK pour crĂ©er un agent, combinĂ©es Ă lâefficacitĂ© de Javelit pour dĂ©velopper des interfaces graphiques permettent de transformer rapidement des idĂ©es en applications fonctionnelles de A Ă Z. Lâinfrastructure âmono composantâ amĂšne aussi des simplicitĂ©s dans le dĂ©ploiement, par exemple avec Cloud Run il est rapidement possible de dĂ©ployer et mettre Ă disposition une application.
Câest avec ce raisonnement que lâapplication de transcription de podcast Zenika a Ă©tĂ© créée et dĂ©ployĂ©e sur Google Cloud Platform.

Plusieurs options ont Ă©tĂ© rajoutĂ©es pour modifier ou adapter le prompt en fonction des besoins comme lâaffichage de lâhorodatage dans la transcription (merci ThĂ©ophile pour lâidĂ©e), ou bien pour gĂ©nĂ©rer une transcription stricte (Ă©quivalente aux mots des intervenants·es) ou une version plus lisible.
đ Retrouvez le projet Agent-Z-transcribe-podcast sur GitHub : http://github.com/zenika-open-source/agent-Z-transcribe-podcast/
Ce trinĂŽme ADK, Gemini + Javelit est une belle dĂ©couverte. DĂ©ployĂ©e sur une instance serverless comme Cloud Run, notre application de transcription de podcast est graphiquement agrĂ©able, sans trop de prise de tĂȘte avec du CSS đ , et utilise la puissance du dernier modĂšle de Gemini pour me gĂ©nĂ©rer une transcription de qualitĂ©.Cela donne des idĂ©es par la suite pour faire rapidement des projets. Si on ajoute Ă cette expĂ©rience, lâutilisation de lâIDE âagentiqueâ Antigravity, la production et surtout la rĂ©alisation de nouveaux projets vont pouvoir voir le jour beaucoup plus rapidement đ.

