diff --git a/.gitignore b/.gitignore
index 1fe5b781..ea6f27c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,4 +39,8 @@ replay_pid*
# BlueJ files
*.ctxt
-**/target
\ No newline at end of file
+**/target
+
+# ai
+.serena/
+CLAUDE.md
diff --git a/api/pom.xml b/api/pom.xml
index 3a12a3d3..57819e01 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -43,7 +43,7 @@
coze-api
- 0.4.1
+ 0.4.2
scm:git:git://github.com/coze-dev/coze-java.git
diff --git a/api/src/main/java/com/coze/openapi/client/workflows/run/RunWorkflowResp.java b/api/src/main/java/com/coze/openapi/client/workflows/run/RunWorkflowResp.java
index 79d50c92..f098e013 100644
--- a/api/src/main/java/com/coze/openapi/client/workflows/run/RunWorkflowResp.java
+++ b/api/src/main/java/com/coze/openapi/client/workflows/run/RunWorkflowResp.java
@@ -1,5 +1,6 @@
package com.coze.openapi.client.workflows.run;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.coze.openapi.client.common.BaseResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -36,4 +37,8 @@ public class RunWorkflowResp extends BaseResponse {
@JsonProperty("cost")
private String cost;
+
+ /** Token usage information for the workflow execution. */
+ @JsonProperty("usage")
+ private ChatUsage usage;
}
diff --git a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowEventMessage.java b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowEventMessage.java
index a0a50bb7..47aa7015 100644
--- a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowEventMessage.java
+++ b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowEventMessage.java
@@ -2,6 +2,7 @@
import java.util.Map;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.coze.openapi.service.utils.Utils;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -41,6 +42,10 @@ public class WorkflowEventMessage {
@JsonProperty("ext")
private Map ext;
+ /** Token usage information for the workflow execution. */
+ @JsonProperty("usage")
+ private ChatUsage usage;
+
public static WorkflowEventMessage fromJson(String data) {
return Utils.fromJson(data, WorkflowEventMessage.class);
}
diff --git a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunHistory.java b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunHistory.java
index 8e7b9946..5c58258d 100644
--- a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunHistory.java
+++ b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunHistory.java
@@ -1,5 +1,6 @@
package com.coze.openapi.client.workflows.run.model;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
@@ -87,4 +88,8 @@ public class WorkflowRunHistory {
*/
@JsonProperty("debug_url")
private String debugUrl;
+
+ /** Token usage information for the workflow execution. */
+ @JsonProperty("usage")
+ private ChatUsage usage;
}
diff --git a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunResult.java b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunResult.java
index c929ca1b..31e8ca34 100644
--- a/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunResult.java
+++ b/api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunResult.java
@@ -1,5 +1,6 @@
package com.coze.openapi.client.workflows.run.model;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
@@ -29,4 +30,8 @@ public class WorkflowRunResult {
*/
@JsonProperty("execute_id")
private String executeID;
+
+ /** Token usage information for the workflow execution. */
+ @JsonProperty("usage")
+ private ChatUsage usage;
}
diff --git a/api/src/test/java/com/coze/openapi/service/service/workflow/WorkFlowRunServiceTest.java b/api/src/test/java/com/coze/openapi/service/service/workflow/WorkFlowRunServiceTest.java
index 70dfccc0..f90845d6 100644
--- a/api/src/test/java/com/coze/openapi/service/service/workflow/WorkFlowRunServiceTest.java
+++ b/api/src/test/java/com/coze/openapi/service/service/workflow/WorkFlowRunServiceTest.java
@@ -15,6 +15,7 @@
import com.coze.openapi.api.WorkflowRunAPI;
import com.coze.openapi.api.WorkflowRunHistoryAPI;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.coze.openapi.client.workflows.run.RunWorkflowReq;
import com.coze.openapi.client.workflows.run.RunWorkflowResp;
import com.coze.openapi.client.workflows.run.model.WorkflowEvent;
@@ -53,7 +54,7 @@ public class WorkFlowRunServiceTest {
+ "\n"
+ "id: 5\n"
+ "event: Message\n"
- + "data: {\"content\":\"{\\\"output\\\":\\\"为什么小明要带一把尺子去看电影?因为他听说电影很长,怕坐不下!\\\"}\",\"cost\":\"0.00\",\"node_is_finish\":true,\"node_seq_id\":\"0\",\"node_title\":\"\",\"token\":1230}\n"
+ + "data: {\"content\":\"{\\\"output\\\":\\\"为什么小明要带一把尺子去看电影?因为他听说电影很长,怕坐不下!\\\"}\",\"cost\":\"0.00\",\"node_is_finish\":true,\"node_seq_id\":\"0\",\"node_title\":\"\",\"token\":1230,\"usage\":{\"token_count\":1230,\"input_count\":615,\"output_count\":615}}\n"
+ "\n"
+ "id: 0\n"
+ "event: Error\n"
@@ -104,7 +105,11 @@ void parseStreamEventTest() {
5,
event ->
event.getEvent().equals(WorkflowEventType.MESSAGE)
- && event.getMessage().getToken().equals(1230))
+ && event.getMessage().getToken().equals(1230)
+ && event.getMessage().getUsage() != null
+ && event.getMessage().getUsage().getTokenCount() == 1230
+ && event.getMessage().getUsage().getInputCount() == 615
+ && event.getMessage().getUsage().getOutputCount() == 615)
.assertValueAt(
9,
event ->
@@ -123,6 +128,8 @@ void testCreate() throws Exception {
RunWorkflowReq req = RunWorkflowReq.builder().workflowID(workflowID).build();
+ ChatUsage usage = ChatUsage.builder().tokenCount(100).inputCount(50).outputCount(50).build();
+
RunWorkflowResp baseResponse =
RunWorkflowResp.builder()
.code(0)
@@ -130,6 +137,7 @@ void testCreate() throws Exception {
.executeID(executeID)
.logID(Utils.TEST_LOG_ID)
.data("data")
+ .usage(usage)
.build();
// 创建 mock Call 对象
@@ -143,6 +151,10 @@ void testCreate() throws Exception {
// 验证结果
assertNotNull(result);
assertEquals(executeID, result.getExecuteID());
+ assertNotNull(result.getUsage());
+ assertEquals(100, result.getUsage().getTokenCount());
+ assertEquals(50, result.getUsage().getInputCount());
+ assertEquals(50, result.getUsage().getOutputCount());
}
@Test
diff --git a/api/src/test/java/com/coze/openapi/service/service/workflow/WorkflowRunHistoryServiceTest.java b/api/src/test/java/com/coze/openapi/service/service/workflow/WorkflowRunHistoryServiceTest.java
index 54fa38a6..c00355cc 100644
--- a/api/src/test/java/com/coze/openapi/service/service/workflow/WorkflowRunHistoryServiceTest.java
+++ b/api/src/test/java/com/coze/openapi/service/service/workflow/WorkflowRunHistoryServiceTest.java
@@ -15,6 +15,7 @@
import org.mockito.MockitoAnnotations;
import com.coze.openapi.api.WorkflowRunHistoryAPI;
+import com.coze.openapi.client.chat.model.ChatUsage;
import com.coze.openapi.client.common.BaseResponse;
import com.coze.openapi.client.workflows.run.RetrieveRunHistoryReq;
import com.coze.openapi.client.workflows.run.RetrieveRunHistoryResp;
@@ -44,10 +45,14 @@ void testRetrieve() throws Exception {
RetrieveRunHistoryReq req =
RetrieveRunHistoryReq.builder().workflowID(workflowId).executeID(executeId).build();
+ ChatUsage usage1 = ChatUsage.builder().tokenCount(150).inputCount(75).outputCount(75).build();
+
+ ChatUsage usage2 = ChatUsage.builder().tokenCount(200).inputCount(100).outputCount(100).build();
+
List histories =
Arrays.asList(
- WorkflowRunHistory.builder().executeID("node1").build(),
- WorkflowRunHistory.builder().executeID("node2").build());
+ WorkflowRunHistory.builder().executeID("node1").usage(usage1).build(),
+ WorkflowRunHistory.builder().executeID("node2").usage(usage2).build());
BaseResponse> baseResponse =
BaseResponse.>builder()
@@ -71,5 +76,13 @@ void testRetrieve() throws Exception {
assertEquals(2, result.getHistories().size());
assertEquals("node1", result.getHistories().get(0).getExecuteID());
assertEquals(Utils.TEST_LOG_ID, result.getLogID());
+ assertNotNull(result.getHistories().get(0).getUsage());
+ assertEquals(150, result.getHistories().get(0).getUsage().getTokenCount());
+ assertEquals(75, result.getHistories().get(0).getUsage().getInputCount());
+ assertEquals(75, result.getHistories().get(0).getUsage().getOutputCount());
+ assertNotNull(result.getHistories().get(1).getUsage());
+ assertEquals(200, result.getHistories().get(1).getUsage().getTokenCount());
+ assertEquals(100, result.getHistories().get(1).getUsage().getInputCount());
+ assertEquals(100, result.getHistories().get(1).getUsage().getOutputCount());
}
}
diff --git a/example/pom.xml b/example/pom.xml
index 76914caa..c8579637 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -16,7 +16,7 @@
com.coze
coze-api
- 0.4.1
+ 0.4.2