Spaces:
Build error
Build error
import { ConfirmationButtons } from "#/components/shared/buttons/confirmation-buttons"; | |
import { OpenHandsAction } from "#/types/core/actions"; | |
import { | |
isUserMessage, | |
isErrorObservation, | |
isAssistantMessage, | |
isOpenHandsAction, | |
isOpenHandsObservation, | |
isFinishAction, | |
isRejectObservation, | |
isMcpObservation, | |
} from "#/types/core/guards"; | |
import { OpenHandsObservation } from "#/types/core/observations"; | |
import { ImageCarousel } from "../images/image-carousel"; | |
import { ChatMessage } from "./chat-message"; | |
import { ErrorMessage } from "./error-message"; | |
import { MCPObservationContent } from "./mcp-observation-content"; | |
import { getObservationResult } from "./event-content-helpers/get-observation-result"; | |
import { getEventContent } from "./event-content-helpers/get-event-content"; | |
import { GenericEventMessage } from "./generic-event-message"; | |
const hasThoughtProperty = ( | |
obj: Record<string, unknown>, | |
): obj is { thought: string } => "thought" in obj && !!obj.thought; | |
interface EventMessageProps { | |
event: OpenHandsAction | OpenHandsObservation; | |
hasObservationPair: boolean; | |
isAwaitingUserConfirmation: boolean; | |
isLastMessage: boolean; | |
} | |
export function EventMessage({ | |
event, | |
hasObservationPair, | |
isAwaitingUserConfirmation, | |
isLastMessage, | |
}: EventMessageProps) { | |
const shouldShowConfirmationButtons = | |
isLastMessage && event.source === "agent" && isAwaitingUserConfirmation; | |
if (isErrorObservation(event)) { | |
return ( | |
<ErrorMessage | |
errorId={event.extras.error_id} | |
defaultMessage={event.message} | |
/> | |
); | |
} | |
if (hasObservationPair && isOpenHandsAction(event)) { | |
if (hasThoughtProperty(event.args)) { | |
return <ChatMessage type="agent" message={event.args.thought} />; | |
} | |
return null; | |
} | |
if (isFinishAction(event)) { | |
return ( | |
<ChatMessage type="agent" message={getEventContent(event).details} /> | |
); | |
} | |
if (isUserMessage(event) || isAssistantMessage(event)) { | |
return ( | |
<ChatMessage | |
type={event.source} | |
message={isUserMessage(event) ? event.args.content : event.message} | |
> | |
{event.args.image_urls && event.args.image_urls.length > 0 && ( | |
<ImageCarousel size="small" images={event.args.image_urls} /> | |
)} | |
{shouldShowConfirmationButtons && <ConfirmationButtons />} | |
</ChatMessage> | |
); | |
} | |
if (isRejectObservation(event)) { | |
return <ChatMessage type="agent" message={event.content} />; | |
} | |
if (isMcpObservation(event)) { | |
return ( | |
<div> | |
<GenericEventMessage | |
title={getEventContent(event).title} | |
details={<MCPObservationContent event={event} />} | |
success={getObservationResult(event)} | |
/> | |
{shouldShowConfirmationButtons && <ConfirmationButtons />} | |
</div> | |
); | |
} | |
return ( | |
<div> | |
{isOpenHandsAction(event) && hasThoughtProperty(event.args) && ( | |
<ChatMessage type="agent" message={event.args.thought} /> | |
)} | |
<GenericEventMessage | |
title={getEventContent(event).title} | |
details={getEventContent(event).details} | |
success={ | |
isOpenHandsObservation(event) | |
? getObservationResult(event) | |
: undefined | |
} | |
/> | |
{shouldShowConfirmationButtons && <ConfirmationButtons />} | |
</div> | |
); | |
} | |