Site icon Blog Zenika

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 :

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 : 

👉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 🚀.

Auteur/Autrice

Quitter la version mobile