I Built an AI Meeting Summarizer with Spring AI — Here's How (and Why) A developer built an AI meeting summarizer using Java and Spring AI, integrating OpenAI's Whisper for transcription, AssemblyAI for speaker detection, and GPT-4o-mini for generating structured summaries. The tool accepts audio files and outputs meeting titles, overviews, key decisions, and action items. 🚀 The Problem Wait, what did we decide in that meeting? We've all been there. You have a productive meeting, everyone agrees on action items, and by the next day, nobody remembers who was supposed to do what. I wanted to fix this. So I built a tool that: The best part? It works with any audio file — upload an MP3, and get a structured summary in seconds. And I built it entirely with Java and Spring AI. 🛠️ The Tech Stack Component Technology Purpose Framework Spring Boot 3.4.x Application backbone AI Integration Spring AI 1.0.3 Unified AI abstraction Transcription OpenAI Whisper Speech-to-text Speaker Detection AssemblyAI Speaker diarization Summary Generation GPT-4o-mini LLM-powered summarization Why this stack? Spring AI is the killer feature. It provides a clean, Spring-native way to interact with AI models. No boilerplate HTTP clients. No manual JSON parsing. 🧠 How It Works Step 1 : Transcribe with Whisper Spring AI provides OpenAiAudioTranscriptionModel. I inject it directly into my service: @Service public class TranscriptionService { private final OpenAiAudioTranscriptionModel transcriptionModel; @Autowired public TranscriptionService OpenAiAudioTranscriptionModel transcriptionModel { this.transcriptionModel = transcriptionModel; } public String transcribe File audioFile { AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt new FileSystemResource audioFile , AudioTranscriptionPrompt.builder .withModel "whisper-1" .withResponseFormat TranscriptResponseFormat.JSON .withLanguage "en" .build ; AudioTranscriptionResponse response = transcriptionModel.call prompt ; return response.getResult .getOutput ; } } Step 2 : Detect Speakers with AssemblyAI Spring AI doesn't have built-in speaker diarization, so I integrated AssemblyAI for this. @Service public class SpeakerDetectionService { private String uploadAudio File audioFile throws IOException { // Upload to AssemblyAI // Returns upload url } private String submitTranscription String audioUrl { // Submit with speaker labels: true // Returns transcript ID } private List