Class ContextFilterPlugin

java.lang.Object
com.google.adk.plugins.BasePlugin
com.google.adk.plugins.ContextFilterPlugin
All Implemented Interfaces:
Plugin

public class ContextFilterPlugin extends BasePlugin
A plugin that filters the LLM request Content list to reduce its size, for example to adhere to context window limits.

This plugin can be configured to trim the conversation history based on one or both of the following criteria:

  • numInvocationsToKeep(N): Retains only the last N model turns and any preceding user turns. If multiple user messages appear consecutively before a model message, all of them are kept as part of that model invocation window.
  • customFilter(): Applies a custom UnaryOperator to filter the list of Content objects. If numInvocationsToKeep is also specified, the custom filter is applied after the invocation-based trimming occurs.

Function Call Handling: The plugin ensures that if a FunctionResponse is included in the filtered list, its corresponding FunctionCall is also included. If filtering would otherwise exclude the FunctionCall, the window is automatically expanded to include it, preventing orphaned function responses.

If no filtering options are provided, this plugin has no effect. If the customFilter throws an exception during execution, filtering is aborted, and the LlmRequest is not modified.

  • Constructor Details

  • Method Details

    • builder

      public static ContextFilterPlugin.Builder builder()
    • beforeModelCallback

      public io.reactivex.rxjava3.core.Maybe<LlmResponse> beforeModelCallback(CallbackContext callbackContext, LlmRequest.Builder llmRequest)
      Filters the LLM request context by trimming recent turns and applying any custom filter.

      If numInvocationsToKeep is set, this method retains only the most recent model turns and their preceding user turns. It ensures that function calls and responses remain paired. If a customFilter is provided, it is applied to the list after trimming.

      Parameters:
      callbackContext - The context of the callback.
      llmRequest - The request builder whose contents will be updated in place.
      Returns:
      Maybe.empty() as this plugin only modifies the request builder.