AssistantMessageEvent.java
/*---------------------------------------------------------------------------------------------
* 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.
* <p>
* This event is fired when the assistant has finished generating a response.
* For streaming responses, use {@link AssistantMessageDeltaEvent} instead.
*
* <h2>Example Usage</h2>
*
* <pre>{@code
* session.on(event -> {
* if (event instanceof AssistantMessageEvent msg) {
* String content = msg.getData().content();
* System.out.println("Assistant: " + content);
* }
* });
* }</pre>
*
* @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<ToolRequest> 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<ToolRequest> 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) {
}
}
}