Skip to content

fix: remove webgl backend, add preflight capability check for transformers.js v4.x - #61

Merged
devlux76 merged 5 commits into
mainfrom
copilot/update-transformers-docs-review
Mar 20, 2026
Merged

fix: remove webgl backend, add preflight capability check for transformers.js v4.x#61
devlux76 merged 5 commits into
mainfrom
copilot/update-transformers-docs-review

Conversation

Copilot AI commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

webgl is not a valid device in transformers.js@next (v4.x) — passing it throws "Unsupported device: 'webgl'. Should be one of: webnn-npu, webnn-gpu, webnn-cpu, webnn, webgpu, wasm." at ONNX session init time, after a multi-GB download completes. This caused the entire backend fallback chain to fail in the user's browser.

Core fix

  • Remove webgl from BackendName and DEVICE_PRIORITY. Non-iOS: ['webnn', 'webgpu', 'wasm']; iOS: ['wasm'].

Preflight capability check

New probeAvailableDevices() runs synchronously before any network request, filtering out backends whose browser API is absent:

function probeAvailableDevices(devices: readonly BackendName[]): BackendName[] {
  // filters: webgpu → requires navigator.gpu, webnn → requires navigator.ml
  // guarantees: always returns at least ['wasm']
}

loadModel() now iterates probeAvailableDevices(DEVICE_PRIORITY) instead of the raw priority list — so a browser without WebGPU/WebNN skips those backends immediately rather than downloading the model first.

Tests

  • Updated existing backend-assertion test (4 valid devices → 3, webgl removed).
  • Added regression test: 'load: pipeline is never called with device=webgl' — records every device passed to the pipeline factory and asserts webgl never appears.
Original prompt

This section details on the original issue you should resolve

<issue_title>Please read the docs for transformers@next</issue_title>
<issue_description>This is entirely too trivial to be the entire problem. I'd like you to read the docs for transformers.js@next and go over the entire codebase with a fine toothed comb because this error seems impossible to me if the entire codeback was brought up to transformersjs@next

worker.ts:264 Unable to determine content-length from response headers. Will expand buffer when needed.
warn @ transformers.web.js:217
readResponse @ transformers.web.js:5969
loadResourceFile @ transformers.web.js:6620
await in loadResourceFile
getModelFile @ transformers.web.js:6685
await in getModelFile
getModelText @ transformers.web.js:6688
getModelJSON @ transformers.web.js:6699
loadConfig @ transformers.web.js:17413
from_pretrained @ transformers.web.js:17845
from_pretrained @ transformers.web.js:17858
from_pretrained @ transformers.web.js:26463
pipeline2 @ transformers.web.js:28260
await in pipeline2
loadModel @ worker.ts:264
(anonymous) @ worker.ts:452
worker.ts:264 Unable to determine content-length from response headers. Will expand buffer when needed.
warn @ transformers.web.js:217
readResponse @ transformers.web.js:5969
loadResourceFile @ transformers.web.js:6620
await in loadResourceFile
getModelFile @ transformers.web.js:6685
await in getModelFile
getModelText @ transformers.web.js:6688
getModelJSON @ transformers.web.js:6699
(anonymous) @ transformers.web.js:10147
loadTokenizer @ transformers.web.js:10147
await in loadTokenizer
from_pretrained @ transformers.web.js:11688
pipeline2 @ transformers.web.js:28263
await in pipeline2
loadModel @ worker.ts:264
(anonymous) @ worker.ts:452
worker.ts:264 WebNN does not currently support dynamic shapes and requires 'free_dimension_overrides' to be set in config.json, preferably as a field within config["transformers.js_config"]["device_config"]["webnn"]. When 'free_dimension_overrides' is not set, you may experience significant performance degradation.
warn @ transformers.web.js:217
getSession @ transformers.web.js:17965
(anonymous) @ transformers.web.js:18008
constructSessions @ transformers.web.js:18006
from_pretrained @ transformers.web.js:19689
await in from_pretrained
from_pretrained @ transformers.web.js:26479
await in from_pretrained
pipeline2 @ transformers.web.js:28260
await in pipeline2
loadModel @ worker.ts:264
(anonymous) @ worker.ts:452
worker.ts:264 WebNN does not currently support dynamic shapes and requires 'free_dimension_overrides' to be set in config.json, preferably as a field within config["transformers.js_config"]["device_config"]["webnn"]. When 'free_dimension_overrides' is not set, you may experience significant performance degradation.
warn @ transformers.web.js:217
getSession @ transformers.web.js:17965
(anonymous) @ transformers.web.js:18008
constructSessions @ transformers.web.js:18006
from_pretrained @ transformers.web.js:19689
await in from_pretrained
from_pretrained @ transformers.web.js:26479
await in from_pretrained
pipeline2 @ transformers.web.js:28260
await in pipeline2
loadModel @ worker.ts:264
(anonymous) @ worker.ts:452
worker.ts:156 [q2 worker] 2026-03-20T16:46:04.224Z [warn] Backend failed {device: 'webnn', error: Error: Can't create a session. ERROR_CODE: 1, ERROR_MESSAGE: /mnt/vss/_work/1/s/onnxruntime/core/op…}
workerLog @ worker.ts:156
loadModel @ worker.ts:316
worker.ts:264 Unable to determine content-length from response headers. Will expand buffer when needed.
warn @ transformers.web.js:217
readResponse @ transformers.web.js:5969
loadResourceFile @ transformers.web.js:6620
await in loadResourceFile
getModelFile @ transformers.web.js:6685
await in getModelFile
getModelText @ transformers.web.js:6688
getModelJSON @ transformers.web.js:6699
loadConfig @ transformers.web.js:17413
from_pretrained @ transformers.web.js:17845
from_pretrained @ transformers.web.js:17858
from_pretrained @ transformers.web.js:26463
pipeline2 @ transformers.web.js:28260
await in pipeline2
loadModel @ worker.ts:264
worker.ts:264 Unable to determine content-length from response headers. Will expand buffer when needed.
warn @ transformers.web.js:217
readResponse @ transformers.web.js:5969
loadResourceFile @ transformers.web.js:6620
await in loadResourceFile
getModelFile @ transformers.web.js:6685
await in getModelFile
getModelText @ transformers.web.js:6688
getModelJSON @ transformers.web.js:6699
(anonymous) @ transformers.web.js:10147
loadTokenizer @ transformers.web.js:10147
await in loadTokenizer
from_pretrained @ transformers.web.js:11688
pipeline2 @ transformers.web.js:28263
await in pipeline2
loadModel @ worker.ts:264
worker.ts:156 [q2 worker] 2026-03-20T16:46:06.122Z [warn] Backend failed {device: 'webgpu', error: Error: Can't create a session. ERROR_CODE: 1, ERROR_MESSAGE: /mnt/vss/_work/1/s/onnxruntime/core/op…}
workerLog @ worker.ts:156
loadModel @ worker.ts:316
worker.ts:264 Unable to de...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes devlux76/q2#60

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/devlux76/q2/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

…light capability check

Co-authored-by: devlux76 <86517969+devlux76@users.noreply.github.com>
Copilot AI changed the title [WIP] Review transformers.js@next documentation and codebase fix: remove webgl backend, add preflight capability check for transformers.js v4.x Mar 20, 2026
Copilot AI requested a review from devlux76 March 20, 2026 17:01
@devlux76

Copy link
Copy Markdown
Owner

@copilot E2E testing is failing now...

2026-03-20T17:05:03.0527838Z ##[group]Run bun run test
2026-03-20T17:05:03.0528289Z �[36;1mbun run test�[0m
2026-03-20T17:05:03.0597466Z shell: /usr/bin/bash -e {0}
2026-03-20T17:05:03.0597850Z ##[endgroup]
2026-03-20T17:05:03.0722199Z $ bun run check
2026-03-20T17:05:03.0751570Z $ bun run lint && bun run typecheck
2026-03-20T17:05:03.0784969Z $ eslint --no-inline-config --max-warnings 0 --fix src test --ext .js,.ts,.html,.yml,.yaml && eslint --no-inline-config --max-warnings 0 src test --ext .js,.ts,.html,.yml,.yaml
2026-03-20T17:05:07.4022083Z $ bun x tsc --noEmit
2026-03-20T17:05:09.1831011Z $ vitest run --coverage
2026-03-20T17:05:09.7411584Z
2026-03-20T17:05:09.7416907Z �[1m�[46m RUN �[49m�[22m �[36mv4.1.0 �[39m�[90m/home/runner/work/q2/q2�[39m
2026-03-20T17:05:09.7417429Z �[2mCoverage enabled with �[22m�[33mistanbul�[39m
2026-03-20T17:05:09.7417662Z
2026-03-20T17:05:12.4919492Z �[32m✓�[39m test/t3.test.ts �[2m(�[22m�[2m44 tests�[22m�[2m)�[22m�[32m 206�[2mms�[22m�[39m
2026-03-20T17:05:12.5067950Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline() is called with correct task, modelId, dtype and device list
2026-03-20T17:05:12.5083080Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.498Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:12.5084899Z [q2 worker] 2026-03-20T17:05:12.500Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/test-model'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.5086159Z [q2 worker] 2026-03-20T17:05:12.501Z [info] loadModel invoked {
2026-03-20T17:05:12.5086885Z modelId: �[32m'onnx-community/test-model'�[39m,
2026-03-20T17:05:12.5087453Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.5087855Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.5088190Z }
2026-03-20T17:05:12.5088673Z [q2 worker] 2026-03-20T17:05:12.501Z [info] Sending initial loading status message
2026-03-20T17:05:12.5089920Z [q2 worker] 2026-03-20T17:05:12.501Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.5091333Z [q2 worker] 2026-03-20T17:05:12.502Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:12.5116053Z [q2 worker] 2026-03-20T17:05:12.502Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:12.5117528Z [q2 worker] 2026-03-20T17:05:12.502Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:12.5118752Z [q2 worker] 2026-03-20T17:05:12.502Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.5119973Z [q2 worker] 2026-03-20T17:05:12.502Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.5120643Z
2026-03-20T17:05:12.5122239Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline() is called with correct task, modelId, dtype and device list
2026-03-20T17:05:12.5124284Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.504Z [debug] loader settled, clearing hang guard interval { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.5125118Z
2026-03-20T17:05:12.5126480Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline() is called with correct task, modelId, dtype and device list
2026-03-20T17:05:12.5128989Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.504Z [info] Model loaded successfully { device: �[32m'wasm'�[39m, modelId: �[32m'onnx-community/test-model'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.5130789Z [q2 worker] 2026-03-20T17:05:12.504Z [info] active dtype set after load { activeDtype: �[32m'fp32'�[39m }
2026-03-20T17:05:12.5132305Z [q2 worker] 2026-03-20T17:05:12.504Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.5132954Z
2026-03-20T17:05:12.5706400Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: tokens are streamed and done is sent after pipeline resolves
2026-03-20T17:05:12.5709033Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.560Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:12.5710528Z [q2 worker] 2026-03-20T17:05:12.560Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:12.5711547Z [q2 worker] 2026-03-20T17:05:12.560Z [info] generateResponse invoked {
2026-03-20T17:05:12.5712504Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:12.5713344Z config: { max_new_tokens: �[33m64�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:12.5714437Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:12.5714891Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:12.5715246Z }
2026-03-20T17:05:12.5716117Z [q2 worker] 2026-03-20T17:05:12.561Z [info] Starting generation { messagesCount: �[33m1�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:12.5717412Z [q2 worker] 2026-03-20T17:05:12.561Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.5718571Z [q2 worker] 2026-03-20T17:05:12.561Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.5719647Z [q2 worker] 2026-03-20T17:05:12.562Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.5720232Z
2026-03-20T17:05:12.5721486Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: tokens are streamed and done is sent after pipeline resolves
2026-03-20T17:05:12.5723712Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.562Z [info] Pipeline generation finished { tokenCount: �[33m2�[39m, outputLength: �[33m1�[39m }
2026-03-20T17:05:12.5725111Z [q2 worker] 2026-03-20T17:05:12.562Z [debug] Worker received message { type: �[32m'done'�[39m }
2026-03-20T17:05:12.5726103Z [q2 worker] 2026-03-20T17:05:12.562Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:12.5727240Z [q2 worker] 2026-03-20T17:05:12.563Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.5727850Z
2026-03-20T17:05:12.6418804Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: pipeline is called with correct generation arguments
2026-03-20T17:05:12.6421119Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.616Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:12.6422974Z [q2 worker] 2026-03-20T17:05:12.616Z [info] Worker message router: dispatching generate { messagesCount: �[33m2�[39m }
2026-03-20T17:05:12.6424002Z [q2 worker] 2026-03-20T17:05:12.616Z [info] generateResponse invoked {
2026-03-20T17:05:12.6424679Z messagesCount: �[33m2�[39m,
2026-03-20T17:05:12.6425539Z config: { max_new_tokens: �[33m128�[39m, temperature: �[33m0.7�[39m, repetition_penalty: �[33m1.1�[39m },
2026-03-20T17:05:12.6426380Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:12.6426830Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:12.6427215Z }
2026-03-20T17:05:12.6428147Z [q2 worker] 2026-03-20T17:05:12.616Z [info] Starting generation { messagesCount: �[33m2�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:12.6429445Z [q2 worker] 2026-03-20T17:05:12.616Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.6430640Z [q2 worker] 2026-03-20T17:05:12.617Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.6431447Z
2026-03-20T17:05:12.6432933Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: pipeline is called with correct generation arguments
2026-03-20T17:05:12.6435033Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.617Z [info] Pipeline generation finished { tokenCount: �[33m1�[39m, outputLength: �[33m1�[39m }
2026-03-20T17:05:12.6436665Z [q2 worker] 2026-03-20T17:05:12.617Z [debug] Worker received message { type: �[32m'done'�[39m }
2026-03-20T17:05:12.6437706Z [q2 worker] 2026-03-20T17:05:12.617Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:12.6439358Z [q2 worker] 2026-03-20T17:05:12.617Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.6439963Z
2026-03-20T17:05:12.6866023Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: do_sample is false when temperature is 0 (greedy decoding)
2026-03-20T17:05:12.6868076Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.672Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:12.6869581Z [q2 worker] 2026-03-20T17:05:12.672Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:12.6871034Z [q2 worker] 2026-03-20T17:05:12.672Z [info] generateResponse invoked {
2026-03-20T17:05:12.6871753Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:12.6872838Z config: { max_new_tokens: �[33m10�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:12.6873809Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:12.6874305Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:12.6874710Z }
2026-03-20T17:05:12.6875643Z [q2 worker] 2026-03-20T17:05:12.672Z [info] Starting generation { messagesCount: �[33m1�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:12.6876961Z [q2 worker] 2026-03-20T17:05:12.672Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.6878199Z [q2 worker] 2026-03-20T17:05:12.672Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.6878874Z
2026-03-20T17:05:12.6880159Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: do_sample is false when temperature is 0 (greedy decoding)
2026-03-20T17:05:12.6882541Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.673Z [info] Pipeline generation finished { tokenCount: �[33m1�[39m, outputLength: �[33m1�[39m }
2026-03-20T17:05:12.6884112Z [q2 worker] 2026-03-20T17:05:12.673Z [debug] Worker received message { type: �[32m'done'�[39m }
2026-03-20T17:05:12.6885180Z [q2 worker] 2026-03-20T17:05:12.673Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:12.6886424Z [q2 worker] 2026-03-20T17:05:12.673Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.6887063Z
2026-03-20T17:05:12.7281202Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: pipeline returns TextGenerationSingle[] — output.hidden_states is not available
2026-03-20T17:05:12.7284250Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.724Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:12.7286138Z [q2 worker] 2026-03-20T17:05:12.725Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:12.7287656Z [q2 worker] 2026-03-20T17:05:12.725Z [info] generateResponse invoked {
2026-03-20T17:05:12.7288683Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:12.7289783Z config: { max_new_tokens: �[33m8�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:12.7290861Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:12.7291622Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:12.7292496Z }
2026-03-20T17:05:12.7293644Z [q2 worker] 2026-03-20T17:05:12.725Z [info] Starting generation { messagesCount: �[33m1�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:12.7295187Z [q2 worker] 2026-03-20T17:05:12.725Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.7296580Z [q2 worker] 2026-03-20T17:05:12.725Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.7297680Z
2026-03-20T17:05:12.7299322Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: pipeline returns TextGenerationSingle[] — output.hidden_states is not available
2026-03-20T17:05:12.7302565Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.726Z [info] Pipeline generation finished { tokenCount: �[33m1�[39m, outputLength: �[33m1�[39m }
2026-03-20T17:05:12.7304775Z [q2 worker] 2026-03-20T17:05:12.726Z [debug] Worker received message { type: �[32m'done'�[39m }
2026-03-20T17:05:12.7306015Z [q2 worker] 2026-03-20T17:05:12.727Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:12.7307473Z [q2 worker] 2026-03-20T17:05:12.727Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.7309122Z
2026-03-20T17:05:12.8010032Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mabort: sending abort interrupts the stopping criteria and ends generation cleanly
2026-03-20T17:05:12.8014783Z �[90mstderr�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mabort: sending abort interrupts the stopping criteria and ends generation cleanly
2026-03-20T17:05:12.8016636Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.784Z [error] Generation failed {
2026-03-20T17:05:12.8017364Z error: Error: AbortError: generation aborted
2026-03-20T17:05:12.8018192Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:431:15
2026-03-20T17:05:12.8019554Z at callPipeline �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/spy�[24m/dist/index.js:332:34�[90m)�[39m
2026-03-20T17:05:12.8020928Z at generateResponse �[90m(/home/runner/work/q2/q2/�[39msrc/worker.ts:436:26�[90m)�[39m
2026-03-20T17:05:12.8022142Z at �[90m/home/runner/work/q2/q2/�[39msrc/worker.ts:507:14
2026-03-20T17:05:12.8023623Z at callTheUserObjectsOperation �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/generated/idl/EventListener.js:26:30�[90m)�[39m
2026-03-20T17:05:12.8025687Z at innerInvokeEventListeners �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/jsdom/living/events/EventTarget-impl.js:360:16�[90m)�[39m
2026-03-20T17:05:12.8027793Z at invokeEventListeners �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/jsdom/living/events/EventTarget-impl.js:296:3�[90m)�[39m
2026-03-20T17:05:12.8030159Z at EventTargetImpl._dispatch �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/jsdom/living/events/EventTarget-impl.js:243:9�[90m)�[39m
2026-03-20T17:05:12.8032621Z at EventTargetImpl.dispatchEvent �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/jsdom/living/events/EventTarget-impl.js:114:17�[90m)�[39m
2026-03-20T17:05:12.8034653Z at dispatchEvent �[90m(/home/runner/work/q2/q2/�[39mnode_modules/�[4mjsdom�[24m/lib/generated/idl/EventTarget.js:241:34�[90m)�[39m,
2026-03-20T17:05:12.8035962Z message: �[32m'Error: AbortError: generation aborted'�[39m
2026-03-20T17:05:12.8036532Z }
2026-03-20T17:05:12.8036709Z
2026-03-20T17:05:12.8037391Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.781Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:12.8038862Z [q2 worker] 2026-03-20T17:05:12.781Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:12.8039960Z [q2 worker] 2026-03-20T17:05:12.781Z [info] generateResponse invoked {
2026-03-20T17:05:12.8040692Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:12.8041601Z config: { max_new_tokens: �[33m512�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:12.8044064Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:12.8044599Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:12.8045007Z }
2026-03-20T17:05:12.8045947Z [q2 worker] 2026-03-20T17:05:12.781Z [info] Starting generation { messagesCount: �[33m1�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:12.8047362Z [q2 worker] 2026-03-20T17:05:12.781Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.8048556Z [q2 worker] 2026-03-20T17:05:12.781Z [debug] Worker received message { type: �[32m'token'�[39m }
2026-03-20T17:05:12.8049798Z [q2 worker] 2026-03-20T17:05:12.784Z [debug] Worker received message { type: �[32m'abort'�[39m }
2026-03-20T17:05:12.8051188Z [q2 worker] 2026-03-20T17:05:12.784Z [info] Worker message router: dispatching abort
2026-03-20T17:05:12.8052929Z [q2 worker] 2026-03-20T17:05:12.799Z [info] Generation aborted by user { message: �[32m'Error: AbortError: generation aborted'�[39m }
2026-03-20T17:05:12.8054411Z [q2 worker] 2026-03-20T17:05:12.799Z [debug] Worker received message { type: �[32m'done'�[39m }
2026-03-20T17:05:12.8055472Z [q2 worker] 2026-03-20T17:05:12.800Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:12.8067043Z [q2 worker] 2026-03-20T17:05:12.800Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.8068009Z
2026-03-20T17:05:12.8154233Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msplitThinkBlocks handles various tag cases
2026-03-20T17:05:12.8155829Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.789Z [debug] initModelPicker called
2026-03-20T17:05:12.8157422Z [q2 main] 2026-03-20T17:05:12.791Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.8158788Z [q2 main] 2026-03-20T17:05:12.796Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.8159723Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.8160438Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.8161237Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.8162116Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8162661Z }
2026-03-20T17:05:12.8163505Z [q2 main] 2026-03-20T17:05:12.798Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.8165194Z [q2 main] 2026-03-20T17:05:12.808Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.8166991Z [q2 main] 2026-03-20T17:05:12.809Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.8168905Z [q2 main] 2026-03-20T17:05:12.813Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.8170706Z [q2 main] 2026-03-20T17:05:12.813Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.8172333Z [q2 main] 2026-03-20T17:05:12.813Z [info] Posting message to worker {
2026-03-20T17:05:12.8173244Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.8173891Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.8188766Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.8189298Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8189693Z }
2026-03-20T17:05:12.8189851Z
2026-03-20T17:05:12.8241351Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msplitThinkBlocks handles various tag cases
2026-03-20T17:05:12.8244579Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.815Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.8245380Z
2026-03-20T17:05:12.8540176Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: falls back through backends when a higher-priority backend fails
2026-03-20T17:05:12.8543959Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.852Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:12.8545482Z [q2 worker] 2026-03-20T17:05:12.852Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/test-fallback'�[39m, dtype: �[32m'q8'�[39m }
2026-03-20T17:05:12.8546619Z [q2 worker] 2026-03-20T17:05:12.852Z [info] loadModel invoked {
2026-03-20T17:05:12.8547541Z modelId: �[32m'onnx-community/test-fallback'�[39m,
2026-03-20T17:05:12.8548331Z dtype: �[32m'q8'�[39m,
2026-03-20T17:05:12.8548993Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8549383Z }
2026-03-20T17:05:12.8549846Z [q2 worker] 2026-03-20T17:05:12.852Z [info] Sending initial loading status message
2026-03-20T17:05:12.8551385Z [q2 worker] 2026-03-20T17:05:12.852Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.8552863Z [q2 worker] 2026-03-20T17:05:12.852Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:12.8554285Z [q2 worker] 2026-03-20T17:05:12.852Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:12.8555595Z [q2 worker] 2026-03-20T17:05:12.853Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:12.8556728Z [q2 worker] 2026-03-20T17:05:12.853Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.8558088Z [q2 worker] 2026-03-20T17:05:12.853Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.8558699Z
2026-03-20T17:05:12.8559939Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: falls back through backends when a higher-priority backend fails
2026-03-20T17:05:12.8562050Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.854Z [debug] loader settled, clearing hang guard interval { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.8562629Z
2026-03-20T17:05:12.8563331Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: falls back through backends when a higher-priority backend fails
2026-03-20T17:05:12.8564234Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.854Z [info] Model loaded successfully {
2026-03-20T17:05:12.8564620Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:12.8564918Z modelId: �[32m'onnx-community/test-fallback'�[39m,
2026-03-20T17:05:12.8565229Z dtype: �[32m'q8'�[39m
2026-03-20T17:05:12.8565420Z }
2026-03-20T17:05:12.8565842Z [q2 worker] 2026-03-20T17:05:12.854Z [info] active dtype set after load { activeDtype: �[32m'fp32'�[39m }
2026-03-20T17:05:12.8566494Z [q2 worker] 2026-03-20T17:05:12.854Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.8566827Z
2026-03-20T17:05:12.8666165Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mstripThinkTags removes complete and incomplete think tags
2026-03-20T17:05:12.8667686Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.861Z [debug] initModelPicker called
2026-03-20T17:05:12.8668893Z [q2 main] 2026-03-20T17:05:12.861Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.8669472Z [q2 main] 2026-03-20T17:05:12.862Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.8669841Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.8670123Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.8670439Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.8670705Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8670905Z }
2026-03-20T17:05:12.8671319Z [q2 main] 2026-03-20T17:05:12.863Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.8672492Z [q2 main] 2026-03-20T17:05:12.864Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.8673436Z [q2 main] 2026-03-20T17:05:12.864Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.8674278Z [q2 main] 2026-03-20T17:05:12.865Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.8675087Z [q2 main] 2026-03-20T17:05:12.865Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.8675642Z [q2 main] 2026-03-20T17:05:12.865Z [info] Posting message to worker {
2026-03-20T17:05:12.8675994Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.8676351Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.8676660Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.8676891Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8677100Z }
2026-03-20T17:05:12.8677183Z
2026-03-20T17:05:12.8689808Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mstripThinkTags removes complete and incomplete think tags
2026-03-20T17:05:12.8691367Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.866Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.8691807Z
2026-03-20T17:05:12.8988076Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mescapeAndFormatText escapes HTML and formats markdown-like syntax
2026-03-20T17:05:12.8990765Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.894Z [debug] initModelPicker called
2026-03-20T17:05:12.8994690Z [q2 main] 2026-03-20T17:05:12.894Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.8995840Z [q2 main] 2026-03-20T17:05:12.895Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.8996551Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.8996899Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.8997293Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.8997613Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.8997854Z }
2026-03-20T17:05:12.8998355Z [q2 main] 2026-03-20T17:05:12.895Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.8999309Z [q2 main] 2026-03-20T17:05:12.896Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9000472Z [q2 main] 2026-03-20T17:05:12.896Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9002195Z [q2 main] 2026-03-20T17:05:12.897Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9005711Z [q2 main] 2026-03-20T17:05:12.897Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.9006318Z [q2 main] 2026-03-20T17:05:12.897Z [info] Posting message to worker {
2026-03-20T17:05:12.9006686Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.9006996Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.9007303Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9007543Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9007750Z }
2026-03-20T17:05:12.9007832Z
2026-03-20T17:05:12.9008412Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mescapeAndFormatText escapes HTML and formats markdown-like syntax
2026-03-20T17:05:12.9009328Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.898Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.9009711Z
2026-03-20T17:05:12.9124372Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline is never called with device=webgl (unsupported in transformers.js@next)
2026-03-20T17:05:12.9130660Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.908Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:12.9133161Z [q2 worker] 2026-03-20T17:05:12.908Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/test-no-webgl'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9134442Z [q2 worker] 2026-03-20T17:05:12.908Z [info] loadModel invoked {
2026-03-20T17:05:12.9135176Z modelId: �[32m'onnx-community/test-no-webgl'�[39m,
2026-03-20T17:05:12.9135727Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9136150Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9136523Z }
2026-03-20T17:05:12.9137062Z [q2 worker] 2026-03-20T17:05:12.908Z [info] Sending initial loading status message
2026-03-20T17:05:12.9138162Z [q2 worker] 2026-03-20T17:05:12.908Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9139504Z [q2 worker] 2026-03-20T17:05:12.908Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:12.9140853Z [q2 worker] 2026-03-20T17:05:12.909Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:12.9142889Z [q2 worker] 2026-03-20T17:05:12.909Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:12.9144080Z [q2 worker] 2026-03-20T17:05:12.909Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.9145215Z [q2 worker] 2026-03-20T17:05:12.909Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9145847Z
2026-03-20T17:05:12.9170561Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline is never called with device=webgl (unsupported in transformers.js@next)
2026-03-20T17:05:12.9173647Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.909Z [debug] loader settled, clearing hang guard interval { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.9175892Z
2026-03-20T17:05:12.9177365Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: pipeline is never called with device=webgl (unsupported in transformers.js@next)
2026-03-20T17:05:12.9179245Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.909Z [info] Model loaded successfully {
2026-03-20T17:05:12.9180031Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:12.9180641Z modelId: �[32m'onnx-community/test-no-webgl'�[39m,
2026-03-20T17:05:12.9181281Z dtype: �[32m'q4'�[39m
2026-03-20T17:05:12.9181637Z }
2026-03-20T17:05:12.9182668Z [q2 worker] 2026-03-20T17:05:12.909Z [info] active dtype set after load { activeDtype: �[32m'fp32'�[39m }
2026-03-20T17:05:12.9183922Z [q2 worker] 2026-03-20T17:05:12.909Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9184582Z
2026-03-20T17:05:12.9301153Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mmin/max compute correct extremes
2026-03-20T17:05:12.9304815Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.925Z [debug] initModelPicker called
2026-03-20T17:05:12.9307718Z [q2 main] 2026-03-20T17:05:12.925Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.9308825Z [q2 main] 2026-03-20T17:05:12.926Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.9309475Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9309958Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.9310503Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.9311010Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9311327Z }
2026-03-20T17:05:12.9311760Z [q2 main] 2026-03-20T17:05:12.927Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.9312899Z [q2 main] 2026-03-20T17:05:12.928Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9313858Z [q2 main] 2026-03-20T17:05:12.928Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9314693Z [q2 main] 2026-03-20T17:05:12.928Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9315520Z [q2 main] 2026-03-20T17:05:12.928Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.9316079Z [q2 main] 2026-03-20T17:05:12.928Z [info] Posting message to worker {
2026-03-20T17:05:12.9316420Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.9316725Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.9317033Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9317267Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9317474Z }
2026-03-20T17:05:12.9317570Z
2026-03-20T17:05:12.9318008Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mmin/max compute correct extremes
2026-03-20T17:05:12.9318812Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.929Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.9319189Z
2026-03-20T17:05:12.9524902Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus updates UI state when ready
2026-03-20T17:05:12.9526363Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.949Z [debug] initModelPicker called
2026-03-20T17:05:12.9527673Z [q2 main] 2026-03-20T17:05:12.949Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.9528788Z [q2 main] 2026-03-20T17:05:12.949Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.9529525Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9530056Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.9531167Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.9531695Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9532319Z }
2026-03-20T17:05:12.9533160Z [q2 main] 2026-03-20T17:05:12.950Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.9534728Z [q2 main] 2026-03-20T17:05:12.950Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9536587Z [q2 main] 2026-03-20T17:05:12.950Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9538285Z [q2 main] 2026-03-20T17:05:12.950Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9539822Z [q2 main] 2026-03-20T17:05:12.951Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.9540775Z [q2 main] 2026-03-20T17:05:12.951Z [info] Posting message to worker {
2026-03-20T17:05:12.9541200Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.9541520Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.9542131Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9542425Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9542630Z }
2026-03-20T17:05:12.9542723Z
2026-03-20T17:05:12.9556370Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus updates UI state when ready
2026-03-20T17:05:12.9558394Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.951Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.9560006Z
2026-03-20T17:05:12.9589430Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus updates UI state when ready
2026-03-20T17:05:12.9591418Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.955Z [debug] onStatus { status: �[32m'loading'�[39m, detail: �[32m'Loading…'�[39m }
2026-03-20T17:05:12.9593915Z [q2 main] 2026-03-20T17:05:12.956Z [debug] onStatus { status: �[32m'ready'�[39m, detail: �[90mundefined�[39m }
2026-03-20T17:05:12.9596722Z
2026-03-20T17:05:12.9632950Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: progress callbacks during download are forwarded as progress messages
2026-03-20T17:05:12.9636581Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.960Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:12.9639993Z [q2 worker] 2026-03-20T17:05:12.961Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/test-progress'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9646073Z [q2 worker] 2026-03-20T17:05:12.961Z [info] loadModel invoked {
2026-03-20T17:05:12.9650978Z modelId: �[32m'onnx-community/test-progress'�[39m,
2026-03-20T17:05:12.9652120Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9653606Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9655924Z }
2026-03-20T17:05:12.9656784Z [q2 worker] 2026-03-20T17:05:12.961Z [info] Sending initial loading status message
2026-03-20T17:05:12.9658433Z [q2 worker] 2026-03-20T17:05:12.961Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9660859Z [q2 worker] 2026-03-20T17:05:12.961Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:12.9662871Z [q2 worker] 2026-03-20T17:05:12.961Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:12.9664901Z [q2 worker] 2026-03-20T17:05:12.961Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:12.9666351Z [q2 worker] 2026-03-20T17:05:12.961Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.9667739Z [q2 worker] 2026-03-20T17:05:12.961Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9669678Z [q2 worker] 2026-03-20T17:05:12.961Z [debug] progress callback { file: �[32m'model.onnx'�[39m, loaded: �[33m512�[39m, total: �[33m1024�[39m }
2026-03-20T17:05:12.9673008Z [q2 worker] 2026-03-20T17:05:12.961Z [debug] Worker received message { type: �[32m'progress'�[39m }
2026-03-20T17:05:12.9674675Z [q2 worker] 2026-03-20T17:05:12.961Z [debug] progress callback { file: �[32m'model.onnx'�[39m, loaded: �[33m1024�[39m, total: �[33m1024�[39m }
2026-03-20T17:05:12.9677964Z [q2 worker] 2026-03-20T17:05:12.962Z [debug] Worker received message { type: �[32m'progress'�[39m }
2026-03-20T17:05:12.9678705Z
2026-03-20T17:05:12.9680109Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: progress callbacks during download are forwarded as progress messages
2026-03-20T17:05:12.9682484Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.962Z [debug] loader settled, clearing hang guard interval { device: �[32m'wasm'�[39m }
2026-03-20T17:05:12.9683337Z
2026-03-20T17:05:12.9684690Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: progress callbacks during download are forwarded as progress messages
2026-03-20T17:05:12.9686444Z �[22m�[39m[q2 worker] 2026-03-20T17:05:12.962Z [info] Model loaded successfully {
2026-03-20T17:05:12.9687164Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:12.9687725Z modelId: �[32m'onnx-community/test-progress'�[39m,
2026-03-20T17:05:12.9688295Z dtype: �[32m'q4'�[39m
2026-03-20T17:05:12.9688649Z }
2026-03-20T17:05:12.9689449Z [q2 worker] 2026-03-20T17:05:12.962Z [info] active dtype set after load { activeDtype: �[32m'fp32'�[39m }
2026-03-20T17:05:12.9690728Z [q2 worker] 2026-03-20T17:05:12.962Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:12.9691366Z
2026-03-20T17:05:12.9788427Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus ready updates header-title and sidebar-model-tag
2026-03-20T17:05:12.9801014Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.976Z [debug] initModelPicker called
2026-03-20T17:05:12.9802522Z [q2 main] 2026-03-20T17:05:12.976Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:12.9803565Z [q2 main] 2026-03-20T17:05:12.976Z [debug] initSettingsPanel called {
2026-03-20T17:05:12.9804207Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9804665Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:12.9805197Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:12.9805660Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9806003Z }
2026-03-20T17:05:12.9806725Z [q2 main] 2026-03-20T17:05:12.976Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:12.9808129Z [q2 main] 2026-03-20T17:05:12.977Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9809813Z [q2 main] 2026-03-20T17:05:12.977Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:12.9811372Z [q2 main] 2026-03-20T17:05:12.977Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:12.9813027Z [q2 main] 2026-03-20T17:05:12.977Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:12.9814022Z [q2 main] 2026-03-20T17:05:12.978Z [info] Posting message to worker {
2026-03-20T17:05:12.9815302Z type: �[32m'load'�[39m,
2026-03-20T17:05:12.9815850Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:12.9816411Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:12.9816807Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:12.9817137Z }
2026-03-20T17:05:12.9817288Z
2026-03-20T17:05:12.9818158Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus ready updates header-title and sidebar-model-tag
2026-03-20T17:05:12.9819647Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.978Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:12.9820498Z
2026-03-20T17:05:12.9826502Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monStatus ready updates header-title and sidebar-model-tag
2026-03-20T17:05:12.9828557Z �[22m�[39m[q2 main] 2026-03-20T17:05:12.980Z [info] selectModel called { modelId: �[32m'test-org/model-alpha'�[39m }
2026-03-20T17:05:12.9830991Z [q2 main] 2026-03-20T17:05:12.981Z [debug] onStatus { status: �[32m'ready'�[39m, detail: �[90mundefined�[39m }
2026-03-20T17:05:12.9832694Z
2026-03-20T17:05:13.0038150Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monProgress updates the progress bar and status text
2026-03-20T17:05:13.0041636Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.001Z [debug] initModelPicker called
2026-03-20T17:05:13.0043243Z [q2 main] 2026-03-20T17:05:13.001Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.0044355Z [q2 main] 2026-03-20T17:05:13.001Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.0045115Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0045650Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.0046263Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.0046804Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0047184Z }
2026-03-20T17:05:13.0047958Z [q2 main] 2026-03-20T17:05:13.002Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.0049415Z [q2 main] 2026-03-20T17:05:13.002Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0053000Z [q2 main] 2026-03-20T17:05:13.002Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0054664Z [q2 main] 2026-03-20T17:05:13.002Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0056517Z [q2 main] 2026-03-20T17:05:13.002Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.0057522Z [q2 main] 2026-03-20T17:05:13.003Z [info] Posting message to worker {
2026-03-20T17:05:13.0057931Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.0058252Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.0058557Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0058804Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0059003Z }
2026-03-20T17:05:13.0059092Z
2026-03-20T17:05:13.0059605Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monProgress updates the progress bar and status text
2026-03-20T17:05:13.0060475Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.003Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.0060856Z
2026-03-20T17:05:13.0091463Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monProgress updates the progress bar and status text
2026-03-20T17:05:13.0094382Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.006Z [debug] onProgress { file: �[32m'foo.bin'�[39m, loaded: �[33m50�[39m, total: �[33m100�[39m }
2026-03-20T17:05:13.0095879Z [q2 main] 2026-03-20T17:05:13.007Z [debug] onProgress { file: �[32m''�[39m, loaded: �[33m5�[39m, total: �[33m0�[39m }
2026-03-20T17:05:13.0096612Z
2026-03-20T17:05:13.0197149Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: worker sends error message when pipe is null (model not loaded)
2026-03-20T17:05:13.0200155Z �[22m�[39m[q2 worker] 2026-03-20T17:05:13.016Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:13.0203197Z [q2 worker] 2026-03-20T17:05:13.016Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:13.0206671Z �[90mstderr�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mgenerate: worker sends error message when pipe is null (model not loaded)
2026-03-20T17:05:13.0208766Z �[22m�[39m[q2 worker] 2026-03-20T17:05:13.017Z [error] generateResponse called before model load
2026-03-20T17:05:13.0209598Z [q2 worker] 2026-03-20T17:05:13.018Z [error] Generation failed {
2026-03-20T17:05:13.0210344Z error: TypeError: Cannot read properties of undefined (reading 'length')
2026-03-20T17:05:13.0211460Z at generateResponse �[90m(/home/runner/work/q2/q2/�[39msrc/worker.ts:450:28�[90m)�[39m,
2026-03-20T17:05:13.0212839Z message: �[32m"TypeError: Cannot read properties of undefined (reading 'length')"�[39m
2026-03-20T17:05:13.0213562Z }
2026-03-20T17:05:13.0213710Z
2026-03-20T17:05:13.0214015Z [q2 worker] 2026-03-20T17:05:13.017Z [info] generateResponse invoked {
2026-03-20T17:05:13.0214719Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:13.0215564Z config: { max_new_tokens: �[33m8�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:13.0216395Z modelLoaded: �[33mtrue�[39m,
2026-03-20T17:05:13.0216882Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:13.0217254Z }
2026-03-20T17:05:13.0218137Z [q2 worker] 2026-03-20T17:05:13.017Z [info] Starting generation { messagesCount: �[33m1�[39m, hasConfig: �[33mtrue�[39m }
2026-03-20T17:05:13.0219450Z [q2 worker] 2026-03-20T17:05:13.017Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0220599Z [q2 worker] 2026-03-20T17:05:13.017Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0221761Z [q2 worker] 2026-03-20T17:05:13.017Z [debug] Worker received message { type: �[32m'generate'�[39m }
2026-03-20T17:05:13.0223318Z [q2 worker] 2026-03-20T17:05:13.017Z [info] Worker message router: dispatching generate { messagesCount: �[33m1�[39m }
2026-03-20T17:05:13.0224580Z [q2 worker] 2026-03-20T17:05:13.017Z [info] generateResponse invoked {
2026-03-20T17:05:13.0225236Z messagesCount: �[33m1�[39m,
2026-03-20T17:05:13.0226078Z config: { max_new_tokens: �[33m8�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1�[39m },
2026-03-20T17:05:13.0226963Z modelLoaded: �[33mfalse�[39m,
2026-03-20T17:05:13.0227434Z activeDtype: �[32m'fp32'�[39m
2026-03-20T17:05:13.0227799Z }
2026-03-20T17:05:13.0228488Z [q2 worker] 2026-03-20T17:05:13.017Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0229681Z [q2 worker] 2026-03-20T17:05:13.017Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0230821Z [q2 worker] 2026-03-20T17:05:13.018Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0232211Z [q2 worker] 2026-03-20T17:05:13.018Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0233266Z [q2 worker] 2026-03-20T17:05:13.018Z [info] Generation completed/finalized, setting status idle
2026-03-20T17:05:13.0234470Z [q2 worker] 2026-03-20T17:05:13.018Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0235627Z [q2 worker] 2026-03-20T17:05:13.018Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0236252Z
2026-03-20T17:05:13.0316279Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monEmbedding makes the embedding panel visible and updates stats
2026-03-20T17:05:13.0317864Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.029Z [debug] initModelPicker called
2026-03-20T17:05:13.0319629Z [q2 main] 2026-03-20T17:05:13.029Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.0320758Z [q2 main] 2026-03-20T17:05:13.029Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.0321473Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0322268Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.0322864Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.0323370Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0323746Z }
2026-03-20T17:05:13.0324522Z [q2 main] 2026-03-20T17:05:13.030Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.0326390Z [q2 main] 2026-03-20T17:05:13.030Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0327853Z [q2 main] 2026-03-20T17:05:13.030Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0329050Z [q2 main] 2026-03-20T17:05:13.030Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0330172Z [q2 main] 2026-03-20T17:05:13.030Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.0330742Z [q2 main] 2026-03-20T17:05:13.030Z [info] Posting message to worker {
2026-03-20T17:05:13.0331091Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.0331397Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.0331707Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0332243Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0332470Z }
2026-03-20T17:05:13.0332563Z
2026-03-20T17:05:13.0333114Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monEmbedding makes the embedding panel visible and updates stats
2026-03-20T17:05:13.0334032Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.031Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.0334437Z
2026-03-20T17:05:13.0390417Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2monEmbedding makes the embedding panel visible and updates stats
2026-03-20T17:05:13.0392830Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.034Z [info] onEmbedding received { seqLen: �[33m2�[39m, hiddenDim: �[33m2�[39m, dtype: �[32m'fp32'�[39m, bytes: �[33m16�[39m }
2026-03-20T17:05:13.0395556Z [q2 main] 2026-03-20T17:05:13.034Z [debug] onEmbedding: rendering fp32 heatmap { seqLen: �[33m2�[39m, hiddenDim: �[33m2�[39m, minVal: �[33m1�[39m, maxVal: �[33m4�[39m }
2026-03-20T17:05:13.0398652Z [q2 main] 2026-03-20T17:05:13.035Z [debug] onEmbedding: starting Q² kernel { hiddenDim: �[33m2�[39m, dtypeId: �[33m0�[39m, seqLen: �[33m2�[39m }
2026-03-20T17:05:13.0400018Z
2026-03-20T17:05:13.0524632Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage posts a generate message and updates the UI
2026-03-20T17:05:13.0526245Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.050Z [debug] initModelPicker called
2026-03-20T17:05:13.0527565Z [q2 main] 2026-03-20T17:05:13.050Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.0528665Z [q2 main] 2026-03-20T17:05:13.050Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.0529390Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0529935Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.0530534Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.0531076Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0531466Z }
2026-03-20T17:05:13.0532502Z [q2 main] 2026-03-20T17:05:13.051Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.0534000Z [q2 main] 2026-03-20T17:05:13.051Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0535749Z [q2 main] 2026-03-20T17:05:13.051Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0537843Z [q2 main] 2026-03-20T17:05:13.051Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0539353Z [q2 main] 2026-03-20T17:05:13.051Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.0540414Z [q2 main] 2026-03-20T17:05:13.051Z [info] Posting message to worker {
2026-03-20T17:05:13.0541115Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.0541713Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.0542889Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0543339Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0543723Z }
2026-03-20T17:05:13.0543889Z
2026-03-20T17:05:13.0544890Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage posts a generate message and updates the UI
2026-03-20T17:05:13.0546628Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.052Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.0547408Z
2026-03-20T17:05:13.0550041Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage posts a generate message and updates the UI
2026-03-20T17:05:13.0552521Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.054Z [debug] Q² WASM kernel produced key { key: �[32m'0xc000000000000000'�[39m, hiddenDim: �[33m2�[39m }
2026-03-20T17:05:13.0553421Z
2026-03-20T17:05:13.0626602Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage posts a generate message and updates the UI
2026-03-20T17:05:13.0630321Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.055Z [info] startWithModel called { modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0632208Z [q2 main] 2026-03-20T17:05:13.055Z [info] initWorker called { modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m }
2026-03-20T17:05:13.0633276Z [q2 main] 2026-03-20T17:05:13.055Z [info] initWorker: terminating previous worker
2026-03-20T17:05:13.0634558Z [q2 main] 2026-03-20T17:05:13.055Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.0635590Z [q2 main] 2026-03-20T17:05:13.055Z [info] Posting message to worker {
2026-03-20T17:05:13.0636203Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.0636745Z modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m,
2026-03-20T17:05:13.0637293Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0637699Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0638062Z }
2026-03-20T17:05:13.0638833Z [q2 main] 2026-03-20T17:05:13.055Z [debug] onStatus { status: �[32m'ready'�[39m, detail: �[90mundefined�[39m }
2026-03-20T17:05:13.0640346Z [q2 main] 2026-03-20T17:05:13.056Z [info] sendMessage called { textLength: �[33m5�[39m, isGenerating: �[33mfalse�[39m, modelReady: �[33mtrue�[39m }
2026-03-20T17:05:13.0642070Z [q2 main] 2026-03-20T17:05:13.056Z [debug] sendMessage: user message added to history { historyLength: �[33m2�[39m }
2026-03-20T17:05:13.0643170Z [q2 main] 2026-03-20T17:05:13.059Z [debug] sendMessage: posting generate message to worker {
2026-03-20T17:05:13.0644326Z config: { max_new_tokens: �[33m2048�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1.1�[39m },
2026-03-20T17:05:13.0645160Z historyLength: �[33m2�[39m
2026-03-20T17:05:13.0645507Z }
2026-03-20T17:05:13.0646185Z [q2 main] 2026-03-20T17:05:13.060Z [info] Posting message to worker { type: �[32m'generate'�[39m }
2026-03-20T17:05:13.0647419Z [q2 main] 2026-03-20T17:05:13.061Z [info] onDone called { rawTextLength: �[33m0�[39m, historyLength: �[33m2�[39m }
2026-03-20T17:05:13.0648780Z [q2 main] 2026-03-20T17:05:13.061Z [debug] onDone: assistant response added to history { historyLength: �[33m3�[39m }
2026-03-20T17:05:13.0649497Z
2026-03-20T17:05:13.0836944Z �[90mstdout�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: all backends failing sends an error message
2026-03-20T17:05:13.0847143Z �[22m�[39m[q2 worker] 2026-03-20T17:05:13.071Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:13.0849088Z [q2 worker] 2026-03-20T17:05:13.071Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/impossible'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0850635Z [q2 worker] 2026-03-20T17:05:13.071Z [info] loadModel invoked {
2026-03-20T17:05:13.0852075Z modelId: �[32m'onnx-community/impossible'�[39m,
2026-03-20T17:05:13.0855693Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0856829Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0857266Z }
2026-03-20T17:05:13.0857768Z [q2 worker] 2026-03-20T17:05:13.071Z [info] Sending initial loading status message
2026-03-20T17:05:13.0858921Z [q2 worker] 2026-03-20T17:05:13.071Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0860135Z [q2 worker] 2026-03-20T17:05:13.071Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0861526Z [q2 worker] 2026-03-20T17:05:13.071Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:13.0890024Z [q2 worker] 2026-03-20T17:05:13.071Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:13.0891443Z [q2 worker] 2026-03-20T17:05:13.072Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:13.0892843Z [q2 worker] 2026-03-20T17:05:13.072Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:13.0894000Z [q2 worker] 2026-03-20T17:05:13.072Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0895173Z [q2 worker] 2026-03-20T17:05:13.072Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0896309Z [q2 worker] 2026-03-20T17:05:13.072Z [debug] Worker received message { type: �[32m'load'�[39m }
2026-03-20T17:05:13.0897983Z [q2 worker] 2026-03-20T17:05:13.072Z [info] Worker message router: dispatching load { modelId: �[32m'onnx-community/impossible'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0899227Z [q2 worker] 2026-03-20T17:05:13.072Z [info] loadModel invoked {
2026-03-20T17:05:13.0899909Z modelId: �[32m'onnx-community/impossible'�[39m,
2026-03-20T17:05:13.0900447Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0900858Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0901221Z }
2026-03-20T17:05:13.0901651Z [q2 worker] 2026-03-20T17:05:13.072Z [info] Sending initial loading status message
2026-03-20T17:05:13.0902846Z [q2 worker] 2026-03-20T17:05:13.072Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0903994Z [q2 worker] 2026-03-20T17:05:13.072Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0905282Z [q2 worker] 2026-03-20T17:05:13.072Z [info] preflight: WebNN API not present, skipping { device: �[32m'webnn'�[39m }
2026-03-20T17:05:13.0906699Z [q2 worker] 2026-03-20T17:05:13.072Z [info] preflight: WebGPU API not present, skipping { device: �[32m'webgpu'�[39m }
2026-03-20T17:05:13.0908001Z [q2 worker] 2026-03-20T17:05:13.072Z [info] preflight complete { devicesToTry: [ �[32m'wasm'�[39m ] }
2026-03-20T17:05:13.0909154Z [q2 worker] 2026-03-20T17:05:13.072Z [info] Attempting backend { device: �[32m'wasm'�[39m }
2026-03-20T17:05:13.0910267Z [q2 worker] 2026-03-20T17:05:13.073Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0911389Z [q2 worker] 2026-03-20T17:05:13.073Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0913381Z �[90mstderr�[2m | test/worker.e2e.test.ts�[2m > �[22m�[2mWorker E2E: transformers.js happy-path integration�[2m > �[22m�[2mload: all backends failing sends an error message
2026-03-20T17:05:13.0914859Z �[22m�[39m[q2 worker] 2026-03-20T17:05:13.077Z [warn] Backend failed {
2026-03-20T17:05:13.0915480Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:13.0915878Z error: Error: backend unavailable
2026-03-20T17:05:13.0916967Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0918093Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0919415Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0920706Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0921316Z at new Promise ()
2026-03-20T17:05:13.0922254Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0923325Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0923786Z at new Promise ()
2026-03-20T17:05:13.0924379Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0925172Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0925579Z }
2026-03-20T17:05:13.0925925Z [q2 worker] 2026-03-20T17:05:13.077Z [error] All backends failed, sending error message to main thread {
2026-03-20T17:05:13.0926362Z lastErr: Error: backend unavailable
2026-03-20T17:05:13.0926744Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0927317Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0927982Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0928644Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0929084Z at new Promise ()
2026-03-20T17:05:13.0929670Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0930425Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0930845Z at new Promise ()
2026-03-20T17:05:13.0931425Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0932320Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0932739Z }
2026-03-20T17:05:13.0932949Z [q2 worker] 2026-03-20T17:05:13.078Z [warn] Backend failed {
2026-03-20T17:05:13.0933271Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:13.0933488Z error: Error: backend unavailable
2026-03-20T17:05:13.0933858Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0934436Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0935116Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0935782Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0936210Z at new Promise ()
2026-03-20T17:05:13.0936798Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0937580Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0938018Z at new Promise ()
2026-03-20T17:05:13.0938614Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0939578Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0939986Z }
2026-03-20T17:05:13.0940325Z [q2 worker] 2026-03-20T17:05:13.078Z [error] All backends failed, sending error message to main thread {
2026-03-20T17:05:13.0940752Z lastErr: Error: backend unavailable
2026-03-20T17:05:13.0941136Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0941703Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0942512Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0943314Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0943753Z at new Promise ()
2026-03-20T17:05:13.0944330Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0945106Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0964693Z at new Promise ()
2026-03-20T17:05:13.0965424Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0966228Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0966676Z }
2026-03-20T17:05:13.0966773Z
2026-03-20T17:05:13.0967012Z [q2 worker] 2026-03-20T17:05:13.076Z [debug] loader rejected, clearing hang guard interval {
2026-03-20T17:05:13.0967439Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:13.0967664Z error: Error: backend unavailable
2026-03-20T17:05:13.0968046Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0968646Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0969332Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0969993Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0970418Z at new Promise ()
2026-03-20T17:05:13.0970996Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0971765Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0972346Z at new Promise ()
2026-03-20T17:05:13.0972920Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0973676Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0974095Z }
2026-03-20T17:05:13.0974406Z [q2 worker] 2026-03-20T17:05:13.077Z [debug] loader rejected, clearing hang guard interval {
2026-03-20T17:05:13.0974821Z device: �[32m'wasm'�[39m,
2026-03-20T17:05:13.0975044Z error: Error: backend unavailable
2026-03-20T17:05:13.0975421Z at �[90m/home/runner/work/q2/q2/�[39mtest/worker.e2e.test.ts:648:43
2026-03-20T17:05:13.0975998Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:296:11
2026-03-20T17:05:13.0976673Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1258:26
2026-03-20T17:05:13.0977336Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1681:20
2026-03-20T17:05:13.0977761Z at new Promise ()
2026-03-20T17:05:13.0978340Z at runWithCancel �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1678:10�[90m)�[39m
2026-03-20T17:05:13.0979337Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1660:20
2026-03-20T17:05:13.0979766Z at new Promise ()
2026-03-20T17:05:13.0980342Z at runWithTimeout �[90m(file:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:1627:10�[90m)�[39m
2026-03-20T17:05:13.0981098Z at �[90mfile:///home/runner/work/q2/q2/�[39mnode_modules/�[4m@vitest/runner�[24m/dist/index.js:2309:64
2026-03-20T17:05:13.0981497Z }
2026-03-20T17:05:13.0982142Z [q2 worker] 2026-03-20T17:05:13.077Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0982762Z [q2 worker] 2026-03-20T17:05:13.077Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0983357Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0983960Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0984551Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0985142Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'status'�[39m }
2026-03-20T17:05:13.0985727Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0986317Z [q2 worker] 2026-03-20T17:05:13.078Z [debug] Worker received message { type: �[32m'error'�[39m }
2026-03-20T17:05:13.0986631Z
2026-03-20T17:05:13.0987158Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandleWorkerMessage handles token stream and done events
2026-03-20T17:05:13.0987876Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.081Z [debug] initModelPicker called
2026-03-20T17:05:13.0988526Z [q2 main] 2026-03-20T17:05:13.081Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.0989085Z [q2 main] 2026-03-20T17:05:13.081Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.0989419Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0989692Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.0990000Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.0990273Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0990471Z }
2026-03-20T17:05:13.0990880Z [q2 main] 2026-03-20T17:05:13.083Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.0991655Z [q2 main] 2026-03-20T17:05:13.084Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0992833Z [q2 main] 2026-03-20T17:05:13.084Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.0993697Z [q2 main] 2026-03-20T17:05:13.084Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.0994494Z [q2 main] 2026-03-20T17:05:13.084Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.0995040Z [q2 main] 2026-03-20T17:05:13.084Z [info] Posting message to worker {
2026-03-20T17:05:13.0995374Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.0995685Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.0995996Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.0996217Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.0996461Z }
2026-03-20T17:05:13.0996543Z
2026-03-20T17:05:13.0997059Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandleWorkerMessage handles token stream and done events
2026-03-20T17:05:13.0997944Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.085Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.0998323Z
2026-03-20T17:05:13.0998826Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandleWorkerMessage handles token stream and done events
2026-03-20T17:05:13.0999813Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.088Z [debug] handleWorkerMessage received { type: �[32m'token'�[39m }
2026-03-20T17:05:13.1000173Z
2026-03-20T17:05:13.1409898Z �[31m❯�[39m test/worker.e2e.test.ts �[2m(�[22m�[2m14 tests�[22m�[2m | �[22m�[31m1 failed�[39m�[2m)�[22m�[33m 1633�[2mms�[22m�[39m
2026-03-20T17:05:13.1411489Z �[32m✓�[39m load: pipeline() is called with correct task, modelId, dtype and device list�[32m 64�[2mms�[22m�[39m
2026-03-20T17:05:13.1413127Z �[32m✓�[39m generate: tokens are streamed and done is sent after pipeline resolves�[32m 56�[2mms�[22m�[39m
2026-03-20T17:05:13.1414881Z �[32m✓�[39m generate: pipeline is called with correct generation arguments�[32m 56�[2mms�[22m�[39m
2026-03-20T17:05:13.1416196Z �[32m✓�[39m generate: do_sample is false when temperature is 0 (greedy decoding)�[32m 52�[2mms�[22m�[39m
2026-03-20T17:05:13.1417368Z �[32m✓�[39m generate: pipeline returns TextGenerationSingle[] — output.hidden_states is not available�[32m 55�[2mms�[22m�[39m
2026-03-20T17:05:13.1418247Z �[32m✓�[39m abort: sending abort interrupts the stopping criteria and ends generation cleanly�[32m 73�[2mms�[22m�[39m
2026-03-20T17:05:13.1419123Z �[31m �[31m�[31m load: falls back through backends when a higher-priority backend fails�[39m�[32m 56�[2mms�[22m�[39m
2026-03-20T17:05:13.1420192Z �[32m✓�[39m load: pipeline is never called with device=webgl (unsupported in transformers.js@next)�[32m 52�[2mms�[22m�[39m
2026-03-20T17:05:13.1421159Z �[32m✓�[39m load: progress callbacks during download are forwarded as progress messages�[32m 53�[2mms�[22m�[39m
2026-03-20T17:05:13.1422715Z �[32m✓�[39m generate: worker sends error message when pipe is null (model not loaded)�[32m 55�[2mms�[22m�[39m
2026-03-20T17:05:13.1423934Z �[32m✓�[39m load: all backends failing sends an error message�[32m 67�[2mms�[22m�[39m
2026-03-20T17:05:13.1424827Z �[32m✓�[39m pipeline output is an array of TextGenerationSingle objects, not a model output�[32m 0�[2mms�[22m�[39m
2026-03-20T17:05:13.1426286Z �[32m✓�[39m TextStreamer callback_function receives decoded token strings, not tensor IDs�[32m 0�[2mms�[22m�[39m
2026-03-20T17:05:13.1427783Z �[32m✓�[39m InterruptableStoppingCriteria.interrupt() sets interrupted flag�[32m 1�[2mms�[22m�[39m
2026-03-20T17:05:13.1994143Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandleWorkerMessage handles token stream and done events
2026-03-20T17:05:13.1998056Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.195Z [info] onDone called { rawTextLength: �[33m0�[39m, historyLength: �[33m1�[39m }
2026-03-20T17:05:13.2000070Z
2026-03-20T17:05:13.2282344Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mkeydown Enter triggers sendMessage via the key handler
2026-03-20T17:05:13.2283878Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.222Z [debug] initModelPicker called
2026-03-20T17:05:13.2285205Z [q2 main] 2026-03-20T17:05:13.222Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.2286234Z [q2 main] 2026-03-20T17:05:13.223Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.2286931Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.2287437Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.2288020Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.2288520Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.2288896Z }
2026-03-20T17:05:13.2289563Z [q2 main] 2026-03-20T17:05:13.223Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.2290798Z [q2 main] 2026-03-20T17:05:13.224Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.2292590Z [q2 main] 2026-03-20T17:05:13.224Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.2294368Z [q2 main] 2026-03-20T17:05:13.224Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.2295671Z [q2 main] 2026-03-20T17:05:13.224Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.2296593Z [q2 main] 2026-03-20T17:05:13.224Z [info] Posting message to worker {
2026-03-20T17:05:13.2297160Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.2297632Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.2298113Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.2298704Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.2299010Z }
2026-03-20T17:05:13.2299138Z
2026-03-20T17:05:13.2300003Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mkeydown Enter triggers sendMessage via the key handler
2026-03-20T17:05:13.2301479Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.225Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.2304596Z
2026-03-20T17:05:13.2454327Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mkeydown Enter triggers sendMessage via the key handler
2026-03-20T17:05:13.2456490Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.237Z [info] startWithModel called { modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.2458302Z [q2 main] 2026-03-20T17:05:13.237Z [info] initWorker called { modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m }
2026-03-20T17:05:13.2459481Z [q2 main] 2026-03-20T17:05:13.237Z [info] initWorker: terminating previous worker
2026-03-20T17:05:13.2460845Z [q2 main] 2026-03-20T17:05:13.237Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.2462191Z [q2 main] 2026-03-20T17:05:13.237Z [info] Posting message to worker {
2026-03-20T17:05:13.2462970Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.2463608Z modelId: �[32m'LiquidAI/LFM2.5-1.2B-Thinking-ONNX'�[39m,
2026-03-20T17:05:13.2464243Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.2464705Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.2465085Z }
2026-03-20T17:05:13.2465893Z [q2 main] 2026-03-20T17:05:13.237Z [debug] onStatus { status: �[32m'ready'�[39m, detail: �[90mundefined�[39m }
2026-03-20T17:05:13.2467515Z [q2 main] 2026-03-20T17:05:13.240Z [info] sendMessage called { textLength: �[33m3�[39m, isGenerating: �[33mfalse�[39m, modelReady: �[33mtrue�[39m }
2026-03-20T17:05:13.2469244Z [q2 main] 2026-03-20T17:05:13.240Z [debug] sendMessage: user message added to history { historyLength: �[33m2�[39m }
2026-03-20T17:05:13.2470433Z [q2 main] 2026-03-20T17:05:13.242Z [debug] sendMessage: posting generate message to worker {
2026-03-20T17:05:13.2471689Z config: { max_new_tokens: �[33m2048�[39m, temperature: �[33m0�[39m, repetition_penalty: �[33m1.1�[39m },
2026-03-20T17:05:13.2472860Z historyLength: �[33m2�[39m
2026-03-20T17:05:13.2473273Z }
2026-03-20T17:05:13.2474036Z [q2 main] 2026-03-20T17:05:13.242Z [info] Posting message to worker { type: �[32m'generate'�[39m }
2026-03-20T17:05:13.2474680Z
2026-03-20T17:05:13.2724386Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mupdates display values when range inputs change
2026-03-20T17:05:13.2742461Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.268Z [debug] initModelPicker called
2026-03-20T17:05:13.2743934Z [q2 main] 2026-03-20T17:05:13.269Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.2745133Z [q2 main] 2026-03-20T17:05:13.269Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.2745854Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.2746386Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.2746969Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.2747511Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.2747900Z }
2026-03-20T17:05:13.2749205Z [q2 main] 2026-03-20T17:05:13.270Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.2750798Z [q2 main] 2026-03-20T17:05:13.270Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.2752985Z [q2 main] 2026-03-20T17:05:13.270Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.2754735Z [q2 main] 2026-03-20T17:05:13.271Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.2756309Z [q2 main] 2026-03-20T17:05:13.271Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.2757682Z [q2 main] 2026-03-20T17:05:13.271Z [info] Posting message to worker {
2026-03-20T17:05:13.2758379Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.2758978Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.2759581Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.2760055Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.2760443Z }
2026-03-20T17:05:13.2760600Z
2026-03-20T17:05:13.2761550Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mupdates display values when range inputs change
2026-03-20T17:05:13.2763487Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.272Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.2764246Z
2026-03-20T17:05:13.2994796Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mreadConfig returns numbers from inputs
2026-03-20T17:05:13.3000691Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.296Z [debug] initModelPicker called
2026-03-20T17:05:13.3004589Z [q2 main] 2026-03-20T17:05:13.296Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.3017150Z [q2 main] 2026-03-20T17:05:13.297Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.3017938Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3018440Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.3019031Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.3019560Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3019990Z }
2026-03-20T17:05:13.3020805Z [q2 main] 2026-03-20T17:05:13.297Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.3022526Z [q2 main] 2026-03-20T17:05:13.297Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3024652Z [q2 main] 2026-03-20T17:05:13.297Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.3053224Z [q2 main] 2026-03-20T17:05:13.297Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3054963Z [q2 main] 2026-03-20T17:05:13.297Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.3056189Z [q2 main] 2026-03-20T17:05:13.298Z [info] Posting message to worker {
2026-03-20T17:05:13.3056955Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.3057628Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.3058320Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3058842Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3059294Z }
2026-03-20T17:05:13.3059523Z
2026-03-20T17:05:13.3060557Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mreadConfig returns numbers from inputs
2026-03-20T17:05:13.3062426Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.298Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.3063300Z
2026-03-20T17:05:13.3368332Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandles worker error messages and displays an error bubble
2026-03-20T17:05:13.3370322Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.333Z [debug] initModelPicker called
2026-03-20T17:05:13.3372629Z [q2 main] 2026-03-20T17:05:13.333Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.3373927Z [q2 main] 2026-03-20T17:05:13.334Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.3374832Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3375587Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.3376379Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.3377088Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3377625Z }
2026-03-20T17:05:13.3378561Z [q2 main] 2026-03-20T17:05:13.334Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.3380904Z [q2 main] 2026-03-20T17:05:13.335Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3383134Z [q2 main] 2026-03-20T17:05:13.335Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.3394363Z [q2 main] 2026-03-20T17:05:13.335Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3395981Z [q2 main] 2026-03-20T17:05:13.335Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.3397106Z [q2 main] 2026-03-20T17:05:13.335Z [info] Posting message to worker {
2026-03-20T17:05:13.3397914Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.3398503Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.3399099Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3399518Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3399893Z }
2026-03-20T17:05:13.3400040Z
2026-03-20T17:05:13.3401054Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandles worker error messages and displays an error bubble
2026-03-20T17:05:13.3402948Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.336Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.3403677Z
2026-03-20T17:05:13.3429137Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mhandles worker error messages and displays an error bubble
2026-03-20T17:05:13.3438492Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.340Z [debug] onStatus { status: �[32m'ready'�[39m, detail: �[90mundefined�[39m }
2026-03-20T17:05:13.3439945Z [q2 main] 2026-03-20T17:05:13.341Z [debug] handleWorkerMessage received { type: �[32m'error'�[39m }
2026-03-20T17:05:13.3441331Z [q2 main] 2026-03-20T17:05:13.341Z [info] onDone called { rawTextLength: �[33m0�[39m, historyLength: �[33m1�[39m }
2026-03-20T17:05:13.3442313Z
2026-03-20T17:05:13.3676926Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mautoResizeTextarea caps height at 200px based on scrollHeight
2026-03-20T17:05:13.3679719Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.364Z [debug] initModelPicker called
2026-03-20T17:05:13.3682699Z [q2 main] 2026-03-20T17:05:13.364Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.3683809Z [q2 main] 2026-03-20T17:05:13.365Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.3684500Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3684990Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.3685551Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.3686071Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3686442Z }
2026-03-20T17:05:13.3687135Z [q2 main] 2026-03-20T17:05:13.365Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.3688389Z [q2 main] 2026-03-20T17:05:13.366Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3689987Z [q2 main] 2026-03-20T17:05:13.366Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.3691773Z [q2 main] 2026-03-20T17:05:13.366Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.3693255Z [q2 main] 2026-03-20T17:05:13.366Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.3694177Z [q2 main] 2026-03-20T17:05:13.366Z [info] Posting message to worker {
2026-03-20T17:05:13.3694765Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.3695277Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.3695798Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.3696184Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.3696745Z }
2026-03-20T17:05:13.3696878Z
2026-03-20T17:05:13.3697931Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mautoResizeTextarea caps height at 200px based on scrollHeight
2026-03-20T17:05:13.3699560Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.366Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.3700263Z
2026-03-20T17:05:13.4110546Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderBubble renders think blocks and escapes HTML
2026-03-20T17:05:13.4112321Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.408Z [debug] initModelPicker called
2026-03-20T17:05:13.4113643Z [q2 main] 2026-03-20T17:05:13.408Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.4114792Z [q2 main] 2026-03-20T17:05:13.408Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.4115512Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4116078Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.4116661Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.4117209Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4117585Z }
2026-03-20T17:05:13.4118404Z [q2 main] 2026-03-20T17:05:13.409Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.4119914Z [q2 main] 2026-03-20T17:05:13.409Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4121603Z [q2 main] 2026-03-20T17:05:13.409Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.4123438Z [q2 main] 2026-03-20T17:05:13.410Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4124651Z [q2 main] 2026-03-20T17:05:13.410Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.4125247Z [q2 main] 2026-03-20T17:05:13.410Z [info] Posting message to worker {
2026-03-20T17:05:13.4125618Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.4125931Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.4126236Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4126470Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4126702Z }
2026-03-20T17:05:13.4126786Z
2026-03-20T17:05:13.4127300Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderBubble renders think blocks and escapes HTML
2026-03-20T17:05:13.4128186Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.410Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.4128570Z
2026-03-20T17:05:13.4316952Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderEmbeddingHeatmap returns early when canvas context is missing
2026-03-20T17:05:13.4353001Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.428Z [debug] initModelPicker called
2026-03-20T17:05:13.4354388Z [q2 main] 2026-03-20T17:05:13.428Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.4355481Z [q2 main] 2026-03-20T17:05:13.428Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.4356162Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4356647Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.4357591Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.4358069Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4358423Z }
2026-03-20T17:05:13.4359184Z [q2 main] 2026-03-20T17:05:13.428Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.4360635Z [q2 main] 2026-03-20T17:05:13.430Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4366625Z [q2 main] 2026-03-20T17:05:13.430Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.4368591Z [q2 main] 2026-03-20T17:05:13.430Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4370089Z [q2 main] 2026-03-20T17:05:13.430Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.4371125Z [q2 main] 2026-03-20T17:05:13.430Z [info] Posting message to worker {
2026-03-20T17:05:13.4371770Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.4372665Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.4373219Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4373617Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4373971Z }
2026-03-20T17:05:13.4374108Z
2026-03-20T17:05:13.4375155Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderEmbeddingHeatmap returns early when canvas context is missing
2026-03-20T17:05:13.4376899Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.430Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.4377623Z
2026-03-20T17:05:13.4744254Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderQ2Result appends Q² info to embeddingStats
2026-03-20T17:05:13.4745749Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.469Z [debug] initModelPicker called
2026-03-20T17:05:13.4746982Z [q2 main] 2026-03-20T17:05:13.469Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.4748059Z [q2 main] 2026-03-20T17:05:13.469Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.4748726Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4749249Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.4749829Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.4750369Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4750753Z }
2026-03-20T17:05:13.4751537Z [q2 main] 2026-03-20T17:05:13.470Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.4753362Z [q2 main] 2026-03-20T17:05:13.470Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4755221Z [q2 main] 2026-03-20T17:05:13.470Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.4756892Z [q2 main] 2026-03-20T17:05:13.471Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4758422Z [q2 main] 2026-03-20T17:05:13.471Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.4759494Z [q2 main] 2026-03-20T17:05:13.471Z [info] Posting message to worker {
2026-03-20T17:05:13.4760144Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.4760684Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.4761227Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4761649Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4762266Z }
2026-03-20T17:05:13.4762438Z
2026-03-20T17:05:13.4763307Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrenderQ2Result appends Q² info to embeddingStats
2026-03-20T17:05:13.4764900Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.471Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.4765605Z
2026-03-20T17:05:13.4937375Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels builds correct URL and returns parsed models
2026-03-20T17:05:13.4938940Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.491Z [debug] initModelPicker called
2026-03-20T17:05:13.4940224Z [q2 main] 2026-03-20T17:05:13.491Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.4941321Z [q2 main] 2026-03-20T17:05:13.491Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.4942244Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4942798Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.4943878Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.4944422Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4944804Z }
2026-03-20T17:05:13.4945610Z [q2 main] 2026-03-20T17:05:13.492Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.4947090Z [q2 main] 2026-03-20T17:05:13.492Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4948818Z [q2 main] 2026-03-20T17:05:13.492Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.4950440Z [q2 main] 2026-03-20T17:05:13.492Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.4951737Z [q2 main] 2026-03-20T17:05:13.493Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.4952857Z [q2 main] 2026-03-20T17:05:13.493Z [info] Posting message to worker {
2026-03-20T17:05:13.4953480Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.4954018Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.4954550Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.4954947Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.4955293Z }
2026-03-20T17:05:13.4955441Z
2026-03-20T17:05:13.4956408Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels builds correct URL and returns parsed models
2026-03-20T17:05:13.4958053Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.493Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.4958755Z
2026-03-20T17:05:13.5283565Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels includes Authorization header when apiToken is set
2026-03-20T17:05:13.5294408Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.525Z [debug] initModelPicker called
2026-03-20T17:05:13.5298370Z [q2 main] 2026-03-20T17:05:13.525Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.5311644Z [q2 main] 2026-03-20T17:05:13.525Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.5312643Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5313175Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.5313744Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.5314271Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5314651Z }
2026-03-20T17:05:13.5315481Z [q2 main] 2026-03-20T17:05:13.526Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.5319232Z [q2 main] 2026-03-20T17:05:13.526Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5321109Z [q2 main] 2026-03-20T17:05:13.526Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.5323025Z [q2 main] 2026-03-20T17:05:13.527Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5324589Z [q2 main] 2026-03-20T17:05:13.527Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.5325660Z [q2 main] 2026-03-20T17:05:13.527Z [info] Posting message to worker {
2026-03-20T17:05:13.5326305Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.5327282Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.5327856Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5328283Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5328660Z }
2026-03-20T17:05:13.5328807Z
2026-03-20T17:05:13.5329879Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels includes Authorization header when apiToken is set
2026-03-20T17:05:13.5331487Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.527Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.5332625Z
2026-03-20T17:05:13.5577979Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels filters out models above 2B parameters
2026-03-20T17:05:13.5585305Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.554Z [debug] initModelPicker called
2026-03-20T17:05:13.5586684Z [q2 main] 2026-03-20T17:05:13.554Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.5587792Z [q2 main] 2026-03-20T17:05:13.555Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.5588439Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5588942Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.5589560Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.5590089Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5590492Z }
2026-03-20T17:05:13.5591287Z [q2 main] 2026-03-20T17:05:13.555Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.5593048Z [q2 main] 2026-03-20T17:05:13.556Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5594836Z [q2 main] 2026-03-20T17:05:13.556Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.5596490Z [q2 main] 2026-03-20T17:05:13.556Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5598010Z [q2 main] 2026-03-20T17:05:13.556Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.5599091Z [q2 main] 2026-03-20T17:05:13.556Z [info] Posting message to worker {
2026-03-20T17:05:13.5599731Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.5600256Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.5600845Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5601275Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5601645Z }
2026-03-20T17:05:13.5601799Z
2026-03-20T17:05:13.5632645Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels filters out models above 2B parameters
2026-03-20T17:05:13.5634448Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.558Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.5635209Z
2026-03-20T17:05:13.5891610Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels throws on non-OK response
2026-03-20T17:05:13.5893206Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.581Z [debug] initModelPicker called
2026-03-20T17:05:13.5894375Z [q2 main] 2026-03-20T17:05:13.581Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.5895333Z [q2 main] 2026-03-20T17:05:13.584Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.5895909Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5896343Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.5896855Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.5897324Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5897632Z }
2026-03-20T17:05:13.5898258Z [q2 main] 2026-03-20T17:05:13.584Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.5899495Z [q2 main] 2026-03-20T17:05:13.585Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5901389Z [q2 main] 2026-03-20T17:05:13.585Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.5903194Z [q2 main] 2026-03-20T17:05:13.585Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.5904658Z [q2 main] 2026-03-20T17:05:13.585Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.5905668Z [q2 main] 2026-03-20T17:05:13.585Z [info] Posting message to worker {
2026-03-20T17:05:13.5906283Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.5907014Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.5907550Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.5907942Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.5908279Z }
2026-03-20T17:05:13.5908414Z
2026-03-20T17:05:13.5909132Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mfetchHFModels throws on non-OK response
2026-03-20T17:05:13.5910517Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.586Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.5911177Z
2026-03-20T17:05:13.6250542Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mformatCount formats numbers correctly
2026-03-20T17:05:13.6252708Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.621Z [debug] initModelPicker called
2026-03-20T17:05:13.6254363Z [q2 main] 2026-03-20T17:05:13.621Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.6255692Z [q2 main] 2026-03-20T17:05:13.621Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.6256625Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6257344Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.6258167Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.6258926Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6259550Z }
2026-03-20T17:05:13.6260583Z [q2 main] 2026-03-20T17:05:13.622Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.6262621Z [q2 main] 2026-03-20T17:05:13.622Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6264745Z [q2 main] 2026-03-20T17:05:13.622Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.6266668Z [q2 main] 2026-03-20T17:05:13.622Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6268364Z [q2 main] 2026-03-20T17:05:13.623Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.6269735Z [q2 main] 2026-03-20T17:05:13.623Z [info] Posting message to worker {
2026-03-20T17:05:13.6270655Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.6271484Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.6272628Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6273254Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6273793Z }
2026-03-20T17:05:13.6278750Z
2026-03-20T17:05:13.6285017Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mformatCount formats numbers correctly
2026-03-20T17:05:13.6291354Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.623Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.6299085Z
2026-03-20T17:05:13.6658591Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mloadSettings returns defaults when localStorage is empty
2026-03-20T17:05:13.6661708Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.643Z [debug] initModelPicker called
2026-03-20T17:05:13.6675455Z [q2 main] 2026-03-20T17:05:13.643Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.6676847Z [q2 main] 2026-03-20T17:05:13.644Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.6680041Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6680787Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.6682919Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.6684048Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6685364Z }
2026-03-20T17:05:13.6686660Z [q2 main] 2026-03-20T17:05:13.644Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.6688554Z [q2 main] 2026-03-20T17:05:13.645Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6724175Z [q2 main] 2026-03-20T17:05:13.645Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.6726863Z [q2 main] 2026-03-20T17:05:13.645Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6728635Z [q2 main] 2026-03-20T17:05:13.645Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.6729944Z [q2 main] 2026-03-20T17:05:13.645Z [info] Posting message to worker {
2026-03-20T17:05:13.6730731Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.6731288Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.6731998Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6732435Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6732821Z }
2026-03-20T17:05:13.6732979Z
2026-03-20T17:05:13.6733994Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mloadSettings returns defaults when localStorage is empty
2026-03-20T17:05:13.6735717Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.645Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.6736439Z
2026-03-20T17:05:13.6737433Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msaveSettings persists and loadSettings restores values
2026-03-20T17:05:13.6738865Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.665Z [debug] initModelPicker called
2026-03-20T17:05:13.6740152Z [q2 main] 2026-03-20T17:05:13.665Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.6741225Z [q2 main] 2026-03-20T17:05:13.665Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.6762287Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6762881Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.6763482Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.6763950Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6764302Z }
2026-03-20T17:05:13.6765095Z [q2 main] 2026-03-20T17:05:13.666Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.6766551Z [q2 main] 2026-03-20T17:05:13.666Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6768250Z [q2 main] 2026-03-20T17:05:13.666Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.6769901Z [q2 main] 2026-03-20T17:05:13.667Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6771385Z [q2 main] 2026-03-20T17:05:13.667Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.6772621Z [q2 main] 2026-03-20T17:05:13.667Z [info] Posting message to worker {
2026-03-20T17:05:13.6773258Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.6773799Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.6774430Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6774848Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6775217Z }
2026-03-20T17:05:13.6775363Z
2026-03-20T17:05:13.6776311Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msaveSettings persists and loadSettings restores values
2026-03-20T17:05:13.6777922Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.667Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.6778889Z
2026-03-20T17:05:13.6884253Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2minitModelPicker renders model list items from the mocked HF API
2026-03-20T17:05:13.6885824Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.685Z [debug] initModelPicker called
2026-03-20T17:05:13.6887062Z [q2 main] 2026-03-20T17:05:13.686Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.6888140Z [q2 main] 2026-03-20T17:05:13.686Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.6889299Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6889804Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.6890402Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.6890935Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6891310Z }
2026-03-20T17:05:13.6892343Z [q2 main] 2026-03-20T17:05:13.686Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.6893869Z [q2 main] 2026-03-20T17:05:13.687Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6895604Z [q2 main] 2026-03-20T17:05:13.687Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.6897174Z [q2 main] 2026-03-20T17:05:13.687Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.6898702Z [q2 main] 2026-03-20T17:05:13.687Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.6899770Z [q2 main] 2026-03-20T17:05:13.687Z [info] Posting message to worker {
2026-03-20T17:05:13.6900442Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.6900972Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.6901545Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.6902395Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.6902822Z }
2026-03-20T17:05:13.6902983Z
2026-03-20T17:05:13.6904062Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2minitModelPicker renders model list items from the mocked HF API
2026-03-20T17:05:13.6905795Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.688Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.6906514Z
2026-03-20T17:05:13.7034080Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mselectModel highlights the item, clears custom input, and enables load btn
2026-03-20T17:05:13.7035783Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.701Z [debug] initModelPicker called
2026-03-20T17:05:13.7037138Z [q2 main] 2026-03-20T17:05:13.701Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.7038213Z [q2 main] 2026-03-20T17:05:13.701Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.7038938Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7039432Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.7042080Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.7051166Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7051601Z }
2026-03-20T17:05:13.7052675Z [q2 main] 2026-03-20T17:05:13.701Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.7054186Z [q2 main] 2026-03-20T17:05:13.702Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7055886Z [q2 main] 2026-03-20T17:05:13.702Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7057601Z [q2 main] 2026-03-20T17:05:13.702Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7059161Z [q2 main] 2026-03-20T17:05:13.702Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7060679Z [q2 main] 2026-03-20T17:05:13.702Z [info] Posting message to worker {
2026-03-20T17:05:13.7061373Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7062154Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7062745Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7063178Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7063533Z }
2026-03-20T17:05:13.7063689Z
2026-03-20T17:05:13.7064846Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mselectModel highlights the item, clears custom input, and enables load btn
2026-03-20T17:05:13.7067012Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.702Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.7067755Z
2026-03-20T17:05:13.7095575Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mselectModel highlights the item, clears custom input, and enables load btn
2026-03-20T17:05:13.7097405Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.706Z [info] selectModel called { modelId: �[32m'test-org/model-alpha'�[39m }
2026-03-20T17:05:13.7098131Z
2026-03-20T17:05:13.7310448Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mstartWithModel shows load overlay and creates worker
2026-03-20T17:05:13.7317161Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.728Z [debug] initModelPicker called
2026-03-20T17:05:13.7323512Z [q2 main] 2026-03-20T17:05:13.728Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.7325054Z [q2 main] 2026-03-20T17:05:13.728Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.7326142Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7326654Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.7327201Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.7327674Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7328035Z }
2026-03-20T17:05:13.7328651Z [q2 main] 2026-03-20T17:05:13.729Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.7329483Z [q2 main] 2026-03-20T17:05:13.729Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7330397Z [q2 main] 2026-03-20T17:05:13.729Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7331242Z [q2 main] 2026-03-20T17:05:13.730Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7332352Z [q2 main] 2026-03-20T17:05:13.730Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7332978Z [q2 main] 2026-03-20T17:05:13.730Z [info] Posting message to worker {
2026-03-20T17:05:13.7333355Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7333673Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7334002Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7334245Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7334630Z }
2026-03-20T17:05:13.7334776Z
2026-03-20T17:05:13.7335675Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mstartWithModel shows load overlay and creates worker
2026-03-20T17:05:13.7337358Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.730Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.7338086Z
2026-03-20T17:05:13.7349940Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mstartWithModel shows load overlay and creates worker
2026-03-20T17:05:13.7352331Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.733Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7355643Z [q2 main] 2026-03-20T17:05:13.733Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7357197Z [q2 main] 2026-03-20T17:05:13.733Z [info] initWorker: terminating previous worker
2026-03-20T17:05:13.7358537Z [q2 main] 2026-03-20T17:05:13.733Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7359624Z [q2 main] 2026-03-20T17:05:13.734Z [info] Posting message to worker {
2026-03-20T17:05:13.7360307Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7360898Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7361496Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7362172Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7362545Z }
2026-03-20T17:05:13.7362996Z
2026-03-20T17:05:13.7556135Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging model-dtype updates currentSettings and is passed to the worker
2026-03-20T17:05:13.7557794Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.750Z [debug] initModelPicker called
2026-03-20T17:05:13.7559016Z [q2 main] 2026-03-20T17:05:13.750Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.7560091Z [q2 main] 2026-03-20T17:05:13.751Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.7560728Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7561189Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.7561722Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.7562378Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7562746Z }
2026-03-20T17:05:13.7563492Z [q2 main] 2026-03-20T17:05:13.751Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.7564960Z [q2 main] 2026-03-20T17:05:13.752Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7566683Z [q2 main] 2026-03-20T17:05:13.752Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7568290Z [q2 main] 2026-03-20T17:05:13.752Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7569789Z [q2 main] 2026-03-20T17:05:13.752Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7570795Z [q2 main] 2026-03-20T17:05:13.752Z [info] Posting message to worker {
2026-03-20T17:05:13.7571423Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7572157Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7572756Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7573172Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7573514Z }
2026-03-20T17:05:13.7573676Z
2026-03-20T17:05:13.7574806Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging model-dtype updates currentSettings and is passed to the worker
2026-03-20T17:05:13.7576593Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.753Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.7577354Z
2026-03-20T17:05:13.7613519Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging model-dtype updates currentSettings and is passed to the worker
2026-03-20T17:05:13.7624241Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.757Z [info] Setting changed: dtype { dtype: �[32m'q8'�[39m }
2026-03-20T17:05:13.7628151Z [q2 main] 2026-03-20T17:05:13.757Z [info] startWithModel called { modelId: �[32m'test/some-model'�[39m, dtype: �[32m'q8'�[39m }
2026-03-20T17:05:13.7633572Z [q2 main] 2026-03-20T17:05:13.758Z [info] initWorker called { modelId: �[32m'test/some-model'�[39m }
2026-03-20T17:05:13.7634348Z [q2 main] 2026-03-20T17:05:13.758Z [info] initWorker: terminating previous worker
2026-03-20T17:05:13.7635328Z [q2 main] 2026-03-20T17:05:13.758Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7636110Z [q2 main] 2026-03-20T17:05:13.758Z [info] Posting message to worker {
2026-03-20T17:05:13.7636703Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7637645Z modelId: �[32m'test/some-model'�[39m,
2026-03-20T17:05:13.7638093Z dtype: �[32m'q8'�[39m,
2026-03-20T17:05:13.7638531Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7638899Z }
2026-03-20T17:05:13.7639030Z
2026-03-20T17:05:13.7794862Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging q2-key-display-mode persists the setting
2026-03-20T17:05:13.7796714Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.776Z [debug] initModelPicker called
2026-03-20T17:05:13.7798170Z [q2 main] 2026-03-20T17:05:13.776Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.7799647Z [q2 main] 2026-03-20T17:05:13.776Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.7800291Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7800783Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.7801204Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.7801478Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7801695Z }
2026-03-20T17:05:13.7802508Z [q2 main] 2026-03-20T17:05:13.776Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.7803301Z [q2 main] 2026-03-20T17:05:13.777Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7804218Z [q2 main] 2026-03-20T17:05:13.777Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7805077Z [q2 main] 2026-03-20T17:05:13.777Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7805892Z [q2 main] 2026-03-20T17:05:13.777Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7806462Z [q2 main] 2026-03-20T17:05:13.777Z [info] Posting message to worker {
2026-03-20T17:05:13.7806801Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7807109Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7807425Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7807648Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7807851Z }
2026-03-20T17:05:13.7807932Z
2026-03-20T17:05:13.7808432Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging q2-key-display-mode persists the setting
2026-03-20T17:05:13.7809278Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.778Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.7809654Z
2026-03-20T17:05:13.7820297Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mchanging q2-key-display-mode persists the setting
2026-03-20T17:05:13.7823442Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.781Z [debug] Setting changed: q2KeyDisplayMode { mode: �[32m'cgAt'�[39m }
2026-03-20T17:05:13.7825093Z
2026-03-20T17:05:13.7941440Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mswitchTab changes active tab and shows correct panel
2026-03-20T17:05:13.7947306Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.792Z [debug] initModelPicker called
2026-03-20T17:05:13.7953641Z [q2 main] 2026-03-20T17:05:13.792Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.7954774Z [q2 main] 2026-03-20T17:05:13.792Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.7955482Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7955991Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.7956568Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.7957078Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7957462Z }
2026-03-20T17:05:13.7958243Z [q2 main] 2026-03-20T17:05:13.793Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.7959766Z [q2 main] 2026-03-20T17:05:13.793Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7962171Z [q2 main] 2026-03-20T17:05:13.793Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.7963870Z [q2 main] 2026-03-20T17:05:13.793Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.7965426Z [q2 main] 2026-03-20T17:05:13.793Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.7966502Z [q2 main] 2026-03-20T17:05:13.793Z [info] Posting message to worker {
2026-03-20T17:05:13.7967101Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.7967600Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.7968396Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.7968840Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.7969199Z }
2026-03-20T17:05:13.7969351Z
2026-03-20T17:05:13.7970323Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mswitchTab changes active tab and shows correct panel
2026-03-20T17:05:13.7972508Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.793Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.7973312Z
2026-03-20T17:05:13.8019993Z �[32m✓�[39m test/t0.test.ts �[2m(�[22m�[2m64 tests�[22m�[2m)�[22m�[32m 71�[2mms�[22m�[39m
2026-03-20T17:05:13.8021506Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mswitchTab changes active tab and shows correct panel
2026-03-20T17:05:13.8023291Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.796Z [info] switchTab called { tabName: �[32m'benchmarks'�[39m }
2026-03-20T17:05:13.8024523Z [q2 main] 2026-03-20T17:05:13.797Z [info] switchTab called { tabName: �[32m'settings'�[39m }
2026-03-20T17:05:13.8025597Z [q2 main] 2026-03-20T17:05:13.798Z [info] switchTab called { tabName: �[32m'chat'�[39m }
2026-03-20T17:05:13.8026167Z
2026-03-20T17:05:13.8233151Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage shows error when no model is loaded
2026-03-20T17:05:13.8239268Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.820Z [debug] initModelPicker called
2026-03-20T17:05:13.8264253Z [q2 main] 2026-03-20T17:05:13.820Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.8265933Z [q2 main] 2026-03-20T17:05:13.821Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.8266851Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.8267540Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.8268322Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.8269029Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.8269720Z }
2026-03-20T17:05:13.8270694Z [q2 main] 2026-03-20T17:05:13.821Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.8272772Z [q2 main] 2026-03-20T17:05:13.822Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.8274916Z [q2 main] 2026-03-20T17:05:13.822Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.8276863Z [q2 main] 2026-03-20T17:05:13.822Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.8279507Z [q2 main] 2026-03-20T17:05:13.822Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.8281353Z [q2 main] 2026-03-20T17:05:13.822Z [info] Posting message to worker {
2026-03-20T17:05:13.8283862Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.8284489Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.8285141Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.8285599Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.8285980Z }
2026-03-20T17:05:13.8286147Z
2026-03-20T17:05:13.8287109Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage shows error when no model is loaded
2026-03-20T17:05:13.8289246Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.824Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.8299173Z
2026-03-20T17:05:13.8306638Z �[90mstderr�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage shows error when no model is loaded
2026-03-20T17:05:13.8308440Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.829Z [warn] sendMessage: no model loaded
2026-03-20T17:05:13.8312471Z
2026-03-20T17:05:13.8318896Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2msendMessage shows error when no model is loaded
2026-03-20T17:05:13.8321542Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.829Z [info] sendMessage called { textLength: �[33m5�[39m, isGenerating: �[33mfalse�[39m, modelReady: �[33mfalse�[39m }
2026-03-20T17:05:13.8326995Z
2026-03-20T17:05:13.8496545Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t2) populates bench-results-body with T2 rows
2026-03-20T17:05:13.8522735Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.846Z [debug] initModelPicker called
2026-03-20T17:05:13.8524301Z [q2 main] 2026-03-20T17:05:13.846Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.8525508Z [q2 main] 2026-03-20T17:05:13.847Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.8526281Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.8526890Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.8527651Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.8528347Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.8528716Z }
2026-03-20T17:05:13.8529474Z [q2 main] 2026-03-20T17:05:13.847Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.8531140Z [q2 main] 2026-03-20T17:05:13.847Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.8533052Z [q2 main] 2026-03-20T17:05:13.847Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.8534622Z [q2 main] 2026-03-20T17:05:13.848Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.8536060Z [q2 main] 2026-03-20T17:05:13.848Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.8537065Z [q2 main] 2026-03-20T17:05:13.848Z [info] Posting message to worker {
2026-03-20T17:05:13.8537679Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.8538204Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.8538764Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.8539175Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.8539523Z }
2026-03-20T17:05:13.8539671Z
2026-03-20T17:05:13.8540646Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t2) populates bench-results-body with T2 rows
2026-03-20T17:05:13.8542588Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.848Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.8543316Z
2026-03-20T17:05:13.9144604Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t2) populates bench-results-body with T2 rows
2026-03-20T17:05:13.9146610Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.853Z [info] runBenchmarks called { suiteFilter: �[32m't2'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:13.9151097Z [q2 main] 2026-03-20T17:05:13.853Z [debug] runBenchmarks: starting T2 structured code corpus suite
2026-03-20T17:05:13.9155729Z [q2 main] 2026-03-20T17:05:13.912Z [info] runBenchmarks completed {
2026-03-20T17:05:13.9156447Z suiteFilter: �[32m't2'�[39m,
2026-03-20T17:05:13.9156886Z total: �[33m5�[39m,
2026-03-20T17:05:13.9157264Z passCount: �[33m4�[39m,
2026-03-20T17:05:13.9157673Z failCount: �[33m0�[39m,
2026-03-20T17:05:13.9158429Z elapsedMs: �[33m59�[39m
2026-03-20T17:05:13.9158740Z }
2026-03-20T17:05:13.9158874Z
2026-03-20T17:05:13.9334464Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t3) populates bench-results-body with T3 rows
2026-03-20T17:05:13.9336058Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.930Z [debug] initModelPicker called
2026-03-20T17:05:13.9337389Z [q2 main] 2026-03-20T17:05:13.930Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:13.9338522Z [q2 main] 2026-03-20T17:05:13.931Z [debug] initSettingsPanel called {
2026-03-20T17:05:13.9339698Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.9340145Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:13.9340636Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:13.9341063Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.9341366Z }
2026-03-20T17:05:13.9342254Z [q2 main] 2026-03-20T17:05:13.931Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:13.9343688Z [q2 main] 2026-03-20T17:05:13.932Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.9345214Z [q2 main] 2026-03-20T17:05:13.932Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:13.9346739Z [q2 main] 2026-03-20T17:05:13.932Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:13.9348147Z [q2 main] 2026-03-20T17:05:13.932Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:13.9349174Z [q2 main] 2026-03-20T17:05:13.932Z [info] Posting message to worker {
2026-03-20T17:05:13.9349780Z type: �[32m'load'�[39m,
2026-03-20T17:05:13.9350315Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:13.9350858Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:13.9351264Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:13.9351623Z }
2026-03-20T17:05:13.9351769Z
2026-03-20T17:05:13.9369992Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t3) populates bench-results-body with T3 rows
2026-03-20T17:05:13.9371699Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.933Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:13.9372680Z
2026-03-20T17:05:14.0228992Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t3) populates bench-results-body with T3 rows
2026-03-20T17:05:14.0232814Z �[22m�[39m[q2 main] 2026-03-20T17:05:13.938Z [info] runBenchmarks called { suiteFilter: �[32m't3'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:14.0234445Z [q2 main] 2026-03-20T17:05:13.938Z [debug] runBenchmarks: starting T3 Matryoshka/embedding models suite
2026-03-20T17:05:14.0235436Z [q2 main] 2026-03-20T17:05:14.019Z [info] runBenchmarks completed {
2026-03-20T17:05:14.0236158Z suiteFilter: �[32m't3'�[39m,
2026-03-20T17:05:14.0236573Z total: �[33m8�[39m,
2026-03-20T17:05:14.0236960Z passCount: �[33m7�[39m,
2026-03-20T17:05:14.0237348Z failCount: �[33m0�[39m,
2026-03-20T17:05:14.0237752Z elapsedMs: �[33m81�[39m
2026-03-20T17:05:14.0238069Z }
2026-03-20T17:05:14.0238231Z
2026-03-20T17:05:14.0439150Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t4) populates bench-results-body with T4 rows
2026-03-20T17:05:14.0445482Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.041Z [debug] initModelPicker called
2026-03-20T17:05:14.0447066Z [q2 main] 2026-03-20T17:05:14.041Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:14.0448405Z [q2 main] 2026-03-20T17:05:14.041Z [debug] initSettingsPanel called {
2026-03-20T17:05:14.0453140Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.0455614Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:14.0457115Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:14.0459239Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.0459599Z }
2026-03-20T17:05:14.0460314Z [q2 main] 2026-03-20T17:05:14.042Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:14.0461670Z [q2 main] 2026-03-20T17:05:14.042Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.0463559Z [q2 main] 2026-03-20T17:05:14.042Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:14.0465415Z [q2 main] 2026-03-20T17:05:14.042Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.0466895Z [q2 main] 2026-03-20T17:05:14.043Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:14.0467926Z [q2 main] 2026-03-20T17:05:14.043Z [info] Posting message to worker {
2026-03-20T17:05:14.0468649Z type: �[32m'load'�[39m,
2026-03-20T17:05:14.0469180Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:14.0469745Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.0470182Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.0470569Z }
2026-03-20T17:05:14.0470718Z
2026-03-20T17:05:14.0491377Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t4) populates bench-results-body with T4 rows
2026-03-20T17:05:14.0494180Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.047Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:14.0495281Z
2026-03-20T17:05:14.2913906Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t4) populates bench-results-body with T4 rows
2026-03-20T17:05:14.2917586Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.052Z [info] runBenchmarks called { suiteFilter: �[32m't4'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:14.2923599Z [q2 main] 2026-03-20T17:05:14.052Z [debug] runBenchmarks: starting T4 standard local LLMs suite
2026-03-20T17:05:14.2929089Z [q2 main] 2026-03-20T17:05:14.290Z [info] runBenchmarks completed {
2026-03-20T17:05:14.2934641Z suiteFilter: �[32m't4'�[39m,
2026-03-20T17:05:14.2939717Z total: �[33m5�[39m,
2026-03-20T17:05:14.2944996Z passCount: �[33m4�[39m,
2026-03-20T17:05:14.2950103Z failCount: �[33m0�[39m,
2026-03-20T17:05:14.2955199Z elapsedMs: �[33m238�[39m
2026-03-20T17:05:14.2960613Z }
2026-03-20T17:05:14.2964320Z
2026-03-20T17:05:14.3039208Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t5) populates bench-results-body with T5 rows
2026-03-20T17:05:14.3058373Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.302Z [debug] initModelPicker called
2026-03-20T17:05:14.3059742Z [q2 main] 2026-03-20T17:05:14.302Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:14.3060868Z [q2 main] 2026-03-20T17:05:14.302Z [debug] initSettingsPanel called {
2026-03-20T17:05:14.3061585Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.3062327Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:14.3065508Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:14.3066424Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.3067041Z }
2026-03-20T17:05:14.3068134Z [q2 main] 2026-03-20T17:05:14.302Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:14.3069816Z [q2 main] 2026-03-20T17:05:14.302Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.3071801Z [q2 main] 2026-03-20T17:05:14.303Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:14.3074028Z [q2 main] 2026-03-20T17:05:14.303Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.3076383Z [q2 main] 2026-03-20T17:05:14.303Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:14.3078230Z [q2 main] 2026-03-20T17:05:14.303Z [info] Posting message to worker {
2026-03-20T17:05:14.3079315Z type: �[32m'load'�[39m,
2026-03-20T17:05:14.3080258Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:14.3081755Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.3082799Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.3083449Z }
2026-03-20T17:05:14.3085083Z
2026-03-20T17:05:14.3086450Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t5) populates bench-results-body with T5 rows
2026-03-20T17:05:14.3089028Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.303Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:14.3090475Z
2026-03-20T17:05:14.3746809Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks(t5) populates bench-results-body with T5 rows
2026-03-20T17:05:14.3749266Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.305Z [info] runBenchmarks called { suiteFilter: �[32m't5'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:14.3750973Z [q2 main] 2026-03-20T17:05:14.306Z [debug] runBenchmarks: starting T5 phylomemetic fingerprinting suite
2026-03-20T17:05:14.3753214Z [q2 main] 2026-03-20T17:05:14.373Z [info] runBenchmarks completed {
2026-03-20T17:05:14.3754205Z suiteFilter: �[32m't5'�[39m,
2026-03-20T17:05:14.3754877Z total: �[33m5�[39m,
2026-03-20T17:05:14.3755490Z passCount: �[33m3�[39m,
2026-03-20T17:05:14.3756161Z failCount: �[33m1�[39m,
2026-03-20T17:05:14.3756756Z elapsedMs: �[33m68�[39m
2026-03-20T17:05:14.3757293Z }
2026-03-20T17:05:14.3764809Z
2026-03-20T17:05:14.3956050Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks() runs all suites T0–T5 with no filter
2026-03-20T17:05:14.3956921Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.390Z [debug] initModelPicker called
2026-03-20T17:05:14.3957623Z [q2 main] 2026-03-20T17:05:14.390Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:14.3958216Z [q2 main] 2026-03-20T17:05:14.391Z [debug] initSettingsPanel called {
2026-03-20T17:05:14.3958593Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.3958873Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:14.3959186Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:14.3959460Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.3959669Z }
2026-03-20T17:05:14.3960101Z [q2 main] 2026-03-20T17:05:14.391Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:14.3960899Z [q2 main] 2026-03-20T17:05:14.392Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.3961813Z [q2 main] 2026-03-20T17:05:14.392Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:14.3963743Z [q2 main] 2026-03-20T17:05:14.392Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.3965200Z [q2 main] 2026-03-20T17:05:14.392Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:14.3966208Z [q2 main] 2026-03-20T17:05:14.392Z [info] Posting message to worker {
2026-03-20T17:05:14.3966818Z type: �[32m'load'�[39m,
2026-03-20T17:05:14.3967347Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:14.3967892Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.3968320Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.3968675Z }
2026-03-20T17:05:14.3968829Z
2026-03-20T17:05:14.3970194Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks() runs all suites T0–T5 with no filter
2026-03-20T17:05:14.3972148Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.393Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:14.3973286Z
2026-03-20T17:05:14.7953378Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks() runs all suites T0–T5 with no filter
2026-03-20T17:05:14.7970084Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.394Z [info] runBenchmarks called { suiteFilter: �[32m'all'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:14.7972130Z [q2 main] 2026-03-20T17:05:14.394Z [debug] runBenchmarks: starting T0 algebraic invariants suite
2026-03-20T17:05:14.7973515Z [q2 main] 2026-03-20T17:05:14.395Z [debug] runBenchmarks: starting T1 null baselines suite
2026-03-20T17:05:14.7975380Z [q2 main] 2026-03-20T17:05:14.472Z [debug] runBenchmarks: starting T2 structured code corpus suite
2026-03-20T17:05:14.7976822Z [q2 main] 2026-03-20T17:05:14.527Z [debug] runBenchmarks: starting T3 Matryoshka/embedding models suite
2026-03-20T17:05:14.7978666Z [q2 main] 2026-03-20T17:05:14.581Z [debug] runBenchmarks: starting T4 standard local LLMs suite
2026-03-20T17:05:14.7980114Z [q2 main] 2026-03-20T17:05:14.754Z [debug] runBenchmarks: starting T5 phylomemetic fingerprinting suite
2026-03-20T17:05:14.7981339Z [q2 main] 2026-03-20T17:05:14.793Z [info] runBenchmarks completed {
2026-03-20T17:05:14.7982501Z suiteFilter: �[32m'all'�[39m,
2026-03-20T17:05:14.7983341Z total: �[33m25�[39m,
2026-03-20T17:05:14.7984119Z passCount: �[33m23�[39m,
2026-03-20T17:05:14.7984855Z failCount: �[33m1�[39m,
2026-03-20T17:05:14.7985527Z elapsedMs: �[33m399�[39m
2026-03-20T17:05:14.7986146Z }
2026-03-20T17:05:14.7986621Z
2026-03-20T17:05:14.8082245Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks config row shows configured benchmark model IDs
2026-03-20T17:05:14.8089370Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.806Z [debug] initModelPicker called
2026-03-20T17:05:14.8090667Z [q2 main] 2026-03-20T17:05:14.806Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:14.8091751Z [q2 main] 2026-03-20T17:05:14.806Z [debug] initSettingsPanel called {
2026-03-20T17:05:14.8092705Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.8099996Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:14.8100621Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:14.8101134Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.8101508Z }
2026-03-20T17:05:14.8102495Z [q2 main] 2026-03-20T17:05:14.807Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:14.8103976Z [q2 main] 2026-03-20T17:05:14.807Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.8105722Z [q2 main] 2026-03-20T17:05:14.807Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:14.8107454Z [q2 main] 2026-03-20T17:05:14.807Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:14.8108912Z [q2 main] 2026-03-20T17:05:14.807Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:14.8109932Z [q2 main] 2026-03-20T17:05:14.807Z [info] Posting message to worker {
2026-03-20T17:05:14.8110587Z type: �[32m'load'�[39m,
2026-03-20T17:05:14.8111138Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:14.8111690Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:14.8112296Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:14.8112655Z }
2026-03-20T17:05:14.8112807Z
2026-03-20T17:05:14.8113802Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks config row shows configured benchmark model IDs
2026-03-20T17:05:14.8115501Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.807Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:14.8116231Z
2026-03-20T17:05:14.8829116Z �[32m✓�[39m test/t4.test.ts �[2m(�[22m�[2m19 tests�[22m�[2m)�[22m�[33m 374�[2mms�[22m�[39m
2026-03-20T17:05:15.0386285Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks config row shows configured benchmark model IDs
2026-03-20T17:05:15.0388736Z �[22m�[39m[q2 main] 2026-03-20T17:05:14.809Z [info] runBenchmarks called { suiteFilter: �[32m't4'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:15.0389807Z [q2 main] 2026-03-20T17:05:14.809Z [debug] runBenchmarks: starting T4 standard local LLMs suite
2026-03-20T17:05:15.0390556Z [q2 main] 2026-03-20T17:05:15.037Z [info] runBenchmarks completed {
2026-03-20T17:05:15.0391557Z suiteFilter: �[32m't4'�[39m,
2026-03-20T17:05:15.0394509Z total: �[33m5�[39m,
2026-03-20T17:05:15.0395369Z passCount: �[33m4�[39m,
2026-03-20T17:05:15.0396166Z failCount: �[33m0�[39m,
2026-03-20T17:05:15.0396682Z elapsedMs: �[33m228�[39m
2026-03-20T17:05:15.0397062Z }
2026-03-20T17:05:15.0397226Z
2026-03-20T17:05:15.0514879Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks all-pass produces status "Completed: N/N passed"
2026-03-20T17:05:15.0516952Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.048Z [debug] initModelPicker called
2026-03-20T17:05:15.0518712Z [q2 main] 2026-03-20T17:05:15.048Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:15.0520256Z [q2 main] 2026-03-20T17:05:15.049Z [debug] initSettingsPanel called {
2026-03-20T17:05:15.0521349Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.0522537Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:15.0524065Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:15.0525025Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.0525632Z }
2026-03-20T17:05:15.0526634Z [q2 main] 2026-03-20T17:05:15.049Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:15.0528445Z [q2 main] 2026-03-20T17:05:15.049Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.0531616Z [q2 main] 2026-03-20T17:05:15.049Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:15.0539926Z [q2 main] 2026-03-20T17:05:15.049Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.0541440Z [q2 main] 2026-03-20T17:05:15.050Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:15.0542698Z [q2 main] 2026-03-20T17:05:15.050Z [info] Posting message to worker {
2026-03-20T17:05:15.0543345Z type: �[32m'load'�[39m,
2026-03-20T17:05:15.0543859Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:15.0544426Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.0544854Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.0545214Z }
2026-03-20T17:05:15.0545369Z
2026-03-20T17:05:15.0546373Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks all-pass produces status "Completed: N/N passed"
2026-03-20T17:05:15.0548146Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.050Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:15.0548892Z
2026-03-20T17:05:15.0549935Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mrunBenchmarks all-pass produces status "Completed: N/N passed"
2026-03-20T17:05:15.0552087Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.051Z [info] runBenchmarks called { suiteFilter: �[32m't0'�[39m, isBenchmarkRunning: �[33mfalse�[39m }
2026-03-20T17:05:15.0559269Z [q2 main] 2026-03-20T17:05:15.052Z [debug] runBenchmarks: starting T0 algebraic invariants suite
2026-03-20T17:05:15.0560085Z [q2 main] 2026-03-20T17:05:15.053Z [info] runBenchmarks completed {
2026-03-20T17:05:15.0560711Z suiteFilter: �[32m't0'�[39m,
2026-03-20T17:05:15.0561095Z total: �[33m3�[39m,
2026-03-20T17:05:15.0562032Z passCount: �[33m3�[39m,
2026-03-20T17:05:15.0562409Z failCount: �[33m0�[39m,
2026-03-20T17:05:15.0562765Z elapsedMs: �[33m2�[39m
2026-03-20T17:05:15.0563056Z }
2026-03-20T17:05:15.0563187Z
2026-03-20T17:05:15.0848003Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mbench-model settings are persisted and restored
2026-03-20T17:05:15.0852670Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.081Z [debug] initModelPicker called
2026-03-20T17:05:15.0856881Z [q2 main] 2026-03-20T17:05:15.081Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:15.0860260Z [q2 main] 2026-03-20T17:05:15.081Z [debug] initSettingsPanel called {
2026-03-20T17:05:15.0867453Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.0867942Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:15.0868475Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:15.0868939Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.0869282Z }
2026-03-20T17:05:15.0871518Z [q2 main] 2026-03-20T17:05:15.083Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:15.0874347Z [q2 main] 2026-03-20T17:05:15.083Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.0877196Z [q2 main] 2026-03-20T17:05:15.083Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:15.0878806Z [q2 main] 2026-03-20T17:05:15.083Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.0880103Z [q2 main] 2026-03-20T17:05:15.083Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:15.0880990Z [q2 main] 2026-03-20T17:05:15.084Z [info] Posting message to worker {
2026-03-20T17:05:15.0881538Z type: �[32m'load'�[39m,
2026-03-20T17:05:15.0882255Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:15.0882791Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.0883164Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.0883492Z }
2026-03-20T17:05:15.0883632Z
2026-03-20T17:05:15.0884441Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mbench-model settings are persisted and restored
2026-03-20T17:05:15.0885890Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.084Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:15.0886532Z
2026-03-20T17:05:15.0915639Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mbench-model settings are persisted and restored
2026-03-20T17:05:15.0918102Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.089Z [info] Setting changed: benchModelT2 { model: �[32m'custom-org/my-code-model'�[39m }
2026-03-20T17:05:15.0942990Z [q2 main] 2026-03-20T17:05:15.090Z [info] Setting changed: benchModelT3 { model: �[32m'custom-org/my-embed-model'�[39m }
2026-03-20T17:05:15.0944684Z [q2 main] 2026-03-20T17:05:15.090Z [info] Setting changed: benchModelT4 { model: �[32m'custom-org/my-llm-model'�[39m }
2026-03-20T17:05:15.0945613Z
2026-03-20T17:05:15.1056257Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mclearing bench-model-t4 falls back to DEFAULT_SETTINGS value
2026-03-20T17:05:15.1057793Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.102Z [debug] initModelPicker called
2026-03-20T17:05:15.1059084Z [q2 main] 2026-03-20T17:05:15.102Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:15.1059725Z [q2 main] 2026-03-20T17:05:15.103Z [debug] initSettingsPanel called {
2026-03-20T17:05:15.1060140Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1060430Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:15.1060743Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:15.1061010Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1061219Z }
2026-03-20T17:05:15.1061636Z [q2 main] 2026-03-20T17:05:15.103Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:15.1063037Z [q2 main] 2026-03-20T17:05:15.103Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1063953Z [q2 main] 2026-03-20T17:05:15.104Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:15.1064799Z [q2 main] 2026-03-20T17:05:15.104Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1065629Z [q2 main] 2026-03-20T17:05:15.104Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:15.1066343Z [q2 main] 2026-03-20T17:05:15.104Z [info] Posting message to worker {
2026-03-20T17:05:15.1066697Z type: �[32m'load'�[39m,
2026-03-20T17:05:15.1067011Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:15.1067321Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1067566Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1067766Z }
2026-03-20T17:05:15.1067865Z
2026-03-20T17:05:15.1068403Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mclearing bench-model-t4 falls back to DEFAULT_SETTINGS value
2026-03-20T17:05:15.1069312Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.104Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:15.1069959Z
2026-03-20T17:05:15.1095535Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mclearing bench-model-t4 falls back to DEFAULT_SETTINGS value
2026-03-20T17:05:15.1097443Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.107Z [info] Setting changed: benchModelT4 { model: �[32m'custom-org/my-llm-model'�[39m }
2026-03-20T17:05:15.1099119Z [q2 main] 2026-03-20T17:05:15.107Z [info] Setting changed: benchModelT4 { model: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1099950Z
2026-03-20T17:05:15.1219049Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mdefaultChatModel setting is persisted and restored
2026-03-20T17:05:15.1221624Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.119Z [debug] initModelPicker called
2026-03-20T17:05:15.1223181Z [q2 main] 2026-03-20T17:05:15.119Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:15.1224261Z [q2 main] 2026-03-20T17:05:15.120Z [debug] initSettingsPanel called {
2026-03-20T17:05:15.1224914Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1225395Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:15.1225957Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:15.1226440Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1226798Z }
2026-03-20T17:05:15.1227543Z [q2 main] 2026-03-20T17:05:15.120Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:15.1228993Z [q2 main] 2026-03-20T17:05:15.120Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1230736Z [q2 main] 2026-03-20T17:05:15.121Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:15.1232521Z [q2 main] 2026-03-20T17:05:15.121Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1234073Z [q2 main] 2026-03-20T17:05:15.121Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:15.1235110Z [q2 main] 2026-03-20T17:05:15.121Z [info] Posting message to worker {
2026-03-20T17:05:15.1235744Z type: �[32m'load'�[39m,
2026-03-20T17:05:15.1236253Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:15.1236801Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1237200Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1237556Z }
2026-03-20T17:05:15.1237710Z
2026-03-20T17:05:15.1238635Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mdefaultChatModel setting is persisted and restored
2026-03-20T17:05:15.1240526Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.121Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:15.1265279Z
2026-03-20T17:05:15.1266700Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mdefaultChatModel setting is persisted and restored
2026-03-20T17:05:15.1268735Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.123Z [info] Setting changed: defaultChatModel { model: �[32m'custom-org/my-chat-model'�[39m }
2026-03-20T17:05:15.1270123Z
2026-03-20T17:05:15.1421552Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mDEFAULT_SETTINGS defaultChatModel is Qwen3.5-0.8B-ONNX
2026-03-20T17:05:15.1423185Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.139Z [debug] initModelPicker called
2026-03-20T17:05:15.1424447Z [q2 main] 2026-03-20T17:05:15.139Z [debug] refreshModelList called { query: �[32m''�[39m, autoSelectFirst: �[33mtrue�[39m }
2026-03-20T17:05:15.1425516Z [q2 main] 2026-03-20T17:05:15.140Z [debug] initSettingsPanel called {
2026-03-20T17:05:15.1426164Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1426642Z filterLibrary: �[32m'transformers.js'�[39m,
2026-03-20T17:05:15.1427164Z q2KeyDisplayMode: �[32m'q2'�[39m,
2026-03-20T17:05:15.1427629Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1427972Z }
2026-03-20T17:05:15.1442687Z [q2 main] 2026-03-20T17:05:15.140Z [info] initLocalFileStore called { opfsAvailable: �[33mfalse�[39m }
2026-03-20T17:05:15.1444294Z [q2 main] 2026-03-20T17:05:15.140Z [info] Auto-loading default chat model { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1446030Z [q2 main] 2026-03-20T17:05:15.140Z [info] startWithModel called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m, dtype: �[32m'q4'�[39m }
2026-03-20T17:05:15.1447647Z [q2 main] 2026-03-20T17:05:15.141Z [info] initWorker called { modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m }
2026-03-20T17:05:15.1449150Z [q2 main] 2026-03-20T17:05:15.141Z [debug] Creating worker { workerUrl: �[32m'http://localhost:3000/src/worker.ts'�[39m }
2026-03-20T17:05:15.1450192Z [q2 main] 2026-03-20T17:05:15.141Z [info] Posting message to worker {
2026-03-20T17:05:15.1450820Z type: �[32m'load'�[39m,
2026-03-20T17:05:15.1451359Z modelId: �[32m'onnx-community/Qwen3.5-0.8B-ONNX'�[39m,
2026-03-20T17:05:15.1452101Z dtype: �[32m'q4'�[39m,
2026-03-20T17:05:15.1452529Z hasApiToken: �[33mfalse�[39m
2026-03-20T17:05:15.1452880Z }
2026-03-20T17:05:15.1453021Z
2026-03-20T17:05:15.1453999Z �[90mstdout�[2m | test/app.test.ts�[2m > �[22m�[2mapp.ts helpers and DOM integration�[2m > �[22m�[2mDEFAULT_SETTINGS defaultChatModel is Qwen3.5-0.8B-ONNX
2026-03-20T17:05:15.1455634Z �[22m�[39m[q2 main] 2026-03-20T17:05:15.141Z [info] fetchHFModels returned { query: �[32m''�[39m, count: �[33m2�[39m }
2026-03-20T17:05:15.1456366Z
2026-03-20T17:05:15.1780790Z �[32m✓�[39m test/app.test.ts �[2m(�[22m�[2m43 tests�[22m�[2m)�[22m�[33m 3737�[2mms�[22m�[39m
2026-03-20T17:05:15.1785754Z �[33m�[2m✓�[22m�[39m splitThinkBlocks handles various tag cases �[33m 1420�[2mms�[22m�[39m
2026-03-20T17:05:15.1786960Z �[33m�[2m✓�[22m�[39m runBenchmarks() runs all suites T0–T5 with no filter �[33m 421�[2mms�[22m�[39m
2026-03-20T17:05:15.2515123Z �[32m✓�[39m test/t5.test.ts �[2m(�[22m�[2m14 tests�[22m�[2m)�[22m�[32m 99�[2mms�[22m�[39m
2026-03-20T17:05:16.2591103Z �[32m✓�[39m test/t2.test.ts �[2m(�[22m�[2m16 tests�[22m�[2m)�[22m�[32m 160�[2mms�[22m�[39m
2026-03-20T17:05:16.5968470Z �[32m✓�[39m test/q2.test.ts �[2m(�[22m�[2m15 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
2026-03-20T17:05:16.7120756Z �[32m✓�[39m test/t1.test.ts �[2m(�[22m�[2m13 tests�[22m�[2m)�[22m�[32m 258�[2mms�[22m�[39m
2026-03-20T17:05:17.5308414Z �[32m✓�[39m test/app.browser.integration.test.ts �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 31�[2mms�[22m�[39m
2026-03-20T17:05:17.8214315Z �[32m✓�[39m test/opfs.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 14�[2mms�[22m�[39m
2026-03-20T17:05:17.9300029Z �[32m✓�[39m test/no-node-npm.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
2026-03-20T17:05:18.4726659Z �[32m✓�[39m test/worker.browser.test.ts �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 3�[2mms�[22m�[39m
2026-03-20T17:05:18.5347485Z
2026-03-20T17:05:18.5348701Z �[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Failed Tests 1 �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯�[39m
2026-03-20T17:05:18.5349531Z
2026-03-20T17:05:18.5355487Z �[41m�[1m FAIL �[22m�[49m test/worker.e2e.test.ts�[2m > �[22mWorker E2E: transformers.js happy-path integration�[2m > �[22mload: falls back through backends when a higher-priority backend fails
2026-03-20T17:05:18.5368870Z �[31m�[1mAssertionError�[22m: expected 1 to be greater than 1�[39m
2026-03-20T17:05:18.5377151Z �[36m �[2m❯�[22m test/worker.e2e.test.ts:�[2m502:23�[22m�[39m
2026-03-20T17:05:18.5523154Z �[90m500|�[39m
2026-03-20T17:05:18.5524216Z �[90m501|�[39m �[90m// The worker must have tried multiple backends.�[39m
2026-03-20T17:05:18.5525373Z �[90m502|�[39m �[34mexpect�[39m(callCount)�[33m.�[39m�[34mtoBeGreaterThan�[39m(�[34m1�[39m)�[33m;�[39m
2026-03-20T17:05:18.5527884Z �[90m |�[39m �[31m^�[39m
2026-03-20T17:05:18.5528446Z �[90m503|�[39m
2026-03-20T17:05:18.5529123Z �[90m504|�[39m �[90m// The final status must be 'ready' (wasm succeeded).�[39m
2026-03-20T17:05:18.5529686Z
2026-03-20T17:05:18.5530001Z �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯�[22m�[39m
2026-03-20T17:05:18.5530360Z
2026-03-20T17:05:18.5533619Z
2026-03-20T17:05:18.5539957Z �[2m Test Files �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m12 passed�[39m�[22m�[90m (13)�[39m
2026-03-20T17:05:18.5542148Z �[2m Tests �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m250 passed�[39m�[22m�[90m (251)�[39m
2026-03-20T17:05:18.5542940Z �[2m Start at �[22m 17:05:09
2026-03-20T17:05:18.5544960Z �[2m Duration �[22m 8.78s�[2m (transform 4.22s, setup 0ms, import 2.34s, tests 6.60s, environment 12.78s)�[22m
2026-03-20T17:05:18.5547103Z
2026-03-20T17:05:18.5561699Z
2026-03-20T17:05:18.5592720Z ##[error]AssertionError: expected 1 to be greater than 1
❯ test/worker.e2e.test.ts:502:23

2026-03-20T17:05:18.6029764Z error: script "test" exited with code 1
2026-03-20T17:05:18.6041560Z ##[error]Process completed with exit code 1.

…reflight check

Co-authored-by: devlux76 <86517969+devlux76@users.noreply.github.com>

Copilot AI commented Mar 20, 2026

Copy link
Copy Markdown
Contributor Author

@copilot E2E testing is failing now...

2026-03-20T17:05:03.0527838Z ##[group]Run bun run test...

Fixed in b0851c0.

The probeAvailableDevices() preflight correctly filters webgpu and webnn in jsdom (no navigator.gpu/navigator.ml), leaving only wasm — so callCount === 1 and the fallback assertion failed.

Fix: extracted a withAllNavigatorApiStubs() helper that stubs both navigator.gpu and navigator.ml for the duration of a test callback (with finally cleanup). Applied it to the two tests that exercise multi-backend paths ('falls back through backends' and 'never called with webgl'), so the preflight passes all three valid backends through in the test environment.

Copilot AI requested a review from devlux76 March 20, 2026 17:12

@devlux76 devlux76 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Looks good to me!

@devlux76
devlux76 marked this pull request as ready for review March 20, 2026 17:37
Copilot AI review requested due to automatic review settings March 20, 2026 17:37

Copilot AI 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.

Pull request overview

This PR updates the worker’s backend selection to match transformers.js@next (v4.x) by removing the invalid webgl device, and adds a synchronous preflight capability check to skip unreachable backends before any model download begins.

Changes:

  • Removed webgl from BackendName / DEVICE_PRIORITY and updated iOS fallback to wasm only.
  • Added probeAvailableDevices() and wired it into loadModel() to filter backends via navigator.gpu / navigator.ml presence checks.
  • Updated/added E2E tests and documentation to reflect the new backend list and preflight behavior.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/worker.ts Removes webgl backend and adds preflight backend filtering before attempting pipeline() loads.
test/worker.e2e.test.ts Adds navigator API stubbing helper for jsdom, updates backend assertions, and adds a webgl regression test.
docs/CODE_DOCUMENTATION.md Documents updated DEVICE_PRIORITY and the new probeAvailableDevices() preflight step.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread test/worker.e2e.test.ts Outdated
Comment thread test/worker.e2e.test.ts
devlux76 and others added 2 commits March 20, 2026 12:09
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@devlux76
devlux76 merged commit 20aec33 into main Mar 20, 2026
2 checks passed
@devlux76
devlux76 deleted the copilot/update-transformers-docs-review branch March 20, 2026 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants