Class GoogleGenAiChatModel

java.lang.Object
org.springframework.ai.google.genai.GoogleGenAiChatModel
All Implemented Interfaces:
ChatModel, StreamingChatModel, Model<Prompt,ChatResponse>, StreamingModel<Prompt,ChatResponse>, org.springframework.beans.factory.DisposableBean

public class GoogleGenAiChatModel extends Object implements ChatModel, org.springframework.beans.factory.DisposableBean
Google GenAI Chat Model implementation that provides access to Google's Gemini language models.

Key features include:

  • Support for multiple Gemini model versions including Gemini Pro, Gemini 1.5 Pro, Gemini 1.5/2.0 Flash variants
  • Tool/Function calling capabilities through ToolCallingManager
  • Streaming support via stream(Prompt) method
  • Configurable safety settings through GoogleGenAiSafetySetting
  • Support for system messages and multi-modal content (text and images)
  • Built-in retry mechanism and observability through Micrometer
  • Google Search Retrieval integration

The model can be configured with various options including temperature, top-k, top-p sampling, maximum output tokens, and candidate count through GoogleGenAiChatOptions.

A response candidate is one Generation whose parts mirror the Gemini parts in order, each with its thought signature as an OpaquePayload, so that the message replays to Gemini as it was produced and the model keeps its reasoning context across tool-call rounds. See responseCandidateToGeneration(Candidate) for the mapping.

Use the GoogleGenAiChatModel.Builder to create instances with custom configurations:


 GoogleGenAiChatModel model = GoogleGenAiChatModel.builder()
 		.genAiClient(genAiClient)
 		.options(options)
 		.toolCallingManager(toolManager)
 		.build();
 
Since:
0.8.1
Author:
Christian Tzolov, Grogdunn, luocongqiu, Chris Turchin, Mark Pollack, Soby Chacko, Jihoon Kim, Alexandros Pappas, Ilayaperumal Gopinathan, Dan Dobrin, Thomas Vitale, Sebastien Deleuze, Dimitar Proynov
See Also:
  • Field Details

  • Constructor Details

    • GoogleGenAiChatModel

      public GoogleGenAiChatModel(com.google.genai.Client genAiClient, GoogleGenAiChatOptions options, ToolCallingManager toolCallingManager, org.springframework.core.retry.RetryTemplate retryTemplate, io.micrometer.observation.ObservationRegistry observationRegistry)
      Creates a new instance of GoogleGenAiChatModel.
      Parameters:
      genAiClient - the GenAI Client instance to use
      options - the default options to use
      toolCallingManager - the tool calling manager to use. It is wrapped in a GoogleGenAiToolCallingManager to ensure compatibility with Vertex AI's OpenAPI schema format.
      retryTemplate - the retry template to use
      observationRegistry - the observation registry to use
  • Method Details

    • call

      public ChatResponse call(Prompt prompt)
      Description copied from interface: Model
      Executes a method call to the AI model.
      Specified by:
      call in interface ChatModel
      Specified by:
      call in interface Model<Prompt,ChatResponse>
      Parameters:
      prompt - the request object to be sent to the AI model
      Returns:
      the response from the AI model
    • stream

      public reactor.core.publisher.Flux<ChatResponse> stream(Prompt prompt)
      Description copied from interface: StreamingModel
      Executes a method call to the AI model.
      Specified by:
      stream in interface ChatModel
      Specified by:
      stream in interface StreamingChatModel
      Specified by:
      stream in interface StreamingModel<Prompt,ChatResponse>
      Parameters:
      prompt - the request object to be sent to the AI model
      Returns:
      the streaming response from the AI model
    • responseCandidateToGeneration

      protected List<Generation> responseCandidateToGeneration(com.google.genai.types.Candidate candidate)
      Converts a response candidate to a single generation whose message holds the Gemini parts, in order, as MessageParts: thought text as ReasoningPart, answer text as TextPart, function calls as ToolCallPart, inline data as MediaPart, and anything else (server-side tool calls and responses, executable code, code execution results, file data) as UnknownPart, kept verbatim for replay. A thought signature becomes the OpaquePayload of the part that carried it.

      The streaming path maps every chunk through this method too, so an override applies to both call(Prompt) and stream(Prompt). When streaming, the parts of the returned message are stamped with a content block index; a message of an AssistantMessage subclass is passed through as returned instead, since its parts cannot be restamped without losing its type, and is aggregated the way messages without indexed parts are.

      Parameters:
      candidate - the response candidate
      Returns:
      a single-element list holding the generation
    • getOptions

      public GoogleGenAiChatOptions getOptions()
      Description copied from interface: ChatModel
      Gets the chat options for this model.
      Specified by:
      getOptions in interface ChatModel
      Returns:
      the chat options
      Since:
      2.0.0
    • getCachedContentService

      public @Nullable GoogleGenAiCachedContentService getCachedContentService()
      Gets the cached content service for managing cached content.
      Returns:
      the cached content service
    • destroy

      public void destroy() throws Exception
      Specified by:
      destroy in interface org.springframework.beans.factory.DisposableBean
      Throws:
      Exception
    • setObservationConvention

      public void setObservationConvention(ChatModelObservationConvention observationConvention)
      Use the provided convention for reporting observation data
      Parameters:
      observationConvention - The provided convention
    • builder

      public static GoogleGenAiChatModel.Builder builder()