feat(eval): raised per-cell timeout ceiling from 600s to 3600s
- Matched the `bash` tool's max in the Zod schema and runtime clamp. - Allowed heavy local-compute cells to request budgets above 10 minutes. - Updated docs and prompt to reflect the new 1-3600s range.
This commit is contained in:
+2
-2
@@ -27,7 +27,7 @@ Tool params:
|
|||||||
language: "py" | "js";
|
language: "py" | "js";
|
||||||
code: string;
|
code: string;
|
||||||
title?: string;
|
title?: string;
|
||||||
timeout?: number; // seconds, clamped to 1..600, default 30. Inactivity budget — see "Cell timeout".
|
timeout?: number; // seconds, clamped to 1..3600, default 30. Inactivity budget — see "Cell timeout".
|
||||||
reset?: boolean; // reset this cell's selected runtime before execution
|
reset?: boolean; // reset this cell's selected runtime before execution
|
||||||
}>;
|
}>;
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ Output is streamed through `OutputSink` and may be persisted to artifact storage
|
|||||||
|
|
||||||
- **Python backend not available** — Check `eval.py`, `PI_PY`, and that `python`/`python3` is on PATH. If preflight fails and `eval.js` is enabled, use a `js` cell.
|
- **Python backend not available** — Check `eval.py`, `PI_PY`, and that `python`/`python3` is on PATH. If preflight fails and `eval.js` is enabled, use a `js` cell.
|
||||||
- **No Python on PATH** — Install a system Python 3.8+ or place a venv at `~/.omp/python-env`. `omp setup python --check` reports the resolved interpreter.
|
- **No Python on PATH** — Install a system Python 3.8+ or place a venv at `~/.omp/python-env`. `omp setup python --check` reports the resolved interpreter.
|
||||||
- **Execution hangs then times out** — Increase tool `timeout` (max 600s) if workload is legitimate. For stuck native code, cancellation triggers `SIGINT` first then escalates; the session restarts on the next request.
|
- **Execution hangs then times out** — Increase tool `timeout` (max 3600s) if workload is legitimate. For stuck native code, cancellation triggers `SIGINT` first then escalates; the session restarts on the next request.
|
||||||
- **stdin/input prompts in Python code** — `input()` is not supported; pass data programmatically.
|
- **stdin/input prompts in Python code** — `input()` is not supported; pass data programmatically.
|
||||||
- **Working directory errors** — Tool validates `cwd` exists and is a directory before execution.
|
- **Working directory errors** — Tool validates `cwd` exists and is a directory before execution.
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
- Changed image marker format to include pixel dimensions when available (`[Image #N, WxH]`), falling back to bare `[Image #N]` when header cannot be decoded
|
- Changed image marker format to include pixel dimensions when available (`[Image #N, WxH]`), falling back to bare `[Image #N]` when header cannot be decoded
|
||||||
- Changed the prompt editor to highlight large-paste placeholders (`[Paste #N, +X lines]`/`[Paste #N, Y chars]`) with the same accent styling as image references (bold, no hyperlink), and to delete image/paste markers atomically: a single backspace or forward-delete removes the whole marker instead of leaving a broken `[Paste #N, +X lines` behind.
|
- Changed the prompt editor to highlight large-paste placeholders (`[Paste #N, +X lines]`/`[Paste #N, Y chars]`) with the same accent styling as image references (bold, no hyperlink), and to delete image/paste markers atomically: a single backspace or forward-delete removes the whole marker instead of leaving a broken `[Paste #N, +X lines` behind.
|
||||||
- Browser tool helpers (`tab.*`) are now individually tracked and time-bounded: when a `run` cell hits its budget, the timeout error names the still-running helper(s) and how long each has been stalled (e.g. `... (stalled on tab.screenshot({ selector: ".x" }) (29.9s))`) instead of the opaque `Browser code execution timed out after 30000ms`. Page-coupled helpers that should resolve quickly (`observe`, `screenshot`, `extract`) also fail fast with a named per-op error at `min(cellBudget, 20s)`, leaving budget for the rest of the cell, rather than silently consuming the whole budget.
|
- Browser tool helpers (`tab.*`) are now individually tracked and time-bounded: when a `run` cell hits its budget, the timeout error names the still-running helper(s) and how long each has been stalled (e.g. `... (stalled on tab.screenshot({ selector: ".x" }) (29.9s))`) instead of the opaque `Browser code execution timed out after 30000ms`. Page-coupled helpers that should resolve quickly (`observe`, `screenshot`, `extract`) also fail fast with a named per-op error at `min(cellBudget, 20s)`, leaving budget for the rest of the cell, rather than silently consuming the whole budget.
|
||||||
|
- Changed provider tie-breaking to rank G0I with hosted aggregator providers, after OpenRouter and before Together.
|
||||||
|
- Derived the auth-broker OAuth callback ports (`CALLBACK_PORTS`) and the paste-code login-provider set from the `@oh-my-pi/pi-ai` provider registry, removing the duplicated `CALLBACK_SERVER_PROVIDERS` tables in the model selector and the setup-wizard sign-in scene.
|
||||||
|
- Raised the `eval` tool's per-cell `timeout` ceiling from 600s to 3600s (matching `bash`), in both the Zod schema and the `TOOL_TIMEOUTS.eval` runtime clamp, so heavy local-compute cells can request budgets above 10 minutes.
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Cell fields:
|
|||||||
- `language` — {{#if py}}`"py"` for the IPython kernel{{/if}}{{#ifAll py js}}, {{/ifAll}}{{#if js}}`"js"` for the persistent JavaScript VM{{/if}}.
|
- `language` — {{#if py}}`"py"` for the IPython kernel{{/if}}{{#ifAll py js}}, {{/ifAll}}{{#if js}}`"js"` for the persistent JavaScript VM{{/if}}.
|
||||||
- `code` — cell body, verbatim. Newlines, quotes, and indentation are JSON-encoded; no fences, no headers.
|
- `code` — cell body, verbatim. Newlines, quotes, and indentation are JSON-encoded; no fences, no headers.
|
||||||
- `title` (optional) — short label shown in the transcript (e.g. `"imports"`, `"load config"`).
|
- `title` (optional) — short label shown in the transcript (e.g. `"imports"`, `"load config"`).
|
||||||
- `timeout` (optional) — per-cell wall-clock budget in seconds (1-600). Default 30. It bounds the cell's **own** work, but is paused while an `agent()`/`parallel()`/`completion()` call is in flight — so a long fanout or a slow completion runs to completion, while the cell itself is still bounded. Compute, `print`/stdout, `log()`/`phase()`, and ordinary tool calls all count against the budget; raise `timeout` for a cell that does heavy local work or long non-agent tool calls.
|
- `timeout` (optional) — per-cell wall-clock budget in seconds (1-3600). Default 30. It bounds the cell's **own** work, but is paused while an `agent()`/`parallel()`/`completion()` call is in flight — so a long fanout or a slow completion runs to completion, while the cell itself is still bounded. Compute, `print`/stdout, `log()`/`phase()`, and ordinary tool calls all count against the budget; raise `timeout` for a cell that does heavy local work or long non-agent tool calls.
|
||||||
- `reset` (optional) — wipe this cell's language kernel before running.{{#ifAll py js}} Reset is per-language: a `py` cell's reset does not touch the JavaScript VM and vice versa.{{/ifAll}}
|
- `reset` (optional) — wipe this cell's language kernel before running.{{#ifAll py js}} Reset is per-language: a `py` cell's reset does not touch the JavaScript VM and vice versa.{{/ifAll}}
|
||||||
|
|
||||||
**Work incrementally:**
|
**Work incrementally:**
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ const evalCellSchema = z.object({
|
|||||||
language: z.enum(["py", "js"]).describe('runtime: "py" for the IPython kernel, "js" for the persistent JS VM'),
|
language: z.enum(["py", "js"]).describe('runtime: "py" for the IPython kernel, "js" for the persistent JS VM'),
|
||||||
code: z.string().describe("cell body, verbatim. Use top-level await freely."),
|
code: z.string().describe("cell body, verbatim. Use top-level await freely."),
|
||||||
title: z.string().optional().describe('short label shown in transcript (e.g. "imports", "load config")'),
|
title: z.string().optional().describe('short label shown in transcript (e.g. "imports", "load config")'),
|
||||||
timeout: z.number().int().min(1).max(600).optional().describe("per-cell timeout in seconds (1-600, default 30)"),
|
timeout: z.number().int().min(1).max(3600).optional().describe("per-cell timeout in seconds (1-3600, default 30)"),
|
||||||
reset: z
|
reset: z
|
||||||
.boolean()
|
.boolean()
|
||||||
.optional()
|
.optional()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export interface ToolTimeoutConfig {
|
|||||||
|
|
||||||
export const TOOL_TIMEOUTS = {
|
export const TOOL_TIMEOUTS = {
|
||||||
bash: { default: 300, min: 1, max: 3600 },
|
bash: { default: 300, min: 1, max: 3600 },
|
||||||
eval: { default: 30, min: 1, max: 600 },
|
eval: { default: 30, min: 1, max: 3600 },
|
||||||
browser: { default: 30, min: 1, max: 300 },
|
browser: { default: 30, min: 1, max: 300 },
|
||||||
ssh: { default: 60, min: 1, max: 3600 },
|
ssh: { default: 60, min: 1, max: 3600 },
|
||||||
fetch: { default: 20, min: 1, max: 45 },
|
fetch: { default: 20, min: 1, max: 45 },
|
||||||
|
|||||||
Reference in New Issue
Block a user