Blog Zenika

#CodeTheWorld

Autres

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.

Interface graphique de l'Agent Development Kit affichant les onglets Trace, Events, State, Artifacts, Sessions et Eval.

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Ă©).

Interface utilisateur de Firebase Studio montrant des options pour créer et prévisualiser une application, avec des boutons pour des actions liées à la transcription Google Docs.

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

Interface de l'application Agent Z pour la transcription de podcast, permettant de télécharger des fichiers audio, d'ajouter un contexte, et d'ajuster des options de transcription.

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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

En savoir plus sur Blog Zenika

Abonnez-vous pour poursuivre la lecture et avoir accùs à l’ensemble des archives.

Poursuivre la lecture