Spaces:
Build error
Build error
| from dataclasses import dataclass | |
| from datetime import datetime | |
| from enum import Enum | |
| from openhands.events.tool import ToolCallMetadata | |
| from openhands.llm.metrics import Metrics | |
| class EventSource(str, Enum): | |
| AGENT = 'agent' | |
| USER = 'user' | |
| ENVIRONMENT = 'environment' | |
| class FileEditSource(str, Enum): | |
| LLM_BASED_EDIT = 'llm_based_edit' | |
| OH_ACI = 'oh_aci' # openhands-aci | |
| class FileReadSource(str, Enum): | |
| OH_ACI = 'oh_aci' # openhands-aci | |
| DEFAULT = 'default' | |
| class RecallType(str, Enum): | |
| """The type of information that can be retrieved from microagents.""" | |
| WORKSPACE_CONTEXT = 'workspace_context' | |
| """Workspace context (repo instructions, runtime, etc.)""" | |
| KNOWLEDGE = 'knowledge' | |
| """A knowledge microagent.""" | |
| class Event: | |
| INVALID_ID = -1 | |
| def message(self) -> str | None: | |
| if hasattr(self, '_message'): | |
| msg = getattr(self, '_message') | |
| return str(msg) if msg is not None else None | |
| return '' | |
| def id(self) -> int: | |
| if hasattr(self, '_id'): | |
| id_val = getattr(self, '_id') | |
| return int(id_val) if id_val is not None else Event.INVALID_ID | |
| return Event.INVALID_ID | |
| def timestamp(self) -> str | None: | |
| if hasattr(self, '_timestamp') and isinstance(self._timestamp, str): | |
| ts = getattr(self, '_timestamp') | |
| return str(ts) if ts is not None else None | |
| return None | |
| def timestamp(self, value: datetime) -> None: | |
| if isinstance(value, datetime): | |
| self._timestamp = value.isoformat() | |
| def source(self) -> EventSource | None: | |
| if hasattr(self, '_source'): | |
| src = getattr(self, '_source') | |
| return EventSource(src) if src is not None else None | |
| return None | |
| def cause(self) -> int | None: | |
| if hasattr(self, '_cause'): | |
| cause_val = getattr(self, '_cause') | |
| return int(cause_val) if cause_val is not None else None | |
| return None | |
| def timeout(self) -> float | None: | |
| if hasattr(self, '_timeout'): | |
| timeout_val = getattr(self, '_timeout') | |
| return float(timeout_val) if timeout_val is not None else None | |
| return None | |
| def set_hard_timeout(self, value: float | None, blocking: bool = True) -> None: | |
| """Set the timeout for the event. | |
| NOTE, this is a hard timeout, meaning that the event will be blocked | |
| until the timeout is reached. | |
| """ | |
| self._timeout = value | |
| if value is not None and value > 600: | |
| from openhands.core.logger import openhands_logger as logger | |
| logger.warning( | |
| 'Timeout greater than 600 seconds may not be supported by ' | |
| 'the runtime. Consider setting a lower timeout.' | |
| ) | |
| # Check if .blocking is an attribute of the event | |
| if hasattr(self, 'blocking'): | |
| # .blocking needs to be set to True if .timeout is set | |
| self.blocking = blocking | |
| # optional metadata, LLM call cost of the edit | |
| def llm_metrics(self) -> Metrics | None: | |
| if hasattr(self, '_llm_metrics'): | |
| metrics = getattr(self, '_llm_metrics') | |
| return metrics if isinstance(metrics, Metrics) else None | |
| return None | |
| def llm_metrics(self, value: Metrics) -> None: | |
| self._llm_metrics = value | |
| # optional field, metadata about the tool call, if the event has a tool call | |
| def tool_call_metadata(self) -> ToolCallMetadata | None: | |
| if hasattr(self, '_tool_call_metadata'): | |
| metadata = getattr(self, '_tool_call_metadata') | |
| return metadata if isinstance(metadata, ToolCallMetadata) else None | |
| return None | |
| def tool_call_metadata(self, value: ToolCallMetadata) -> None: | |
| self._tool_call_metadata = value | |
| # optional field, the id of the response from the LLM | |
| def response_id(self) -> str | None: | |
| if hasattr(self, '_response_id'): | |
| return self._response_id # type: ignore[attr-defined] | |
| return None | |
| def response_id(self, value: str) -> None: | |
| self._response_id = value | |