ADK, Gemini & Javelit = 😍
Source: Dev.to
Contexte
Alors que les épisodes de notre podcast Zenikast se succèdent, la production de la transcription de chaque épisode reste indispensable (voir article précédent).
Après une première approche concluante avec Vertex AI, nous avons souhaité rendre la transcription accessible à l’ensemble des collaborateurs·trices de Zenika via une interface graphique, sans nécessiter de connaissances en Vertex AI ou Google Cloud Platform.
Intégration de Gemini avec ADK
Choix du langage
Développeur Java depuis mes études, j’ai naturellement opté pour Java afin de créer ce nouveau projet.
Bibliothèque de bas niveau
Pour appeler Gemini, la bibliothèque java-genai de Google répond aux besoins d’appel d’API.
Agent Development Kit (ADK)
Nous avons finalement choisi Agent Development Kit (ADK), un framework Google facilitant la création d’agents.
Initialement en Python, ADK propose aujourd’hui des versions Java (et Go).
Dépendances Maven
<!-- ADK core -->
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk</artifactId>
…
</dependency>
<!-- ADK development utilities (runtime) -->
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk-dev</artifactId>
…
<scope>runtime</scope>
</dependency>
Classes principales
| Classe | Rôle |
|---|---|
BaseAgent | Classe de base pour tous les agents. |
LlmAgent | Builder de l’agent : nom, description, modèle (Gemini ou autre) et instructions. |
InMemoryRunner | Gestion du cycle de vie et de la mémoire de l’agent. |
Exemple de création d’un agent
LlmAgent agent = LlmAgent.builder()
.name("Transcriber")
.description("Transcrit les podcasts avec Gemini")
.model("gemini-1.5-pro") // le modèle est configurable
.instruction("Transcris le texte de façon lisible.")
.build();
InMemoryRunner runner = new InMemoryRunner(agent);
Session session = runner.startSession();
Exécution et récupération du résultat
runner.run(session, "Voici le texte à transcrire.");
List events = session.getEvents(); // les réponses sont dans les events
String transcription = events.stream()
.filter(e -> e instanceof TextResponseEvent)
.map(e -> ((TextResponseEvent) e).getText())
.findFirst()
.orElse("Aucune réponse");
System.out.println(transcription);
Lorsque la réponse est obtenue, le programme se termine ; l’agent est alors fonctionnel 🎉.
Interface graphique avec ADK
La dépendance google-adk-dev fournit une interface web pour tester, utiliser et déboguer les agents.
Attention : cette dépendance ne doit être utilisée qu’en phase de développement.
Lancement du serveur web
mvn exec:java -Dexec.mainClass=com.google.adk.dev.AdkWebServer
L’interface se compose de :
- Menu de gauche – affichage des événements, logs, état des sessions et outils utilisés par l’agent.
- Zone centrale – zone de conversation où l’on interagit avec l’agent.
Dans l’exemple suivant, nous envoyons un extrait audio à l’agent pour vérifier la qualité de la transcription.
Documentation complète d’ADK :
Gemini 3 et ses performances
La sortie de Gemini 3 a été remarquée pour ses progrès multimodaux (texte, image, vidéo).
Parmi les modèles disponibles :
gemini-3-pro– modèle texte haut de gamme.nano-banana– modèle d’image léger.veo-3– modèle vidéo.
Après tests sur nos transcriptions, la qualité est nettement supérieure à celle obtenue avec Vertex AI.
Javelit – Créer des interfaces graphiques Java
Javelit (inspiré de Streamlit) permet de créer rapidement des applications web en Java, sans quitter le langage de l’API.
Dépendance Maven
<dependency>
<groupId>io.javelit</groupId>
<artifactId>javelit-core</artifactId>
…
</dependency>
Principaux composants
| Composant | Description |
|---|---|
Jt.title | Titre de la page |
Jt.text | Texte simple |
Jt.code | Bloc de code avec coloration |
Jt.html | Affichage HTML (sans exécution JavaScript) |
Jt.echarts | Graphiques basés sur la librairie ECharts |
Jt.button, Jt.radio, Jt.textInput | Éléments de formulaire |
Documentation complète de Javelit :
Déploiement sur Google Cloud Run
L’architecture « mono‑composant » simplifie le déploiement : une seule image Docker contenant à la fois l’agent ADK et l’interface Javelit.
Avec Cloud Run, il suffit de pousser l’image et de la rendre disponible en quelques minutes.
Options de personnalisation du prompt
Des paramètres ont été ajoutés pour :
- Afficher ou non les horodatages (merci à Théophile).
- Générer une transcription stricte (verbatim) ou une version plus lisible.
Projet open‑source
Le code complet est disponible sur GitHub :
Agent‑Z‑transcribe‑podcast
Conclusion
Le trio ADK + Gemini + Javelit offre une solution rapide et efficace pour créer des applications de transcription de podcasts :
- ADK simplifie la création d’agents LLM.
- Gemini 3 fournit des transcriptions de haute qualité.
- Javelit permet de bâtir une interface graphique Java sans CSS complexe.
Déployée en mode serverless (Cloud Run), l’application est à la fois esthétique et fonctionnelle.
En combinant cet environnement avec l’IDE « agentique » Antigravity, de nouveaux projets peuvent voir le jour encore plus rapidement 🚀.