Skip to content

Commit 8ae6797

Browse files
committed
feat(selfhosted): report work stop reasons
Hand-written change from the internal SDK repository. The original commit message is intentionally not mirrored; see the source repository for details. Sync-Source-Commit: dbc9b17b17b0f2649adb7113752d53cf09d155ff Hand-Written-Reason: No Ark-APIs provenance marker; treated as a hand-written source commit. Release-Version: 0.9.0
1 parent 22d95f7 commit 8ae6797

10 files changed

Lines changed: 461 additions & 16 deletions

File tree

‎src/main/java/com/volcengine/ark/runtime/models/environment/EnvConfig.java‎

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
EnvConfig.JSON_PROPERTY_PACKAGES,
3333
EnvConfig.JSON_PROPERTY_ENV,
3434
EnvConfig.JSON_PROPERTY_SETUP_SCRIPT,
35+
EnvConfig.JSON_PROPERTY_ACTIVE_RECOVERY,
3536
EnvConfig.JSON_PROPERTY_TOS
3637
})
3738
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.21.0")
@@ -56,6 +57,10 @@ public class EnvConfig {
5657
@javax.annotation.Nullable
5758
private String setupScript;
5859

60+
public static final String JSON_PROPERTY_ACTIVE_RECOVERY = "active_recovery";
61+
@javax.annotation.Nullable
62+
private Boolean activeRecovery;
63+
5964
public static final String JSON_PROPERTY_TOS = "tos";
6065
@javax.annotation.Nullable
6166
private TosConfig tos;
@@ -196,6 +201,31 @@ public void setSetupScript(@javax.annotation.Nullable String setupScript) {
196201
this.setupScript = setupScript;
197202
}
198203

204+
public EnvConfig activeRecovery(@javax.annotation.Nullable Boolean activeRecovery) {
205+
206+
this.activeRecovery = activeRecovery;
207+
return this;
208+
}
209+
210+
/**
211+
* 是否启用 Work 积极恢复;仅 self_hosted Environment 支持,省略时等同于 false。该配置 仅允许在 Environment 级设置,不允许通过 Session override/upgrade 覆盖。开启后,平台在 Work 已 stopped、仍有未闭合 agent.tool_use 且 recovery_count 少于 5 次时将 Work 重新排队, 不按 stop_reason 排除。只有 Worker 上报 completed 且全部 tool_use 已闭合后才会清零计数。
212+
* @return activeRecovery
213+
*/
214+
@javax.annotation.Nullable
215+
@JsonProperty(value = JSON_PROPERTY_ACTIVE_RECOVERY, required = false)
216+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
217+
218+
public Boolean getActiveRecovery() {
219+
return activeRecovery;
220+
}
221+
222+
223+
@JsonProperty(value = JSON_PROPERTY_ACTIVE_RECOVERY, required = false)
224+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
225+
public void setActiveRecovery(@javax.annotation.Nullable Boolean activeRecovery) {
226+
this.activeRecovery = activeRecovery;
227+
}
228+
199229
public EnvConfig tos(@javax.annotation.Nullable TosConfig tos) {
200230

201231
this.tos = tos;
@@ -236,12 +266,13 @@ public boolean equals(Object o) {
236266
Objects.equals(this.packages, envConfig.packages) &&
237267
Objects.equals(this.env, envConfig.env) &&
238268
Objects.equals(this.setupScript, envConfig.setupScript) &&
269+
Objects.equals(this.activeRecovery, envConfig.activeRecovery) &&
239270
Objects.equals(this.tos, envConfig.tos);
240271
}
241272

242273
@Override
243274
public int hashCode() {
244-
return Objects.hash(type, networking, packages, env, setupScript, tos);
275+
return Objects.hash(type, networking, packages, env, setupScript, activeRecovery, tos);
245276
}
246277

247278
@Override
@@ -253,6 +284,7 @@ public String toString() {
253284
sb.append(" packages: ").append(toIndentedString(packages)).append("\n");
254285
sb.append(" env: ").append(toIndentedString(env)).append("\n");
255286
sb.append(" setupScript: ").append(toIndentedString(setupScript)).append("\n");
287+
sb.append(" activeRecovery: ").append(toIndentedString(activeRecovery)).append("\n");
256288
sb.append(" tos: ").append(toIndentedString(tos)).append("\n");
257289
sb.append("}");
258290
return sb.toString();
@@ -298,6 +330,10 @@ public EnvConfig.Builder setupScript(String setupScript) {
298330
this.instance.setupScript = setupScript;
299331
return this;
300332
}
333+
public EnvConfig.Builder activeRecovery(Boolean activeRecovery) {
334+
this.instance.activeRecovery = activeRecovery;
335+
return this;
336+
}
301337
public EnvConfig.Builder tos(TosConfig tos) {
302338
this.instance.tos = tos;
303339
return this;
@@ -341,6 +377,7 @@ public EnvConfig.Builder toBuilder() {
341377
.packages(getPackages())
342378
.env(getEnv())
343379
.setupScript(getSetupScript())
380+
.activeRecovery(getActiveRecovery())
344381
.tos(getTos());
345382
}
346383

‎src/main/java/com/volcengine/ark/runtime/models/environment/EnvironmentWorkPoll200Response.java‎

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
EnvironmentWorkPoll200Response.JSON_PROPERTY_STATE,
4343
EnvironmentWorkPoll200Response.JSON_PROPERTY_STOP_REQUESTED_AT,
4444
EnvironmentWorkPoll200Response.JSON_PROPERTY_STOPPED_AT,
45+
EnvironmentWorkPoll200Response.JSON_PROPERTY_STOP_REASON,
46+
EnvironmentWorkPoll200Response.JSON_PROPERTY_RECOVERY_COUNT,
4547
EnvironmentWorkPoll200Response.JSON_PROPERTY_TYPE
4648
})
4749
@JsonTypeName("EnvironmentWork_poll_200_response")
@@ -95,6 +97,14 @@ public class EnvironmentWorkPoll200Response {
9597
@javax.annotation.Nullable
9698
private String stoppedAt;
9799

100+
public static final String JSON_PROPERTY_STOP_REASON = "stop_reason";
101+
@javax.annotation.Nullable
102+
private WorkStopReason stopReason;
103+
104+
public static final String JSON_PROPERTY_RECOVERY_COUNT = "recovery_count";
105+
@javax.annotation.Nullable
106+
private Integer recoveryCount;
107+
98108
/**
99109
* 对象类型,固定为 `work`。
100110
*/
@@ -443,6 +453,56 @@ public void setStoppedAt(@javax.annotation.Nullable String stoppedAt) {
443453
this.stoppedAt = stoppedAt;
444454
}
445455

456+
public EnvironmentWorkPoll200Response stopReason(@javax.annotation.Nullable WorkStopReason stopReason) {
457+
458+
this.stopReason = stopReason;
459+
return this;
460+
}
461+
462+
/**
463+
* 最近一次停止原因。首次停止前省略;state 为 stopping / stopped 时返回本次停止原因; 自动恢复到 queued / starting / active 后仍保留上一次停止原因,当前生命周期状态以 `state` 为准。
464+
* @return stopReason
465+
*/
466+
@javax.annotation.Nullable
467+
@JsonProperty(value = JSON_PROPERTY_STOP_REASON, required = false)
468+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
469+
470+
public WorkStopReason getStopReason() {
471+
return stopReason;
472+
}
473+
474+
475+
@JsonProperty(value = JSON_PROPERTY_STOP_REASON, required = false)
476+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
477+
public void setStopReason(@javax.annotation.Nullable WorkStopReason stopReason) {
478+
this.stopReason = stopReason;
479+
}
480+
481+
public EnvironmentWorkPoll200Response recoveryCount(@javax.annotation.Nullable Integer recoveryCount) {
482+
483+
this.recoveryCount = recoveryCount;
484+
return this;
485+
}
486+
487+
/**
488+
* 自上次成功完成且全部 tool_use 已闭合后,平台已自动将本 Work 重新排队的次数; 首次执行或字段省略时按 0 处理。手动 Ensure 不会清零该计数。
489+
* @return recoveryCount
490+
*/
491+
@javax.annotation.Nullable
492+
@JsonProperty(value = JSON_PROPERTY_RECOVERY_COUNT, required = false)
493+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
494+
495+
public Integer getRecoveryCount() {
496+
return recoveryCount;
497+
}
498+
499+
500+
@JsonProperty(value = JSON_PROPERTY_RECOVERY_COUNT, required = false)
501+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
502+
public void setRecoveryCount(@javax.annotation.Nullable Integer recoveryCount) {
503+
this.recoveryCount = recoveryCount;
504+
}
505+
446506
public EnvironmentWorkPoll200Response type(@javax.annotation.Nonnull TypeEnum type) {
447507

448508
this.type = type;
@@ -490,12 +550,14 @@ public boolean equals(Object o) {
490550
Objects.equals(this.state, environmentWorkPoll200Response.state) &&
491551
Objects.equals(this.stopRequestedAt, environmentWorkPoll200Response.stopRequestedAt) &&
492552
Objects.equals(this.stoppedAt, environmentWorkPoll200Response.stoppedAt) &&
553+
Objects.equals(this.stopReason, environmentWorkPoll200Response.stopReason) &&
554+
Objects.equals(this.recoveryCount, environmentWorkPoll200Response.recoveryCount) &&
493555
Objects.equals(this.type, environmentWorkPoll200Response.type);
494556
}
495557

496558
@Override
497559
public int hashCode() {
498-
return Objects.hash(id, acknowledgedAt, createdAt, data, environmentId, latestHeartbeatAt, tags, secret, startedAt, state, stopRequestedAt, stoppedAt, type);
560+
return Objects.hash(id, acknowledgedAt, createdAt, data, environmentId, latestHeartbeatAt, tags, secret, startedAt, state, stopRequestedAt, stoppedAt, stopReason, recoveryCount, type);
499561
}
500562

501563
@Override
@@ -514,6 +576,8 @@ public String toString() {
514576
sb.append(" state: ").append(toIndentedString(state)).append("\n");
515577
sb.append(" stopRequestedAt: ").append(toIndentedString(stopRequestedAt)).append("\n");
516578
sb.append(" stoppedAt: ").append(toIndentedString(stoppedAt)).append("\n");
579+
sb.append(" stopReason: ").append(toIndentedString(stopReason)).append("\n");
580+
sb.append(" recoveryCount: ").append(toIndentedString(recoveryCount)).append("\n");
517581
sb.append(" type: ").append(toIndentedString(type)).append("\n");
518582
sb.append("}");
519583
return sb.toString();
@@ -587,6 +651,14 @@ public EnvironmentWorkPoll200Response.Builder stoppedAt(String stoppedAt) {
587651
this.instance.stoppedAt = stoppedAt;
588652
return this;
589653
}
654+
public EnvironmentWorkPoll200Response.Builder stopReason(WorkStopReason stopReason) {
655+
this.instance.stopReason = stopReason;
656+
return this;
657+
}
658+
public EnvironmentWorkPoll200Response.Builder recoveryCount(Integer recoveryCount) {
659+
this.instance.recoveryCount = recoveryCount;
660+
return this;
661+
}
590662
public EnvironmentWorkPoll200Response.Builder type(TypeEnum type) {
591663
this.instance.type = type;
592664
return this;
@@ -637,6 +709,8 @@ public EnvironmentWorkPoll200Response.Builder toBuilder() {
637709
.state(getState())
638710
.stopRequestedAt(getStopRequestedAt())
639711
.stoppedAt(getStoppedAt())
712+
.stopReason(getStopReason())
713+
.recoveryCount(getRecoveryCount())
640714
.type(getType());
641715
}
642716

‎src/main/java/com/volcengine/ark/runtime/models/environment/StopWorkBody.java‎

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,19 @@
2525
* Stop work 的请求体。
2626
*/
2727
@JsonPropertyOrder({
28-
StopWorkBody.JSON_PROPERTY_FORCE
28+
StopWorkBody.JSON_PROPERTY_FORCE,
29+
StopWorkBody.JSON_PROPERTY_REASON
2930
})
3031
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.21.0")
3132
public class StopWorkBody {
3233
public static final String JSON_PROPERTY_FORCE = "force";
3334
@javax.annotation.Nullable
3435
private Boolean force;
3536

37+
public static final String JSON_PROPERTY_REASON = "reason";
38+
@javax.annotation.Nullable
39+
private WorkStopReason reason;
40+
3641
public StopWorkBody() {
3742
}
3843

@@ -61,6 +66,31 @@ public void setForce(@javax.annotation.Nullable Boolean force) {
6166
this.force = force;
6267
}
6368

69+
public StopWorkBody reason(@javax.annotation.Nullable WorkStopReason reason) {
70+
71+
this.reason = reason;
72+
return this;
73+
}
74+
75+
/**
76+
* 强制停止原因;仅允许与 `force=true` 一起提交,省略时按 `others` 记录。 Worker 正常完成时传 `completed`,异常退出时传 `worker_abnormal`;用户或管理员操作分别传 `user_cancelled` 或 `admin_stopped`,无法归类时传 `others`。`lease_expired` 仅由平台在租约 过期时写入,不应通过 StopWork 上报。该字段用于停止诊断,并在 Worker 上报 `completed` 且全部 tool_use 已闭合时作为清零恢复次数的信号;平台不会按停止原因排除积极恢复。
77+
* @return reason
78+
*/
79+
@javax.annotation.Nullable
80+
@JsonProperty(value = JSON_PROPERTY_REASON, required = false)
81+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
82+
83+
public WorkStopReason getReason() {
84+
return reason;
85+
}
86+
87+
88+
@JsonProperty(value = JSON_PROPERTY_REASON, required = false)
89+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
90+
public void setReason(@javax.annotation.Nullable WorkStopReason reason) {
91+
this.reason = reason;
92+
}
93+
6494

6595
@Override
6696
public boolean equals(Object o) {
@@ -71,19 +101,21 @@ public boolean equals(Object o) {
71101
return false;
72102
}
73103
StopWorkBody stopWorkBody = (StopWorkBody) o;
74-
return Objects.equals(this.force, stopWorkBody.force);
104+
return Objects.equals(this.force, stopWorkBody.force) &&
105+
Objects.equals(this.reason, stopWorkBody.reason);
75106
}
76107

77108
@Override
78109
public int hashCode() {
79-
return Objects.hash(force);
110+
return Objects.hash(force, reason);
80111
}
81112

82113
@Override
83114
public String toString() {
84115
StringBuilder sb = new StringBuilder();
85116
sb.append("class StopWorkBody {\n");
86117
sb.append(" force: ").append(toIndentedString(force)).append("\n");
118+
sb.append(" reason: ").append(toIndentedString(reason)).append("\n");
87119
sb.append("}");
88120
return sb.toString();
89121
}
@@ -112,6 +144,10 @@ public StopWorkBody.Builder force(Boolean force) {
112144
this.instance.force = force;
113145
return this;
114146
}
147+
public StopWorkBody.Builder reason(WorkStopReason reason) {
148+
this.instance.reason = reason;
149+
return this;
150+
}
115151

116152

117153
/**
@@ -146,7 +182,8 @@ public static StopWorkBody.Builder builder() {
146182
*/
147183
public StopWorkBody.Builder toBuilder() {
148184
return new StopWorkBody.Builder()
149-
.force(getForce());
185+
.force(getForce())
186+
.reason(getReason());
150187
}
151188

152189

0 commit comments

Comments
 (0)