Compter les tokens et estimer les coûts lors d'appels LLM en Java
Comment compter les tokens localement avec JTokkit, calculer les coûts avec BigDecimal, bloquer les requêtes hors budget et comparer avec l'utilisation réelle de Spring AI.
Un sujet par article, expliqué pas à pas avec du code qui tourne — de Java et Spring Boot à l'IA, la conception de systèmes et le DevOps.
Comment compter les tokens localement avec JTokkit, calculer les coûts avec BigDecimal, bloquer les requêtes hors budget et comparer avec l'utilisation réelle de Spring AI.
Utilisez thiserror pour définir des types d'erreurs structurés pour votre bibliothèque, anyhow pour regrouper les erreurs et ajouter du contexte pour votre application, et combinez les deux.
Utilisez les types template literal pour générer les noms de clé, analyser les paramètres d'itinéraire et écrire des émetteurs d'événements typés sûrs, avec des tests de type via Vitest et les pièges à éviter.
Distinguer object declaration, object expression et companion object dans Kotlin, comment ils créent des singletons, les appeler depuis Java et les erreurs courantes.
Comment partager des données entre threads avec Arc<Mutex<T>>, transmettre des messages via mpsc channel, et éviter deadlock, poisoning et autres erreurs courantes.
Configuration Maven pour que Kotlin et Java s'appellent mutuellement, gestion de la nullabilité, @JvmStatic, @JvmOverloads et erreurs courantes dans Spring Boot.
Le flag strict dans tsconfig active quels contrôles, quelles erreurs chacun détecte, quels flags supplémentaires ajouter, et comment migrer un ancien projet vers strict.
Recevoir chaque token depuis une LLM API via Server-Sent Events avec HttpClient et WebClient, puis renvoyer le flux au navigateur avec gestion d'erreurs, timeouts et tests.
Construire une REST API CRUD avec Axum 0.8, en passant par le routing, les extractors, l'état partagé, la gestion des erreurs avec IntoResponse et les tests de handler sans avoir besoin d'ouvrir un port réseau.
Comprendre comment les LLM appellent les fonctions de votre application, du JSON brut à @Tool dans Spring AI. L'article inclut des exemples de recherche, d'annulation de commande et de test sans appeler le modèle réel.
Utiliser keyof, typeof et indexed access types pour déduire les types à partir des données existantes, réduire la répétition de code et laisser le compilateur vérifier les mauvaises clés à votre place.
Utilisez by lazy pour une initialisation paresseuse thread-safe, utilisez Delegates.observable et vetoable pour surveiller ou bloquer les changements de valeur de propriété.
Comment configurer tsconfig et package.json pour que votre bibliothèque TypeScript génère des fichiers .d.ts conformes, avec des types complets pour les utilisateurs, et testables avec Vitest.
Comment déclarer un type de fonction, passer et retourner des lambda, utiliser les références de fonction, les closures, les lambdas with receiver et inline en Kotlin.
Quand utiliser Box, Rc ou Arc dans Rust : allocation heap, partage d'ownership dans un thread et entre plusieurs threads, avec Weak, RefCell et Mutex.
Comment forcer un LLM à retourner du JSON conforme au schéma dans Spring Boot : mapper dans un record avec Spring AI, activer JSON Schema natif, valider, réessayer et tester.
Guide de programmation asynchrone en Rust avec Tokio, couvrant async/await, spawn task, join!, select!, timeout, channel, spawn_blocking et comment tester du code async.
Configurer Spring Boot 3 en Kotlin, créer une REST API, des entités JPA, configuration type-safe et tests, en maîtrisant les erreurs courantes de la migration.
Les techniques pratiques de prompt engineering : system prompt, délimiteurs, few-shot, structured output et température, illustrées avec Spring AI.
Comment déclarer les types pour les fonctions async, utiliser Promise<T>, Awaited, Promise.all, gérer les erreurs en toute sécurité et éviter les pièges courants avec les callbacks async.