Cloud Native Diary #15

LLM-powered applications with Java and Spring AI. Updates from GOTO Copenhagen, KCD Denmark, and YOW! Australia.

View of South Bank, Brisbane (Australia). Photo by Thomas Vitale.

In Cloud Native Diary, I periodically share my journey working with application development, platform engineering, and cloud native technologies.

In this issue, I'll share some updates about Java and AI, and news from GOTO Copenhagen, KCD Denmark, and YOW! Australia. Let's get to it!

Bluesky

Bluesky has become my primary social media. I've been a user since July 2023, but it's only recently that it really took off. The Java and cloud native communities have been migrating in mass from the other place to Bluesky in the past few months, and the vibes couldn't be better! See you there?

Thomas Vitale β˜€οΈ (@thomasvitale.com)
Software Engineer πŸ“š Author of β€œCloud Native Spring in Action” πŸ›³οΈ CNCF Ambassador, CNCF WG App Development Co-Chair, KCD Denmark πŸŽ™οΈ International Speaker πŸ‘¨β€πŸ’» OSS. Work with Java, Cloud Native, AI.

If you're new to Bluesky, I recommend checking these Starter Packs to get you started quickly in building your network:

Java and AI

Java is a modern, powerful language. It's amazing to see how much it evolved over the past few years!

It's amazing to see how much Java has evolved over the past few years πŸš€ One thing I really like is how more friendly has become for students and new programmers. This is valid Java 24 (with preview features). And you can just run it with "java Main.java" from the command line! #ThisIsJava

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-10-27T22:34:36.201Z

Spring AI is a framework for infusing Java applications with AI capabilities. Since my previous blog post, many great features have been delivered, getting closer and closer to the 1.0.0 release in early 2025. You can try them out in the newly released 5th milestone.

Spring AI 1.0.0 M5 Release
Level up your Java code and explore what Spring can do for you.

The main work that has been keeping me busy in the Spring AI project is the design and initial implementation of a Modular RAG architecture, inspired by the concept of modularity detailed in the paper Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks. I've been designing a solution for Spring AI that enables developers to seamlessly build and customize RAG systems. Some of the Modular RAG features are already available as a preview in the latest Spring AI release. You can find more information in the documentation. I'll soon start publishing a deep-dive article series on this website about Modular RAG. Stay tuned!

Retrieval Augmented Generation :: Spring AI Reference

I worked on extending the Ollama integration to support native JSON Structured Output and to manage models directly from your Spring AI application. You can now even let Spring AI pull models for you at startup time, both from the Ollama model library and from Hugging Face.

Ollama supports structured outputs, constraining the model's output to be compliant with a given JSON Schema. I was happy to contribute support for this feature in Spring AI, allowing you to define an explicit JSON Schema or rely on a BeanOutputConverter to generate one for you from a Java class.

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-12-20T18:52:37.827Z

Christian Tzolov and I have been expanding the Ollama integration in Spring AI πŸƒ now featuring a new option to pull models automatically at startup time, improving the developer experience. It works with LLMs from the Ollama library πŸ¦™ and from Hugging Face πŸ€— Read more: spring.io/blog/2024/10...

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-10-22T13:52:08.578Z

I also worked on supporting audio modality in the OpenAI integration, leading to exciting new use cases.

Audio Multimodality: Expanding AI Interaction with Spring AI and OpenAI
Level up your Java code and explore what Spring can do for you.

One of the big features released recently is support for the Model Context Protocol (MCP), an open protocol designed by Anthropic to standardize how applications provide context to large language models. The brand new Spring AI MCP project introduces a Java SDK for the Model Context Protocol and provides full integration with Spring AI tools and function calling capabilities.

Introducing #SpringAI #MCP: A Java SDK for the Model Context Protocol! Standardize how your Java applications integrate with LLMs, connect to data sources, and build AI-powered tools. Get started now: spring.io/blog/2024/12...

β€” Christian Tzolov (@tzolov.bsky.social) 2024-12-11T13:22:38.903Z

My activity contributing features, improvements, and bug fixes to Spring AI continues. I want to thank the Spring AI team for the incredible support I receive and for the insightful and stimulating conversations we have about artificial intelligence and Java.

Since the last issue of Cloud Native Diary, I have contributed several improvements to Spring AI and have more in the backlog.

  • Designed and implemented initial features for Modular RAG, consolidating the indexing, pre-retrieval, retrieval, and generation modules (#1604, #1644, #1703, #1767, #1794, #1987).
  • Extended the Ollama integration with support for native JSON Structured Output (#1937) and for managing models, including auto-pulling models at startup time (#1532, #1554, #1566, #1570, #1581).
  • Extended the OpenAI integration with support for audio modality (#1561).
  • Extended the Mistral AI integration with support for vision modality (#1930).
  • Introduced null-safety for the ChatClient APIs (#1651, #1654).
  • Other improvements and bug fixes (#1538, #1784, #1835, #1988).

If you're interested in building LLM-powered applications with Java and Spring AI, feel free to check out my GitHub repository. It has tons of examples showcasing the many features of Spring AI and demonstrating actual use cases such as classification, semantic search, structured data extraction, question answering with documents, and chatbots.

GitHub - ThomasVitale/llm-apps-java-spring-ai: Samples showing how to build Java applications powered by Generative AI and LLMs using Spring AI and Spring Boot.
Samples showing how to build Java applications powered by Generative AI and LLMs using Spring AI and Spring Boot. - ThomasVitale/llm-apps-java-spring-ai

GOTO Copenhagen

The recording of my presentation at GOTO Copenhagen is now available on YouTube. I talked about building production-ready LLM-powered applications with Java and Spring AI, combining live coding, live inference, and live music!

Struggling with inspiration? What if Java and AI could help? Join @thomasvitale.com to build a "composer assistant," explore AI-driven software design, and live-score a movie scene together.

β€” GOTO Conferences (@gotocon.com) 2024-12-13T13:00:30.951Z

KCD Denmark

On November 19-20, we held the second KCD Denmark conference and it was a blast! The recordings of all presentations are available on our YouTube channel, check them out!

The organizers of KCD Denmark 2024, celebrating on stage at the end of the conference.

I have many good memories from the event, but the best one is definitely the moment where we donated 350 000 DKK to Coding Pirates, a no-profit organization dedicated to teaching coding skills to kids and supporting girls in pursuing a career in tech.

Closing KCD Denmark with a very meaningful moment: our donation to Coding Pirates of 350 000 DKK, a no-profit organization giving children and young people the opportunity to improve and enhance their IT skills and creativity πŸ’™ #KCDdenmark @kcddenmark.dk

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-11-20T15:10:44.307Z

YOW! Australia

This month, I had the incredible honor and joy of taking part in the YOW! Conference tour in Australia, going from Melbourne to Brisbane to Sydney.

I'm really excited to share that I'll be speaking at the upcoming YOW! Melbourne, Brisbane and Sydney this December 🀩 Can't wait to go on this journey to Australia and present about Java and AI with live coding, live music, and live inference πŸš€ #YOW24 #Java #AI

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-11-22T13:03:26.746Z

Ready for my β€œConcerto for Java and AI” a YOW! Melbourne 🎹 #yow24

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-12-06T03:11:12.572Z

In each city, I took part in a YOW! Conference and presented about building production-ready, LLM-powered applications with Java and Spring AI, including live coding, live inference, and live music! Check out the slides.

@thomasvitale.com wins at slides. #YOW24

β€” Holly Cummins (@holly-cummins.bsky.social) 2024-12-12T00:38:43.270Z

My last presentation was at the exact same time as the OpenAI breakdown after releasing the Sora video generation model. One of my demo applications was based on OpenAI. Panic? No way! Since I was using Spring AI, I could easily swap the OpenAI dependency with the Mistral AI one, and everything worked out. Abstractions are great!

5 minutes before going on stage, I notice that OpenAI is down. And my Java demo is relying on that. What to do? No panic! Just swap the Spring AI OpenAI dependency with the Mistral AI one, and the demo is up and running again, ready for my presentation πŸƒβ˜€οΈ #yow24

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-12-12T02:07:56.459Z

I'm extremely thankful to the organizers for inviting me and for planning such a fantastic tour in eastern Australia. I had the best time meeting the local tech community and sharing a trip with amazing people: fellow speakers (you can find them on Bluesky in this starter pack), organizers, and volunteers. I had the chance to reconnect with old friends and meet many new ones. I'm not gonna lie: it's been really hard adjusting to the daily (winter) life in Denmark after spending two beautiful weeks in sunny Australia!

Cloud Native Ambassador

I'm excited to share that I've been re-accepted as a Cloud Native Ambassador!

Excited to share that I’ve been re-accepted as a #CloudNativeAmbassador! Looking forward to another year of championing Cloud Native and helping it grow even further πŸš€ #CNCF #KubeCon #CloudNativeCon

β€” Thomas Vitale β˜€οΈ (@thomasvitale.com) 2024-11-01T07:54:07.387Z