Skip to content

Commit a2040be

Browse files
google-genai-botcopybara-github
authored andcommitted
feat: Allow EventsCompactionConfig to have a null summarizer initially
The Runner will now attempt to automatically create an LlmEventSummarizer from the agent's model if the provided EventsCompactionConfig does not have a summarizer. The SlidingWindowEventCompactor now includes a check to ensure a summarizer is present before compaction. PiperOrigin-RevId: 856113848
1 parent 66bc30a commit a2040be

File tree

4 files changed

+38
-6
lines changed

4 files changed

+38
-6
lines changed

core/src/main/java/com/google/adk/runner/Runner.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@
2929
import com.google.adk.events.EventActions;
3030
import com.google.adk.flows.llmflows.ResumabilityConfig;
3131
import com.google.adk.memory.BaseMemoryService;
32+
import com.google.adk.models.Model;
3233
import com.google.adk.plugins.BasePlugin;
3334
import com.google.adk.plugins.PluginManager;
3435
import com.google.adk.sessions.BaseSessionService;
3536
import com.google.adk.sessions.InMemorySessionService;
3637
import com.google.adk.sessions.Session;
3738
import com.google.adk.summarizer.EventsCompactionConfig;
39+
import com.google.adk.summarizer.LlmEventSummarizer;
3840
import com.google.adk.summarizer.SlidingWindowEventCompactor;
3941
import com.google.adk.tools.BaseTool;
4042
import com.google.adk.tools.FunctionTool;
@@ -252,7 +254,7 @@ protected Runner(
252254
this.memoryService = memoryService;
253255
this.pluginManager = new PluginManager(plugins);
254256
this.resumabilityConfig = resumabilityConfig;
255-
this.eventsCompactionConfig = eventsCompactionConfig;
257+
this.eventsCompactionConfig = createEventsCompactionConfig(agent, eventsCompactionConfig);
256258
}
257259

258260
/**
@@ -788,5 +790,26 @@ private boolean hasLiveRequestQueueParameter(FunctionTool functionTool) {
788790
.anyMatch(parameter -> parameter.getType().equals(LiveRequestQueue.class));
789791
}
790792

793+
@Nullable
794+
private static EventsCompactionConfig createEventsCompactionConfig(
795+
BaseAgent agent, @Nullable EventsCompactionConfig config) {
796+
if (config == null || config.summarizer() != null) {
797+
return config;
798+
}
799+
LlmEventSummarizer summarizer =
800+
Optional.of(agent)
801+
.filter(LlmAgent.class::isInstance)
802+
.map(LlmAgent.class::cast)
803+
.flatMap(LlmAgent::model)
804+
.flatMap(Model::model)
805+
.map(LlmEventSummarizer::new)
806+
.orElseThrow(
807+
() ->
808+
new IllegalArgumentException(
809+
"No BaseLlm model available for event compaction"));
810+
return new EventsCompactionConfig(
811+
config.compactionInterval(), config.overlapSize(), summarizer);
812+
}
813+
791814
// TODO: run statelessly
792815
}

core/src/main/java/com/google/adk/summarizer/EventsCompactionConfig.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.google.adk.summarizer;
1818

19+
import javax.annotation.Nullable;
20+
1921
/**
2022
* Configuration for event compaction.
2123
*
@@ -27,4 +29,9 @@
2729
* @param summarizer An event summarizer to use for compaction.
2830
*/
2931
public record EventsCompactionConfig(
30-
int compactionInterval, int overlapSize, BaseEventSummarizer summarizer) {}
32+
int compactionInterval, int overlapSize, @Nullable BaseEventSummarizer summarizer) {
33+
34+
public EventsCompactionConfig(int compactionInterval, int overlapSize) {
35+
this(compactionInterval, overlapSize, null);
36+
}
37+
}

core/src/main/java/com/google/adk/summarizer/SlidingWindowEventCompactor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.google.adk.summarizer;
1818

19+
import static com.google.common.base.Preconditions.checkArgument;
20+
1921
import com.google.adk.events.Event;
2022
import com.google.adk.events.EventCompaction;
2123
import com.google.adk.sessions.BaseSessionService;
@@ -97,11 +99,13 @@ public SlidingWindowEventCompactor(EventsCompactionConfig config) {
9799
*/
98100
@Override
99101
public Completable compact(Session session, BaseSessionService sessionService) {
102+
BaseEventSummarizer summarizer = config.summarizer();
103+
checkArgument(summarizer != null, "Missing BaseEventSummarizer for event compaction");
100104
logger.debug("Running event compaction for session {}", session.id());
101105

102106
return Completable.fromMaybe(
103107
getCompactionEvents(session)
104-
.flatMap(config.summarizer()::summarizeEvents)
108+
.flatMap(summarizer::summarizeEvents)
105109
.flatMapSingle(e -> sessionService.appendEvent(session, e)));
106110
}
107111

core/src/test/java/com/google/adk/runner/RunnerTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import com.google.adk.plugins.BasePlugin;
4141
import com.google.adk.sessions.Session;
4242
import com.google.adk.summarizer.EventsCompactionConfig;
43-
import com.google.adk.summarizer.LlmEventSummarizer;
4443
import com.google.adk.testing.TestLlm;
4544
import com.google.adk.testing.TestUtils;
4645
import com.google.adk.testing.TestUtils.EchoTool;
@@ -134,8 +133,7 @@ public void eventsCompaction_enabled() {
134133

135134
Runner runner =
136135
Runner.builder()
137-
.eventsCompactionConfig(
138-
new EventsCompactionConfig(1, 0, new LlmEventSummarizer(testLlm)))
136+
.eventsCompactionConfig(new EventsCompactionConfig(1, 0))
139137
.agent(agent)
140138
.sessionService(this.runner.sessionService())
141139
.appName(this.runner.appName())

0 commit comments

Comments
 (0)