mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-04-29 03:00:45 -04:00
* use generic types post python 3.10 * use newer optional * a lost list * fix integration tests
87 lines
2.4 KiB
Python
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,
|
|
}
|