❯ Guillaume Laforge

Multimodal Decision Models: From DiffusionGemma and Jev to LangChain4j

Most of our conversations around Large Language Models focus on generative chat: you give the model a prompt, and it outputs a sequence of tokens autoregressively.

Recently, Typesafe AI introduced a different paradigm called System 1 models, embodied by Jev. Rather than generating free-form prose token by token, a Jev-style model acts as a high-speed, deterministic decision maker. Given an input state and a series of discrete questions, it runs in a single forward pass and outputs calibrated probability distributions for each question:

Read more...

Gemini 3.8 Flash TTS, Voice Design, and Custom Voices with the Gemini Interactions Java SDK

Google recently introduced dedicated text-to-speech models in the Gemini family: Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) and Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts).

The Google team shared the details in their announcement: Gemini 3.8 Text-to-Speech.

To support these new models and their voice customization features in Java, I have published version 2.0.2 of the Gemini Interactions API Java SDK.

In this post, I will explain what these models offer, what was added to the SDK, and show you a complete, practical example of how to design a custom voice and synthesize speech with it.

Read more...

Running Agents Powered by Local Gemma Models with LiteRT-LM and the Antigravity Java SDK

A few months ago, I introduced the unofficial Antigravity SDK for Java. My goal was simple: enable enterprise Java developers to build and run autonomous AI agents in Java, backed by the same engine that powers Google Antigravity.

The Antigravity team published the Python Antigravity SDK v0.1.18 release notes. And the Google Developer Blog published an article titled Introducing support for local AI models in the Antigravity SDK.

The ability to run models locally on-device without cloud API dependencies, and without paying token costs for high-frequency tasks, sounded very appealing, right? 😃

Read more...

Sharing a Git-Backed Obsidian Vault Across Computers

I rely on Obsidian daily to capture ideas, interesting links & articles, and research clippings. Because I alternate between different machines (my work computer and my personal laptop) I need my vault synchronized everywhere.

Instead of third-party cloud folders or paying for cloud sync tiers, I back my vault with a private Git repository (hosted on GitHub) and use the community obsidian-git plugin.

Git gives you full ownership, complete version history, granular diffs, and zero vendor lock-in. But if you simply git init your vault and call it a day, you will quickly run into some issues:

Read more...

Antigravity Brain Visualizer v0.6: Single-pass Gemini 3.8 Flash analysis, artifacts, token estimation

In July, I wrote about adding an interactive session assistant to the Antigravity Brain Visualizer, allowing developers to chat with Gemini directly about specific tool errors and transcript sequences from Antigravity agent runs.

Since that release, I have continued using the visualizer to inspect complex agent runs, debug failed tool invocations, and review multi-agent orchestrations. Over the last few days, I rolled out a series of incremental updates culminating in the v0.6.0 release, with pre-built binaries available on the GitHub release page.

Read more...

Comparing the official Google GenAI Java SDK and my Gemini Interactions SDK

The official Google GenAI Java SDK recently released version 1.67.0, adding support for the Gemini Interactions API.

When Google initially introduced the Interactions API, there was no Java support in the official SDK. Because I wanted Java developers to be able to build with interactions, managed agents, and remote sandboxes right away, I created an unofficial, purpose-built library: the Gemini Interactions API Java SDK.

Now that official support is available under com.google.genai, developers have two ways to interact with this API from Java. In this post, I want to take a technical look at how both SDKs approach the same API, compare their ergonomics, and discuss when you might choose one over the other.

Read more...

The Unofficial Antigravity SDK for Java

Before heading for well-deserved vacations, I wanted to share something I’ve been cooking on and off for the past few weeks: an unofficial Java SDK for Antigravity.

If you’re familiar with Antigravity, you’ll know it’s available across different surfaces:

  • Antigravity 2.0: an agent manager for the Antigravity harness, where you can work across multiple projects and sessions from a rich UI,
  • Antigravity CLI: a CLI coding agent, where you can interleave running terminal commands, with active agent coding actions,
  • Antigravity IDE: a VSCode fork, with an integrated Antigravity chat assistant, when you want to be deep into the code,
  • Antigravity SDK: which is actually a toolkit you can integrate and manage yourself, to create your own Antigravity harness.

Antigravity surfaces
Antigravity surfaces

Read more...

Running Gemma 4 locally on Mac: Benchmarking Qxotic Jinfer, llama.cpp, MLX, and connecting Java 25 with LangChain4j

Outdated Qxotic Jinfer Benchmarks

The benchmark numbers for Qxotic Jinfer in this article are outdated and abnormally low. At the time of testing, Jinfer had not yet been optimized for macOS and Apple Silicon processors.

Read more...

Antigravity Brain Visualizer Now With a Contextual Smart Chat

A few weeks ago, I wrote about building the Antigravity Brain Visualizer: a tool to parse raw JSONL transcript logs from Antigravity AI agent sessions and render them into an interactive web interface with proportional timelines and sequence groupings.

While visual timeline scrubbing and sequence filtering made it easier to inspect what an agent did, diagnosing complex tool failures or creating preventative guardrails still required manual investigation:

  • Why did a tool call fail at step #38?
  • What sequence of events led up to a specific error?
  • Could I automatically turn a failure pattern into an Agent Skill to prevent Antigravity from repeating the mistake?

To address these questions directly within the application, I built the Interactive Session Assistant in v0.4.1 of the Antigravity Brain Visualizer. It transforms the visualizer from a passive log viewer into an interactive diagnostic co-pilot.

Read more...

Open Reasoning Format: Building Self-Learning AI Coding Agents Without Server Infrastructure

When AI coding agents tackle complex tasks, they often waste time making the same mistakes, running into environment quirks, or retrying failed approaches before finding something that works. If an agent encounters a domain-specific trap in one session, that lesson is lost when the next session starts, forcing the agent to repeat the exact same trial-and-error cycle.

I built the Open Reasoning Format (ORF) to fix this. ORF is a lightweight, file-based specification that lets AI agents record and retrieve operational learnings across sessions. With access to playbooks from previous runs, agents facing similar problems can skip known dead ends, reach working solutions faster, and use about half the steps (and tokens).

Read more...