Skip to content

Commit 064d6bd

Browse files
authored
feat: Add usage field support to workflow interfaces (#117)
1 parent 03314ae commit 064d6bd

9 files changed

Lines changed: 56 additions & 7 deletions

File tree

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ replay_pid*
3939

4040
# BlueJ files
4141
*.ctxt
42-
**/target
42+
**/target
43+
44+
# ai
45+
.serena/
46+
CLAUDE.md

api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
</parent>
4444

4545
<artifactId>coze-api</artifactId>
46-
<version>0.4.1</version>
46+
<version>0.4.2</version>
4747

4848
<scm>
4949
<connection>scm:git:git://github.com/coze-dev/coze-java.git</connection>

api/src/main/java/com/coze/openapi/client/workflows/run/RunWorkflowResp.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.coze.openapi.client.workflows.run;
22

3+
import com.coze.openapi.client.chat.model.ChatUsage;
34
import com.coze.openapi.client.common.BaseResponse;
45
import com.fasterxml.jackson.annotation.JsonProperty;
56

@@ -36,4 +37,8 @@ public class RunWorkflowResp extends BaseResponse<String> {
3637

3738
@JsonProperty("cost")
3839
private String cost;
40+
41+
/** Token usage information for the workflow execution. */
42+
@JsonProperty("usage")
43+
private ChatUsage usage;
3944
}

api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowEventMessage.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Map;
44

5+
import com.coze.openapi.client.chat.model.ChatUsage;
56
import com.coze.openapi.service.utils.Utils;
67
import com.fasterxml.jackson.annotation.JsonProperty;
78

@@ -41,6 +42,10 @@ public class WorkflowEventMessage {
4142
@JsonProperty("ext")
4243
private Map<String, Object> ext;
4344

45+
/** Token usage information for the workflow execution. */
46+
@JsonProperty("usage")
47+
private ChatUsage usage;
48+
4449
public static WorkflowEventMessage fromJson(String data) {
4550
return Utils.fromJson(data, WorkflowEventMessage.class);
4651
}

api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunHistory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.coze.openapi.client.workflows.run.model;
22

3+
import com.coze.openapi.client.chat.model.ChatUsage;
34
import com.fasterxml.jackson.annotation.JsonProperty;
45

56
import lombok.AllArgsConstructor;
@@ -87,4 +88,8 @@ public class WorkflowRunHistory {
8788
*/
8889
@JsonProperty("debug_url")
8990
private String debugUrl;
91+
92+
/** Token usage information for the workflow execution. */
93+
@JsonProperty("usage")
94+
private ChatUsage usage;
9095
}

api/src/main/java/com/coze/openapi/client/workflows/run/model/WorkflowRunResult.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.coze.openapi.client.workflows.run.model;
22

3+
import com.coze.openapi.client.chat.model.ChatUsage;
34
import com.fasterxml.jackson.annotation.JsonProperty;
45

56
import lombok.AllArgsConstructor;
@@ -29,4 +30,8 @@ public class WorkflowRunResult {
2930
*/
3031
@JsonProperty("execute_id")
3132
private String executeID;
33+
34+
/** Token usage information for the workflow execution. */
35+
@JsonProperty("usage")
36+
private ChatUsage usage;
3237
}

api/src/test/java/com/coze/openapi/service/service/workflow/WorkFlowRunServiceTest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import com.coze.openapi.api.WorkflowRunAPI;
1717
import com.coze.openapi.api.WorkflowRunHistoryAPI;
18+
import com.coze.openapi.client.chat.model.ChatUsage;
1819
import com.coze.openapi.client.workflows.run.RunWorkflowReq;
1920
import com.coze.openapi.client.workflows.run.RunWorkflowResp;
2021
import com.coze.openapi.client.workflows.run.model.WorkflowEvent;
@@ -53,7 +54,7 @@ public class WorkFlowRunServiceTest {
5354
+ "\n"
5455
+ "id: 5\n"
5556
+ "event: Message\n"
56-
+ "data: {\"content\":\"{\\\"output\\\":\\\"为什么小明要带一把尺子去看电影?因为他听说电影很长,怕坐不下!\\\"}\",\"cost\":\"0.00\",\"node_is_finish\":true,\"node_seq_id\":\"0\",\"node_title\":\"\",\"token\":1230}\n"
57+
+ "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"
5758
+ "\n"
5859
+ "id: 0\n"
5960
+ "event: Error\n"
@@ -104,7 +105,11 @@ void parseStreamEventTest() {
104105
5,
105106
event ->
106107
event.getEvent().equals(WorkflowEventType.MESSAGE)
107-
&& event.getMessage().getToken().equals(1230))
108+
&& event.getMessage().getToken().equals(1230)
109+
&& event.getMessage().getUsage() != null
110+
&& event.getMessage().getUsage().getTokenCount() == 1230
111+
&& event.getMessage().getUsage().getInputCount() == 615
112+
&& event.getMessage().getUsage().getOutputCount() == 615)
108113
.assertValueAt(
109114
9,
110115
event ->
@@ -123,13 +128,16 @@ void testCreate() throws Exception {
123128

124129
RunWorkflowReq req = RunWorkflowReq.builder().workflowID(workflowID).build();
125130

131+
ChatUsage usage = ChatUsage.builder().tokenCount(100).inputCount(50).outputCount(50).build();
132+
126133
RunWorkflowResp baseResponse =
127134
RunWorkflowResp.builder()
128135
.code(0)
129136
.msg("success")
130137
.executeID(executeID)
131138
.logID(Utils.TEST_LOG_ID)
132139
.data("data")
140+
.usage(usage)
133141
.build();
134142

135143
// 创建 mock Call 对象
@@ -143,6 +151,10 @@ void testCreate() throws Exception {
143151
// 验证结果
144152
assertNotNull(result);
145153
assertEquals(executeID, result.getExecuteID());
154+
assertNotNull(result.getUsage());
155+
assertEquals(100, result.getUsage().getTokenCount());
156+
assertEquals(50, result.getUsage().getInputCount());
157+
assertEquals(50, result.getUsage().getOutputCount());
146158
}
147159

148160
@Test

api/src/test/java/com/coze/openapi/service/service/workflow/WorkflowRunHistoryServiceTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.mockito.MockitoAnnotations;
1616

1717
import com.coze.openapi.api.WorkflowRunHistoryAPI;
18+
import com.coze.openapi.client.chat.model.ChatUsage;
1819
import com.coze.openapi.client.common.BaseResponse;
1920
import com.coze.openapi.client.workflows.run.RetrieveRunHistoryReq;
2021
import com.coze.openapi.client.workflows.run.RetrieveRunHistoryResp;
@@ -44,10 +45,14 @@ void testRetrieve() throws Exception {
4445
RetrieveRunHistoryReq req =
4546
RetrieveRunHistoryReq.builder().workflowID(workflowId).executeID(executeId).build();
4647

48+
ChatUsage usage1 = ChatUsage.builder().tokenCount(150).inputCount(75).outputCount(75).build();
49+
50+
ChatUsage usage2 = ChatUsage.builder().tokenCount(200).inputCount(100).outputCount(100).build();
51+
4752
List<WorkflowRunHistory> histories =
4853
Arrays.asList(
49-
WorkflowRunHistory.builder().executeID("node1").build(),
50-
WorkflowRunHistory.builder().executeID("node2").build());
54+
WorkflowRunHistory.builder().executeID("node1").usage(usage1).build(),
55+
WorkflowRunHistory.builder().executeID("node2").usage(usage2).build());
5156

5257
BaseResponse<List<WorkflowRunHistory>> baseResponse =
5358
BaseResponse.<List<WorkflowRunHistory>>builder()
@@ -71,5 +76,13 @@ void testRetrieve() throws Exception {
7176
assertEquals(2, result.getHistories().size());
7277
assertEquals("node1", result.getHistories().get(0).getExecuteID());
7378
assertEquals(Utils.TEST_LOG_ID, result.getLogID());
79+
assertNotNull(result.getHistories().get(0).getUsage());
80+
assertEquals(150, result.getHistories().get(0).getUsage().getTokenCount());
81+
assertEquals(75, result.getHistories().get(0).getUsage().getInputCount());
82+
assertEquals(75, result.getHistories().get(0).getUsage().getOutputCount());
83+
assertNotNull(result.getHistories().get(1).getUsage());
84+
assertEquals(200, result.getHistories().get(1).getUsage().getTokenCount());
85+
assertEquals(100, result.getHistories().get(1).getUsage().getInputCount());
86+
assertEquals(100, result.getHistories().get(1).getUsage().getOutputCount());
7487
}
7588
}

example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<dependency>
1717
<groupId>com.coze</groupId>
1818
<artifactId>coze-api</artifactId>
19-
<version>0.4.1</version>
19+
<version>0.4.2</version>
2020
</dependency>
2121
</dependencies>
2222
</project>

0 commit comments

Comments
 (0)