DEV Community

Cover image for ADK, Gemini & Javelit = 😍
Jean-Phi Baconnais for Zenika

Posted on

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 :

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.

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

Une session est ensuite Ă  initier Ă  partir de ce runner afin de maintenir l’état conversationnel avec l’agent :

L’exĂ©cution de votre agent peut se faire avec cet exemple :

Le rĂ©sultat est rĂ©cupĂ©rĂ© Ă  partir de l’events :

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

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.

La commande Ă  exĂ©cuter est lĂ©gĂšrement diffĂ©rente. Elle exĂ©cute la classe AdkWebServerdisponible dans la dĂ©pendance d’ADK.

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.

ADK UI menu

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

ADK UI menu

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

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.

ADK UI menu

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

Top comments (0)