Spaces:
Build error
Build error
from abc import abstractmethod | |
from itertools import islice | |
from typing import Iterable | |
from deprecated import deprecated # type: ignore | |
from openhands.events.event import Event, EventSource | |
from openhands.events.event_filter import EventFilter | |
class EventStoreABC: | |
""" | |
A stored list of events backing a conversation | |
""" | |
sid: str | |
user_id: str | None | |
def search_events( | |
self, | |
start_id: int = 0, | |
end_id: int | None = None, | |
reverse: bool = False, | |
filter: EventFilter | None = None, | |
limit: int | None = None, | |
) -> Iterable[Event]: | |
""" | |
Retrieve events from the event stream, optionally excluding events using a filter | |
Args: | |
start_id: The ID of the first event to retrieve. Defaults to 0. | |
end_id: The ID of the last event to retrieve. Defaults to the last event in the stream. | |
reverse: Whether to retrieve events in reverse order. Defaults to False. | |
filter: An optional event filter | |
Yields: | |
Events from the stream that match the criteria. | |
""" | |
def get_events( | |
self, | |
start_id: int = 0, | |
end_id: int | None = None, | |
reverse: bool = False, | |
filter_out_type: tuple[type[Event], ...] | None = None, | |
filter_hidden: bool = False, | |
) -> Iterable[Event]: | |
yield from self.search_events( | |
start_id, | |
end_id, | |
reverse, | |
EventFilter(exclude_types=filter_out_type, exclude_hidden=filter_hidden), | |
) | |
def get_event(self, id: int) -> Event: | |
"""Retrieve a single event from the event stream. Raise a FileNotFoundError if there was no such event""" | |
def get_latest_event(self) -> Event: | |
"""Get the latest event from the event stream""" | |
def get_latest_event_id(self) -> int: | |
"""Get the id of the latest event from the event stream""" | |
def filtered_events_by_source(self, source: EventSource) -> Iterable[Event]: | |
yield from self.search_events(filter=EventFilter(source=source)) | |
def get_matching_events( | |
self, | |
query: str | None = None, | |
event_types: tuple[type[Event], ...] | None = None, | |
source: str | None = None, | |
start_date: str | None = None, | |
end_date: str | None = None, | |
start_id: int = 0, | |
limit: int = 100, | |
reverse: bool = False, | |
) -> list[Event]: | |
"""Get matching events from the event stream based on filters. | |
Args: | |
query: Text to search for in event content | |
event_types: Filter by event type classes (e.g., (FileReadAction, ) ). | |
source: Filter by event source | |
start_date: Filter events after this date (ISO format) | |
end_date: Filter events before this date (ISO format) | |
start_id: Starting ID in the event stream. Defaults to 0 | |
limit: Maximum number of events to return. Must be between 1 and 100. Defaults to 100 | |
reverse: Whether to retrieve events in reverse order. Defaults to False. | |
Returns: | |
list: List of matching events (as dicts) | |
""" | |
if limit < 1 or limit > 100: | |
raise ValueError('Limit must be between 1 and 100') | |
events = self.search_events( | |
start_id=start_id, | |
reverse=reverse, | |
filter=EventFilter( | |
query=query, | |
include_types=event_types, | |
source=source, | |
start_date=start_date, | |
end_date=end_date, | |
), | |
) | |
return list(islice(events, limit)) | |