Skip to content

Commit 534d362

Browse files
Create AgentServerErrorEvent for server-level errors
Create a new AgentServerErrorEvent class in the agent server models to distinguish server-level errors (like MCP connection failures, WebSocket errors) from conversation-level errors. This provides better semantic separation - ConversationErrorEvent is for conversation runtime failures while AgentServerErrorEvent is for infrastructure/server issues. The sockets.py now uses AgentServerErrorEvent instead of ConversationErrorEvent when sending error events over the WebSocket connection. Co-authored-by: openhands <openhands@all-hands.dev>
1 parent 9cbdba2 commit 534d362

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

openhands-agent-server/openhands/agent_server/models.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
from pydantic import BaseModel, Discriminator, Field, Tag, field_validator
88

99
from openhands.agent_server.utils import OpenHandsUUID, utc_now
10-
from openhands.sdk import LLM, Agent, Event, ImageContent, Message, TextContent
10+
from openhands.sdk import LLM, Agent, ImageContent, Message, TextContent
1111
from openhands.sdk.agent.acp_agent import ACPAgent
1212
from openhands.sdk.conversation.conversation_stats import ConversationStats
1313
from openhands.sdk.conversation.secret_registry import SecretRegistry
1414
from openhands.sdk.conversation.state import ConversationExecutionStatus
15+
from openhands.sdk.event.base import Event
1516
from openhands.sdk.hooks import HookConfig
1617
from openhands.sdk.llm.utils.metrics import MetricsSnapshot
1718
from openhands.sdk.plugin import PluginSource
@@ -31,6 +32,19 @@
3132
from openhands.sdk.workspace.base import BaseWorkspace
3233

3334

35+
class AgentServerErrorEvent(Event):
36+
"""Event emitted by the agent server when a server-level error occurs.
37+
38+
This event is used for errors that originate from the agent server itself,
39+
such as MCP connection failures, WebSocket errors, or other infrastructure
40+
issues. Unlike ConversationErrorEvent which is for conversation-level failures,
41+
this event indicates a problem with the server environment.
42+
"""
43+
44+
code: str = Field(description="Code for the error - typically an error type")
45+
detail: str = Field(description="Details about the error")
46+
47+
3448
ACPEnabledAgent = Annotated[
3549
Annotated[Agent, Tag("Agent")] | Annotated[ACPAgent, Tag("ACPAgent")],
3650
Discriminator(kind_of),

openhands-agent-server/openhands/agent_server/sockets.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626
get_default_conversation_service,
2727
)
2828
from openhands.agent_server.event_router import normalize_datetime_to_server_timezone
29-
from openhands.agent_server.models import BashEventBase, ExecuteBashRequest
29+
from openhands.agent_server.models import (
30+
AgentServerErrorEvent,
31+
BashEventBase,
32+
ExecuteBashRequest,
33+
)
3034
from openhands.agent_server.pub_sub import Subscriber
3135
from openhands.sdk import Event, Message
32-
from openhands.sdk.event.conversation_error import ConversationErrorEvent
3336
from openhands.sdk.utils.paging import page_iterator
3437

3538

@@ -211,7 +214,7 @@ async def events_socket(
211214
# Tell the client about this so they can decide what to do next
212215
logger.exception("error_in_subscription", stack_info=True)
213216
try:
214-
error_event = ConversationErrorEvent(
217+
error_event = AgentServerErrorEvent(
215218
source="environment",
216219
code=e.__class__.__name__,
217220
detail=str(e),
@@ -293,7 +296,7 @@ async def bash_events_socket(
293296
# Tell the client about this so they can decide what to do next
294297
logger.exception("error_in_bash_event_subscription", stack_info=True)
295298
try:
296-
error_event = ConversationErrorEvent(
299+
error_event = AgentServerErrorEvent(
297300
source="environment",
298301
code=e.__class__.__name__,
299302
detail=str(e),

0 commit comments

Comments
 (0)