Spaces:
Build error
Build error
File size: 3,878 Bytes
51ff9e5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
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
@abstractmethod
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.
"""
@deprecated('Use search_events instead')
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),
)
@abstractmethod
def get_event(self, id: int) -> Event:
"""Retrieve a single event from the event stream. Raise a FileNotFoundError if there was no such event"""
@abstractmethod
def get_latest_event(self) -> Event:
"""Get the latest event from the event stream"""
@abstractmethod
def get_latest_event_id(self) -> int:
"""Get the id of the latest event from the event stream"""
@deprecated('use search_events instead')
def filtered_events_by_source(self, source: EventSource) -> Iterable[Event]:
yield from self.search_events(filter=EventFilter(source=source))
@deprecated('use search_events instead')
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))
|