From e5a2380e05d78783b9fa03c484c1503ea9aedb26 Mon Sep 17 00:00:00 2001 From: Opanin Akuffo <46673050+opaninakuffo@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:03:43 +0000 Subject: [PATCH 1/3] chore: qvac-sdk v0.8.1 release (#1285) --- packages/sdk/CHANGELOG.md | 95 +++++ packages/sdk/NOTICE | 337 ++++++++++++++++++ packages/sdk/changelog/0.8.1/CHANGELOG.md | 30 ++ packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md | 94 +++++ packages/sdk/changelog/0.8.1/api.md | 39 ++ packages/sdk/changelog/0.8.1/breaking.md | 33 ++ packages/sdk/package.json | 2 +- 7 files changed, 629 insertions(+), 1 deletion(-) create mode 100644 packages/sdk/changelog/0.8.1/CHANGELOG.md create mode 100644 packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md create mode 100644 packages/sdk/changelog/0.8.1/api.md create mode 100644 packages/sdk/changelog/0.8.1/breaking.md diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index c97e2a3371..4cb555a259 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,100 @@ # Changelog +## [0.8.1] + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 + +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. + +--- + +## πŸ’₯ Breaking Changes + +### Heartbeat Replaces Ping + +The `ping()` function has been replaced by `heartbeat()`, which extends health checking to support delegated (remote) providers. Local usage is a straightforward rename, while the new delegated mode lets consumers verify provider connectivity before initiating model loads or inference. + +**Before:** + +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +**After:** + +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); + +// Delegated heartbeat β€” verify a remote provider is reachable +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +--- + +## πŸ”Œ New APIs + +### RPC Health Probe for Delegation + +Delegated model loading now supports an optional `healthCheckTimeout` parameter. When set, the SDK performs an RPC-level health probe before attempting the load, and stale connections are cleaned up centrally rather than per-caller. + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +### Delegated Cancellation + +Cancel operations now route automatically to remote providers when the target model is delegated. Inference cancellation requires no API change β€” the SDK detects delegation from the model registry. Remote download cancellation accepts an optional `delegate` field. + +```typescript +// Cancel delegated inference (routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + +## 🐞 Bug Fixes + +- **IndicTrans model type unblocked** β€” The NMT translation plugin no longer incorrectly blocks IndicTrans models from loading, restoring multi-engine translation support. +- **Accurate download progress** β€” Registry downloads now report progress from the network layer instead of disk I/O polling, giving real-time progress that reflects actual bytes received. +- **RPC progress throttling** β€” Progress frames sent over RPC are now throttled to prevent call stack overflow when large models produce rapid progress updates. +- **VLM addon classification** β€” The model registry has been regenerated to correctly classify VLM (Vision-Language Model) addons, fixing misrouted model loads. +- **Security alerts resolved** β€” Code scanning alerts across SDK pod packages have been addressed. + +--- + +## πŸ“˜ Documentation + +- All SDK READMEs now reference the `@qvac` npm namespace instead of the legacy `@tetherto` scope. + +--- + +## πŸ§ͺ Testing + +- New E2E tests cover parallel download scenarios and cancel isolation to prevent race conditions between concurrent operations. +- The mobile E2E test executor has been refactored to an asset-based architecture for more reliable cross-platform testing. + ## [0.8.0] πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.0 diff --git a/packages/sdk/NOTICE b/packages/sdk/NOTICE index 30dad37570..b070ce276c 100644 --- a/packages/sdk/NOTICE +++ b/packages/sdk/NOTICE @@ -206,10 +206,14 @@ Third-Party Model Licenses AfriqueGemma-4B-GGUF https://huggingface.co/mradermacher/AfriqueGemma-4B-GGUF + decoder_joint_int8 + https://huggingface.co/nasedkinpv/parakeet-tdt-0.6b-v3-onnx-int8 decoder_joint-model https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx diar_streaming_sortformer_4spk-v2-onnx https://huggingface.co/cgus/diar_streaming_sortformer_4spk-v2-onnx + encoder_int8 + https://huggingface.co/nasedkinpv/parakeet-tdt-0.6b-v3-onnx-int8 encoder-model https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx ggml-opus-en-de @@ -228,6 +232,8 @@ Third-Party Model Licenses https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx preprocessor https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx + sortformer_int8 + https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2 --- gemma (Gemma Terms of Use) --- @@ -356,3 +362,334 @@ the underlying models. Source URLs for original weights are recorded in each model's metadata entry within the registry. + +========================================================================= +JavaScript Dependencies +========================================================================= + +--- apache-2.0 (Apache License 2.0) --- + + @hyperswarm/secret-stream@6.9.1 + https://github.com/holepunchto/hyperswarm-secret-stream + @qvac/decoder-audio@0.3.3 + @qvac/dl-base@0.2.0 + @qvac/dl-filesystem@0.2.0 + @qvac/dl-hyperdrive@0.2.0 + @qvac/embed-llamacpp@0.12.0 + https://github.com/tetherto/qvac-lib-infer-llamacpp-embed + @qvac/error@0.1.1 + @qvac/infer-base@0.1.1 + @qvac/infer-base@0.2.2 + @qvac/langdetect-text@0.1.1 + @qvac/llm-llamacpp@0.12.2 + https://github.com/tetherto/qvac-lib-infer-llamacpp-llm + @qvac/logging@0.1.0 + @qvac/ocr-onnx@0.2.0 + https://github.com/tetherto/qvac-lib-inference-addon-onnx-ocr-fasttext + @qvac/rag@0.4.2 + @qvac/registry-client@0.2.1 + @qvac/registry-schema@0.1.1 + @qvac/response@0.1.2 + @qvac/transcription-parakeet@0.2.0 + https://github.com/tetherto/qvac + @qvac/transcription-whispercpp@0.5.0 + https://github.com/tetherto/qvac + @qvac/translation-nmtcpp@0.6.1 + https://github.com/tetherto/qvac-lib-infer-nmtcpp + @qvac/tts-onnx@0.6.1 + adaptive-timeout@1.0.1 + https://github.com/holepunchto/adaptive-timeout + b4a@1.7.5 + https://github.com/holepunchto/b4a + bare-abort-controller@1.0.0 + https://github.com/holepunchto/bare-abort-controller + bare-addon-resolve@1.10.0 + https://github.com/holepunchto/bare-addon-resolve + bare-ansi-escapes@2.2.3 + https://github.com/holepunchto/bare-ansi-escapes + bare-assert@1.2.0 + https://github.com/holepunchto/bare-assert + bare-buffer@3.4.4 + https://github.com/holepunchto/bare-buffer + bare-bundle@1.10.0 + https://github.com/holepunchto/bare-bundle + bare-channel@5.2.3 + https://github.com/holepunchto/bare-channel + bare-crypto@1.13.0 + https://github.com/holepunchto/bare-crypto + bare-dns@2.1.4 + https://github.com/holepunchto/bare-dns + bare-env@3.0.0 + https://github.com/holepunchto/bare-env + bare-events@2.4.2 + https://github.com/holepunchto/bare-events + bare-events@2.8.2 + https://github.com/holepunchto/bare-events + bare-fetch@2.5.1 + https://github.com/holepunchto/bare-fetch + bare-ffmpeg@1.1.0 + https://github.com/holepunchto/bare-ffmpeg + bare-form-data@1.1.6 + https://github.com/holepunchto/bare-form-data + bare-fs@4.5.4 + https://github.com/holepunchto/bare-fs + bare-hrtime@2.1.1 + https://github.com/holepunchto/bare-hrtime + bare-http-parser@1.0.1 + https://github.com/holepunchto/bare-http-parser + bare-http1@4.2.3 + https://github.com/holepunchto/bare-http1 + bare-https@2.1.2 + https://github.com/holepunchto/bare-https + bare-inspect@3.1.4 + https://github.com/holepunchto/bare-inspect + bare-lief@0.1.4 + https://github.com/holepunchto/bare-lief + bare-link@2.1.10 + https://github.com/holepunchto/bare-link + bare-module@6.1.3 + https://github.com/holepunchto/bare-module + bare-module-lexer@1.4.7 + https://github.com/holepunchto/bare-module-lexer + bare-module-resolve@1.12.1 + https://github.com/holepunchto/bare-module-resolve + bare-module-traverse@2.0.1 + https://github.com/holepunchto/bare-module-traverse + bare-net@2.2.0 + https://github.com/holepunchto/bare-net + bare-node-stream@1.0.0 + https://github.com/holepunchto/bare-node + bare-node-worker-threads@1.0.0 + https://github.com/holepunchto/bare-node + bare-os@3.6.2 + https://github.com/holepunchto/bare-os + bare-path@3.0.0 + https://github.com/holepunchto/bare-path + bare-pipe@4.1.3 + https://github.com/holepunchto/bare-pipe + bare-process@4.2.2 + https://github.com/holepunchto/bare-process + bare-rpc@1.1.0 + https://github.com/holepunchto/bare-rpc + bare-runtime@1.27.0 + https://github.com/holepunchto/bare-runtime + bare-runtime-darwin-arm64@1.27.0 + https://github.com/holepunchto/bare-runtime + bare-semver@1.0.2 + https://github.com/holepunchto/bare-semver + bare-signals@4.2.0 + https://github.com/holepunchto/bare-signals + bare-stream@2.8.0 + https://github.com/holepunchto/bare-stream + bare-structured-clone@1.5.2 + https://github.com/holepunchto/bare-structured-clone + bare-subprocess@5.2.2 + https://github.com/holepunchto/bare-subprocess + bare-tcp@2.2.7 + https://github.com/holepunchto/bare-tcp + bare-thread@1.1.6 + https://github.com/holepunchto/bare-thread + bare-tls@2.1.7 + https://github.com/holepunchto/bare-tls + bare-tty@5.0.3 + https://github.com/holepunchto/bare-tty + bare-type@1.1.0 + https://github.com/holepunchto/bare-type + bare-url@2.3.2 + https://github.com/holepunchto/bare-url + bare-worker@4.1.6 + https://github.com/holepunchto/bare-worker + bare-zlib@1.3.1 + https://github.com/holepunchto/bare-zlib + blind-relay@1.4.0 + https://github.com/holepunchto/blind-relay + compact-encoding@2.19.0 + https://github.com/compact-encoding/compact-encoding + device-file@2.3.1 + https://github.com/holepunchto/device-file + events-universal@1.0.1 + https://github.com/holepunchto/events-universal + fd-lock@2.1.1 + https://github.com/holepunchto/fd-lock + fs-native-extensions@1.4.5 + https://github.com/holepunchto/fs-native-extensions + hyperblobs@2.9.0 + https://github.com/holepunchto/hyperblobs + hypercore-errors@1.5.0 + https://github.com/holepunchto/hypercore-errors + hypercore-id-encoding@1.3.0 + https://github.com/holepunchto/hypercore-id-encoding + hypercore-storage@2.4.1 + hyperdb@4.22.3 + https://github.com/holepunchto/hyperdb + hyperdispatch@1.4.4 + https://github.com/holepunchto/hyperdispatch + hyperdrive@13.3.0 + https://github.com/holepunchto/hyperdrive + hyperschema@1.20.1 + https://github.com/holepunchto/hyperschema + index-encoder@3.4.0 + https://github.com/holepunchto/index-encoder + mirror-drive@1.12.0 + https://github.com/holepunchto/mirror-drive + noise-handshake@4.2.0 + https://github.com/holepunchto/noise-handshake + paparam@1.10.0 + https://github.com/holepunchto/paparam + quickbit-native@2.4.8 + https://github.com/holepunchto/quickbit-native + rache@1.0.0 + https://github.com/holepunchto/rache + refcounter@1.0.0 + https://github.com/holepunchto/refcounter + require-addon@1.2.0 + https://github.com/holepunchto/require-addon + require-asset@1.2.1 + https://github.com/holepunchto/require-asset + resource-on-exit@1.0.0 + https://github.com/holepunchto/bare-teardown + rocksdb-native@3.13.0 + https://github.com/holepunchto/rocksdb-native + scope-lock@1.2.4 + https://github.com/holepunchto/scope-lock + simdle-native@1.3.9 + https://github.com/holepunchto/simdle-native + sub-encoder@2.1.3 + https://github.com/holepunchto/sub-encoder + text-decoder@1.2.7 + https://github.com/holepunchto/text-decoder + udx-native@1.19.2 + https://github.com/holepunchto/udx-native + unslab@1.3.0 + https://github.com/holepunchto/unslab + which-runtime@1.3.2 + https://github.com/holepunchto/which-runtime + +--- isc (ISC License) --- + + bits-to-bytes@1.3.0 + https://github.com/holepunchto/bits-to-bytes + compact-encoding-bitfield@1.0.0 + https://github.com/compact-encoding/compact-encoding-bitfield + compact-encoding-net@1.2.0 + https://github.com/compact-encoding/compact-encoding-net + nanoassert@2.0.0 + https://github.com/emilbayes/nanoassert + noise-curve-ed@2.1.0 + https://github.com/chm-diederichs/noise-curve-ed + quickbit-universal@2.2.0 + https://github.com/holepunchto/quickbit-universal + simdle-universal@1.1.2 + https://github.com/holepunchto/simdle-universal + +--- mit (MIT License) --- + + big-sparse-array@1.0.3 + https://github.com/mafintosh/big-sparse-array + binary-stream-equals@1.0.0 + https://github.com/mafintosh/binary-stream-equals + bogon@1.2.0 + https://github.com/mafintosh/bogon + codecs@3.1.0 + https://github.com/mafintosh/codecs + corestore@7.8.0 + https://github.com/holepunchto/corestore + debounceify@1.1.0 + https://github.com/mafintosh/debounceify + dht-rpc@6.26.2 + https://github.com/mafintosh/dht-rpc + events@3.3.0 + https://github.com/Gozala/events + fast-fifo@1.3.2 + https://github.com/mafintosh/fast-fifo + fast-safe-stringify@2.1.1 + https://github.com/davidmarkclements/fast-safe-stringify + flat-tree@1.13.0 + https://github.com/mafintosh/flat-tree + generate-object-property@2.0.0 + https://github.com/mafintosh/generate-object-property + generate-string@1.0.1 + https://github.com/mafintosh/generate-string + hyperbee@2.27.3 + https://github.com/holepunchto/hyperbee + hypercore@11.26.0 + https://github.com/holepunchto/hypercore + hypercore-crypto@3.6.1 + https://github.com/mafintosh/hypercore-crypto + hyperdht@6.29.0 + https://github.com/holepunchto/hyperdht + hyperswarm@4.16.0 + https://github.com/holepunchto/hyperswarm + is-options@1.0.2 + https://github.com/mafintosh/is-options + is-property@1.0.2 + https://github.com/mikolalysenko/is-property + kademlia-routing-table@1.0.6 + https://github.com/mafintosh/kademlia-routing-table + llm-splitter@0.2.0 + https://github.com/nearform/llm-splitter + mutexify@1.4.0 + https://github.com/mafintosh/mutexify + nat-sampler@1.0.1 + https://github.com/mafintosh/nat-sampler + protocol-buffers-encodings@1.2.0 + https://github.com/mafintosh/protocol-buffers-encodings + protomux@3.10.1 + https://github.com/mafintosh/protomux + queue-tick@1.0.1 + https://github.com/mafintosh/queue-tick + random-array-iterator@1.0.0 + https://github.com/mafintosh/random-array-iterator + ready-resource@1.2.0 + https://github.com/holepunchto/ready-resource + record-cache@1.2.0 + https://github.com/mafintosh/record-cache + resolve-reject-promise@1.1.0 + https://github.com/mafintosh/resolve-reject-promise + safety-catch@1.0.2 + https://github.com/mafintosh/safety-catch + same-data@1.0.0 + https://github.com/mafintosh/same-data + shuffled-priority-queue@2.1.0 + https://github.com/mafintosh/shuffled-priority-queue + signal-promise@1.0.3 + https://github.com/mafintosh/signal-promise + signed-varint@2.0.1 + https://github.com/dominictarr/signed-varint + sodium-native@5.0.10 + https://github.com/holepunchto/sodium-native + sodium-secretstream@1.2.0 + https://github.com/mafintosh/sodium-secretstream + sodium-universal@5.0.1 + https://github.com/holepunchto/sodium-universal + speedometer@1.1.0 + https://github.com/mafintosh/speedometer + streamx@2.23.0 + https://github.com/mafintosh/streamx + tar-stream@3.1.7 + https://github.com/mafintosh/tar-stream + teex@1.0.1 + https://github.com/mafintosh/teex + test-tmp@1.4.0 + https://github.com/mafintosh/test-tmp + time-ordered-set@2.0.1 + https://github.com/mafintosh/time-ordered-set + timeout-refresh@2.0.1 + https://github.com/mafintosh/timeout-refresh + tinyld@1.3.4 + https://github.com/komodojp/tinyld + unix-path-resolve@1.0.2 + https://github.com/mafintosh/unix-path-resolve + unordered-set@2.0.1 + https://github.com/mafintosh/unordered-set + uuid-random@1.3.2 + https://github.com/jchook/uuid-random + varint@5.0.0 + https://github.com/chrisdickinson/varint + xache@1.2.1 + https://github.com/mafintosh/xache + z32@1.1.0 + https://github.com/mafintosh/z32 + zod@4.3.6 + https://github.com/colinhacks/zod + diff --git a/packages/sdk/changelog/0.8.1/CHANGELOG.md b/packages/sdk/changelog/0.8.1/CHANGELOG.md new file mode 100644 index 0000000000..662fab11a0 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog v0.8.1 + +Release Date: 2026-04-01 + +## ✨ Features + +- Add heartbeat for proactive provider status checks. (see PR [#1160](https://github.com/tetherto/qvac/pull/1160)) - See [breaking changes](./breaking.md) + +## πŸ”Œ API + +- Add RPC health probe and centralize stale-connection cleanup for delegation. (see PR [#1149](https://github.com/tetherto/qvac/pull/1149)) - See [API changes](./api.md) +- Add delegated cancellation for inference and remote downloads. (see PR [#1153](https://github.com/tetherto/qvac/pull/1153)) - See [API changes](./api.md) + +## 🐞 Fixes + +- Remove indictrans model type block in nmtcpp translat…. (see PR [#1112](https://github.com/tetherto/qvac/pull/1112)) +- Use network-layer progress for registry downloads instead of disk I/O. (see PR [#1118](https://github.com/tetherto/qvac/pull/1118)) +- Throttle RPC progress frames to prevent call stack overflow. (see PR [#1134](https://github.com/tetherto/qvac/pull/1134)) +- Regenerate model registry to fix VLM addon classification. (see PR [#1167](https://github.com/tetherto/qvac/pull/1167)) +- Resolve code scanning security alerts for SDK pod packages. (see PR [#1207](https://github.com/tetherto/qvac/pull/1207)) + +## πŸ“˜ Docs + +- Replace @tetherto npm references with @qvac namespace in READMEs. (see PR [#1247](https://github.com/tetherto/qvac/pull/1247)) + +## πŸ§ͺ Tests + +- Add parallel download and cancel isolation E2E tests. (see PR [#1059](https://github.com/tetherto/qvac/pull/1059)) +- Refactor model executor for asset-based mobile e2e. (see PR [#1126](https://github.com/tetherto/qvac/pull/1126)) + diff --git a/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md b/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md new file mode 100644 index 0000000000..203c5bb474 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md @@ -0,0 +1,94 @@ +# QVAC SDK v0.8.1 Release Notes + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 + +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. + +--- + +## πŸ’₯ Breaking Changes + +### Heartbeat Replaces Ping + +The `ping()` function has been replaced by `heartbeat()`, which extends health checking to support delegated (remote) providers. Local usage is a straightforward rename, while the new delegated mode lets consumers verify provider connectivity before initiating model loads or inference. + +**Before:** + +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +**After:** + +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); + +// Delegated heartbeat β€” verify a remote provider is reachable +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +--- + +## πŸ”Œ New APIs + +### RPC Health Probe for Delegation + +Delegated model loading now supports an optional `healthCheckTimeout` parameter. When set, the SDK performs an RPC-level health probe before attempting the load, and stale connections are cleaned up centrally rather than per-caller. + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +### Delegated Cancellation + +Cancel operations now route automatically to remote providers when the target model is delegated. Inference cancellation requires no API change β€” the SDK detects delegation from the model registry. Remote download cancellation accepts an optional `delegate` field. + +```typescript +// Cancel delegated inference (routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + +## 🐞 Bug Fixes + +- **IndicTrans model type unblocked** β€” The NMT translation plugin no longer incorrectly blocks IndicTrans models from loading, restoring multi-engine translation support. +- **Accurate download progress** β€” Registry downloads now report progress from the network layer instead of disk I/O polling, giving real-time progress that reflects actual bytes received. +- **RPC progress throttling** β€” Progress frames sent over RPC are now throttled to prevent call stack overflow when large models produce rapid progress updates. +- **VLM addon classification** β€” The model registry has been regenerated to correctly classify VLM (Vision-Language Model) addons, fixing misrouted model loads. +- **Security alerts resolved** β€” Code scanning alerts across SDK pod packages have been addressed. + +--- + +## πŸ“˜ Documentation + +- All SDK READMEs now reference the `@qvac` npm namespace instead of the legacy `@tetherto` scope. + +--- + +## πŸ§ͺ Testing + +- New E2E tests cover parallel download scenarios and cancel isolation to prevent race conditions between concurrent operations. +- The mobile E2E test executor has been refactored to an asset-based architecture for more reliable cross-platform testing. diff --git a/packages/sdk/changelog/0.8.1/api.md b/packages/sdk/changelog/0.8.1/api.md new file mode 100644 index 0000000000..c83761e402 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/api.md @@ -0,0 +1,39 @@ +# πŸ”Œ API Changes v0.8.1 + +## Add RPC health probe and centralize stale-connection cleanup for delegation + +PR: [#1149](https://github.com/tetherto/qvac/pull/1149) + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +--- + +## Add delegated cancellation for inference and remote downloads + +PR: [#1153](https://github.com/tetherto/qvac/pull/1153) + +```typescript +// Cancel delegated inference (no API change β€” routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download (new: optional delegate field) +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + diff --git a/packages/sdk/changelog/0.8.1/breaking.md b/packages/sdk/changelog/0.8.1/breaking.md new file mode 100644 index 0000000000..65908a70a4 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/breaking.md @@ -0,0 +1,33 @@ +# πŸ’₯ Breaking Changes v0.8.1 + +## Add heartbeat for proactive provider status checks + +PR: [#1160](https://github.com/tetherto/qvac/pull/1160) + +**BEFORE:** +** +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +** + +**AFTER:** +** +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); +// Delegated heartbeat (new) +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +## πŸ§ͺ How was it tested? +- Delegated heartbeat tested end-to-end: consumer pings provider before `loadModel`, provider responds with pong, model loads via delegation, second ping confirms connection still alive, clean shutdown + +--- + diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 469cc3dcbd..a7f1b9e5a1 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@qvac/sdk", - "version": "0.8.0", + "version": "0.8.1", "license": "Apache-2.0", "repository": { "type": "git", From 86cf064a33b05064917752eb96917a9c3805a813 Mon Sep 17 00:00:00 2001 From: Opanin Akuffo <46673050+opaninakuffo@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:11:47 +0000 Subject: [PATCH 2/3] fix: freeze sdk deps installs in publish and sdk-pod checks (#1288) --- .github/workflows/pr-checks-sdk-pod.yml | 8 +++++++- .github/workflows/publish-sdk.yml | 6 +----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr-checks-sdk-pod.yml b/.github/workflows/pr-checks-sdk-pod.yml index b719969ea0..3b47788d84 100644 --- a/.github/workflows/pr-checks-sdk-pod.yml +++ b/.github/workflows/pr-checks-sdk-pod.yml @@ -253,7 +253,13 @@ jobs: fi - name: Install dependencies - run: ${{ matrix.pkg_manager }} install + shell: bash + run: | + if [ "${{ matrix.package }}" = "sdk" ]; then + bun install --frozen-lockfile + else + ${{ matrix.pkg_manager }} install + fi - name: Install Bare runtime if: matrix.package == 'rag' diff --git a/.github/workflows/publish-sdk.yml b/.github/workflows/publish-sdk.yml index c92dd3742d..9c469cd932 100644 --- a/.github/workflows/publish-sdk.yml +++ b/.github/workflows/publish-sdk.yml @@ -119,10 +119,6 @@ jobs: run: | echo "Configuring scoped registry for @tetherto and @qvac packages..." set -eu - - # Remove stale lock file to force fresh registry resolution - rm -f bun.lock - echo "Writing .npmrc for dual registry install…" cat > .npmrc < Date: Wed, 1 Apr 2026 15:11:15 +0000 Subject: [PATCH 3/3] chore: update changelog --- packages/sdk/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 4cb555a259..8f5c606db3 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -4,7 +4,7 @@ πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 -This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. ---