Gemini workshop for Java developers, using the Spring AI orchestration framework
Note
These snippets are geared towards Java developers, allowing them to discover capabilities and patterns supported by Gemini using the Spring AI framework.
- Released
- Spring AI 1.1.1
- Google GenAI SDK 1.28.0
- Milestone
- upcoming Spring AI 2.0.0
The code snippets have been tested on the following environment:
- Java 21/25
- Maven >= 3.9.6
In order to run these code snippets, you need to have a Google Cloud account and project ready.
Before running the examples, you'll need to set up environment variables, for either Google credentials or or an API Key from Google AI Studio:
Credentials:
Google creds set:
export GOOGLE_CLOUD_PROJECT=<your-project-id>
export GOOGLE_CLOUD_LOCATION=<your region>, ex: us-central1
export USE_VERTEX_AI=true
Google API Key:
export GOOGLE_API_KEY=...
export USE_VERTEX_AI=false
Model:
export GEMINI_MODEL=<model>, ex: gemini-3-pro-preview, gemini-2.5-flashImportant
Please update the project ID and location to match your project and select the model of your choice
Create the Maven wrapper:
mvn wrapper:wrapperThe snippets in this workshop are grouped by various capabilities and patterns. You will find, in order:
- Chat
- Simple Q&A with Gemini
- Conversation with Gemini with chat history
- Simple Q&A via streaming
- Multimodality
- Analyzing & extracting image data using Multimodality
- Transcribing audio data using Multimodality
- Transcribing video data using Multimodality
- Capabilities
- Structure prompts with prompt templates
- Extracting structured data from unstructured text
- Grounding responses with Web Search
- Function Calling with Spring AI (multiple functions, JSON Schema, Async, Streaming)
- Document utilities
- Document Readers and Splitters
- Embeddings
- Generating Text Embeddings with Vertex AI
- Generating Multimodal Embeddings with Vertex AI
- Token Management
- Compute Tokens
- Count Tokens
- Count Tokens with Configs
- File Search Store
- File Search Store (Sync)
- File Search Store (Async)
- AI use-cases and patterns
- Retrieval-augmented generation(RAG)
- Text classification with Few-shot prompting
- Sentiment analysis with few-shot prompting
- Summarization Patterns with Gemini: Stuffing, Map-Reduce Patterns
- Local environments
- Running Open-models with Ollama and Testcontainers
Tip
Note the profile complete used for the build
Build the samples in a single JAR, then run them individually for the respective use-case:
./mvnw clean package -PcompleteTip
List of samples, by use-case. Each sample can be run independently
-
Chat
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.SimpleChatExample
-
Conversation with Gemini with chat history
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.ConversationExample
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.SimpleChatStreamingExample
-
-
Multimodality
-
Analyzing & extracting image data using Multimodality
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.MultimodalImagesExample
-
Transcribing audio data using Multimodality
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.MultimodalAudioExample
-
Transcribing video data using Multimodality
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.MultimodalVideoExample
-
-
Capabilities
-
Structure prompts with prompt templates
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.WorkingWithTemplatesExample
-
Extracting structured data from unstructured text
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.StructuredOutputExample
-
Grounding responses with Web Search with GenAI SDK SDK
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.GroundingWithWebsearchExample
-
Grounding responses with Web Search with SpringAI
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.GroundingWithWebsearchSpringAIExample
-
Function Calling with Spring AI
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FunctionCallingExample
-
Function Calling with Spring AI (Streaming)
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FunctionCallingStreamingExample
-
Function Calling with Spring AI (Multiple Functions)
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FunctionCallingMultipleExample
-
Function Calling with Spring AI (Async)
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FunctionCallingAsyncExample
-
Function Calling with Spring AI (JSON Schema)
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FunctionCallingJsonSchemaExample
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FileSearchStoreExample
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.FileSearchStoreAsyncExample
-
-
Document utilities
- Document Readers and Splitters
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.DocumentProcessingExample
- Document Readers and Splitters
-
Embeddings
-
Generating Text Embeddings with GenAI SDK
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.TextEmbeddingExample
-
Generating Multimodal Embeddings with GenAI SDK
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.MultimodalEmbeddingExample
-
-
Token Management
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.ComputeTokensExample
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.CountTokensExample
-
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.CountTokensWithConfigsExample
-
-
AI use-cases and patterns
-
Retrieval-augmented generation(RAG)
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.RAGExample
-
Text classification with Few-shot prompting
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.TextClassificationExample
-
Sentiment analysis with Few-shot prompting
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.SentimentAnalysisExample
-
Summarization Patterns with Gemini: Stuffing, Map-Reduce Patterns
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.SummarizationExample
-
-
Local environments
- Running Open-models with Ollama and Testcontainers
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.LocalTestingWithOllamaContainers
- Running Open-models with Ollama and Testcontainers
This is not an official Google product.