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.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.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.query_support.QuerySupportParams;
import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
import io.reactivex.Single;
import okhttp3.ResponseBody;
import retrofit2.Call;
@ -46,7 +46,7 @@ public interface AssistantApi {
* @return Assistant support status and available capabilities
*/
@POST("assistant/list")
Single<AssistantSupportStatus> querySupport(@Body QuerySupportParams request);
Single<AssistantSupportStatus> querySupport(@Body AssistantQuerySupportParams request);
/**
* Query conversation usage statistics Retrieves usage metrics and conversation
@ -55,6 +55,6 @@ public interface AssistantApi {
* @return Conversation usage statistics and history information
*/
@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
public class AgentContent {
/** 消息类型 text image_url video_url */
/** Message type: text, image_url, video_url */
private String type;
/** 消息内容 when type is text */
/** Message content when type is text */
private String text;
/** 消息图片URL when type is image_url */
/** Message image URL when type is image_url */
@JsonProperty("image_url")
private String imageUrl;
/** 消息视频URL when type is video_url */
/** Message video URL when type is video_url */
@JsonProperty("video_url")
private String videoUrl;
/** 消息对象 when type is object */
/** Message object when type is object */
@JsonProperty("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.node.JsonNodeFactory;
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.assistant.AssistantChoiceDeserializer;
@ -31,7 +31,7 @@ public class AssistantChoice extends ObjectNode {
* Current conversation output message content.
*/
@JsonProperty("delta")
private MessageContent delta;
private AssistantMessageContent delta;
/**
* Reason for inference completion: - stop: inference naturally ended or triggered
@ -66,7 +66,8 @@ public class AssistantChoice extends ObjectNode {
this.setIndex(0);
}
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);
}
else {
@ -108,11 +109,11 @@ public class AssistantChoice extends ObjectNode {
this.put("index", index);
}
public MessageContent getDelta() {
public AssistantMessageContent getDelta() {
return delta;
}
public void setDelta(MessageContent delta) {
public void setDelta(AssistantMessageContent delta) {
this.delta = delta;
this.putPOJO("delta", delta);
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -16,7 +16,7 @@ import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class MessageTextContent {
public class AssistantMessageTextContent {
/**
* 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.experimental.SuperBuilder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -51,7 +50,7 @@ public class AssistantParameters extends CommonRequest implements ClientRequest<
* The list of conversation messages.
*/
@JsonProperty("messages")
private List<ConversationMessage> messages;
private List<AssistantConversationMessage> messages;
/**
* The list of file attachments for the conversation, optional.

View file

@ -1,11 +1,9 @@
package ai.z.openapi.service.assistant;
import ai.z.openapi.service.assistant.AssistantParameters;
import ai.z.openapi.service.assistant.AssistantApiResponse;
import ai.z.openapi.service.assistant.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse;
import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
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
@ -31,13 +29,13 @@ public interface AssistantService {
* @param request the query support request
* @return AssistantSupportResponse containing the support information
*/
AssistantSupportResponse querySupport(QuerySupportParams request);
AssistantSupportResponse querySupport(AssistantQuerySupportParams request);
/**
* Queries conversation usage information.
* @param request the conversation parameters
* @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.api.assistant.AssistantApi;
import ai.z.openapi.service.assistant.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListStatus;
import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
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.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.RequestSupplier;
import okhttp3.ResponseBody;
@ -39,15 +39,15 @@ public class AssistantServiceImpl implements AssistantService {
}
@Override
public AssistantSupportResponse querySupport(QuerySupportParams request) {
RequestSupplier<QuerySupportParams, AssistantSupportStatus> supplier = assistantApi::querySupport;
public AssistantSupportResponse querySupport(AssistantQuerySupportParams request) {
RequestSupplier<AssistantQuerySupportParams, AssistantSupportStatus> supplier = assistantApi::querySupport;
return zAiClient.executeRequest(request, supplier, AssistantSupportResponse.class);
}
@Override
public ConversationUsageListResponse queryConversationUsage(ConversationParameters request) {
RequestSupplier<ConversationParameters, ConversationUsageListStatus> supplier = assistantApi::queryConversationUsage;
return zAiClient.executeRequest(request, supplier, ConversationUsageListResponse.class);
public AssistantConversationUsageListResponse queryConversationUsage(AssistantConversationParameters request) {
RequestSupplier<AssistantConversationParameters, AssistantConversationUsageListStatus> supplier = assistantApi::queryConversationUsage;
return zAiClient.executeRequest(request, supplier, AssistantConversationUsageListResponse.class);
}
}

View file

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

View file

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

View file

@ -7,7 +7,7 @@ import lombok.Data;
* This class represents the usage data for a specific conversation.
*/
@Data
public class ConversationUsage {
public class AssistantConversationUsage {
/**
* The conversation ID.
@ -37,6 +37,6 @@ public class ConversationUsage {
* The usage statistics for the conversation.
*/
@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.
*/
@Data
public class ConversationUsageList {
public class AssistantConversationUsageList {
/**
* The Assistant ID.
@ -27,6 +27,6 @@ public class ConversationUsageList {
* The list of conversation usage data.
*/
@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.
*/
@Data
public class ConversationUsageListResponse implements ClientResponse<ConversationUsageListStatus> {
public class AssistantConversationUsageListResponse implements ClientResponse<AssistantConversationUsageListStatus> {
/**
* Response status code.
@ -29,17 +29,17 @@ public class ConversationUsageListResponse implements ClientResponse<Conversatio
/**
* The conversation usage list data.
*/
private ConversationUsageListStatus data;
private AssistantConversationUsageListStatus data;
/**
* Error information if the request failed.
*/
private ChatError error;
public ConversationUsageListResponse() {
public AssistantConversationUsageListResponse() {
}
public ConversationUsageListResponse(int code, String msg) {
public AssistantConversationUsageListResponse(int code, String msg) {
this.code = code;
this.msg = msg;
}

View file

@ -7,7 +7,7 @@ import lombok.Data;
* This class represents the response containing a list of conversation usage data.
*/
@Data
public class ConversationUsageListStatus {
public class AssistantConversationUsageListStatus {
/**
* The response code.
@ -25,6 +25,6 @@ public class ConversationUsageListStatus {
* The data containing the conversation usage list.
*/
@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.
*/
@Data
public class Usage {
public class AssistantUsage {
/**
* 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.
*/
@JsonTypeField("content")
public class TextContentBlock extends MessageContent {
public class AssistantTextContentBlock extends AssistantMessageContent {
/**
* The content of the text block.
@ -24,7 +24,7 @@ public class TextContentBlock extends MessageContent {
/**
* Default constructor.
*/
public TextContentBlock() {
public AssistantTextContentBlock() {
}
// Getters and Setters

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message;
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 java.util.List;
@ -10,13 +10,13 @@ import java.util.List;
* This class represents a block of tool call data in a conversation.
*/
@JsonTypeField("tool_calls")
public class ToolsDeltaBlock extends MessageContent {
public class AssistantToolsDeltaBlock extends AssistantMessageContent {
/**
* A list of tool call types.
*/
@JsonProperty("tool_calls")
private List<ToolsType> toolCalls;
private List<AssistantToolsType> toolCalls;
/**
* The role of the speaker, default is "tool".
@ -27,16 +27,16 @@ public class ToolsDeltaBlock extends MessageContent {
/**
* Default constructor.
*/
public ToolsDeltaBlock() {
public AssistantToolsDeltaBlock() {
}
// Getters and Setters
public List<ToolsType> getToolCalls() {
public List<AssistantToolsType> getToolCalls() {
return toolCalls;
}
public void setToolCalls(List<ToolsType> toolCalls) {
public void setToolCalls(List<AssistantToolsType> 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 lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -14,7 +13,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CodeInterpreter {
public class AssistantCodeInterpreter {
/**
* 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.
*/
@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;
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.Builder;
import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CodeInterpreterToolBlock extends ToolsType {
public class AssistantCodeInterpreterToolBlock extends AssistantToolsType {
/**
* The index of the tool call.
@ -34,7 +34,7 @@ public class CodeInterpreterToolBlock extends ToolsType {
* The code interpreter object.
*/
@JsonProperty("code_interpreter")
private CodeInterpreter codeInterpreter;
private AssistantCodeInterpreter codeInterpreter;
/**
* The type of tool being called, always "code_interpreter".

View file

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

View file

@ -13,7 +13,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DrawingTool {
public class AssistantDrawingTool {
/**
* 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.
*/
@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;
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.Builder;
import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DrawingToolBlock extends ToolsType {
public class AssistantDrawingToolBlock extends AssistantToolsType {
/**
* The index of the tool call.
@ -34,7 +34,7 @@ public class DrawingToolBlock extends ToolsType {
* The drawing tool object that contains input and outputs.
*/
@JsonProperty("drawing_tool")
private DrawingTool drawingTool;
private AssistantDrawingTool drawingTool;
/**
* The type of tool being called, always "drawing_tool".

View file

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

View file

@ -14,7 +14,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FunctionTool {
public class AssistantFunctionTool {
/**
* The name of the function tool.
@ -32,6 +32,6 @@ public class FunctionTool {
* A list of outputs generated by the function tool.
*/
@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;
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.Builder;
import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class FunctionToolBlock extends ToolsType {
public class AssistantFunctionToolBlock extends AssistantToolsType {
/**
* 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.
*/
@JsonProperty("function")
private FunctionTool function;
private AssistantFunctionTool function;
/**
* The type of tool being called, always "function".

View file

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

View file

@ -15,13 +15,13 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RetrievalTool {
public class AssistantRetrievalTool {
/**
* A list of text snippets and their respective document names retrieved from the
* knowledge base.
*/
@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;
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 lombok.AllArgsConstructor;
import lombok.Builder;
@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RetrievalToolBlock extends ToolsType {
public class AssistantRetrievalToolBlock extends AssistantToolsType {
/**
* 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.
*/
@JsonProperty("retrieval")
private RetrievalTool retrieval;
private AssistantRetrievalTool retrieval;
/**
* The type of tool being used, always set to "retrieval".

View file

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

View file

@ -13,7 +13,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WebBrowser {
public class AssistantWebBrowser {
/**
* 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.
*/
@JsonProperty("outputs")
private List<WebBrowserOutput> outputs;
private List<AssistantWebBrowserOutput> outputs;
}

View file

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

View file

@ -1,7 +1,7 @@
package ai.z.openapi.service.assistant.message.tools.web_browser;
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.Builder;
import lombok.Data;
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WebBrowserToolBlock extends ToolsType {
public class AssistantWebBrowserToolBlock extends AssistantToolsType {
/**
* 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.
*/
@JsonProperty("web_browser")
private WebBrowser webBrowser;
private AssistantWebBrowser webBrowser;
/**
* The type of tool being used, always set to "web_browser".

View file

@ -20,7 +20,7 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@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.

View file

@ -3,9 +3,9 @@ package ai.z.openapi.service.deserialize.assistant.message;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
import ai.z.openapi.service.assistant.message.MessageContent;
import ai.z.openapi.service.assistant.message.TextContentBlock;
import ai.z.openapi.service.assistant.message.tools.ToolsType;
import ai.z.openapi.service.assistant.message.AssistantMessageContent;
import ai.z.openapi.service.assistant.message.AssistantTextContentBlock;
import ai.z.openapi.service.assistant.message.tools.AssistantToolsType;
import ai.z.openapi.service.deserialize.JsonTypeField;
import ai.z.openapi.service.deserialize.JsonTypeMapping;
@ -14,14 +14,14 @@ import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.List;
public class MessageContentDeserializer extends JsonDeserializer<MessageContent> {
public class AssistantMessageContentDeserializer extends JsonDeserializer<AssistantMessageContent> {
@Override
public MessageContent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
public AssistantMessageContent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.readValueAsTree();
// Get JsonTypeMapping annotation from MessageContent class
JsonTypeMapping mapping = MessageContent.class.getAnnotation(JsonTypeMapping.class);
JsonTypeMapping mapping = AssistantMessageContent.class.getAnnotation(JsonTypeMapping.class);
if (mapping == null) {
throw new IllegalStateException("Missing JsonTypeMapping annotation on MessageContent class");
}
@ -66,9 +66,10 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
ParameterizedType listType = (ParameterizedType) field.getGenericType();
Class<?> listGenericType = (Class<?>) listType.getActualTypeArguments()[0];
if (listGenericType.equals(ToolsType.class)) {
if (listGenericType.equals(AssistantToolsType.class)) {
// Deserialize to List<ToolsType>
List<ToolsType> list = new ObjectMapper().readerForListOf(ToolsType.class)
List<AssistantToolsType> list = new ObjectMapper()
.readerForListOf(AssistantToolsType.class)
.readValue(node.get(name));
field.set(obj, list);
}
@ -84,7 +85,7 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
}
}
return (MessageContent) obj;
return (AssistantMessageContent) obj;
}
catch (Exception 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
try {
MessageContent obj = TextContentBlock.class.getDeclaredConstructor().newInstance();
AssistantMessageContent obj = AssistantTextContentBlock.class.getDeclaredConstructor().newInstance();
// Use reflection to manually set field values
for (Field field : TextContentBlock.class.getDeclaredFields()) {
for (Field field : AssistantTextContentBlock.class.getDeclaredFields()) {
field.setAccessible(true);
// field.getName() gets the value from JsonProperty annotation above
JsonProperty annotation = field.getAnnotation(JsonProperty.class);
@ -132,7 +133,8 @@ public class MessageContentDeserializer extends JsonDeserializer<MessageContent>
return obj;
}
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.core.config.ZaiConfig;
import ai.z.openapi.service.assistant.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse;
import ai.z.openapi.service.assistant.message.MessageContent;
import ai.z.openapi.service.assistant.conversation.AssistantConversationParameters;
import ai.z.openapi.service.assistant.conversation.AssistantConversationUsageListResponse;
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.QuerySupportParams;
import ai.z.openapi.service.assistant.query_support.AssistantQuerySupportParams;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
@ -66,12 +66,12 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testStreamAssistantCompletion() throws JsonProcessingException {
// Prepare test data
MessageTextContent textContent = MessageTextContent.builder()
AssistantMessageTextContent textContent = AssistantMessageTextContent.builder()
.text("Help me search for the release time of ZAI's CogVideoX")
.type("text")
.build();
ConversationMessage message = ConversationMessage.builder()
AssistantConversationMessage message = AssistantConversationMessage.builder()
.role("user")
.content(Collections.singletonList(textContent))
.build();
@ -95,7 +95,7 @@ public class AssistantServiceTest {
// Test stream data processing
AtomicInteger messageCount = new AtomicInteger(0);
AtomicBoolean isFirst = new AtomicBoolean(true);
List<MessageContent> choices = new ArrayList<>();
List<AssistantMessageContent> choices = new ArrayList<>();
AtomicReference<AssistantCompletion> lastAccumulator = new AtomicReference<>();
response.getFlowable().doOnNext(accumulator -> {
@ -103,7 +103,7 @@ public class AssistantServiceTest {
logger.info("Starting to receive stream response:");
}
if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) {
MessageContent delta = accumulator.getChoices().get(0).getDelta();
AssistantMessageContent delta = accumulator.getChoices().get(0).getDelta();
if (delta != null) {
try {
logger.info("MessageContent: {}", mapper.writeValueAsString(delta));
@ -133,7 +133,7 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testQuerySupport() {
// Prepare test data
QuerySupportParams request = QuerySupportParams.builder()
AssistantQuerySupportParams request = AssistantQuerySupportParams.builder()
.assistantIdList(Collections.singletonList(TEST_ASSISTANT_ID))
.build();
@ -150,14 +150,14 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testQueryConversationUsage() {
// Prepare test data
ConversationParameters request = ConversationParameters.builder()
AssistantConversationParameters request = AssistantConversationParameters.builder()
.assistantId(TEST_ASSISTANT_ID)
.page(1)
.pageSize(5)
.build();
// Execute test
ConversationUsageListResponse response = assistantService.queryConversationUsage(request);
AssistantConversationUsageListResponse response = assistantService.queryConversationUsage(request);
// Verify results
assertNotNull(response.getData(), "Response should not be null");
@ -169,9 +169,12 @@ public class AssistantServiceTest {
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testErrorHandling_InvalidAssistantId() {
// 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")
.content(Collections.singletonList(textContent))
.build();
@ -193,32 +196,36 @@ public class AssistantServiceTest {
@DisplayName("Test Multi-turn Conversation")
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testMultiTurnConversation() throws JsonProcessingException {
List<ConversationMessage> messages = new ArrayList<>();
List<AssistantConversationMessage> messages = new ArrayList<>();
// First round of conversation
MessageTextContent firstContent = MessageTextContent.builder()
AssistantMessageTextContent firstContent = AssistantMessageTextContent.builder()
.text("Hello, I would like to learn about machine learning")
.type("text")
.build();
messages
.add(ConversationMessage.builder().role("user").content(Collections.singletonList(firstContent)).build());
messages.add(AssistantConversationMessage.builder()
.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...")
.type("text")
.build();
messages.add(ConversationMessage.builder()
messages.add(AssistantConversationMessage.builder()
.role("assistant")
.content(Collections.singletonList(assistantContent))
.build());
// Second round of conversation
MessageTextContent secondContent = MessageTextContent.builder()
AssistantMessageTextContent secondContent = AssistantMessageTextContent.builder()
.text("Can you introduce supervised learning in detail?")
.type("text")
.build();
messages
.add(ConversationMessage.builder().role("user").content(Collections.singletonList(secondContent)).build());
messages.add(AssistantConversationMessage.builder()
.role("user")
.content(Collections.singletonList(secondContent))
.build());
String requestId = String.format(REQUEST_ID_TEMPLATE, System.currentTimeMillis());
@ -232,7 +239,7 @@ public class AssistantServiceTest {
AssistantApiResponse response = assistantService.assistantCompletionStream(request);
response.getFlowable().doOnNext(accumulator -> {
if (accumulator.getChoices() != null && !accumulator.getChoices().isEmpty()) {
MessageContent delta = accumulator.getChoices().get(0).getDelta();
AssistantMessageContent delta = accumulator.getChoices().get(0).getDelta();
if (delta != null) {
try {
logger.info("MessageContent: {}", mapper.writeValueAsString(delta));