|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## [0.13.4] |
| 4 | + |
| 5 | +📦 **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.13.4 |
| 6 | + |
| 7 | +A patch release that adds two developer-experience APIs — a single subscription |
| 8 | +for all server logs and friendlier input-validation errors — and hardens |
| 9 | +tool-call parsing for Qwen models used in agentic workflows. |
| 10 | + |
| 11 | +## New APIs |
| 12 | + |
| 13 | +### Subscribe to all server logs at once |
| 14 | + |
| 15 | +You can now capture every server-side log through one subscription instead of |
| 16 | +wiring up a `loggingStream()` per model or request. `subscribeServerLogs` |
| 17 | +delivers each log entry (level, namespace, message) to a single handler and |
| 18 | +returns an unsubscribe function. |
| 19 | + |
| 20 | +```typescript |
| 21 | +import { subscribeServerLogs } from "@qvac/sdk"; |
| 22 | + |
| 23 | +const unsubscribe = subscribeServerLogs((log) => { |
| 24 | + console.log(`[${log.level}] [${log.namespace}] ${log.message}`); |
| 25 | +}); |
| 26 | + |
| 27 | +// later |
| 28 | +unsubscribe(); |
| 29 | +``` |
| 30 | + |
| 31 | +### Field-level validation errors for user input |
| 32 | + |
| 33 | +Invalid request input now surfaces as a `RequestValidationFailedError` with a |
| 34 | +clear, field-level message pointing at the exact key and location that failed, |
| 35 | +instead of an opaque rejection. This makes it much faster to spot typos and |
| 36 | +unsupported options in calls like `loadModel`. |
| 37 | + |
| 38 | +```typescript |
| 39 | +import { loadModel, RequestValidationFailedError, LLAMA_3_2_1B_INST_Q4_0 } from "@qvac/sdk"; |
| 40 | + |
| 41 | +try { |
| 42 | + await loadModel({ modelSrc: LLAMA_3_2_1B_INST_Q4_0, modelConfig: { dtx_size: 4096 } }); |
| 43 | +} catch (err) { |
| 44 | + if (err instanceof RequestValidationFailedError) { |
| 45 | + console.error(err.message); |
| 46 | + // Invalid request: |
| 47 | + // ✖ Unrecognized key: "dtx_size" |
| 48 | + // → at modelConfig |
| 49 | + } |
| 50 | +} |
| 51 | +``` |
| 52 | + |
| 53 | +## Bug Fixes |
| 54 | + |
| 55 | +### Recover malformed Qwen tool-call frames |
| 56 | + |
| 57 | +Qwen3.5/3.6 can intermittently emit a malformed tool-call frame that fuses its |
| 58 | +XML and JSON tool templates, embedding the `function=<name>` token as a bare |
| 59 | +string key inside an otherwise JSON object. Previously the parser rejected that |
| 60 | +frame as invalid JSON, so no structured tool call was produced and callers saw |
| 61 | +the raw markup as assistant text. The parser now recognizes and repairs this |
| 62 | +specific shape, so the tool call is recovered and dispatched correctly. |
| 63 | + |
3 | 64 | ## [0.13.3] |
4 | 65 |
|
5 | 66 | 📦 **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.13.3 |
@@ -58,15 +119,15 @@ per-platform prebuilds at install time. Both packages remain available in |
58 | 119 |
|
59 | 120 | The bundled `@qvac/rag` dependency is updated to `^0.6.4`. |
60 | 121 |
|
61 | | -## [0.13.1] |
62 | | - |
63 | | -📦 **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.13.1 |
64 | | - |
65 | | -Dependency-maintenance patch. `@qvac/sdk` and `@qvac/bare-sdk` adopt `bare-fetch` 3.x and `@qvac/decoder-audio` 0.4.x, and move dev-only `bare-subprocess` to 6.x. This removes the deprecated `@qvac/response` and its exact `bare-events 2.4.2` pin from the dependency tree. |
| 122 | +## [0.13.1] (LLM) |
66 | 123 |
|
67 | | -## Maintenance |
| 124 | +Dependency-maintenance patch. No public API changes. |
68 | 125 |
|
69 | | -Bump `bare-fetch` to `^3.0.1` (public fetch API unchanged) and dev `bare-subprocess` to `^6.1.0`. Bump `@qvac/decoder-audio` to `^0.4.0` (drops deprecated `@qvac/response`); `decoder-audio@0.4.0` returns its `QvacResponse` synchronously, so `server/utils/audio/decoder.ts` no longer `await`s `decoder.run()`. `@qvac/sdk`/`@qvac/bare-sdk` bumped in lockstep. |
| 126 | +- `bare-fetch` → `^3.0.1` (transitive-only major; fetch API unchanged; only 3.0.1 header validation, all SDK headers are RFC-valid). |
| 127 | +- dev `bare-subprocess` → `^6.1.0` (not shipped to consumers). |
| 128 | +- `@qvac/decoder-audio` → `^0.4.0`: removes the deprecated `@qvac/response` package (folded into `@qvac/infer-base`) from the dependency tree, eliminating its exact `bare-events 2.4.2` pin. `decoder-audio@0.4.0`'s `run()` returns `QvacResponse` synchronously; `server/utils/audio/decoder.ts` updated to not `await` it. |
| 129 | +- `@qvac/sdk` + `@qvac/bare-sdk` bumped in lockstep. |
| 130 | +- Validated by a clean install: no `@qvac/response`, no `bare-events@2.4.2`, no `bare-fetch@2.x`, no `decoder-audio@0.3.x` resolve in the tree. |
70 | 131 |
|
71 | 132 | ## [0.13.0] |
72 | 133 |
|
|
0 commit comments