in spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeApi.java [969:1089]
public record ChatCompletionMessage(@JsonProperty("content") Object rawContent, @JsonProperty("role") Role role,
@JsonProperty("name") String name, @JsonProperty("tool_call_id") String toolCallId,
@JsonProperty("tool_calls") List<ToolCall> toolCalls,
@JsonProperty("reasoning_content") String reasoningContent) {
/**
* Get message content as String.
*/
public String content() {
if (this.rawContent == null) {
return "";
}
if (this.rawContent instanceof String text) {
return text;
}
if (this.rawContent instanceof List list) {
if (list.isEmpty()) {
return "";
}
Object object = list.get(0);
if (object instanceof Map map) {
if (map.isEmpty() || map.get("text") == null) {
return "";
}
return map.get("text").toString();
}
}
throw new IllegalStateException("The content is not valid!");
}
/**
* Create a chat completion message with the given content and role. All other
* fields are null.
* @param content The contents of the message.
* @param role The role of the author of this message.
*/
public ChatCompletionMessage(Object content, Role role) {
this(content, role, null, null, null, null);
}
// format: on
/**
* The role of the author of this message.
*/
public enum Role {
/**
* System message.
*/
@JsonProperty("system")
SYSTEM,
/**
* User message.
*/
@JsonProperty("user")
USER,
/**
* Assistant message.
*/
@JsonProperty("assistant")
ASSISTANT,
/**
* Tool message.
*/
@JsonProperty("tool")
TOOL
}
/**
* An array of content parts with a defined type. Each MediaContent can be of
* either "text" or "image_url" type. Not both.
*
* @param text The text content of the message.
* @param image The image content of the message. You can pass multiple images
* @param video The image list of video. by adding multiple image_url content
* parts. Image input is only supported when using the glm-4v model.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public record MediaContent(@JsonProperty("type") String type, @JsonProperty("text") String text,
@JsonProperty("image") String image, @JsonProperty("video") List<String> video) {
/**
* Shortcut constructor for a text content.
* @param text The text content of the message.
*/
public MediaContent(String text) {
this("text", text, null, null);
}
}
/**
* The relevant tool call.
*
* @param id The ID of the tool call. This ID must be referenced when you submit
* the tool outputs in using the Submit tool outputs to run endpoint.
* @param type The type of tool call the output is required for. For now, this is
* always function.
* @param function The function definition.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public record ToolCall(@JsonProperty("id") String id, @JsonProperty("type") String type,
@JsonProperty("function") ChatCompletionFunction function) {
}
/**
* The function definition.
*
* @param name The name of the function.
* @param arguments The arguments that the model expects you to pass to the
* function.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public record ChatCompletionFunction(@JsonProperty("name") String name,
@JsonProperty("arguments") String arguments) {
}
}