Refactor agent controller's filter (#8792)

This commit is contained in:
Engel Nyst 2025-05-29 19:59:34 +02:00 committed by GitHub
parent 542be7338e
commit df2374bd85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,7 +5,7 @@ import copy
import os
import time
import traceback
from typing import Callable, ClassVar
from typing import Callable
import litellm # noqa
from litellm.exceptions import ( # noqa
@ -61,6 +61,7 @@ from openhands.events.action import (
)
from openhands.events.action.agent import CondensationAction, RecallAction
from openhands.events.event import Event
from openhands.events.event_filter import EventFilter
from openhands.events.observation import (
AgentDelegateObservation,
AgentStateChangedObservation,
@ -93,12 +94,6 @@ class AgentController:
delegate: 'AgentController | None' = None
_pending_action_info: tuple[Action, float] | None = None # (action, timestamp)
_closed: bool = False
filter_out: ClassVar[tuple[type[Event], ...]] = (
NullAction,
NullObservation,
ChangeAgentStateAction,
AgentStateChangedObservation,
)
_cached_first_user_message: MessageAction | None = None
def __init__(
@ -150,6 +145,18 @@ class AgentController:
EventStreamSubscriber.AGENT_CONTROLLER, self.on_event, self.id
)
# filter out events that are not relevant to the agent
# so they will not be included in the agent history
self.agent_history_filter = EventFilter(
exclude_types=(
NullAction,
NullObservation,
ChangeAgentStateAction,
AgentStateChangedObservation,
),
exclude_hidden=True,
)
# state from the previous session, state from a parent agent, or a fresh state
self.set_initial_state(
state=initial_state,
@ -219,12 +226,11 @@ class AgentController:
else self.event_stream.get_latest_event_id()
)
self.state.history = list(
self.event_stream.get_events(
self.event_stream.search_events(
start_id=start_id,
end_id=end_id,
reverse=False,
filter_out_type=self.filter_out,
filter_hidden=True,
filter=self.agent_history_filter,
)
)
@ -406,7 +412,7 @@ class AgentController:
return
# if the event is not filtered out, add it to the history
if not any(isinstance(event, filter_type) for filter_type in self.filter_out):
if self.agent_history_filter.include(event):
self.state.history.append(event)
if isinstance(event, Action):
@ -1091,12 +1097,11 @@ class AgentController:
# Get rest of history
events_to_add = list(
self.event_stream.get_events(
self.event_stream.search_events(
start_id=start_id,
end_id=end_id,
reverse=False,
filter_out_type=self.filter_out,
filter_hidden=True,
filter=self.agent_history_filter,
)
)
events.extend(events_to_add)