Awesome
Gemini in Java with Vertex AI and Spring AI
Gemini workshop for Java developers, using the Spring AI orchestration framework
[!NOTE] This is the code for Gemini in Java with Vertex AI and Spring AI codelab geared towards Java developers to discover Gemini and its open-source variant Gemma Large Language Model by Google using Spring AI framework.
Prerequisites
The code examples have been tested on the following environment:
- Java 21
- Maven >= 3.9.6
In order to run these examples, you need to have a Google Cloud account and project ready.
Before running the examples, you'll need to set up three environment variables:
export VERTEX_AI_GEMINI_PROJECT_ID=<your-project-id>
export VERTEX_AI_GEMINI_LOCATION=us-central1
export VERTEX_AI_GEMINI_MODEL=gemini-1.5-pro-001
# Note: you can test in another region or using the gemini-1.5-flash-001 model
[!IMPORTANT] Please update the project ID and location to match your project and select the model of your choice
Create the Maven wrapper:
mvn wrapper:wrapper
Codelab Samples
The samples in this codelab 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
- Document utilities
- Document Readers and Splitters
- Embeddings
- Generating Text Embeddings with Vertex AI
- Generating Multimodal Embeddings with Vertex AI
- 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
Build
[!TIP] Note the profiles
complete
used for the build
Build the samples in a single JAR, then run them individually for the respective use-case:
./mvnw clean package -Pcomplete
Run
[!TIP] 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 Vertex 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
-
-
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 Vertex AI
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.TextEmbeddingExample
-
Generating Multimodal Embeddings with Vertex AI
java -cp ./target/spring-ai-workshop-1.0.0-jar-with-dependencies.jar gemini.workshop.MultimodalEmbeddingExample
-
-
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.