fix(release): serialize live OpenAI Docker lanes · openclaw/openclaw@a672bef
steipete
·
2026-05-10
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -97,7 +97,10 @@ function writeOpenWebUiConfig([openaiApiKey]) {
|
97 | 97 | value: (process.env.OPENAI_BASE_URL || "https://api.openai.com/v1").trim(), |
98 | 98 | }, |
99 | 99 | { path: "models.providers.openai.models", value: [] }, |
100 | | -{ path: "models.providers.openai.timeoutSeconds", value: 600 }, |
| 100 | +{ |
| 101 | +path: "models.providers.openai.timeoutSeconds", |
| 102 | +value: Number.parseInt(process.env.OPENCLAW_OPENWEBUI_PROVIDER_TIMEOUT_SECONDS ?? "900", 10), |
| 103 | +}, |
101 | 104 | { path: "models.providers.openai.agentRuntime", value: { id: "pi" } }, |
102 | 105 | { path: "gateway.controlUi.enabled", value: false }, |
103 | 106 | { path: "gateway.mode", value: "local" }, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -3,6 +3,10 @@ import path from "node:path";
|
3 | 3 | |
4 | 4 | const command = process.argv[2]; |
5 | 5 | const readJson = (file) => JSON.parse(fs.readFileSync(file, "utf8")); |
| 6 | +const agentTurnTimeoutSeconds = Number.parseInt( |
| 7 | +process.env.OPENCLAW_LIVE_PLUGIN_TOOL_TIMEOUT_SECONDS ?? "900", |
| 8 | +10, |
| 9 | +); |
6 | 10 | |
7 | 11 | function requireEnv(name) { |
8 | 12 | const value = process.env[name]; |
@@ -146,7 +150,7 @@ function configure() {
|
146 | 150 | baseUrl: (process.env.OPENAI_BASE_URL || "https://api.openai.com/v1").trim(), |
147 | 151 | apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" }, |
148 | 152 | agentRuntime: { id: "pi" }, |
149 | | -timeoutSeconds: 600, |
| 153 | +timeoutSeconds: agentTurnTimeoutSeconds, |
150 | 154 | models: [ |
151 | 155 | { |
152 | 156 | id: modelId, |
@@ -178,7 +182,7 @@ function configure() {
|
178 | 182 | }, |
179 | 183 | workspace: path.join(stateDir(), "workspace"), |
180 | 184 | skipBootstrap: true, |
181 | | -timeoutSeconds: 720, |
| 185 | +timeoutSeconds: agentTurnTimeoutSeconds, |
182 | 186 | }, |
183 | 187 | }; |
184 | 188 | writeJson(cfgPath, cfg); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -11,6 +11,7 @@ IMAGE_NAME="$(docker_e2e_resolve_image "openclaw-live-plugin-tool-e2e" OPENCLAW_
|
11 | 11 | DOCKER_TARGET="${OPENCLAW_LIVE_PLUGIN_TOOL_DOCKER_TARGET:-bare}" |
12 | 12 | HOST_BUILD="${OPENCLAW_LIVE_PLUGIN_TOOL_HOST_BUILD:-1}" |
13 | 13 | PACKAGE_TGZ="${OPENCLAW_CURRENT_PACKAGE_TGZ:-}" |
| 14 | +AGENT_TURN_TIMEOUT_SECONDS="${OPENCLAW_LIVE_PLUGIN_TOOL_TIMEOUT_SECONDS:-900}" |
14 | 15 | PROFILE_FILE="${OPENCLAW_LIVE_PLUGIN_TOOL_PROFILE_FILE:-${OPENCLAW_TESTBOX_PROFILE_FILE:-$HOME/.openclaw-testbox-live.profile}}" |
15 | 16 | if [ ! -f "$PROFILE_FILE" ] && [ -f "$HOME/.profile" ]; then |
16 | 17 | PROFILE_FILE="$HOME/.profile" |
@@ -54,6 +55,7 @@ if ! docker_e2e_run_with_harness \
|
54 | 55 | -e OPENAI_API_KEY \ |
55 | 56 | -e OPENAI_BASE_URL \ |
56 | 57 | -e OPENCLAW_LIVE_PLUGIN_TOOL_MODEL="${OPENCLAW_LIVE_PLUGIN_TOOL_MODEL:-openai/gpt-5.4-mini}" \ |
| 58 | + -e "OPENCLAW_LIVE_PLUGIN_TOOL_TIMEOUT_SECONDS=$AGENT_TURN_TIMEOUT_SECONDS" \ |
57 | 59 | -e "OPENCLAW_TEST_STATE_SCRIPT_B64=$OPENCLAW_TEST_STATE_SCRIPT_B64" \ |
58 | 60 | "${DOCKER_E2E_PACKAGE_ARGS[@]}" \ |
59 | 61 | "${PROFILE_MOUNT[@]}" \ |
@@ -138,7 +140,7 @@ openclaw agent --local \
|
138 | 140 | --model "$MODEL_REF" \ |
139 | 141 | --message "Call the tool named ${TOOL_NAME}. Reply with only the exact text returned by that tool. Do not compute, transform, or explain it." \ |
140 | 142 | --thinking off \ |
141 | | - --timeout 720 \ |
| 143 | + --timeout "${OPENCLAW_LIVE_PLUGIN_TOOL_TIMEOUT_SECONDS:-900}" \ |
142 | 144 | --json >/tmp/openclaw-agent.json 2>/tmp/openclaw-agent.err |
143 | 145 | |
144 | 146 | node scripts/e2e/lib/live-plugin-tool/assertions.mjs assert-agent-turn |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -23,6 +23,8 @@ GW_NAME="openclaw-openwebui-gateway-$$"
|
23 | 23 | OW_NAME="openclaw-openwebui-$$" |
24 | 24 | DOCKER_COMMAND_TIMEOUT="${OPENCLAW_OPENWEBUI_DOCKER_COMMAND_TIMEOUT:-600s}" |
25 | 25 | DOCKER_PULL_TIMEOUT="${OPENCLAW_OPENWEBUI_DOCKER_PULL_TIMEOUT:-600s}" |
| 26 | +PROVIDER_TIMEOUT_SECONDS="${OPENCLAW_OPENWEBUI_PROVIDER_TIMEOUT_SECONDS:-900}" |
| 27 | +PROBE_FETCH_TIMEOUT_MS="${OPENCLAW_OPENWEBUI_FETCH_TIMEOUT_MS:-$((PROVIDER_TIMEOUT_SECONDS * 1000 + 60000))}" |
26 | 28 | |
27 | 29 | PROFILE_FILE="${OPENCLAW_TESTBOX_PROFILE_FILE:-$HOME/.openclaw-testbox-live.profile}" |
28 | 30 | if [[ -f "$PROFILE_FILE" && -r "$PROFILE_FILE" ]]; then |
@@ -73,6 +75,7 @@ docker_e2e_docker_cmd run -d \
|
73 | 75 | -e "OPENCLAW_SKIP_GMAIL_WATCHER=1" \ |
74 | 76 | -e "OPENCLAW_SKIP_CRON=1" \ |
75 | 77 | -e "OPENCLAW_SKIP_CANVAS_HOST=1" \ |
| 78 | + -e "OPENCLAW_OPENWEBUI_PROVIDER_TIMEOUT_SECONDS=$PROVIDER_TIMEOUT_SECONDS" \ |
76 | 79 | -e OPENAI_API_KEY \ |
77 | 80 | ${OPENAI_BASE_URL_VALUE:+-e OPENAI_BASE_URL} \ |
78 | 81 | "$IMAGE_NAME" \ |
@@ -148,6 +151,7 @@ if ! docker_e2e_docker_cmd exec \
|
148 | 151 | -e "OPENWEBUI_PROMPT=$PROMPT" \ |
149 | 152 | -e "OPENWEBUI_MODEL_ATTEMPTS=72" \ |
150 | 153 | -e "OPENWEBUI_MODEL_RETRY_MS=5000" \ |
| 154 | + -e "OPENWEBUI_FETCH_TIMEOUT_MS=$PROBE_FETCH_TIMEOUT_MS" \ |
151 | 155 | "$GW_NAME" \ |
152 | 156 | node /app/scripts/e2e/openwebui-probe.mjs >/tmp/openwebui-probe.log 2>&1; then |
153 | 157 | cat /tmp/openwebui-probe.log 2>/dev/null || true |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -25,6 +25,7 @@ export const DEFAULT_RESOURCE_LIMITS = {
|
25 | 25 | "live:droid": 4, |
26 | 26 | "live:gemini": 4, |
27 | 27 | "live:opencode": 4, |
| 28 | +"live:openai": 1, |
28 | 29 | npm: 10, |
29 | 30 | service: 7, |
30 | 31 | }; |
|
| Original file line number | Diff line number | Diff line change |
|---|
|
1 | 1 | import { describe, expect, it } from "vitest"; |
| 2 | +import { DEFAULT_RESOURCE_LIMITS } from "../../scripts/lib/docker-e2e-plan.mjs"; |
2 | 3 | import { |
3 | 4 | canStartSchedulerLane, |
4 | 5 | describeDockerSchedulerLimits, |
@@ -160,6 +161,10 @@ describe("scripts/test-docker-all scheduler", () => {
|
160 | 161 | ).toBe(false); |
161 | 162 | }); |
162 | 163 | |
| 164 | +it("serializes live OpenAI Docker lanes by default", () => { |
| 165 | +expect(DEFAULT_RESOURCE_LIMITS["live:openai"]).toBe(1); |
| 166 | +}); |
| 167 | + |
163 | 168 | it("describes effective scheduler limits for operator errors", () => { |
164 | 169 | expect(describeDockerSchedulerLimits(2, limits)).toBe( |
165 | 170 | "parallelism=2 weightLimit=2 resources=docker=2 npm=2", |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。