fix: persist ResultMessage errors to session and simplify adapter

- Append COPILOT_ERROR_PREFIX marker when convert_message produces a
  StreamError, so the error card survives page refresh.
- Collapse duplicate ternaries into a single if/else block.
This commit is contained in:
Zamil Majdy
2026-03-17 13:36:21 +07:00
parent 0614b22a72
commit 1565564bce
2 changed files with 13 additions and 10 deletions

View File

@@ -216,15 +216,11 @@ class SDKResponseAdapter:
responses.append(StreamFinish())
elif sdk_message.subtype in ("error", "error_during_execution"):
raw_error = str(sdk_message.result or "Unknown error")
is_transient = is_transient_api_error(raw_error)
responses.append(
StreamError(
errorText=(
FRIENDLY_TRANSIENT_MSG if is_transient else raw_error
),
code=("transient_api_error" if is_transient else "sdk_error"),
)
)
if is_transient_api_error(raw_error):
error_text, code = FRIENDLY_TRANSIENT_MSG, "transient_api_error"
else:
error_text, code = raw_error, "sdk_error"
responses.append(StreamError(errorText=error_text, code=code))
responses.append(StreamFinish())
else:
logger.warning(

View File

@@ -1218,7 +1218,7 @@ async def stream_chat_completion_sdk(
extra,
)
# Log errors being sent to frontend
# Persist error markers so they survive page refresh
if isinstance(response, StreamError):
logger.error(
"%s Sending error to frontend: %s (code=%s)",
@@ -1226,6 +1226,13 @@ async def stream_chat_completion_sdk(
response.errorText,
response.code,
)
session.messages.append(
ChatMessage(
role="assistant",
content=f"{COPILOT_ERROR_PREFIX} {response.errorText}",
)
)
ended_with_stream_error = True
yield response