/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ package com.github.copilot.sdk.events; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Collections; import java.util.List; /** * Event representing a complete message from the assistant. *

* This event is fired when the assistant has finished generating a response. * For streaming responses, use {@link AssistantMessageDeltaEvent} instead. * *

Example Usage

* *
{@code
 * session.on(event -> {
 * 	if (event instanceof AssistantMessageEvent msg) {
 * 		String content = msg.getData().content();
 * 		System.out.println("Assistant: " + content);
 * 	}
 * });
 * }
* * @see AssistantMessageDeltaEvent * @see AbstractSessionEvent * @since 1.0.0 */ @JsonIgnoreProperties(ignoreUnknown = true) public final class AssistantMessageEvent extends AbstractSessionEvent { @JsonProperty("data") private AssistantMessageData data; /** * {@inheritDoc} * * @return "assistant.message" */ @Override public String getType() { return "assistant.message"; } /** * Gets the message data. * * @return the message data containing content and tool requests */ public AssistantMessageData getData() { return data; } /** * Sets the message data. * * @param data * the message data */ public void setData(AssistantMessageData data) { this.data = data; } /** * Contains the assistant message content and metadata. */ @JsonIgnoreProperties(ignoreUnknown = true) public record AssistantMessageData(@JsonProperty("messageId") String messageId, @JsonProperty("content") String content, @JsonProperty("toolRequests") List toolRequests, @JsonProperty("parentToolCallId") String parentToolCallId, @JsonProperty("reasoningOpaque") String reasoningOpaque, @JsonProperty("reasoningText") String reasoningText, @JsonProperty("encryptedContent") String encryptedContent) { /** Returns a defensive copy of the tool requests list. */ @Override public List toolRequests() { return toolRequests == null ? null : Collections.unmodifiableList(toolRequests); } /** * Represents a request from the assistant to invoke a tool. */ @JsonIgnoreProperties(ignoreUnknown = true) public record ToolRequest(@JsonProperty("toolCallId") String toolCallId, @JsonProperty("name") String name, @JsonProperty("arguments") Object arguments) { } } }