Skip to content

Commit

Permalink
Add Event.parents property to track event provenance
Browse files Browse the repository at this point in the history
  • Loading branch information
openhands-agent committed Feb 25, 2025
1 parent b93a15e commit 58f8db6
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
17 changes: 17 additions & 0 deletions openhands/events/event.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
from dataclasses import dataclass
from datetime import datetime
from enum import Enum
from typing import List

from openhands.events.tool import ToolCallMetadata
from openhands.llm.metrics import Metrics


@dataclass
class ParentEvent:
id: int
method: str


class EventSource(str, Enum):
AGENT = 'agent'
USER = 'user'
Expand Down Expand Up @@ -107,3 +114,13 @@ def tool_call_metadata(self) -> ToolCallMetadata | None:
@tool_call_metadata.setter
def tool_call_metadata(self, value: ToolCallMetadata) -> None:
self._tool_call_metadata = value

@property
def parents(self) -> List[ParentEvent] | None:
if hasattr(self, '_parents'):
return self._parents # type: ignore[attr-defined]
return None

@parents.setter
def parents(self, value: List[ParentEvent]) -> None:
self._parents = value
39 changes: 39 additions & 0 deletions tests/unit/test_event_parents.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest

from openhands.events.event import Event, ParentEvent


def test_event_parents_property():
# Test initial state
event = Event()
assert event.parents is None

# Test setting and getting parents
parent_events = [
ParentEvent(id=1, method="process_a"),
ParentEvent(id=2, method="process_b")
]
event.parents = parent_events

# Verify parents are set correctly
assert event.parents is not None
assert len(event.parents) == 2
assert event.parents[0].id == 1
assert event.parents[0].method == "process_a"
assert event.parents[1].id == 2
assert event.parents[1].method == "process_b"


def test_parent_event_dataclass():
# Test ParentEvent creation
parent = ParentEvent(id=1, method="test_method")
assert parent.id == 1
assert parent.method == "test_method"

# Test equality
parent2 = ParentEvent(id=1, method="test_method")
assert parent == parent2

# Test different values
parent3 = ParentEvent(id=2, method="other_method")
assert parent != parent3

0 comments on commit 58f8db6

Please sign in to comment.