CoolFace
Apppublic

Backup-bdg/OpenHands

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes
utils.py61 linesDownload Raw Back to events
1from openhands.core.logger import openhands_logger as logger2from openhands.events.action.action import Action3from openhands.events.action.empty import NullAction4from openhands.events.event import Event5from openhands.events.observation import (6    CmdOutputObservation,7    NullObservation,8    Observation,9)10 11 12def get_pairs_from_events(events: list[Event]) -> list[tuple[Action, Observation]]:13    """Return the history as a list of tuples (action, observation).14 15    This function is a compatibility function for evals reading and visualization working with old histories."""16    tuples: list[tuple[Action, Observation]] = []17    action_map: dict[int, Action] = {}18    observation_map: dict[int, Observation] = {}19 20    # runnable actions are set as cause of observations21    # (MessageAction, NullObservation) for source=USER22    # (MessageAction, NullObservation) for source=AGENT23    # (other_action?, NullObservation)24    # (NullAction, CmdOutputObservation) background CmdOutputObservations25 26    for event in events:27        if event.id is None or event.id == -1:28            logger.debug(f'Event {event} has no ID')29 30        if isinstance(event, Action):31            action_map[event.id] = event32 33        if isinstance(event, Observation):34            if event.cause is None or event.cause == -1:35                logger.debug(f'Observation {event} has no cause')36 37            if event.cause is None:38                # runnable actions are set as cause of observations39                # NullObservations have no cause40                continue41 42            observation_map[event.cause] = event43 44    for action_id, action in action_map.items():45        observation = observation_map.get(action_id)46        if observation:47            # observation with a cause48            tuples.append((action, observation))49        else:50            tuples.append((action, NullObservation('')))51 52    for cause_id, observation in observation_map.items():53        if cause_id not in action_map:54            if isinstance(observation, NullObservation):55                continue56            if not isinstance(observation, CmdOutputObservation):57                logger.debug(f'Observation {observation} has no cause')58            tuples.append((NullAction(), observation))59 60    return tuples.copy()61