chore: rename assistant relate entity (#35)

This commit is contained in:
tomsun28 2025-08-14 11:02:19 +08:00 committed by GitHub
parent a1af39838c
commit 3f425c320d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 168 additions and 161 deletions

View file

@ -2,10 +2,10 @@ package ai.z.openapi.api.assistant;
import ai.z.openapi.service.assistant.AssistantCompletion; import ai.z.openapi.service.assistant.AssistantCompletion;
import ai.z.openapi.service.assistant.AssistantParameters; import ai.z.openapi.service.assistant.AssistantParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListStatus; import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListStatus;
import ai.z.openapi.service.assistant.query_support.AssistantSupportStatus; import ai.z.openapi.service.assistant.query_support.AssistantSupportStatus;
import ai.z.openapi.service.assistant.conversation.ConversationParameters; import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.query_support.QuerySupportParams; import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
import io.reactivex.Single; import io.reactivex.Single;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import retrofit2.Call; import retrofit2.Call;
@ -46,7 +46,7 @@ public interface AssistantApi {
* @return Assistant support status and available capabilities * @return Assistant support status and available capabilities
*/ */
@POST("assistant/list") @POST("assistant/list")
Single<AssistantSupportStatus> querySupport(@Body QuerySupportParams request); Single<AssistantSupportStatus> querySupport(@Body AssistantQuerySupportParams request);
/** /**
* Query conversation usage statistics Retrieves usage metrics and conversation * Query conversation usage statistics Retrieves usage metrics and conversation
@ -55,6 +55,6 @@ public interface AssistantApi {
* @return Conversation usage statistics and history information * @return Conversation usage statistics and history information
*/ */
@POST("assistant/conversation/list") @POST("assistant/conversation/list")
Single<ConversationUsageListStatus> queryConversationUsage(@Body ConversationParameters request); Single<AssistantConversationUsageListStatus> queryConversationUsage(@Body AssistantConversationParameters request);
} }

View file

@ -14,21 +14,21 @@ import lombok.NoArgsConstructor;
@Builder @Builder
public class AgentContent { public class AgentContent {
/** 消息类型 text image_url video_url */ /** Message type: text, image_url, video_url */
private String type; private String type;
/** 消息内容 when type is text */ /** Message content when type is text */
private String text; private String text;
/** 消息图片URL when type is image_url */ /** Message image URL when type is image_url */
@JsonProperty("image_url") @JsonProperty("image_url")
private String imageUrl; private String imageUrl;
/** 消息视频URL when type is video_url */ /** Message video URL when type is video_url */
@JsonProperty("video_url") @JsonProperty("video_url")
private String videoUrl; private String videoUrl;
/** 消息对象 when type is object */ /** Message object when type is object */
@JsonProperty("object") @JsonProperty("object")
private Object object; private Object object;

View file

@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import ai.z.openapi.service.assistant.message.MessageContent; import ai.z.openapi.service.assistant.message.AssistantMessageContent;
import ai.z.openapi.service.deserialize.MessageDeserializeFactory; import ai.z.openapi.service.deserialize.MessageDeserializeFactory;
import ai.z.openapi.service.deserialize.assistant.AssistantChoiceDeserializer; import ai.z.openapi.service.deserialize.assistant.AssistantChoiceDeserializer;
@ -31,7 +31,7 @@ public class AssistantChoice extends ObjectNode {
* Current conversation output message content. * Current conversation output message content.
*/ */
@JsonProperty("delta") @JsonProperty("delta")
private MessageContent delta; private AssistantMessageContent delta;
/** /**
* Reason for inference completion: - stop: inference naturally ended or triggered * Reason for inference completion: - stop: inference naturally ended or triggered
@ -66,7 +66,8 @@ public class AssistantChoice extends ObjectNode {
this.setIndex(0); this.setIndex(0);
} }
if (objectNode.has("delta")) { if (objectNode.has("delta")) {
MessageContent delta = objectMapper.convertValue(objectNode.get("delta"), MessageContent.class); AssistantMessageContent delta = objectMapper.convertValue(objectNode.get("delta"),
AssistantMessageContent.class);
this.setDelta(delta); this.setDelta(delta);
} }
else { else {
@ -108,11 +109,11 @@ public class AssistantChoice extends ObjectNode {
this.put("index", index); this.put("index", index);
} }
public MessageContent getDelta() { public AssistantMessageContent getDelta() {
return delta; return delta;
} }
public void setDelta(MessageContent delta) { public void setDelta(AssistantMessageContent delta) {
this.delta = delta; this.delta = delta;
this.putPOJO("delta", delta); this.putPOJO("delta", delta);
} }

View file

@ -53,7 +53,7 @@ public class AssistantCompletion {
* Error information * Error information
*/ */
@JsonProperty("last_error") @JsonProperty("last_error")
private ErrorInfo lastError; private AssistantErrorInfo lastError;
/** /**
* Incremental return information * Incremental return information
@ -71,6 +71,6 @@ public class AssistantCompletion {
* Token count statistics * Token count statistics
*/ */
@JsonProperty("usage") @JsonProperty("usage")
private CompletionUsage usage; private AssistantCompletionUsage usage;
} }

View file

@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CompletionUsage { public class AssistantCompletionUsage {
/** /**
* Number of tokens in the input (prompt). * Number of tokens in the input (prompt).

View file

@ -17,7 +17,7 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
public class ConversationMessage { public class AssistantConversationMessage {
/** /**
* The role of the user input, e.g., 'user'. * The role of the user input, e.g., 'user'.
@ -29,6 +29,6 @@ public class ConversationMessage {
* The content of the conversation message. * The content of the conversation message.
*/ */
@JsonProperty("content") @JsonProperty("content")
private List<MessageTextContent> content; private List<AssistantMessageTextContent> content;
} }

View file

@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class ErrorInfo { public class AssistantErrorInfo {
/** /**
* Error code. * Error code.

View file

@ -18,6 +18,6 @@ public class AssistantExtraParameters {
/** /**
* Translation agent parameters * Translation agent parameters
*/ */
private TranslateParameters translate; private AssistantTranslateParameters translate;
} }

View file

@ -16,7 +16,7 @@ import lombok.experimental.SuperBuilder;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
public class MessageTextContent { public class AssistantMessageTextContent {
/** /**
* The type of the message content, currently only "text" is supported. * The type of the message content, currently only "text" is supported.

View file

@ -9,7 +9,6 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -51,7 +50,7 @@ public class AssistantParameters extends CommonRequest implements ClientRequest<
* The list of conversation messages. * The list of conversation messages.
*/ */
@JsonProperty("messages") @JsonProperty("messages")
private List<ConversationMessage> messages; private List<AssistantConversationMessage> messages;
/** /**
* The list of file attachments for the conversation, optional. * The list of file attachments for the conversation, optional.

View file

@ -1,11 +1,9 @@
package ai.z.openapi.service.assistant; package ai.z.openapi.service.assistant;
import ai.z.openapi.service.assistant.AssistantParameters; import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.AssistantApiResponse; import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
import ai.z.openapi.service.assistant.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse;
import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse; import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse;
import ai.z.openapi.service.assistant.query_support.QuerySupportParams; import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
/** /**
* Assistant service interface * Assistant service interface
@ -31,13 +29,13 @@ public interface AssistantService {
* @param request the query support request * @param request the query support request
* @return AssistantSupportResponse containing the support information * @return AssistantSupportResponse containing the support information
*/ */
AssistantSupportResponse querySupport(QuerySupportParams request); AssistantSupportResponse querySupport(AssistantQuerySupportParams request);
/** /**
* Queries conversation usage information. * Queries conversation usage information.
* @param request the conversation parameters * @param request the conversation parameters
* @return ConversationUsageListResponse containing the usage information * @return ConversationUsageListResponse containing the usage information
*/ */
ConversationUsageListResponse queryConversationUsage(ConversationParameters request); AssistantConversationUsageListResponse queryConversationUsage(AssistantConversationParameters request);
} }

View file

@ -2,12 +2,12 @@ package ai.z.openapi.service.assistant;
import ai.z.openapi.AbstractAiClient; import ai.z.openapi.AbstractAiClient;
import ai.z.openapi.api.assistant.AssistantApi; import ai.z.openapi.api.assistant.AssistantApi;
import ai.z.openapi.service.assistant.conversation.ConversationParameters; import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse; import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListStatus; import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListStatus;
import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse; import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse;
import ai.z.openapi.service.assistant.query_support.AssistantSupportStatus; import ai.z.openapi.service.assistant.query_support.AssistantSupportStatus;
import ai.z.openapi.service.assistant.query_support.QuerySupportParams; import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
import ai.z.openapi.utils.FlowableRequestSupplier; import ai.z.openapi.utils.FlowableRequestSupplier;
import ai.z.openapi.utils.RequestSupplier; import ai.z.openapi.utils.RequestSupplier;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
@ -39,15 +39,15 @@ public class AssistantServiceImpl implements AssistantService {
} }
@Override @Override
public AssistantSupportResponse querySupport(QuerySupportParams request) { public AssistantSupportResponse querySupport(AssistantQuerySupportParams request) {
RequestSupplier<QuerySupportParams, AssistantSupportStatus> supplier = assistantApi::querySupport; RequestSupplier<AssistantQuerySupportParams, AssistantSupportStatus> supplier = assistantApi::querySupport;
return zAiClient.executeRequest(request, supplier, AssistantSupportResponse.class); return zAiClient.executeRequest(request, supplier, AssistantSupportResponse.class);
} }
@Override @Override
public ConversationUsageListResponse queryConversationUsage(ConversationParameters request) { public AssistantConversationUsageListResponse queryConversationUsage(AssistantConversationParameters request) {
RequestSupplier<ConversationParameters, ConversationUsageListStatus> supplier = assistantApi::queryConversationUsage; RequestSupplier<AssistantConversationParameters, AssistantConversationUsageListStatus> supplier = assistantApi::queryConversationUsage;
return zAiClient.executeRequest(request, supplier, ConversationUsageListResponse.class); return zAiClient.executeRequest(request, supplier, AssistantConversationUsageListResponse.class);
} }
} }

View file

@ -13,7 +13,7 @@ import lombok.experimental.SuperBuilder;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
public class TranslateParameters { public class AssistantTranslateParameters {
/** /**
* Source language for translation. * Source language for translation.

View file

@ -17,7 +17,8 @@ import lombok.experimental.SuperBuilder;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
public class ConversationParameters extends CommonRequest implements ClientRequest<ConversationParameters> { public class AssistantConversationParameters extends CommonRequest
implements ClientRequest<AssistantConversationParameters> {
/** /**
* The Assistant ID. * The Assistant ID.

View file

@ -7,7 +7,7 @@ import lombok.Data;
* This class represents the usage data for a specific conversation. * This class represents the usage data for a specific conversation.
*/ */
@Data @Data
public class ConversationUsage { public class AssistantConversationUsage {
/** /**
* The conversation ID. * The conversation ID.
@ -37,6 +37,6 @@ public class ConversationUsage {
* The usage statistics for the conversation. * The usage statistics for the conversation.
*/ */
@JsonProperty("usage") @JsonProperty("usage")
private Usage usage; private AssistantUsage usage;
} }

View file

@ -9,7 +9,7 @@ import java.util.List;
* This class represents a list of conversation usage data. * This class represents a list of conversation usage data.
*/ */
@Data @Data
public class ConversationUsageList { public class AssistantConversationUsageList {
/** /**
* The Assistant ID. * The Assistant ID.
@ -27,6 +27,6 @@ public class ConversationUsageList {
* The list of conversation usage data. * The list of conversation usage data.
*/ */
@JsonProperty("conversation_list") @JsonProperty("conversation_list")
private List<ConversationUsage> conversationList; private List<AssistantConversationUsage> conversationList;
} }

View file

@ -9,7 +9,7 @@ import lombok.Data;
* for retrieving conversation usage statistics. * for retrieving conversation usage statistics.
*/ */
@Data @Data
public class ConversationUsageListResponse implements ClientResponse<ConversationUsageListStatus> { public class AssistantConversationUsageListResponse implements ClientResponse<AssistantConversationUsageListStatus> {
/** /**
* Response status code. * Response status code.
@ -29,17 +29,17 @@ public class ConversationUsageListResponse implements ClientResponse<Conversatio
/** /**
* The conversation usage list data. * The conversation usage list data.
*/ */
private ConversationUsageListStatus data; private AssistantConversationUsageListStatus data;
/** /**
* Error information if the request failed. * Error information if the request failed.
*/ */
private ChatError error; private ChatError error;
public ConversationUsageListResponse() { public AssistantConversationUsageListResponse() {
} }
public ConversationUsageListResponse(int code, String msg) { public AssistantConversationUsageListResponse(int code, String msg) {
this.code = code; this.code = code;
this.msg = msg; this.msg = msg;
} }

View file

@ -7,7 +7,7 @@ import lombok.Data;
* This class represents the response containing a list of conversation usage data. * This class represents the response containing a list of conversation usage data.
*/ */
@Data @Data
public class ConversationUsageListStatus { public class AssistantConversationUsageListStatus {
/** /**
* The response code. * The response code.
@ -25,6 +25,6 @@ public class ConversationUsageListStatus {
* The data containing the conversation usage list. * The data containing the conversation usage list.
*/ */
@JsonProperty("data") @JsonProperty("data")
private ConversationUsageList data; private AssistantConversationUsageList data;
} }

View file

@ -7,7 +7,7 @@ import lombok.Data;
* This class represents the usage statistics for a conversation. * This class represents the usage statistics for a conversation.
*/ */
@Data @Data
public class Usage { public class AssistantUsage {
/** /**
* The number of tokens in the user's input. * The number of tokens in the user's input.

View file

@ -0,0 +1,11 @@
package ai.z.openapi.service.assistant.message;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import ai.z.openapi.service.deserialize.JsonTypeMapping;
import ai.z.openapi.service.deserialize.assistant.message.AssistantMessageContentDeserializer;
@JsonTypeMapping({ AssistantToolsDeltaBlock.class, AssistantTextContentBlock.class })
@JsonDeserialize(using = AssistantMessageContentDeserializer.class)
public abstract class AssistantMessageContent {
}

View file

@ -7,7 +7,7 @@ import ai.z.openapi.service.deserialize.JsonTypeField;
* This class represents a block of text content in a conversation. * This class represents a block of text content in a conversation.
*/ */
@JsonTypeField("content") @JsonTypeField("content")
public class TextContentBlock extends MessageContent { public class AssistantTextContentBlock extends AssistantMessageContent {
/** /**
* The content of the text block. * The content of the text block.
@ -24,7 +24,7 @@ public class TextContentBlock extends MessageContent {
/** /**
* Default constructor. * Default constructor.
*/ */
public TextContentBlock() { public AssistantTextContentBlock() {
} }
// Getters and Setters // Getters and Setters

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message; package ai.z.openapi.service.assistant.message;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import ai.z.openapi.service.deserialize.JsonTypeField; import ai.z.openapi.service.deserialize.JsonTypeField;
import java.util.List; import java.util.List;
@ -10,13 +10,13 @@ import java.util.List;
* This class represents a block of tool call data in a conversation. * This class represents a block of tool call data in a conversation.
*/ */
@JsonTypeField("tool_calls") @JsonTypeField("tool_calls")
public class ToolsDeltaBlock extends MessageContent { public class AssistantToolsDeltaBlock extends AssistantMessageContent {
/** /**
* A list of tool call types. * A list of tool call types.
*/ */
@JsonProperty("tool_calls") @JsonProperty("tool_calls")
private List<ToolsType> toolCalls; private List<AssistantToolsType> toolCalls;
/** /**
* The role of the speaker, default is "tool". * The role of the speaker, default is "tool".
@ -27,16 +27,16 @@ public class ToolsDeltaBlock extends MessageContent {
/** /**
* Default constructor. * Default constructor.
*/ */
public ToolsDeltaBlock() { public AssistantToolsDeltaBlock() {
} }
// Getters and Setters // Getters and Setters
public List<ToolsType> getToolCalls() { public List<AssistantToolsType> getToolCalls() {
return toolCalls; return toolCalls;
} }
public void setToolCalls(List<ToolsType> toolCalls) { public void setToolCalls(List<AssistantToolsType> toolCalls) {
this.toolCalls = toolCalls; this.toolCalls = toolCalls;
} }

View file

@ -1,11 +0,0 @@
package ai.z.openapi.service.assistant.message;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import ai.z.openapi.service.deserialize.JsonTypeMapping;
import ai.z.openapi.service.deserialize.assistant.message.MessageContentDeserializer;
@JsonTypeMapping({ ToolsDeltaBlock.class, TextContentBlock.class })
@JsonDeserialize(using = MessageContentDeserializer.class)
public abstract class MessageContent {
}

View file

@ -0,0 +1,21 @@
package ai.z.openapi.service.assistant.message.tools;
import ai.z.openapi.service.assistant.message.tools.code_interpreter.AssistantCodeInterpreterToolBlock;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import ai.z.openapi.service.assistant.message.tools.drawing_tool.AssistantDrawingToolBlock;
import ai.z.openapi.service.assistant.message.tools.function.AssistantFunctionToolBlock;
import ai.z.openapi.service.assistant.message.tools.retrieval.AssistantRetrievalToolBlock;
import ai.z.openapi.service.assistant.message.tools.web_browser.AssistantWebBrowserToolBlock;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.EXISTING_PROPERTY)
@JsonSubTypes({ @JsonSubTypes.Type(value = AssistantWebBrowserToolBlock.class, name = "web_browser"),
@JsonSubTypes.Type(value = AssistantRetrievalToolBlock.class, name = "retrieval"),
@JsonSubTypes.Type(value = AssistantFunctionToolBlock.class, name = "function"),
@JsonSubTypes.Type(value = AssistantCodeInterpreterToolBlock.class, name = "code_interpreter"),
@JsonSubTypes.Type(value = AssistantDrawingToolBlock.class, name = "drawing_tool") })
public abstract class AssistantToolsType {
}

View file

@ -1,21 +0,0 @@
package ai.z.openapi.service.assistant.message.tools;
import ai.z.openapi.service.assistant.message.tools.code_interpreter.CodeInterpreterToolBlock;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import ai.z.openapi.service.assistant.message.tools.drawing_tool.DrawingToolBlock;
import ai.z.openapi.service.assistant.message.tools.function.FunctionToolBlock;
import ai.z.openapi.service.assistant.message.tools.retrieval.RetrievalToolBlock;
import ai.z.openapi.service.assistant.message.tools.web_browser.WebBrowserToolBlock;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.EXISTING_PROPERTY)
@JsonSubTypes({ @JsonSubTypes.Type(value = WebBrowserToolBlock.class, name = "web_browser"),
@JsonSubTypes.Type(value = RetrievalToolBlock.class, name = "retrieval"),
@JsonSubTypes.Type(value = FunctionToolBlock.class, name = "function"),
@JsonSubTypes.Type(value = CodeInterpreterToolBlock.class, name = "code_interpreter"),
@JsonSubTypes.Type(value = DrawingToolBlock.class, name = "drawing_tool") })
public abstract class ToolsType {
}

View file

@ -2,7 +2,6 @@ package ai.z.openapi.service.assistant.message.tools.code_interpreter;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -14,7 +13,7 @@ import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CodeInterpreter { public class AssistantCodeInterpreter {
/** /**
* The generated code snippet that is input to the code sandbox. * The generated code snippet that is input to the code sandbox.
@ -26,6 +25,6 @@ public class CodeInterpreter {
* The output results after the code execution. * The output results after the code execution.
*/ */
@JsonProperty("outputs") @JsonProperty("outputs")
private List<CodeInterpreterToolOutput> outputs; private List<AssistantCodeInterpreterToolOutput> outputs;
} }

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message.tools.code_interpreter; package ai.z.openapi.service.assistant.message.tools.code_interpreter;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CodeInterpreterToolBlock extends ToolsType { public class AssistantCodeInterpreterToolBlock extends AssistantToolsType {
/** /**
* The index of the tool call. * The index of the tool call.
@ -34,7 +34,7 @@ public class CodeInterpreterToolBlock extends ToolsType {
* The code interpreter object. * The code interpreter object.
*/ */
@JsonProperty("code_interpreter") @JsonProperty("code_interpreter")
private CodeInterpreter codeInterpreter; private AssistantCodeInterpreter codeInterpreter;
/** /**
* The type of tool being called, always "code_interpreter". * The type of tool being called, always "code_interpreter".

View file

@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CodeInterpreterToolOutput { public class AssistantCodeInterpreterToolOutput {
/** /**
* The type of output, currently only "logs". * The type of output, currently only "logs".

View file

@ -13,7 +13,7 @@ import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class DrawingTool { public class AssistantDrawingTool {
/** /**
* The input string that was used to generate the drawing. * The input string that was used to generate the drawing.
@ -25,6 +25,6 @@ public class DrawingTool {
* A list of outputs generated by the drawing tool. * A list of outputs generated by the drawing tool.
*/ */
@JsonProperty("outputs") @JsonProperty("outputs")
private List<DrawingToolOutput> outputs; private List<AssistantDrawingToolOutput> outputs;
} }

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message.tools.drawing_tool; package ai.z.openapi.service.assistant.message.tools.drawing_tool;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class DrawingToolBlock extends ToolsType { public class AssistantDrawingToolBlock extends AssistantToolsType {
/** /**
* The index of the tool call. * The index of the tool call.
@ -34,7 +34,7 @@ public class DrawingToolBlock extends ToolsType {
* The drawing tool object that contains input and outputs. * The drawing tool object that contains input and outputs.
*/ */
@JsonProperty("drawing_tool") @JsonProperty("drawing_tool")
private DrawingTool drawingTool; private AssistantDrawingTool drawingTool;
/** /**
* The type of tool being called, always "drawing_tool". * The type of tool being called, always "drawing_tool".

View file

@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class DrawingToolOutput { public class AssistantDrawingToolOutput {
/** /**
* The generated image in a string format. * The generated image in a string format.

View file

@ -14,7 +14,7 @@ import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class FunctionTool { public class AssistantFunctionTool {
/** /**
* The name of the function tool. * The name of the function tool.
@ -32,6 +32,6 @@ public class FunctionTool {
* A list of outputs generated by the function tool. * A list of outputs generated by the function tool.
*/ */
@JsonProperty("outputs") @JsonProperty("outputs")
private List<FunctionToolOutput> outputs; private List<AssistantFunctionToolOutput> outputs;
} }

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message.tools.function; package ai.z.openapi.service.assistant.message.tools.function;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class FunctionToolBlock extends ToolsType { public class AssistantFunctionToolBlock extends AssistantToolsType {
/** /**
* The index of the tool call. * The index of the tool call.
@ -34,7 +34,7 @@ public class FunctionToolBlock extends ToolsType {
* The function tool object that contains the name, arguments, and outputs. * The function tool object that contains the name, arguments, and outputs.
*/ */
@JsonProperty("function") @JsonProperty("function")
private FunctionTool function; private AssistantFunctionTool function;
/** /**
* The type of tool being called, always "function". * The type of tool being called, always "function".

View file

@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class FunctionToolOutput { public class AssistantFunctionToolOutput {
/** /**
* The generated content as a string. * The generated content as a string.

View file

@ -15,13 +15,13 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
public class RetrievalTool { public class AssistantRetrievalTool {
/** /**
* A list of text snippets and their respective document names retrieved from the * A list of text snippets and their respective document names retrieved from the
* knowledge base. * knowledge base.
*/ */
@JsonProperty("outputs") @JsonProperty("outputs")
private List<RetrievalToolOutput> outputs; private List<AssistantRetrievalToolOutput> outputs;
} }

View file

@ -1,6 +1,6 @@
package ai.z.openapi.service.assistant.message.tools.retrieval; package ai.z.openapi.service.assistant.message.tools.retrieval;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class RetrievalToolBlock extends ToolsType { public class AssistantRetrievalToolBlock extends AssistantToolsType {
/** /**
* The index of the tool call. * The index of the tool call.
@ -31,7 +31,7 @@ public class RetrievalToolBlock extends ToolsType {
* An instance of the RetrievalTool class containing the retrieval outputs. * An instance of the RetrievalTool class containing the retrieval outputs.
*/ */
@JsonProperty("retrieval") @JsonProperty("retrieval")
private RetrievalTool retrieval; private AssistantRetrievalTool retrieval;
/** /**
* The type of tool being used, always set to "retrieval". * The type of tool being used, always set to "retrieval".

View file

@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
public class RetrievalToolOutput { public class AssistantRetrievalToolOutput {
/** /**
* The text snippet retrieved from the knowledge base. * The text snippet retrieved from the knowledge base.

View file

@ -13,7 +13,7 @@ import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class WebBrowser { public class AssistantWebBrowser {
/** /**
* The input query for the web browser search. * The input query for the web browser search.
@ -25,6 +25,6 @@ public class WebBrowser {
* A list of search results returned by the web browser. * A list of search results returned by the web browser.
*/ */
@JsonProperty("outputs") @JsonProperty("outputs")
private List<WebBrowserOutput> outputs; private List<AssistantWebBrowserOutput> outputs;
} }

View file

@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class WebBrowserOutput { public class AssistantWebBrowserOutput {
/** /**
* The title of the search result. * The title of the search result.

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message.tools.web_browser; package ai.z.openapi.service.assistant.message.tools.web_browser;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class WebBrowserToolBlock extends ToolsType { public class AssistantWebBrowserToolBlock extends AssistantToolsType {
/** /**
* The index of the tool call. * The index of the tool call.
@ -34,7 +34,7 @@ public class WebBrowserToolBlock extends ToolsType {
* An instance of the WebBrowser class containing the search input and outputs. * An instance of the WebBrowser class containing the search input and outputs.
*/ */
@JsonProperty("web_browser") @JsonProperty("web_browser")
private WebBrowser webBrowser; private AssistantWebBrowser webBrowser;
/** /**
* The type of tool being used, always set to "web_browser". * The type of tool being used, always set to "web_browser".

View file

@ -20,7 +20,7 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
public class QuerySupportParams extends CommonRequest implements ClientRequest<QuerySupportParams> { public class AssistantQuerySupportParams extends CommonRequest implements ClientRequest<AssistantQuerySupportParams> {
/** /**
* List of assistant IDs to query support status for. * List of assistant IDs to query support status for.

View file

@ -3,9 +3,9 @@ package ai.z.openapi.service.deserialize.assistant.message;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.*;
import ai.z.openapi.service.assistant.message.MessageContent; import ai.z.openapi.service.assistant.message.AssistantMessageContent;
import ai.z.openapi.service.assistant.message.TextContentBlock; import ai.z.openapi.service.assistant.message.AssistantTextContentBlock;
import ai.z.openapi.service.assistant.message.tools.ToolsType; import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import ai.z.openapi.service.deserialize.JsonTypeField; import ai.z.openapi.service.deserialize.JsonTypeField;
import ai.z.openapi.service.deserialize.JsonTypeMapping; import ai.z.openapi.service.deserialize.JsonTypeMapping;
@ -14,14 +14,14 @@ import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.List; import java.util.List;
public class MessageContentDeserializer extends JsonDeserializer<MessageContent> { public class AssistantMessageContentDeserializer extends JsonDeserializer<AssistantMessageContent> {
@Override @Override
public MessageContent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { public AssistantMessageContent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.readValueAsTree(); JsonNode node = p.readValueAsTree();
// Get JsonTypeMapping annotation from MessageContent class // Get JsonTypeMapping annotation from MessageContent class
JsonTypeMapping mapping = MessageContent.class.getAnnotation(JsonTypeMapping.class); JsonTypeMapping mapping = AssistantMessageContent.class.getAnnotation(JsonTypeMapping.class);
if (mapping == null) { if (mapping == null) {
throw new IllegalStateException("Missing JsonTypeMapping annotation on MessageContent class"); throw new IllegalStateException("Missing JsonTypeMapping annotation on MessageContent class");
} }
@ -66,9 +66,10 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
ParameterizedType listType = (ParameterizedType) field.getGenericType(); ParameterizedType listType = (ParameterizedType) field.getGenericType();
Class<?> listGenericType = (Class<?>) listType.getActualTypeArguments()[0]; Class<?> listGenericType = (Class<?>) listType.getActualTypeArguments()[0];
if (listGenericType.equals(ToolsType.class)) { if (listGenericType.equals(AssistantToolsType.class)) {
// Deserialize to List<ToolsType> // Deserialize to List<ToolsType>
List<ToolsType> list = new ObjectMapper().readerForListOf(ToolsType.class) List<AssistantToolsType> list = new ObjectMapper()
.readerForListOf(AssistantToolsType.class)
.readValue(node.get(name)); .readValue(node.get(name));
field.set(obj, list); field.set(obj, list);
} }
@ -84,7 +85,7 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
} }
} }
return (MessageContent) obj; return (AssistantMessageContent) obj;
} }
catch (Exception e) { catch (Exception e) {
throw new RuntimeException("Error while creating instance of " + clazz.getName(), e); throw new RuntimeException("Error while creating instance of " + clazz.getName(), e);
@ -94,10 +95,10 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
// Create instance of the class // Create instance of the class
try { try {
MessageContent obj = TextContentBlock.class.getDeclaredConstructor().newInstance(); AssistantMessageContent obj = AssistantTextContentBlock.class.getDeclaredConstructor().newInstance();
// Use reflection to manually set field values // Use reflection to manually set field values
for (Field field : TextContentBlock.class.getDeclaredFields()) { for (Field field : AssistantTextContentBlock.class.getDeclaredFields()) {
field.setAccessible(true); field.setAccessible(true);
// field.getName() gets the value from JsonProperty annotation above // field.getName() gets the value from JsonProperty annotation above
JsonProperty annotation = field.getAnnotation(JsonProperty.class); JsonProperty annotation = field.getAnnotation(JsonProperty.class);
@ -132,7 +133,8 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
return obj; return obj;
} }
catch (Exception e) { catch (Exception e) {
throw new RuntimeException("Error while creating instance of " + TextContentBlock.class.getName(), e); throw new RuntimeException("Error while creating instance of " + AssistantTextContentBlock.class.getName(),
e);
} }
} }

View file

@ -2,11 +2,11 @@ package ai.z.openapi.service.assistant;
import ai.z.openapi.ZaiClient; import ai.z.openapi.ZaiClient;
import ai.z.openapi.core.config.ZaiConfig; import ai.z.openapi.core.config.ZaiConfig;
import ai.z.openapi.service.assistant.conversation.ConversationParameters; import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse; import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
import ai.z.openapi.service.assistant.message.MessageContent; import ai.z.openapi.service.assistant.message.AssistantMessageContent;
import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse; import ai.z.openapi.service.assistant.query_support.AssistantSupportResponse;
import ai.z.openapi.service.assistant.query_support.QuerySupportParams; import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@ -66,12 +66,12 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$") @EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testStreamAssistantCompletion() throws JsonProcessingException { void testStreamAssistantCompletion() throws JsonProcessingException {
// Prepare test data // Prepare test data
MessageTextContent textContent = MessageTextContent.builder() AssistantMessageTextContent textContent = AssistantMessageTextContent.builder()
.text("Help me search for the release time of ZAI's CogVideoX") .text("Help me search for the release time of ZAI's CogVideoX")
.type("text") .type("text")
.build(); .build();
ConversationMessage message = ConversationMessage.builder() AssistantConversationMessage message = AssistantConversationMessage.builder()
.role("user") .role("user")
.content(Collections.singletonList(textContent)) .content(Collections.singletonList(textContent))
.build(); .build();
@ -95,7 +95,7 @@ public class AssistantServiceTest {
// Test stream data processing // Test stream data processing
AtomicInteger messageCount = new AtomicInteger(0); AtomicInteger messageCount = new AtomicInteger(0);
AtomicBoolean isFirst = new AtomicBoolean(true); AtomicBoolean isFirst = new AtomicBoolean(true);
List<MessageContent> choices = new ArrayList<>(); List<AssistantMessageContent> choices = new ArrayList<>();
AtomicReference<AssistantCompletion> lastAccumulator = new AtomicReference<>(); AtomicReference<AssistantCompletion> lastAccumulator = new AtomicReference<>();
response.getFlowable().doOnNext(accumulator -> { response.getFlowable().doOnNext(accumulator -> {
@ -103,7 +103,7 @@ public class AssistantServiceTest {
logger.info("Starting to receive stream response:"); logger.info("Starting to receive stream response:");
} }
if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) { if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) {
MessageContent delta = accumulator.getChoices().get(0).getDelta(); AssistantMessageContent delta = accumulator.getChoices().get(0).getDelta();
if (delta != null) { if (delta != null) {
try { try {
logger.info("MessageContent: {}", mapper.writeValueAsString(delta)); logger.info("MessageContent: {}", mapper.writeValueAsString(delta));
@ -133,7 +133,7 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$") @EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testQuerySupport() { void testQuerySupport() {
// Prepare test data // Prepare test data
QuerySupportParams request = QuerySupportParams.builder() AssistantQuerySupportParams request = AssistantQuerySupportParams.builder()
.assistantIdList(Collections.singletonList(TEST_ASSISTANT_ID)) .assistantIdList(Collections.singletonList(TEST_ASSISTANT_ID))
.build(); .build();
@ -150,14 +150,14 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$") @EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testQueryConversationUsage() { void testQueryConversationUsage() {
// Prepare test data // Prepare test data
ConversationParameters request = ConversationParameters.builder() AssistantConversationParameters request = AssistantConversationParameters.builder()
.assistantId(TEST_ASSISTANT_ID) .assistantId(TEST_ASSISTANT_ID)
.page(1) .page(1)
.pageSize(5) .pageSize(5)
.build(); .build();
// Execute test // Execute test
ConversationUsageListResponse response = assistantService.queryConversationUsage(request); AssistantConversationUsageListResponse response = assistantService.queryConversationUsage(request);
// Verify results // Verify results
assertNotNull(response.getData(), "Response should not be null"); assertNotNull(response.getData(), "Response should not be null");
@ -169,9 +169,12 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$") @EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testErrorHandling_InvalidAssistantId() { void testErrorHandling_InvalidAssistantId() {
// Test with invalid assistant ID // Test with invalid assistant ID
MessageTextContent textContent = MessageTextContent.builder().text("Hello").type("text").build(); AssistantMessageTextContent textContent = AssistantMessageTextContent.builder()
.text("Hello")
.type("text")
.build();
ConversationMessage message = ConversationMessage.builder() AssistantConversationMessage message = AssistantConversationMessage.builder()
.role("user") .role("user")
.content(Collections.singletonList(textContent)) .content(Collections.singletonList(textContent))
.build(); .build();
@ -193,32 +196,36 @@ public class AssistantServiceTest {
@DisplayName("Test Multi-turn Conversation") @DisplayName("Test Multi-turn Conversation")
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$") @EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testMultiTurnConversation() throws JsonProcessingException { void testMultiTurnConversation() throws JsonProcessingException {
List<ConversationMessage> messages = new ArrayList<>(); List<AssistantConversationMessage> messages = new ArrayList<>();
// First round of conversation // First round of conversation
MessageTextContent firstContent = MessageTextContent.builder() AssistantMessageTextContent firstContent = AssistantMessageTextContent.builder()
.text("Hello, I would like to learn about machine learning") .text("Hello, I would like to learn about machine learning")
.type("text") .type("text")
.build(); .build();
messages messages.add(AssistantConversationMessage.builder()
.add(ConversationMessage.builder().role("user").content(Collections.singletonList(firstContent)).build()); .role("user")
.content(Collections.singletonList(firstContent))
.build());
MessageTextContent assistantContent = MessageTextContent.builder() AssistantMessageTextContent assistantContent = AssistantMessageTextContent.builder()
.text("Hello! Machine learning is an important branch of artificial intelligence...") .text("Hello! Machine learning is an important branch of artificial intelligence...")
.type("text") .type("text")
.build(); .build();
messages.add(ConversationMessage.builder() messages.add(AssistantConversationMessage.builder()
.role("assistant") .role("assistant")
.content(Collections.singletonList(assistantContent)) .content(Collections.singletonList(assistantContent))
.build()); .build());
// Second round of conversation // Second round of conversation
MessageTextContent secondContent = MessageTextContent.builder() AssistantMessageTextContent secondContent = AssistantMessageTextContent.builder()
.text("Can you introduce supervised learning in detail?") .text("Can you introduce supervised learning in detail?")
.type("text") .type("text")
.build(); .build();
messages messages.add(AssistantConversationMessage.builder()
.add(ConversationMessage.builder().role("user").content(Collections.singletonList(secondContent)).build()); .role("user")
.content(Collections.singletonList(secondContent))
.build());
String requestId = String.format(REQUEST_ID_TEMPLATE, System.currentTimeMillis()); String requestId = String.format(REQUEST_ID_TEMPLATE, System.currentTimeMillis());
@ -232,7 +239,7 @@ public class AssistantServiceTest {
AssistantApiResponse response = assistantService.assistantCompletionStream(request); AssistantApiResponse response = assistantService.assistantCompletionStream(request);
response.getFlowable().doOnNext(accumulator -> { response.getFlowable().doOnNext(accumulator -> {
if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) { if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) {
MessageContent delta = accumulator.getChoices().get(0).getDelta(); AssistantMessageContent delta = accumulator.getChoices().get(0).getDelta();
if (delta != null) { if (delta != null) {
try { try {
logger.info("MessageContent: {}", mapper.writeValueAsString(delta)); logger.info("MessageContent: {}", mapper.writeValueAsString(delta));