Summary
ParseHawk 0.2.2 adds Linux ARM64 support to the bundled NVIDIA vLLM runtime, including experimental support for NVIDIA DGX Spark systems.
NVIDIA DGX Spark support is experimental. We do not currently have access to DGX Spark hardware, so this release has not yet been verified on a physical DGX Spark system.
Linux startup now verifies that Docker actually exposes the nvidia runtime, rather than only checking whether the NVIDIA Container Toolkit is installed. When registration is missing, ParseHawk shows the official nvidia-ctk configuration and Docker restart commands needed to fix it.
This release also makes Docker builds more reliable and efficient by keeping nested host dependencies, caches, local data, logs, and environment files out of build contexts.
SQLite persistence is now isolated across concurrent API requests and worker activity. Each database phase owns a short transaction, model calls no longer hold database transactions open, and exhausted lock contention produces a retryable 503 response instead of transient missing-job or server errors.
Features
- ✨ Support the bundled NVIDIA vLLM runtime on Linux ARM64 (
aarch64andarm64) with the same runtime configuration used on Linux x86_64. This adds an experimental local deployment path for systems such as NVIDIA DGX Spark. DGX Spark support has not yet been verified on physical DGX Spark hardware. PR #140 by @francisrafal.
Fixes
- 🐛 Verify that Docker has registered the
nvidiaruntime before starting the bundled Linux runtime. If the toolkit is installed but Docker is not configured, ParseHawk now provides the exactnvidia-ctkconfiguration, daemon restart, and verification commands. PR #140 by @francisrafal. - 🐛 Make Docker build-context exclusions recursive so host-installed
node_modules, Python bytecode, caches, metadata, local example data, logs, coverage output, browser artifacts, and environment files do not enter image builds. This prevents host dependencies from overwriting container-installed dependencies and reduced the audited context from 38.8 MB to 4.3 MB. PR #139 by @francisrafal. - 🐛 Isolate concurrent SQLite work with separate connections and application-owned transactions. Concurrent API requests and worker database phases no longer share mutable transaction state that could cause transient job
404or500responses. PR #142 by @francisrafal. - 🐛 Return
503 Service Unavailablewith the stablepersistence_busycode when SQLite contention exceeds the internal wait, allowing clients to retry safely with backoff. PR #142 by @francisrafal. - 🐛 Retry short post-claim worker persistence operations without rerunning model inference. An already computed result remains in memory while temporary SQLite contention clears. PR #142 by @francisrafal.
- 🐛 Preserve job history by preventing deletion of files or extractors that are still referenced by jobs. File deletion also remains recoverable when local storage cleanup fails. PR #142 by @francisrafal.
- 🐛 Publish the domain-level
422error contract for file deletion in the generated OpenAPI specification. PR #142 by @francisrafal.
Docs
- 📝 Document Linux ARM64 support, the experimental DGX Spark status, and the NVIDIA Docker runtime registration workflow across the installation guide, bundled-runtime guide, installation chooser, README, and runtime matrix. PR #140 by @francisrafal.
- 📝 Document SQLite's supported single-host topology, retryable contention behavior, short transaction boundaries, and parent-resource deletion rules. PR #142 by @francisrafal.
- 📝 Restore the README contributor showcase. PR #126 by @francisrafal.
Upgrade Notes
-
⬆️ NVIDIA DGX Spark support is experimental. We do not currently have access to DGX Spark hardware, so
0.2.2has not yet been verified on a physical DGX Spark system. -
⬆️ Existing Linux installations do not need configuration changes if
docker info --format '{{json .Runtimes}}'already listsnvidia. -
⬆️ If the NVIDIA Container Toolkit is installed but Docker does not list the
nvidiaruntime, configure and verify it with:sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker docker info --format '{{json .Runtimes}}' -
⬆️ Clients may retry
503responses carrying thepersistence_busycode with backoff. -
⬆️ Files and extractors referenced by a job can no longer be deleted implicitly. Delete the job first, then delete its parent file or extractor.
Internal
- ✅ Replace connection-shared SQLite repositories with synchronous SQLAlchemy Core engines and application-owned Units of Work. Worker file preparation and model calls remain outside database transactions. PR #142 by @francisrafal.
- ✅ Add regression coverage for transaction isolation, lock contention, concurrent API workflows, atomic queue claiming, recoverable file deletion, and worker finalization without duplicate inference. PR #142 by @francisrafal.
- ✅ Add regression coverage for Linux x86_64 and ARM64 platform detection, NVIDIA Docker runtime diagnostics, and recursive Docker build-context exclusions. PR #139 and PR #140 by @francisrafal.
Full Changelog: v0.2.1...v0.2.2