Contar tokens y estimar costos al llamar a LLM en Java
Cómo contar tokens localmente con JTokkit, calcular costos con BigDecimal, bloquear solicitudes que excedan presupuesto y reconciliar con el uso real de Spring AI.
Un tema por artículo, explicado paso a paso con código que funciona — de Java y Spring Boot a IA, diseño de sistemas y DevOps.
Cómo contar tokens localmente con JTokkit, calcular costos con BigDecimal, bloquear solicitudes que excedan presupuesto y reconciliar con el uso real de Spring AI.
Usa thiserror para definir tipos de error claros para tu librería, anyhow para agrupar errores y agregar contexto para la aplicación, y combina ambos.
Distingue entre object declaration, object expression y companion object en Kotlin, cómo crean singleton, cómo llamarlos desde Java y qué errores evitar.
Usa tipos de literales de template para generar nombres de clave, analizar parámetros de ruta y escribir emisores de eventos seguros de tipos, con pruebas de tipos en Vitest y trampas a evitar.
Cómo compartir datos entre threads con Arc<Mutex<T>>, pasar mensajes con mpsc channel, y evitar deadlock, envenenamiento y otros errores comunes.
Configurar Maven para que Kotlin y Java se comuniquen, gestionar nullability, @JvmStatic, @JvmOverloads y errores comunes en Spring Boot.
Recibe cada token de LLM API a través de Server-Sent Events usando HttpClient y WebClient, luego transmítelo al navegador, con manejo de errores, timeout y pruebas.
Qué comprobaciones habilita el flag strict en tsconfig, qué errores atrapa cada una, qué flags adicionales deberías activar además de strict, y cómo migrar un proyecto antiguo a strict.
Construir una REST API CRUD con Axum 0.8, incluyendo enrutamiento, extractors, estado compartido, manejo de errores con IntoResponse y pruebas de handlers sin necesidad de abrir puertos de red.
Comprende cómo los LLM invocan funciones de tu aplicación, desde JSON raw hasta @Tool en Spring AI. El artículo incluye ejemplos de búsqueda, cancelación de pedidos y pruebas sin necesidad del modelo real.
Usa keyof, typeof y tipos de acceso indexado para inferir tipos desde datos existentes, reduce la repetición de código y deja que el compilador atrape errores de claves incorrectas por ti.
Usa by lazy para inicialización perezosa segura con hilos, usa Delegates.observable y vetoable para monitorear o prevenir cambios de propiedades.
Cómo configurar tsconfig y package.json para que tu biblioteca TypeScript genere archivos .d.ts estándar, con tipos completos para los usuarios y comprobable con Vitest.
Cómo declarar tipos de función, pasar y retornar lambdas, usar referencias de función, closures, lambdas con receiver e inline en Kotlin.
Cuándo usar Box, Rc o Arc en Rust: asignación en heap, compartición de ownership en un thread y entre múltiples threads, junto con Weak, RefCell y Mutex.
Cómo forzar que el LLM devuelva JSON coincidiendo con el schema en Spring Boot: mapea en record usando Spring AI, habilita JSON Schema nativo, valida, reintentos y escribe tests.
Guía de programación asincrónica en Rust con Tokio, que incluye async/await, spawn task, join!, select!, timeout, channel, spawn_blocking y cómo testear código async.
Configurar un proyecto Spring Boot 3 con Kotlin, escribir una REST API, entidades JPA, configuración y pruebas, junto con errores comunes al migrar desde Java.
Técnicas prácticas de prompt engineering como system prompt, delimiter, few-shot, structured output y temperature, ilustradas con Spring AI.
Cómo declarar tipos para funciones async, usar Promise<T>, Awaited, Promise.all, manejar errores de forma segura y evitar trampas comunes con callbacks async.