Files
OpenHands/evaluation/mint/datatypes.py
Engel Nyst f9f96dd429 Use generic types (#3414)
* use generic types post python 3.10

* use newer optional

* a lost list

* fix integration tests
2024-08-16 06:41:57 -04:00

87 lines
2.4 KiB
Python

import enum
from typing import Any
class TaskState:
def __init__(
self,
finished: bool = False,
success: bool = False,
agent_action_count: dict = None,
terminate_reason: str = None,
latest_output: dict[str, Any] = None,
):
self.finished = finished
self.success = success
self.agent_action_count: dict[str, int] = (
agent_action_count
if agent_action_count
else {
'propose_solution': 0,
'use_tool': 0,
'invalid_action': 0,
}
)
self.terminate_reason = terminate_reason
self.latest_output = latest_output
def to_dict(self) -> dict[str, Any]:
return {
'finished': self.finished,
'success': self.success,
'agent_action_count': self.agent_action_count,
'terminate_reason': self.terminate_reason,
'latest_output': self.latest_output,
}
class ParseError(Exception):
pass
class FeedbackType(enum.Enum):
FEEDBACK_WITH_GT = 'feedback_with_gt'
FEEDBACK_WO_GT = 'feedback_wo_gt'
NO_FEEDBACK = 'no_feedback'
class StepOutput:
def __init__(
self,
observation: str = None,
success: bool = False,
extra: dict[str, Any] = None,
turn_info: tuple[int, int] = None,
):
self.observation: str = observation
self.success: bool = success
self.extra: dict[str, Any] = extra
self.turn_info = turn_info
def __repr__(self) -> str:
return self.observation
def to_str(self) -> str:
output = 'Observation:\n'
if self.observation is not None:
output += self.observation + '\n'
else:
if not self.success:
output += 'Your answer is wrong.\n'
if self.turn_info is not None:
n_steps_left, n_propose_solution_left = self.turn_info
output += 'You have {} steps left and {} chances to propose solution left.\n'.format(
n_steps_left, n_propose_solution_left
)
if n_steps_left <= 1:
output += 'You should take the last step to propose a solution.\n'
return output
def to_dict(self) -> dict[str, Any]:
return {
'observation': self.observation,
'success': self.success,
}