Package portable Linux runtime and verify Google CPU search

This commit is contained in:
karl committed 2026-10-13 00:43:20 +02:00
1 parent e3558a0104
commit 0b56ab553c
22 files changed
+1585 -16

No files matched your search

+45
View File
@@ -97,6 +97,11 @@ These are the current script and CLI interfaces, not evidence of an executed
Linux release. On a native Linux build host with Vulkan development libraries
and `glslc`, run from the repository root:
On Ubuntu 24.04, the native worker build prerequisites are `build-essential`,
`cmake`, `git`, `pkg-config`, `libvulkan-dev`, `glslc`, and `spirv-headers`.
The last package supplies the SPIR-V CMake configuration required by the pinned
Vulkan backend. These build tools do not enable GPU execution in tests.
```sh
python3 tools/embeddinggemma2/build_runtime.py --backend auto --jobs 2
python3 tools/embeddinggemma2/download.py
@@ -114,6 +119,46 @@ This normal worker detects usable acceleration and falls back to CPU. Internal
CPU-only model tests may use `--backend cpu` and `SEARCHI_FORCE_CPU=1`; those
test artifacts are not a separate distribution edition.
### Linux headless archive validation
The Linux x86-64 normal worker layout includes baseline and optimized CPU
modules, an optional Vulkan module and adjacent core libraries. The builder
audits ELF dependencies and origin-relative lookup before writing a hashed
runtime inventory. ARM and other distribution/ABI combinations remain separate
release gates.
After building the normal worker, release CLI and pinned media helpers, prepare
an unsigned headless development candidate:
```sh
python3 tools/package_linux.py
python3 tools/embeddinggemma2/linux_smoke.py --worker .searchi/runtime/auto/searchi-gemma-worker --models .searchi/models/embeddinggemma2 --output .searchi/packages/linux-worker-smoke.json
python3 tools/embeddinggemma2/linux_smoke.py --worker .searchi/runtime/auto/searchi-gemma-worker --models .searchi/models/embeddinggemma2 --output .searchi/packages/linux-baseline-smoke.json --baseline
```
The packager accepts explicit `--executable`, `--runtime`, `--media` and
`--llama-license` paths when builds use separate target/cache directories.
It packages only approved runtime files, pinned decoders and notices, with
normalized archive metadata, executable modes and per-file checksums. It
excludes model caches and user indexes/settings. The smoke checks copy the
runtime outside its build tree and run genuine Google code inference on CPU;
the baseline check omits optimized CPU modules from its temporary extraction.
They do not exercise GPU providers or certify older physical CPUs, installers
or desktop behavior. Archive extraction and installed CLI search must also
be verified before a release gate is closed.
The optional Linux missing-loader check requires explicit root execution and
util-linux mount namespaces/chroot. It never escalates privileges and verifies
a private namespace before creating an isolated filesystem:
```sh
sudo python3 tools/embeddinggemma2/linux_loader_smoke.py --worker .searchi/runtime/auto/searchi-gemma-worker --models .searchi/models/embeddinggemma2 --output .searchi/packages/linux-missing-loader.json
```
It runs automatic device selection with no forced-CPU override, but contains no
Vulkan loader, driver configuration or GPU devices, so only CPU inference can
execute. This is distinct from testing an actual GPU or recovering device loss.
`searchi setup --model-dir PATH` is an alternative verified model-provisioning
command. It provisions model assets, not the native worker. Package the worker
separately and pass its path to headless embedding/search. Each short-lived CLI
+74
View File
@@ -0,0 +1,74 @@
# Incremental semantic indexing and recovery
Status: implementation design and acceptance gates; not implemented. Current
semantic rebuilds regenerate vectors and the ANN graph. Interrupted staging is
discarded by the next rebuild. The previous ready generation remains searchable.
## Reuse requires complete sources
Document vectors depend on the extracted text, the bounded filename title,
model, prompt and token-window policy. The current passage content hash alone
is insufficient: a basename rename changes Google's document prompt. Passage
IDs are recreated by core reconciliation, so reuse must remap current IDs,
paths and page/line locations rather than retain old citations.
Media reuse requires a verified hash of the actual file bytes and matching
encoder/preprocessing/sampling policy. Size and modification time alone are
insufficient. Existing media chunks are written progressively; their presence
does not prove that a file completed. A crash can leave an incomplete group.
Add a versioned completion manifest per source group: generation, task key,
source type, encoder/policy key, source hash, title hash where applicable,
expected chunk count and completion state. Associate chunks with their group.
Only completed groups can supply reusable vectors. Historical generations
without completion evidence remain searchable but require one rebuild before
their vectors qualify for reuse.
Start with matching complete-generation policies. Component encoder keys can
later let unchanged document vectors survive an audio-sampling policy change.
Do not silently omit image, audio or video work to make a rebuild cheaper.
## Durable work and atomic publication
Persist bounded pending/running/done/failed tasks in SQLite. Tasks retain their
source identity, attempts and a bounded error. Obtain the existing OS build
lock before starting or resuming a compatible staging generation; only then
can interrupted running tasks be reset. Keep inference outside write
transactions. Commit source completion, verified chunk membership and task
state atomically. Incomplete groups must be discarded or resumed without
qualifying as completed reuse sources.
Discover work in bounded keyset batches. Before publication, reconcile staging
against current indexed sources: remove deleted sources, invalidate changed
identities and enqueue additions. Verify exact document window slices and
remap citations. For media, confirm the file is unchanged after extraction and
inference. Retain the 100,000-chunk budget and explicit per-file media failures.
Build the ANN graph only from eligible completed groups. Publish under a
transaction that checks the reconciled corpus revision; a concurrent source
change must trigger reconciliation/retry. Storage or activation failure must
preserve both the previous active generation and the same reader's policy.
## Acceptance gates
- [ ] Migrate existing databases while preserving active-generation search.
- [ ] Rebuild mixed text/code/image/audio/video fixtures unchanged with zero
document/media inference calls and identical vectors and source locations.
- [ ] Change one document and one media file; re-encode only affected groups.
- [ ] Re-encode text after a basename rename; reuse a folder-only move with
current citations. Verify media bytes before reusing a renamed media file.
- [ ] Regenerate affected media when sampling policy changes; retain eligible
text groups when component encoder-key reuse is implemented.
- [ ] Terminate after a committed batch and resume without repeating completed
inference. Never reuse or publish an unfinished source group.
- [ ] Mutate or delete a queued/running source and prove stale vectors cannot
activate or become readable.
- [ ] Inject storage/activation failure, preserve existing results and resume.
- [ ] Use genuine Google CPU inference for these integration checks. Storage
fixtures alone do not establish retrieval quality or reuse equivalence.
- [ ] Measure preparation, the first foreground query and warm p95 while
resumed indexing runs; record actual inference/reuse counts and resource use.
Foreground query priority and bounded persistent workers remain part of the
first-use requirement. Faster unchanged rebuilds alone do not prove responsive
search while indexing.
+16 -2
View File
@@ -30,6 +30,10 @@ Status: implementation started; no production release yet. Windows VM tests use
- [ ] Versioned embeddings, ANN index, exact-match priority and hybrid fusion.
- [ ] English/German relevance corpus and measured top-10 recall.
- [ ] Atomic model/index replacement and resumable persistent work queues.
- [ ] Completed-source manifests with title/model/window policy keys and
citation remapping; reuse only verified complete document/media groups.
- [ ] Durable generation tasks, crash resume and final corpus reconciliation;
see [incremental semantic design](INCREMENTAL-SEMANTIC.md).
## 3. Desktop
- [ ] Tauri shell, accessible keyboard search, progressive results and previews (shell built; UI interaction verification pending).
@@ -62,6 +66,11 @@ Status: implementation started; no production release yet. Windows VM tests use
- [x] Normal Windows x64 archive includes baseline/optimized CPU dispatch,
OS AVX-state guards, shared app-local MSVC CRT and hashed DLL inventory;
real optimized and baseline-only package inference passes in the CPU VM.
- [x] Normal native Linux x86-64 CPU/Vulkan worker build, hashed 19-library
staging and genuine optimized/baseline-only CPU code-query inference outside
the build tree; desktop, ABI/older-hardware and GPU validation remain open.
- [x] Actual Linux automatic CPU fallback with Vulkan loader, ICDs/drivers and
GPU devices absent in a verified private namespace; no GPU provider loaded.
- [ ] Verify CPU dispatch on older physical CPUs and a clean Windows machine;
dependency inspection and baseline execution on a modern VM are insufficient.
- [ ] Actual missing/incompatible GPU drivers, precision, device loss and memory
@@ -92,8 +101,13 @@ Status: implementation started; no production release yet. Windows VM tests use
- [ ] Test migrations, interrupted work, invalid documents, inaccessible/offline roots and cloud placeholders.
- [ ] Automated native build matrix and documented supported cross-compilation paths.
- [x] Native Linux headless workspace tests: 93 passed, 11 explicitly ignored.
- [ ] Execute Linux native Google worker and desktop/macOS platform tests;
create Windows/macOS/Linux installers.
- [x] Native Linux Google text/code/media reference parity and service
lifecycle/rebuild recovery: seven genuine CPU integration tests passed.
- [x] Unsigned Linux x86-64 headless archive: verify extracted checksums/modes,
mixed document/code/audio indexing, decoder discovery, semantic retrieval,
line citations and strict filters outside the source/build directories.
- [ ] Execute native Linux video/codec coverage and Linux desktop/macOS
platform tests; create Windows/macOS/Linux installers.
- [ ] Signing/notarization configuration, upgrade/rollback validation, release instructions.
## 6. Local agents and optional answers
+9
View File
@@ -44,6 +44,15 @@ external OpenMP runtime. Production CMake supports cpu, auto, metal, vulkan,
and cuda; CPU builds force GPU flags off. Runtime/provider parity and packaging
on other operating systems remain independent release checks.
Linux x86-64 normal builds also use shared CPU dispatch: 14 CPU modules,
four core libraries and a dynamically loaded Vulkan module. Core SONAME files
are copied beside the worker with origin-relative lookup; the builder verifies
ELF dependencies and the stager verifies the explicit hashed inventory.
Vulkan's system loader is a dependency of the optional GPU module rather than
the worker or CPU/core libraries. Native optimized and baseline-only CPU
code-query smoke checks pass. System ABI coverage, reference parity, GPU
operation and desktop packaging are separate release gates.
The normal build/staging default is `auto`, shipping GPU support together with
CPU fallback: Metal on macOS, Vulkan on Windows/Linux. Runtime detection chooses
the usable device; users do not need hardware-specific builds. Release builders
+50 -1
View File
@@ -5,7 +5,56 @@ inference, FFmpeg decoding and WebView tests use CPU only. UI launches set
`WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS='--disable-gpu --disable-accelerated-video-decode'`
and `SEARCHI_FORCE_CPU=1`.
## Native Linux media checkpoint (2026-10-13)
## Native Linux runtime and headless checkpoint (2026-10-13)
The normal native Linux x86-64 worker now builds with Vulkan plus shared CPU
dispatch. All 19 packaged libraries (14 CPU modules, Vulkan and four core
libraries) pass dependency/RUNPATH checks and hashed resource staging. Actual
copies outside the build tree pass genuine Google code-query inference on
`libggml-cpu-zen4.so` and on a baseline-only `libggml-cpu-x64.so` extraction.
Both produce finite normalized 768-dimensional vectors and report CPU with no
Vulkan module loaded. See [dispatch evidence](evidence/linux-worker-cpu-dispatch.json)
and [baseline evidence](evidence/linux-worker-cpu-baseline.json). These establish
startup, origin-relative packaging and CPU inference, not broad retrieval
quality, text/media reference parity, older hardware or GPU behavior.
An actual loader-free chroot also passes with requested device `auto` and no
forced-CPU override. Its private mount namespace contains only the verified
runtime, declared C/C++ ABI libraries and a read-only pinned model; Vulkan
loaders, driver/ICD configuration and GPU devices are absent. It returns a
normalized Google vector on CPU and reports Vulkan not loaded. See
[missing-loader evidence](evidence/linux-worker-missing-loader.json). This proves
Linux missing-loader CPU fallback without GPU execution; actual device loss,
GPU precision and driver recovery remain open. The reusable check verifies
namespace separation before any mount changes; two guard regressions pass.
Native Linux builder tests pass 7/7; staging passes 25 with two Windows-only
skips; archive regressions pass 15/15. Packaging regressions use inert ELF
fixtures and controlled metadata, so actual extracted CLI deployment remains
a distinct gate. The Linux release CLI build passed (25m43s cold compilation).
Initial actual archive preflight detected its glibc `libmvec.so.1` dependency;
Ubuntu identifies that component as part of `libc6`. Adding that exact declared
ABI component preserves unknown-dependency rejection. Actual archive creation
now passes. The resulting unsigned headless archive is 148,157,038 bytes,
SHA-256 `1e5a07edd4d94b49d2550914163637eca84087c802df0bb59b68168b849544e5`.
All 29 listed files and permissions pass extraction verification into a path
containing spaces. Installed release CLI startup, mixed document/code/audio
indexing, automatic decoder discovery, real German semantic retrieval, code
line citations and strict extension filtering pass. See
[archive evidence](evidence/linux-headless-archive.json). This is an unpublished
development candidate, not an installer or clean-machine certification.
Five genuine Google integration tests pass on native Linux, serially with one
inference thread. Code task/debug/offset checks pass; text reference cosines
range from 0.99981764 to 0.99994252 and debug/normal parity is 1.00000001.
Image budgets 280/140/70 have reference cosines 0.99993253, 0.99976889 and
0.99914157; audio parity is 0.99979352. These meet the 0.999 reference threshold.
They establish runtime equivalence on this CPU host, not broad retrieval
quality or GPU parity. Two additional genuine Google service tests pass:
restart/stale-change/deletion behavior and failed rebuild policy preservation
with retry. Seven real-model tests passed in total. No GPU provider executed.
Exact model/worker hashes, test counts and reference similarities are retained
in [Google CPU parity evidence](evidence/linux-google-cpu-parity.json).
Pinned BtbN Linux x86-64 FFmpeg/FFprobe archive size and SHA-256 verification
passed under Ubuntu 24.04 WSL. Both native tools report the pinned version;
@@ -0,0 +1,28 @@
{
"platform": "Ubuntu 24.04 x86_64 under WSL in the Windows VM",
"cpu_only": true,
"inference_threads": 1,
"serial_test_workers": true,
"worker_sha256": "8e8b1046ca3387c078ff1f9d93eb05aba18d150b3c47d606bf1d6646b16bbd1f",
"backbone_sha256": "2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135",
"projector_sha256": "c4a8a52691ecef40618438928bdf9e68379b854e24166f292592353db0aab64f",
"passed_tests": {"code": 2, "text": 2, "media": 1, "service": 2},
"reference_cosine_threshold": 0.999,
"text_reference_cosines": {
"query": 0.99991829,
"query_bn": 0.99992166,
"query_ar": 0.99994252,
"document": 0.99981764,
"document_long": 0.99990818
},
"debug_normal_cosine": 1.00000001,
"media_reference_cosines": {
"screen_280": 0.99993253,
"photo_140": 0.99976889,
"frame_70": 0.99914157,
"speech": 0.99979352
},
"service_scope": ["restart and changed/deleted source suppression", "failed policy rebuild preserves live reader and retry"],
"scope": "Runtime equivalence to pinned DigUp references and small real source lifecycle fixtures; not broad retrieval quality or performance benchmarks",
"limitations": ["GPU untested", "older physical CPUs untested", "distribution ABI coverage untested", "native desktop untested"]
}
+39
View File
@@ -0,0 +1,39 @@
{
"platform": "linux-x86_64",
"cpu_only": true,
"archive_sha256": "1e5a07edd4d94b49d2550914163637eca84087c802df0bb59b68168b849544e5",
"archive_bytes": 148157038,
"verified_files": 29,
"extraction_path_contains_spaces": true,
"automatic_media_helper_discovery": "passed",
"embedding_report": {
"media_files": 1,
"media_failures": 0,
"failures": [],
"passages": 2,
"chunks": 3,
"generation": 1,
"model_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1:byte64k-overlap512-title512-v1:google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-largejpeg-scaled-v2:pcm16k30s-v1:image280-frame70-audio30s-overlap2-distributed240-scene120-v1"
},
"semantic_top_filename": "supplier.md",
"code_source": {
"kind": "line",
"number": 1
},
"strict_filter": "passed",
"command_elapsed_ms": {
"help": 1444.2557980000856,
"index": 897.0072200000914,
"embed": 12126.549685999977,
"semantic_search": 964.4444650000423,
"code_search": 1260.825207000039,
"strict_filter": 966.029466000009
},
"timing_scope": "single deployment smoke samples; not retrieval/performance benchmarks",
"limitations": [
"GPU untested",
"desktop untested",
"clean-machine/ABI coverage untested",
"broad retrieval quality untested"
]
}
@@ -0,0 +1,40 @@
{
"platform": "linux",
"cpu_only": true,
"baseline_only_extraction": true,
"worker_sha256": "8e8b1046ca3387c078ff1f9d93eb05aba18d150b3c47d606bf1d6646b16bbd1f",
"model_sha256": "2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135",
"files": [
"libggml-base.so.0",
"libggml-cpu-x64.so",
"libggml-vulkan.so",
"libggml.so.0",
"libllama.so.0",
"libmtmd.so.0",
"runtime-libraries.json",
"searchi-gemma-worker"
],
"hello": {
"code_query_supported": true,
"cpu_backend_module": "libggml-cpu-x64.so",
"device": "cpu",
"dimensions": 768,
"media_supported": true,
"model": "google/embeddinggemma-2",
"ready": true,
"runtime": "b11461-no-logits-v1",
"threads": 1,
"vulkan_module_loaded": false
},
"dimensions": 768,
"norm": 1.0000000026410276,
"startup_query_exit_ms": 1416.2597190002089,
"timing_scope": "single diagnostic smoke sample; not a performance benchmark",
"worker_dynamic_section": "\nDynamic section at offset 0x2f940 contains 35 entries:\n Tag Type Name/Value\n 0x0000000000000001 (NEEDED) Shared library: [libmtmd.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libllama.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libggml.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libggml-base.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]\n 0x0000000000000001 (NEEDED) Shared library: [libm.so.6]\n 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]\n 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]\n 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN]\n 0x000000000000000c (INIT) 0x5000\n 0x000000000000000d (FINI) 0x27908\n 0x0000000000000019 (INIT_ARRAY) 0x306c8\n 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)\n 0x000000000000001a (FINI_ARRAY) 0x306d0\n 0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)\n 0x000000006ffffef5 (GNU_HASH) 0x3b0\n 0x0000000000000005 (STRTAB) 0x14b0\n 0x0000000000000006 (SYMTAB) 0x4a8\n 0x000000000000000a (STRSZ) 5653 (bytes)\n 0x000000000000000b (SYMENT) 24 (bytes)\n 0x0000000000000015 (DEBUG) 0x0\n 0x0000000000000003 (PLTGOT) 0x30bb0\n 0x0000000000000002 (PLTRELSZ) 3072 (bytes)\n 0x0000000000000014 (PLTREL) RELA\n 0x0000000000000017 (JMPREL) 0x3598\n 0x0000000000000007 (RELA) 0x2da0\n 0x0000000000000008 (RELASZ) 2040 (bytes)\n 0x0000000000000009 (RELAENT) 24 (bytes)\n 0x000000000000001e (FLAGS) BIND_NOW\n 0x000000006ffffffb (FLAGS_1) Flags: NOW PIE\n 0x000000006ffffffe (VERNEED) 0x2c20\n 0x000000006fffffff (VERNEEDNUM) 4\n 0x000000006ffffff0 (VERSYM) 0x2ac6\n 0x000000006ffffff9 (RELACOUNT) 56\n 0x0000000000000000 (NULL) 0x0\n",
"limitations": [
"GPU untested",
"older physical CPUs untested",
"desktop and installer untested",
"system-loader absence not physically exercised"
]
}
@@ -0,0 +1,53 @@
{
"platform": "linux",
"cpu_only": true,
"baseline_only_extraction": false,
"worker_sha256": "8e8b1046ca3387c078ff1f9d93eb05aba18d150b3c47d606bf1d6646b16bbd1f",
"model_sha256": "2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135",
"files": [
"libggml-base.so.0",
"libggml-cpu-alderlake.so",
"libggml-cpu-cannonlake.so",
"libggml-cpu-cascadelake.so",
"libggml-cpu-cooperlake.so",
"libggml-cpu-haswell.so",
"libggml-cpu-icelake.so",
"libggml-cpu-ivybridge.so",
"libggml-cpu-piledriver.so",
"libggml-cpu-sandybridge.so",
"libggml-cpu-sapphirerapids.so",
"libggml-cpu-skylakex.so",
"libggml-cpu-sse42.so",
"libggml-cpu-x64.so",
"libggml-cpu-zen4.so",
"libggml-vulkan.so",
"libggml.so.0",
"libllama.so.0",
"libmtmd.so.0",
"runtime-libraries.json",
"searchi-gemma-worker"
],
"hello": {
"code_query_supported": true,
"cpu_backend_module": "libggml-cpu-zen4.so",
"device": "cpu",
"dimensions": 768,
"media_supported": true,
"model": "google/embeddinggemma-2",
"ready": true,
"runtime": "b11461-no-logits-v1",
"threads": 1,
"vulkan_module_loaded": false
},
"dimensions": 768,
"norm": 1.0000000005534304,
"startup_query_exit_ms": 2679.169430999991,
"timing_scope": "single diagnostic smoke sample; not a performance benchmark",
"worker_dynamic_section": "\nDynamic section at offset 0x2f940 contains 35 entries:\n Tag Type Name/Value\n 0x0000000000000001 (NEEDED) Shared library: [libmtmd.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libllama.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libggml.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libggml-base.so.0]\n 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]\n 0x0000000000000001 (NEEDED) Shared library: [libm.so.6]\n 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]\n 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]\n 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN]\n 0x000000000000000c (INIT) 0x5000\n 0x000000000000000d (FINI) 0x27908\n 0x0000000000000019 (INIT_ARRAY) 0x306c8\n 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)\n 0x000000000000001a (FINI_ARRAY) 0x306d0\n 0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)\n 0x000000006ffffef5 (GNU_HASH) 0x3b0\n 0x0000000000000005 (STRTAB) 0x14b0\n 0x0000000000000006 (SYMTAB) 0x4a8\n 0x000000000000000a (STRSZ) 5653 (bytes)\n 0x000000000000000b (SYMENT) 24 (bytes)\n 0x0000000000000015 (DEBUG) 0x0\n 0x0000000000000003 (PLTGOT) 0x30bb0\n 0x0000000000000002 (PLTRELSZ) 3072 (bytes)\n 0x0000000000000014 (PLTREL) RELA\n 0x0000000000000017 (JMPREL) 0x3598\n 0x0000000000000007 (RELA) 0x2da0\n 0x0000000000000008 (RELASZ) 2040 (bytes)\n 0x0000000000000009 (RELAENT) 24 (bytes)\n 0x000000000000001e (FLAGS) BIND_NOW\n 0x000000006ffffffb (FLAGS_1) Flags: NOW PIE\n 0x000000006ffffffe (VERNEED) 0x2c20\n 0x000000006fffffff (VERNEEDNUM) 4\n 0x000000006ffffff0 (VERSYM) 0x2ac6\n 0x000000006ffffff9 (RELACOUNT) 56\n 0x0000000000000000 (NULL) 0x0\n",
"limitations": [
"GPU untested",
"older physical CPUs untested",
"desktop and installer untested",
"system-loader absence not physically exercised"
]
}
@@ -0,0 +1,47 @@
{
"platform": "linux",
"device_requested": "auto",
"forced_cpu": false,
"gpu_execution": false,
"vulkan_loader_present": false,
"seal": {
"system_abi": [
"libc.so.6",
"libm.so.6",
"libdl.so.2",
"libpthread.so.0",
"librt.so.1",
"libstdc++.so.6",
"libgcc_s.so.1"
],
"proc_read_only": true,
"model_read_only": true,
"private_mount_namespace_verified": true,
"gpu_devices": false,
"icd_manifests": false,
"environment": {
"PATH": "/usr/bin:/bin",
"LANG": "C.UTF-8"
}
},
"worker_sha256": "8e8b1046ca3387c078ff1f9d93eb05aba18d150b3c47d606bf1d6646b16bbd1f",
"model_sha256": "2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135",
"hello": {
"code_query_supported": true,
"cpu_backend_module": "libggml-cpu-zen4.so",
"device": "cpu",
"dimensions": 768,
"media_supported": true,
"model": "google/embeddinggemma-2",
"ready": true,
"runtime": "b11461-no-logits-v1",
"threads": 1,
"vulkan_module_loaded": false
},
"dimensions": 768,
"norm": 1.0000000005534304,
"limitations": [
"Actual GPU and driver recovery untested",
"Distribution ABI compatibility untested"
]
}