Skip to content

v0.2.2

Latest

Choose a tag to compare

@francisrafal francisrafal released this 21 Jul 15:33
Immutable release. Only release title and notes can be modified.

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 (aarch64 and arm64) 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 nvidia runtime before starting the bundled Linux runtime. If the toolkit is installed but Docker is not configured, ParseHawk now provides the exact nvidia-ctk configuration, 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 404 or 500 responses. PR #142 by @francisrafal.
  • 🐛 Return 503 Service Unavailable with the stable persistence_busy code 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 422 error 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.2 has 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 lists nvidia.

  • ⬆️ If the NVIDIA Container Toolkit is installed but Docker does not list the nvidia runtime, configure and verify it with:

    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    docker info --format '{{json .Runtimes}}'
  • ⬆️ Clients may retry 503 responses carrying the persistence_busy code 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