Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion core/src/main/java/com/google/adk/runner/Runner.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,14 @@
import com.google.adk.events.EventActions;
import com.google.adk.flows.llmflows.ResumabilityConfig;
import com.google.adk.memory.BaseMemoryService;
import com.google.adk.models.Model;
import com.google.adk.plugins.BasePlugin;
import com.google.adk.plugins.PluginManager;
import com.google.adk.sessions.BaseSessionService;
import com.google.adk.sessions.InMemorySessionService;
import com.google.adk.sessions.Session;
import com.google.adk.summarizer.EventsCompactionConfig;
import com.google.adk.summarizer.LlmEventSummarizer;
import com.google.adk.summarizer.SlidingWindowEventCompactor;
import com.google.adk.tools.BaseTool;
import com.google.adk.tools.FunctionTool;
Expand Down Expand Up @@ -252,7 +254,7 @@ protected Runner(
this.memoryService = memoryService;
this.pluginManager = new PluginManager(plugins);
this.resumabilityConfig = resumabilityConfig;
this.eventsCompactionConfig = eventsCompactionConfig;
this.eventsCompactionConfig = createEventsCompactionConfig(agent, eventsCompactionConfig);
}

/**
Expand Down Expand Up @@ -786,5 +788,26 @@ private boolean hasLiveRequestQueueParameter(FunctionTool functionTool) {
.anyMatch(parameter -> parameter.getType().equals(LiveRequestQueue.class));
}

@Nullable
private static EventsCompactionConfig createEventsCompactionConfig(
BaseAgent agent, @Nullable EventsCompactionConfig config) {
if (config == null || config.summarizer() != null) {
return config;
}
LlmEventSummarizer summarizer =
Optional.of(agent)
.filter(LlmAgent.class::isInstance)
.map(LlmAgent.class::cast)
.flatMap(LlmAgent::model)
.flatMap(Model::model)
.map(LlmEventSummarizer::new)
.orElseThrow(
() ->
new IllegalArgumentException(
"No BaseLlm model available for event compaction"));
return new EventsCompactionConfig(
config.compactionInterval(), config.overlapSize(), summarizer);
}

// TODO: run statelessly
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.adk.summarizer;

import javax.annotation.Nullable;

/**
* Configuration for event compaction.
*
Expand All @@ -27,4 +29,9 @@
* @param summarizer An event summarizer to use for compaction.
*/
public record EventsCompactionConfig(
int compactionInterval, int overlapSize, BaseEventSummarizer summarizer) {}
int compactionInterval, int overlapSize, @Nullable BaseEventSummarizer summarizer) {

public EventsCompactionConfig(int compactionInterval, int overlapSize) {
this(compactionInterval, overlapSize, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.adk.summarizer;

import static com.google.common.base.Preconditions.checkArgument;

import com.google.adk.events.Event;
import com.google.adk.events.EventCompaction;
import com.google.adk.sessions.BaseSessionService;
Expand Down Expand Up @@ -97,11 +99,13 @@ public SlidingWindowEventCompactor(EventsCompactionConfig config) {
*/
@Override
public Completable compact(Session session, BaseSessionService sessionService) {
BaseEventSummarizer summarizer = config.summarizer();
checkArgument(summarizer != null, "Missing BaseEventSummarizer for event compaction");
logger.debug("Running event compaction for session {}", session.id());

return Completable.fromMaybe(
getCompactionEvents(session)
.flatMap(config.summarizer()::summarizeEvents)
.flatMap(summarizer::summarizeEvents)
.flatMapSingle(e -> sessionService.appendEvent(session, e)));
}

Expand Down
4 changes: 1 addition & 3 deletions core/src/test/java/com/google/adk/runner/RunnerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import com.google.adk.plugins.BasePlugin;
import com.google.adk.sessions.Session;
import com.google.adk.summarizer.EventsCompactionConfig;
import com.google.adk.summarizer.LlmEventSummarizer;
import com.google.adk.testing.TestLlm;
import com.google.adk.testing.TestUtils;
import com.google.adk.testing.TestUtils.EchoTool;
Expand Down Expand Up @@ -134,8 +133,7 @@ public void eventsCompaction_enabled() {

Runner runner =
Runner.builder()
.eventsCompactionConfig(
new EventsCompactionConfig(1, 0, new LlmEventSummarizer(testLlm)))
.eventsCompactionConfig(new EventsCompactionConfig(1, 0))
.agent(agent)
.sessionService(this.runner.sessionService())
.appName(this.runner.appName())
Expand Down