---
source_path: "changes/index.md"
canonical_url: "https://doc.sensory.com/tnl/7.8/changes/"
---

# Version 7 changes (current)

TrulyNatural version 7 introduced support for STT and is fully backwards compatible
with [version 6](https://doc.sensory.com/tnl/7.8/changes/version-6.md#v6-changes) models and code.

This library uses [semantic versioning][semver].

<!--
Duplicate this template after renaming the previous Unreleased section
to a specific release. Timestamp it with YYYY-MM-DD.

When carrying changelog entries forward into a new release section,
update any version-pinned URLs to match the new release. The 7.8.0
"Added" entry below references `…/tnl/7.8/llms.txt` (and the rest of
the agent-docs bundle) on purpose: the URLs document the version that
introduced the feature. New release sections that reference these
artifacts should pin to their own release (e.g. `…/tnl/7.9/llms.txt`)
rather than copying the 7.8 URLs verbatim. (Tracked as agent-8.)

## 7.m.p (2026-)
- **Added**
    - Level one
        + Level two
- **Changed**
    -
- **Deprecated**
    -
- **Removed**
    -
- **Fixed**
    -
- **Security**
    -
-->

## 7.8.0 (2026-05-30)
- **Added**
    - License key introspection: [LICENSE_INFO](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_license_info), [LICENSE_SUPPORT](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_license_support),
      [LICENSE_OVERRIDE_NOT_VALID](https://doc.sensory.com/tnl/7.8/api/inference.md#rc).
    - [profile:samples](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#profilesamples).
    - Python language binding: platform-specific `snsr` wheel (ctypes over the
      C API) for [Python][] 3.10 and later, with sample projects in _sample/python/_
      and documentation ([Python examples](https://doc.sensory.com/tnl/7.8/api/sample/python/index.md#python-examples),
      [Integrate with your build § Python](https://doc.sensory.com/tnl/7.8/api/build-system.md#build-python), and the Python tab in
      [Your first program](https://doc.sensory.com/tnl/7.8/getting-started/your-first-program.md#your-first-program)).
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-i` flag to support [batch processing](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#batch-processing).
    - LLM-friendly documentation Markdown bundle for coding agents and
      RAG pipelines. Each page is mirrored on the site at the same path
      as its source file—section roots as `<dir>/index.md` beside
      `<dir>/index.html`, leaf pages as `<dir>/<page>.md` beside
      `<dir>/<page>/index.html`—and the entry point is
      [llms.txt](https://doc.sensory.com/tnl/7.8/llms.txt):
        + [llms.txt](https://doc.sensory.com/tnl/7.8/llms.txt) —
          discoverable index following the
          [llmstxt.org](https://llmstxt.org) convention; lists every
          page with one-line summaries plus a `## Symbols` section
          deep-linking C/Java identifiers to their documenting
          headings.
        + [manifest.json](https://doc.sensory.com/tnl/7.8/manifest.json)
          — JSON index of every member with `path`, `source_path`,
          `bytes`, `title`, `canonical_url`, an optional H2/H3 outline
          on reference pages, and an optional ISO 8601 UTC
          `last_modified` so indexers can do incremental re-ingest.
        + [llms-full.txt](https://doc.sensory.com/tnl/7.8/llms-full.txt)
          — every page concatenated with `<!-- FILE: … -->` per-page
          separators (path and canonical URL in each header) for
          one-shot ingestion.
        + [agent-docs.zip](https://doc.sensory.com/tnl/7.8/agent-docs.zip)
          — same files packaged as a single archive for vendored or
          air-gapped use; agents with network access should crawl the
          loose mirror instead.
    - _(TrulyNatural only)_ [lvcsr-build-enUS-14.0.2-5MB.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-build-enUS)
      with improved recognition accuracy.
    - _(TrulyNatural only)_ [lvcsr-lib-enUS-14.0.2.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-lib-enUS) class library
      compatible with _lvcsr-build-enUS-14.0.2-5MB.snsr_.
- **Changed**
    - The [library-info](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#library-info) summary includes text for [LICENSE_SUPPORT](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_license_support).
    - [fromCode](https://doc.sensory.com/tnl/7.8/api/io.md#fromcode) checks that the `SnsrCodeModel` data were compiled with compatible `struct` packing.
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-p` reports the real-time fraction required to run models in [template](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type) slots.
    - `spot-eval-batch` renamed to [snsr-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) with support for commands, LVCSR and STT models.
    - [Setting keys](https://doc.sensory.com/tnl/7.8/api/setting-keys/index.md#setting-keys) reorganized by concern (configuration, runtime,
      results, events, iterators) with new groups for LVCSR & STT,
      wake word & command set, and THF Micro DSP. Per-key anchors
      (e.g. `#listen-window`, `#partial-result-interval`) are stable;
      cross-references and bookmarks continue to resolve.
    - macOS installers built for Apple Silicon (arm64) only.
      Contact [Technical Support](https://doc.sensory.com/tnl/7.8/contact.md#technical-support) for Intel (x86_64) macOS installers.
      Both installer packages include libraries for arm64 and x86_64.
    - _(STT only)_ [nlu-grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#nlu-grammar-stream) overrides machine-learned NLU only if it detects no NLU matches.
- **Removed**
    - _lib/ios/libsnsr.a_, use XCFramework instead.
    - _(TrulyNatural only)_ _lvcsr-build-enUS-12.13.1-5MB.snsr_
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-1.2.0.snsr_
    - _(STT only)_ CRF++ and fastText dependencies used for NLU in legacy STT models.
- **Fixed**
    - Changes to [listen-window](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#listen-window) had no effect after the first call to [setHandler](https://doc.sensory.com/tnl/7.8/api/inference.md#sethandler).
    - The documentation for [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) mistakenly noted that the default value was `0`.
      This had changed to `1` in [v6.20.0](https://doc.sensory.com/tnl/7.8/changes/version-6.md#v6.20.0).
    - [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-sequential.md#tpl-spot-sequential-type) with [`loop = 2`](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#loop) mistakenly
      invoked the [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end) handler after each [listen-window](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#listen-window) timeout.
- **Security**
    - On Windows, using filenames longer than 256 characters with [fromFileName](https://doc.sensory.com/tnl/7.8/api/io.md#fromfilename) or
      [fromAudioFile](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiofile) could cause out-of-bounds heap access.
    - Reading or changing an unknown setting on a model built with deeply-nested
      [templates](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type) could access freed heap memory when reporting the error.

## 7.7.0 (2026-01-24)
- **Added**
    - Smart Wake Word option to gate a VAD with a wake word at the
      [start or at the end](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-opt-spot-vad-lvcsr.md#use-trailing-wake-word) of an utterance.
        + [wake-word-at-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#wake-word-at-end), [backlog-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#backlog-interval)
        + [tpl-spot-vad-3.13.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad)
        + _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.23.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
        + _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr-1.28.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr)
    - Option to apply library license keys with [LICENSE](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_license) [configuration](https://doc.sensory.com/tnl/7.8/api/library-config.md#config-enum).
        + [LICENSE_OVERRIDE_NOT_ENABLED](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_license_override_not_enabled),
          [LICENSE_OVERRIDE_NOT_SUPPORTED](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_license_override_not_supported).
    - The [STT_SUPPORT](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_stt_support) [config](https://doc.sensory.com/tnl/7.8/api/library-config.md#config) option requires a call to [new](https://doc.sensory.com/tnl/7.8/api/inference.md#new).
    - _(TrulyNatural only)_ [lvcsr-build-enUS-12.13.1-5MB.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-build-enUS) with improved recognition accuracy
      and simplified out-of-grammar modeling. This model replaces both
      _lvcsr-build-enUS-2.7.3.snsr_
      and _lvcsr-background-enUS-1.2.3.snsr_ included in the previous release.
- **Changed**
    - _(STT only)_ Improved STT model loading and initialization speed.
- **Removed**
    - _tpl-spot-vad-3.10.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.20.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.25.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.7.3.snsr_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.2.3.snsr_
- **Fixed**
    - _(TrulyNatural only)_ Creating an LVCSR recognizer with a [grammar](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) that had a syntax error
      (such as unbalanced parentheses) _and_ included empty lines or comments at the start of the grammar
      could lead to a crash caused by de-referencing a `NULL` pointer.
    - _(STT only)_ With [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval) `= 0` STT recognizers did not produce
      [recognition results](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) on short utterances.

## 7.6.1 (2025-11-25)
- **Changed**
    - [Android examples](https://doc.sensory.com/tnl/7.8/api/sample/android/index.md#android-examples) build with Java 17 and later.
- **Fixed**
    - Higher than expected CPU use in wake words and command sets.
      This addresses a regression introduced in [7.5.0](https://doc.sensory.com/tnl/7.8/changes/index.md#v7.5.0).
    - [snsr-debug](https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug.md#snsr-debug) mistakenly used [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) and [stt-enUS-automotive-medium](https://doc.sensory.com/tnl/7.8/models/index.md#stt-enUS-automotive-medium)
      model versions from an earlier SDK release.
    - Some of the [C examples](https://doc.sensory.com/tnl/7.8/api/sample/c/index.md#c-examples) failed to build on Windows.
- **Security**
    - [profile](https://doc.sensory.com/tnl/7.8/api/inference.md#profile) could access released memory if called on a [Session](https://doc.sensory.com/tnl/7.8/api/inference.md#session) instance where the
      model, or a filled [template](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type) slot, was replaced with another model at runtime.

## 7.6.0 (2025-09-15)
- **Added**
    - Setting [`loop = 2`](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#loop) pins the [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential) listening focus to
      the recognizer in slot `1`.
    - [tpl-spot-debug-1.5.1.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-debug) with support for NLU intents and entities.
    - [udt-universal-3.67.1.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#udt-universal) with improved accuracy.
    - [tpl-spot-vad-3.10.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad) with support for [include-wake-word-audio](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-wake-word-audio).
    - [snsr-debug](https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug.md#snsr-debug) Android sample replaces `spot-debug` and adds support for STT.
    - _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.20.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr) and
      [tpl-opt-spot-vad-lvcsr-1.25.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) with support for [include-wake-word-audio](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-wake-word-audio).
    - _(TrulyNatural only)_ Documentation notes that [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score) values are not usable when [result-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#result-max) `> 1`.
    - _(STT only)_ [stt-enUS-automotive-medium-2.3.15-pnc.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#stt-enUS-automotive-medium)
        + Support for [nlu-match-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-match-max).
        + Setting [stt-profile](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#stt-profile) does not change [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval).
    - _(STT only)_ Support for STT on 64-bit iOS platforms:
        + _iPhoneOS_ on `arm64` and `arm64e`.
        + _iPhoneSimulator_ on `arm64` and `x86_64`.
- **Changed**
    - Documentation system from [Doxygen][] to [Material for MkDocs][].
    - `arm-linux-gnueabi` library requires GLIBC >= 2.17 instead of GLIBC >= 2.34 for improved compatibility.
    - _lib/\*/README\*md_ for the [supported target platforms](https://doc.sensory.com/tnl/7.8/reference/overview.md#supported-target-platforms) include the minimum required
      `GLIBC` version where relevant.
- **Removed**
    - _tpl-spot-debug-1.5.0.snsr_
    - _udt-universal-3.66.1.9.snsr_
    - _tpl-spot-vad-3.9.0.snsr_
    - `spot-debug` Android sample, see [snsr-debug](https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug.md#snsr-debug) instead.
    - Know issues documentation page.
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.19.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.24.snsr_
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13-pnc.snsr_
- **Fixed**
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) could show incorrect license recognition or duration limits
      in the comments at the start of the header file it generates.
    - [allocPerf](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocperf) did not produce usable results when used with [allocStdlib](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocstdlib).
    - _(TrulyNatural only)_ Incorrect [begin-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-ms), [end-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-ms), and [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score) results for a
      [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad-lvcsr.md#tpl-spot-vad-lvcsr-type) recognizer in [slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slot) `1`
      of [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-concurrent.md#tpl-spot-concurrent-type).
    - _(TrulyNatural only)_ Using [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential) in slot 0 of
      [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) or [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr) could lead
      to warning messages on `stderr`.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-a` option failed when used with [class libraries](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-class-libraries).
    - _(STT only)_ Bus error on 32-bit Arm platforms when using a model with machine-learned NLU or
      punctuation and capitalization support.
      This was caused by a [bug in ONNX](https://github.com/onnx/onnx/issues/6573)
      that resulted in an attempt to read `int64_t` values not aligned to 8 bytes.
- **Security**
    - _(TrulyNatural only)_ If [nlu-grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#nlu-grammar-stream) reduced the length of the
      phrase result (by using the `:` rewrite operator, for example)
      in an STT model with punctuation and capitalization support,
      an unterminated string could cause an out-of-bounds memory read.

## 7.5.0 (2025-06-12)
- **Added**
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-a`, `-q`, and `-u` flags.
    - [stt-support](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#stt-support), [thread-support](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#thread-support).
    - Support for loading parts of a model that resides in ROM onto the heap.
      This can improve inference speed when ROM is significantly slower than RAM.
    - Reduced peak RAM requirement on small platforms
        + [prune:enable](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#pruneenable) option to remove unused settings after a model's been loaded.
        + Reduced overhead in the session configuration store.
    - [fromProvider](https://doc.sensory.com/tnl/7.8/api/io.md#fromprovider) as an alias for `snsrStream_alloc()`.
    - [profile](https://doc.sensory.com/tnl/7.8/api/inference.md#profile) is available in the Java language binding.
    - Support for `armv7k` and `arm64_32` watchOS architectures.
    - [tpl-spot-concurrent-1.5.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-concurrent)
      with support for [^listen-begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-begin), [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end), [^begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#begin), [^end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#end),
      [^limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#limit), and [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence).
    - [tpl-spot-vad-3.9.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad)
    - _(TrulyNatural only)_ [ram-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#ram-limit), [ac-prune-top-k](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#ac-prune-top-k).
    - _(TrulyNatural only)_ Support for improved out-of-grammar detection (with better
      discrimination and lower RAM overhead) in [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) and
      [VoiceHub Pro](https://doc.sensory.com/tnl/7.8/reference/voicehub.md#voicehub) models.
    - _(TrulyNatural only)_ Support for [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) models that report recognition scores.
    - _(TrulyNatural only)_ Templates with support for [domain](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#domain), [am-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#am-size), [lm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#lm-size),
      [nlu-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-size), and [slm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-size):
        + [tpl-opt-spot-vad-lvcsr-1.24.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr)
        + [tpl-spot-vad-lvcsr-3.19.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.17.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr)
    - _(TrulyNatural only)_ Models updated to support [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score) setting:
        + _lvcsr-background-enUS-1.2.3.snsr_
        + _lvcsr-build-enUS-2.7.3.snsr_
    - _(STT only)_ [domain](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#domain), [slm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-size).
    - _(STT only)_ [stt-enUS-automotive-medium-2.3.13-pnc.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#stt-enUS-automotive-medium)
      with support for [domain](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#domain) and [slm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-size).
      This model includes a single language model, so [domain](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#domain)
      will return `NULL`. It does not include a generative language model
      either: [slm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-size) is `0`.
- **Changed**
    - Documentation available online.
    - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) requires the `-o` flag to create output.
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) prints scores with the `%g` format specifier.
    - [getDouble](https://doc.sensory.com/tnl/7.8/api/inference.md#getters), [setDouble](https://doc.sensory.com/tnl/7.8/api/inference.md#setters), [getInt](https://doc.sensory.com/tnl/7.8/api/inference.md#getters), and [setInt](https://doc.sensory.com/tnl/7.8/api/inference.md#setters)
      support both double and integer settings,
      but will report [INCORRECT_SETTING_TYPE](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_incorrect_setting_type) if a double value cannot
      be converted to an integer without loss of precision or overflow.
    - [getString](https://doc.sensory.com/tnl/7.8/api/inference.md#getters) and [setString](https://doc.sensory.com/tnl/7.8/api/inference.md#setters) support double and integer settings.
    - [set](https://doc.sensory.com/tnl/7.8/api/inference.md#set) no longer requires quotes for string arguments without embedded spaces.
    - [SOURCE](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_source), [SOURCE_RAM](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_source_ram), and [SOURCE_PRUNED](https://doc.sensory.com/tnl/7.8/api/inference.md#dataformat)
      create code that tags all model objects with preprocessor macro `SNSR_MODEL_ATTR`.
      Use this, for example, to specify the section in which the linker places these objects.
      See [Compile-time macros § SNSR_MODEL_ATTR](https://doc.sensory.com/tnl/7.8/api/compile-macros.md#snsr-model-attr).
    - _sample/c/CMakeLists.txt_
        + Builds `snsr-eval-subset`.
        + Installs the sample binaries in _sample/c/bin/_.
    - _sample/c/Makefile_ and _sample/c/CMakeLists.txt_ build the
      [live-spot-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot-stream.md#live-spot-streamc) example on macOS.
    - _util/gradlew_ uses Gradle 8.14, compatible with Java 21.
    - [Java examples](https://doc.sensory.com/tnl/7.8/api/sample/java/index.md#java-examples) use lambda expressions for event handlers and iterators.
    - [Enrolled wake word](https://doc.sensory.com/tnl/7.8/models/index.md#enroll-models) tasks no longer invoke [^pause](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#pause) and
      [^resume](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#resume) when [interactive](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#interactive) `== 0`.
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) and [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
      with [include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence) `= 1` no longer invoke the [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result), [^nlu-intent](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-intent), and [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) events if the VAD does not detect speech.
      The [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end) directly follows the [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence) event.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) with live audio input will not run LVCSR or STT models that do
      not include a VAD component. Use the new `-a` flag to add [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr) on the fly.
    - _(TrulyNatural only)_ [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) `= 1` accepts results even if there's no
      trailing silence in the utterance.
    - _(STT only)_ In STT models with punctuation and capitalization support, empty
      results are reported as an empty string instead of a single period.
- **Removed**
    - _tpl-spot-concurrent-1.4.0.snsr_
    - _tpl-spot-vad-3.8.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.2.1.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.7.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.20.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.11.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13.snsr_
- **Fixed**
    - Machine-learned VAD components detected the speech onset late on
      synthetic audio data with significant all-zero leading silence.
    - [oss-components](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#oss-components) always returned `NULL.`
    - _(TrulyNatural only)_ In rare cases [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) NLU intent names could mistakenly
      include the first word of the NLU intent value.
    - _(TrulyNatural only)_ In rare cases VoiceHub models that use [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) could
      misclassify in-domain intents as `background`.
    - _(TrulyNatural only)_ Potentially reduced recognition accuracy in [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) models that
      use [ram-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#ram-limit) to constrain the Viterbi decoder.
- **Security**
    - Deeply-nested templates with duplicate models (for example,
      combining the same spotter model with [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-concurrent),
      then combining the result with another [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-concurrent)
      and the same spotter model, three levels deep), could result in
      out-of-bounds memory access when releasing the session.

## 7.4.1 (2025-03-13)
- **Fixed**
    - _(STT only)_ Using [custom-vocab](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#custom-vocab) to map multi-word sequences could
      result in missed NLU entities.

## 7.4.0 (2025-01-22)
- **Added**
    - Java support on _x86_64-windows-msvc._
    - [SOURCE_RAM](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_source_ram) and [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) `-C` option.
    - Spotter template modes with new settings [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point) and [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms):
        + [tpl-spot-debug-1.5.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-debug)
        + [tpl-spot-vad-3.8.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad)
        + [tpl-spot-sequential-1.5.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential)
    - Support for Smart Wake Words. On a near-miss false reject, these
      models switch to a more accepting operating point for a limited
      duration to make it more likely that the model will accept a repeated
      wake word utterance.
      Enable this feature (on wake word models
      that support it) by setting [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point). Adjust the
      duration of the low false-reject listening window with [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms).
    - [spot-voicegenie-enUS-6.5.1-m.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#spot-voicegenie-enUS) with
      support for [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point) and [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms).
    - Compatibility with 2025 [VoiceHub Pro](https://doc.sensory.com/tnl/7.8/reference/voicehub.md#voicehub) wake words and command sets.
    - [VERSION_CMAKE](https://doc.sensory.com/tnl/7.8/api/constants.md#version_cmake).
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr-1.20.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr)
      supports changing VAD settings [backoff](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#backoff), [hold-over](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#hold-over),
      [leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#leading-silence), [max-recording](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#max-recording), [trailing-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#trailing-silence),
      and [include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence). Adds [vocab-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#vocab-iterator),
      [^slm-start](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-enabled), [slm-turn-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-turn-limit),
      [stt-profile](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#stt-profile), [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point), and [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms).
    - _(TrulyNatural only)_ VAD template models with new settings
      [^slm-start](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-enabled), [slm-turn-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-turn-limit),
      [stt-profile](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#stt-profile), [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point), and [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms):
        + [tpl-spot-vad-lvcsr-3.15.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.14.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr)
    - _(STT only)_ [stt-profile](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#stt-profile).
    - _(STT only)_ Experimental support for generative language models. New settings:
      [^slm-start](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-enabled), and [slm-turn-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slm-turn-limit).
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13.snsr_
        + Results include capitalization and punctuation.
        + Supports [stt-profile](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#stt-profile).
- **Changed**
    - Android JNI shared libraries export only TrulyNatural function names. This
      significantly reduces the chances of symbol clashes in applications
      that use third-party libraries that depend on the same OSS modules as
      the TrulyNatural SDK.
    - Android JNI libraries built with NDK r27c and [flexible page size support][].
    - Improved compatibility with older Android releases, support for
      [API level 21][api-levels] and later.
    - _SnsrLibrary.cmake_ removes unused functions and data from target
      executables (`-ffunction-sections -fdata-sections`)
    - DSP library (for creating embedded spotter models) version 8.5.0.
    - Toolchain updates:
        + _arm-linux-gnueabi_ built with gcc 13.2.0.
        + _arm-linux-gnueabihf_ built with gcc 13.3.1.
        + _i686-linux-gnu_ built with gcc 13.2.0.
    - On Windows, [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) sets the console code page to `UTF-8.`
    - If application code used [push](https://doc.sensory.com/tnl/7.8/api/inference.md#push) and did not call [stop](https://doc.sensory.com/tnl/7.8/api/inference.md#stop)
      before releasing the model, the call to [release](https://doc.sensory.com/tnl/7.8/api/heap.md#release)
      invoked all pending event handlers. It now ignores these.
    - [stop](https://doc.sensory.com/tnl/7.8/api/inference.md#stop) completes even if the session is in an error state.
    - _(TrulyNatural only)_ No [^result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result-partial) for empty hypotheses.
    - _(STT only)_ Support Windows `\r\n` line termination as entry separators in [custom-vocab](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#custom-vocab).
    - _(STT only)_ Removed the 1000-entry limit for [custom-vocab](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#custom-vocab). Using
      such large custom vocabularies is frequently counter-productive.
      Consider contacting your [Sensory Sales](https://doc.sensory.com/tnl/7.8/contact.md#contact) representative to
      discuss creating a domain-specific recognizer instead.
    - _(STT only)_ Improved [custom-vocab](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#custom-vocab) behavior in character-based languages
      such as Mandarin Chinese.
    - _(STT only)_ STT models start fewer threads.
- **Deprecated**
    - [threshold](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#threshold).
- **Removed**
    - _spot-voicegenie-enUS-6.5.0-m.snsr_
    - _tpl-spot-debug-1.4.0.snsr_
    - _tpl-spot-sequential-1.4.0.snsr_
    - _tpl-spot-vad-3.7.0.snsr_
    - _tpl-spot-dynop-1.4.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.12.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.11.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
- **Fixed**
    - With [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit) `> 0`, [reset](https://doc.sensory.com/tnl/7.8/api/inference.md#reset)
      did not flush the push backlog buffer enabled with [push-buffer-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-buffer-size).
    - Low memory use VoiceHub Large Vocabulary Project models could fail to run
      if settings (such as [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point)) were changed after registering
      event handlers.
    - Reading settings from models built from deeply nested templates could
      mistakenly report [VALUE_NOT_SET](https://doc.sensory.com/tnl/7.8/api/inference.md#rc).
    - _(TrulyNatural only)_ [search.frame-nota](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#searchframe-nota) was ignored for [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) when used with lightweight NLU.
- **Security**
    - If application code using the C API used [push](https://doc.sensory.com/tnl/7.8/api/inference.md#push), and a result handler called [forEach](https://doc.sensory.com/tnl/7.8/api/inference.md#foreach),
      and that handler was invoked by [release](https://doc.sensory.com/tnl/7.8/api/heap.md#release) because the session was released without
      calling [stop](https://doc.sensory.com/tnl/7.8/api/inference.md#stop) first, then a double-free and access of invalid heap memory could occur.
    - _(TrulyNatural only)_ Out-of-bounds memory access could occur if [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr)
      was used with `0.include-leading-silence = 1`.

## 7.3.0 (2024-07-29)
- **Added**
    - New FAQ section:
      [How do I take action on an NLU result?](https://doc.sensory.com/tnl/7.8/faq.md#lvcsr-nlu-action)
    - Support for adding this SDK to projects that use CMake. See [C examples](https://doc.sensory.com/tnl/7.8/api/sample/c/index.md#examples-cmake).
    - Real-time clock implementation for Windows, enables [profile:real-time](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#profilereal-time).
    - Support for multi-phrase spotter models with lower false accept rates.
    - _arm-none-eabi_ library with NEON built with gcc 13.3.1.
    - _(TrulyNatural only)_ VAD template models with settings [backoff](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#backoff) and [max-recording](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#max-recording)
      optimized for STT.
      The defaults are now 300 ms for audio backoff, and
      60 seconds for the maximum recording duration.
        + _tpl-opt-spot-vad-lvcsr-1.12.0.snsr_
        + _tpl-spot-vad-lvcsr-3.11.0.snsr_
        + _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ Improved STT recognition speed and accuracy, and
      reduced [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) and [^nlu-intent](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-intent) latency when used with a VAD.
    - _(STT only)_ STT support for _arm-linux-gnueabihf,_
      _aarch64-linux-gnu,_ and _x86_64-windows-msvc._
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
        + 100 MiB total size compared to 299 MiB in previous version.
        + Improved NLU inference speed.
        + Improved accuracy.
- **Changed**
    - _arm-linux-gnueabihf_ and _aarch64-linux-gnu_ libraries
      built with gcc 10.3.1.
    - _(TrulyNatural only)_ Optimized machine-learned NLU models. On average these now
      run about ten times faster.
- **Removed**
    - Windows ports: x86-windows-2008, x86-windows-2015, x86_64-windows-2008,
        x86_64-windows-2015, x86_64-windows-mingw.
    - _arm-buildroot-linux-uclibcgnueabihf_ library.
    - _arm-ca7-linux-gnueabihf_ library.
    - _(TrulyNatural only)_ VAD template models:
        + _tpl-opt-spot-vad-lvcsr-1.11.0.snsr_
        + _tpl-spot-vad-lvcsr-3.10.0.snsr_
        + _tpl-vad-lvcsr-3.9.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr_
- **Fixed**
    - Certain low false-accept spotter models reported an internal
      validation error when used with _tpl-spot-sequential-1.4.0.snsr_
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) `-c` produced incorrect code output for recent
      low false-accept models.
    - The iOS sample app mistakenly embedded _snsr.xcframework,_ leading to
      TestFlight rejection due to asset validation errors.
    - The TrulyNatural SDK linked against `-landroid,` making it
      incompatible with the [Vendor Native Development Kit][].
    - _(STT only)_ Duplicate entities and typographic errors in the documentation for
      _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
- **Security**
    - _(STT only)_ NLU models could cause out-of-bounds memory access on very long
      (hundreds of words) recognition results.

## 7.2.0 (2024-04-11)
- **Added**
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-p` option shows an estimate of the CPU
      processing capacity required to run a model in real-time.
    - [profile:real-time](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#profilereal-time).
    - _(TrulyNatural only)_ [nlu-intent-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-intent-score), [nlu-entity-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-entity-score), and [nlu-slot-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-score).
    - _(TrulyNatural only)_ Models updated to support NLU score and [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score) settings:
        + [tpl-opt-spot-vad-lvcsr-1.11.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr)
        + [tpl-spot-vad-lvcsr-3.10.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.9.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr)
    - _(STT only)_ [am-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#am-size), [lm-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#lm-size), [nlu-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-size).
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr_
        + Improved recognition accuracy compared to
          _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
        + Adjusts model evaluation interval to match [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval).
- **Changed**
    - [run](https://doc.sensory.com/tnl/7.8/api/inference.md#run) ignores [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit).
    - _(TrulyNatural only)_ `snsr-eval` `-lll` does not show [^nlu-intent](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-intent) or [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) results.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) shows NLU intent, entity, and slot scores.
    - _(STT only)_ STT models use [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval) to set the model evaluation
      interval. The larger this interval the lower the average CPU use.
- **Removed**
    - _(TrulyNatural only)_ Models updated to support NLU score settings:
        + _tpl-opt-spot-vad-lvcsr-1.9.0.snsr_
        + _tpl-spot-vad-lvcsr-3.8.0.snsr_
        + _tpl-vad-lvcsr-3.8.0.snsr_
        + _tpl-spot-lvcsr-1.5.0.snsr_
          (Use [tpl-spot-vad-lvcsr-3.10.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr) instead.)
    - _(STT only)_ _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
- **Fixed**
    - [load](https://doc.sensory.com/tnl/7.8/api/inference.md#load) now returns [LIBRARY_TOO_OLD](https://doc.sensory.com/tnl/7.8/api/inference.md#rc) when
      attempting to load a model that uses features it does not support.

## 7.1.1 (2024-02-13)
- **Fixed**
    - Linking against the Android static libraries could suppress
        the output of calls to
        `__android_log_print(),` `__android_log_vprint(),` and
        `__android_log_write()` in the entire application.
    - The AAR file for Android once again links against `-llog.`
    - _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.8.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr)
      would keep listening for LVCSR audio if enough silence after the
      wake word lead to [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence).
        + This happened only for LVCSR recognizers (including those made
          with [VoiceHub](https://doc.sensory.com/tnl/7.8/reference/voicehub.md#voicehub)) and did not affect STT ones.
        + Regression from 7.0.0.

## 7.1.0 (2024-01-11)
- **Added**
    - _(TrulyNatural only)_ Simplified NLU API
        + Reduces NLU slot hierarchy to just two levels.
        + Provides direct access to top-level NLU slots as "intents" and
            child slots as "entities".
        + Does not support [nlu-match-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-match-max) `>` `1.`
        + Does not replace the existing NLU slot API.
        + See [^nlu-intent](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-intent), [nlu-intent-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-intent-name),
             [nlu-intent-value](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-intent-value),
             [nlu-entity-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#nlu-entity-iterator), [nlu-entity-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-entity-count),
             [nlu-entity-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-entity-name), and [nlu-entity-value](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-entity-value).
    - _(TrulyNatural only)_ Models updated to support simplified NLU API:
        + _lvcsr-background-enUS-1.2.1.snsr_
        + _lvcsr-build-enUS-2.7.0.snsr_
        + _tpl-opt-spot-vad-lvcsr-1.9.0.snsr_
        + _tpl-spot-lvcsr-1.5.0.snsr_
        + _tpl-spot-vad-lvcsr-3.8.0.snsr_
    - _(STT only)_ Support for machine-learned NLU intent and entity classifiers.
    - _(STT only)_ [custom-vocab](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#custom-vocab)
    - _(STT only)_ _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
- **Changed**
    - AAR file for Android is no longer linked against `-landroid` and
      `-llog.` This allows it to be used in an AOSP system image.
- **Removed**
    - Energy-only VAD models superseded by machine-learned versions:
        + _tpl-spot-vad-2.4.0.snsr_
        + _tpl-spot-vad-2.0.1.snsr_
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-2.4.0.snsr_
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-2.5.0.snsr_
    - _(TrulyNatural only)_ Models updated to support simplified NLU API:
        + _lvcsr-background-enUS-1.1.0.snsr_
        + _lvcsr-build-enUS-2.6.0.snsr_
        + _tpl-opt-spot-vad-lvcsr-1.8.0.snsr_
        + _tpl-spot-lvcsr-1.4.0.snsr_
        + _tpl-spot-vad-lvcsr-3.7.0.snsr_
        + _tpl-vad-lvcsr-3.7.0.snsr_
    - _(STT only)_ _stt-v1-en-1.0.1-400ms.snsr_
- **Fixed**
    - [VAD models](https://doc.sensory.com/tnl/7.8/models/index.md#vad-models) models ignored the [max-recording](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#max-recording) setting.
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) did not produce a
      [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) for [slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#slot) `=` [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) if
      [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0).[include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence) was set to `1`
      and a [leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#leading-silence) timeout occurred.
    - _(TrulyNatural only)_ LVCSR models used in a [VAD](https://doc.sensory.com/tnl/7.8/models/index.md#vad-models) template would stop
      producing [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) callbacks if the VAD reported
      [^limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#limit). STT models were not affected.

## 7.0.0 (2023-11-20)
- **Added**
    - [CONFIG_PRUNED](https://doc.sensory.com/tnl/7.8/api/inference.md#dataformat) and [SOURCE_PRUNED](https://doc.sensory.com/tnl/7.8/api/inference.md#dataformat) reduce the size
      of serialized models by removing configuration options such as
      unused [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point) values.
    - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) `-p` option reduces [phrasespot](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#phrasespot) model sizes by removing
      operating points other than the currently selected [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point).
    - _(STT only)_ STT support with improved accuracy suitable for
      command-and-control and dictation tasks.
        + **This initial release includes STT support on Android, macOS, and
          x86_64-linux only.**
        + Includes Open Source modules, see [open source licenses](https://doc.sensory.com/tnl/7.8/licenses/oss.md#open-source-licenses).
        + Requires linking against a C++ runtime, see [Integrate with your build](https://doc.sensory.com/tnl/7.8/api/build-system.md#integrate-with-your-build).
        + Using STT models do not require any API changes. These are
          drop-in replacements for older LVCSR models on supported platforms.
        + STT recognition models
            - _stt-v1-en-1.0.1-400ms.snsr_
            - Contact your [Sensory Sales](https://doc.sensory.com/tnl/7.8/contact.md#contact) representative for
              additional languages.
        + New settings: [oss-components](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#oss-components), [STT_SUPPORT](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_stt_support).
- **Changed**
    - The deprecated [delay](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#delay) setting is read-only.
    - DSP library (for creating embedded spotter models) version 7.4.0.
    - _(TrulyNatural only)_ The effects of `:` terminal rewrites @b are now visible
      in [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) [text](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#text) values.
    - _(TrulyNatural only)_ The lightweight NLU processor scoring algorithm no longer
      considers `:inserted` and `removed:` words when ranking
      result parses. This potentially changes the primary NLU result,
      or the order in which NLU results are presented when [nlu-match-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-match-max)
      `> 1`, for grammars that use the `:` rewrite feature to better match expectations.
    - _(TrulyNatural only)_ If the time required to compute a partial LVCSR result exceeds the
      [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit), the [^result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result-partial) callback does not happen.
    - _(TrulyNatural only)_ The [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) grammars support the literal use of special tokens
      by escaping them with a backslash.
- **Deprecated**
    - Lightweight VAD. Use a [VAD model](https://doc.sensory.com/tnl/7.8/models/index.md#vad-models) instead.
- **Removed**
    - _(TrulyNatural only)_ References to the `<-` slot assignment operator in
      [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition). This had been a symbol reserved for internal use only.
    - _(TrulyNatural only)_ _lvcsr-broad-enUS-3.1.0-t5.snsr_
- **Fixed**
    - Machine-learned [VAD](https://doc.sensory.com/tnl/7.8/models/types/vad.md#vad-type) models could unexpectedly report an error when
      the from-index value was less than the first-index value.
    - A subset of spotter models showed increased false accept rates when
      used with [task templates](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type).
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-opt-spot-vad-lvcsr) mistakenly invoked [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence)
      and [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end) multiple times at end-of-stream if
      [0.include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence) was set to `1`.
    - _(TrulyNatural only)_ [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-concurrent) with a spotter model in slot [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) and
      an LVCSR model (gated by a VAD, or spotter and VAD) in slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1) would
      mistakenly return [nlu-slot-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-name) and [nlu-slot-value](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-value) values as `NULL.`
    - _(TrulyNatural only)_ [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) could still occur even if [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only)
      suppressed the recognition result.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) with [classes](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-classes) could fail
      with a segmentation fault when attempting to build a recognizer with too many class references.
- **Security**
    - This sequence of operations could lead to [getString](https://doc.sensory.com/tnl/7.8/api/inference.md#getters)
      returning an unterminated string:
        + Use [setStream](https://doc.sensory.com/tnl/7.8/api/inference.md#setters) to set a configuration value
          to a sequence of bytes that does not include `\0.`
        + Save the model to persistent storage.
        + Load the modified model from persistent storage.
        + Access the configuration value with [getString](https://doc.sensory.com/tnl/7.8/api/inference.md#getters).
    - In the Java language binding [fromMemory](https://doc.sensory.com/tnl/7.8/api/io.md#frommemory) and [fromString](https://doc.sensory.com/tnl/7.8/api/io.md#fromstring)
      could potentially access the underlying `byte[]` memory after it
      was garbage-collected.

<!-- Reference definitions from includes/links.md -->
[api-levels]: https://en.wikipedia.org/wiki/Android_version_history "Android version history and API levels"
[Doxygen]: https://doxygen.nl/ "Code Documentation. Automated."
[flexible page size support]: https://developer.android.com/guide/practices/page-sizes "Support 16 KB page sizes on Android"
[Material for MkDocs]: https://squidfunk.github.io/mkdocs-material/ "Documentation system"
[Python]: https://en.wikipedia.org/wiki/Python_(programming_language) "Python programming language"
[semver]: http://semver.org/ "Semantic versioning specification"
[Vendor Native Development Kit]: https://source.android.com/docs/core/architecture/vndk "Android Vendor Native Development Kit"

<!-- Abbreviation definitions from includes/abbreviations.md -->
*[API]: Application Programming Interface
*[FR]: False Reject: the recognizer did not trigger when the target phrase was spoken
*[LVCSR]: Large Vocabulary Continuous Speech Recognition model, feed-forward neural net acoustic model with FST decoder
*[NLU]: Natural Language Understanding model
*[OSS]: Open-source software
*[PNC]: Punctuation and Capitalization, an STT model variant that emits cased text with punctuation
*[RAM]: Random Access Memory
*[ROM]: Read-Only Memory, typically nonvolatile flash memory
*[SDK]: Software Development Kit
*[SLM]: Generative Small Language Model
*[STT]: Speech To Text: transformers with language model and CTC decoding
*[THF]: TrulyHandsfree, Sensory's wake word and command recognition technology
*[TNL]: TrulyNatural, Sensory's large-vocabulary speech recognition technology
*[UDT]: User-Defined Trigger: enrolled wake words and command sets
*[VAD]: Voice Activity Detector
