Skip to content

ui: add opt-in run_javascript frontend tool#24244

Merged
ServeurpersoCom merged 3 commits into
ggml-org:masterfrom
ServeurpersoCom:ui/browser-tool-javascript
Jun 9, 2026
Merged

ui: add opt-in run_javascript frontend tool#24244
ServeurpersoCom merged 3 commits into
ggml-org:masterfrom
ServeurpersoCom:ui/browser-tool-javascript

Conversation

@ServeurpersoCom

@ServeurpersoCom ServeurpersoCom commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Overview

Expose a run_javascript tool to the model, executed entirely in the browser through the existing agentic loop. Code runs in a Web Worker inside a sandboxed iframe with an opaque origin, isolated from the WebUI and its API. Console output, errors and the return value are fed back as the tool result. The parent enforces a hard timeout by removing the iframe, which terminates the worker.

Disabled by default, toggle in Settings > Developer.

Additional information

brower-run_javascript-tool.mp4

Closes #16181

Requirements

Expose a run_javascript tool to the model, executed entirely in the
browser through the existing agentic loop. Code runs in a Web Worker
inside a sandboxed iframe with an opaque origin, isolated from the
WebUI and its API. Console output, errors and the return value are
fed back as the tool result. The parent enforces a hard timeout by
removing the iframe, which terminates the worker.

Disabled by default, toggle in Settings > Developer.
@allozaur

allozaur commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Related to #24332

@allozaur allozaur left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great stuff @ServeurpersoCom, just few cleanup tweaks before we merge it :)

Comment thread tools/ui/src/lib/constants/sandbox.ts Outdated
Comment thread tools/ui/src/lib/services/sandbox.service.ts Outdated
Comment thread tools/ui/src/lib/services/sandbox.service.ts Outdated
Comment thread tools/ui/src/lib/services/sandbox.service.ts Outdated
Comment thread tools/ui/src/lib/services/sandbox.service.ts Outdated
Use the JsonSchemaType enum for the tool definition parameter types
instead of raw string literals, extending it with STRING and NUMBER.

Move the worker shim and the iframe harness html into their own files
so the service no longer carries inline source blobs.

Replace the remaining magic strings with constants: SANDBOX_EMPTY_OUTPUT
and SANDBOX_TRUNCATION_NOTICE, and reuse NEWLINE_SEPARATOR for joins.
Replace the inline worker template string with a real sandbox-worker.js
imported as raw text, and build the iframe harness from it in
sandbox-harness.ts. The raw worker ships as a string, not a module, so
it is excluded from eslint and the typecheck program.
@ServeurpersoCom

Copy link
Copy Markdown
Contributor Author

Quick re-testing OK!

1 2

@allozaur allozaur requested a review from ggerganov June 9, 2026 15:50
@ServeurpersoCom ServeurpersoCom merged commit 4836095 into ggml-org:master Jun 9, 2026
6 checks passed
Jcfunk added a commit to Jcfunk/llama.cpp that referenced this pull request Jun 11, 2026
* upstream/HEAD: (329 commits)
  vendor : update LibreSSL to 4.3.2 (ggml-org#24397)
  Remove padding and multiple D2D copies for MTP (ggml-org#24086)
  chat: fix LFM2/LFM2.5 ignoring json_schema (ggml-org#24377)
  CUDA: Fix ssm_scan_f32 data-races (ggml-org#24360)
  ci : bump komac version (ggml-org#24396)
  speculative : fix "ngram-map-k4v" name in logging (ggml-org#24253)
  webui: implement pinned conversations support (ggml-org#21387)
  graph: Fix granite speech model inference by applying embedding scale when deepstack is not used (ggml-org#24357)
  ci : fix windows release (ggml-org#24369)
  ui: add opt-in run_javascript frontend tool (ggml-org#24244)
  mtmd: build_vit batching (ggml-org#24352)
  vulkan: reduce iq1 shared memory usage for mul_mm (ggml-org#24287)
  vulkan: add `v_dot2_f32_f16` support in matrix-matrix multiplication and Flash Attention (ggml-org#24123)
  ui: Fix excessive style recalculation on hover (ggml-org#24243)
  mtmd: refactor video subproc handling (ggml-org#24316)
  server: log prompts to directory (ggml-org#22031)
  ui: fix mobile chat form overflow and bust stale bundle cache (ggml-org#24158)
  ggml : add GGML_OP_COL2IM_1D (ggml-org#24206)
  server : do not clear slots without unified KV cache (ggml-org#24190)
  models : fix plamo2 attention_key/value_length regression (ggml-org#24317)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Misc. bug: Pyodide missing from new SvelteKit WebUI

3 participants