148 lines
9.2 KiB
Markdown
148 lines
9.2 KiB
Markdown
# DTW diagnostic: strict UTF-8 failure
|
||
|
||
Status: internal CPU diagnosis and completed tiny VAD/DTW comparison, 2026-10-13.
|
||
Production ASR integration and broader independent acceptance remain open;
|
||
no new media rating follows from this evidence.
|
||
Google EmbeddingGemma 2 remains the production semantic model.
|
||
|
||
The original fifteen-window DTW experiment stopped on strict UTF-8 parsing.
|
||
Its temporary raw output was cleaned, so that first run's exact bytes could not
|
||
be inspected. Its partial report remains unchanged. A separate coordinator-
|
||
authorized diagnostic reproduced exactly the second `music01` window: source
|
||
offset 30000 ms, duration 30000 ms, primary audio stream, 480000 decoded samples.
|
||
No labels selected text/timestamps, and the whole experiment was not rerun.
|
||
|
||
## Revalidated execution
|
||
|
||
The whisper.cpp checkout was clean at pinned commit
|
||
`d1be6fde11ac6e0407606b4e42fe72d34add8037`. Before execution, the fixture and
|
||
source hashes, base model size/hash, worker hash and both decoder hashes were
|
||
checked against frozen evidence. The owned runner retained raw output, WAV,
|
||
probe, stderr and report directly under ignored
|
||
`.searchi/speech/dtw-window-diagnostic-v1`; no temporary cleanup removed them.
|
||
|
||
| Artifact | SHA-256 |
|
||
| --- | --- |
|
||
| Frozen fixture | `b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393` |
|
||
| Source music01 | `29fcd20414ee19c2a5aa4339eaf6375079dc87959051ab0aea32c76df52f34dc` |
|
||
| CPU worker | `12c681b4bcd9c7679b647b9a041e121a2f9e72cb2a9c6f189f529ec8b79c36f8` |
|
||
| Multilingual base model | `60ed5bc3dd14eea856493d334349b405782ddcaf0028d4b5df4088345fba2efe` |
|
||
| FFmpeg | `b778ca5786ee4b0b4f37f34478617093d2fdb9a532d281fb76cda69d1d579d46` |
|
||
| FFprobe | `4e1b0afd27bf02d79739f27b2d650137470925afb19d54b5e89a708b7a389236` |
|
||
| Raw JSON, 29148 bytes | `f1de2c295b0c9a223619abe6dbf34823be6a6aa3dbcad69fea1d6121fa0c200e` |
|
||
| Native log | `28d174198a3ef980aa5c8c1237618f450a19b0a80c8a270209dce113a8de3a7a` |
|
||
| Diagnostic report | `b4b0dedfac6365c59793806801b1fc5d9f8f203891b623fb86ad508352ad0114` |
|
||
|
||
Windows VM execution forced CPU: `SEARCHI_FORCE_CPU=1`, native flags
|
||
`--no-gpu --threads 1 --processors 1 --language auto --output-json-full
|
||
--dtw base --no-flash-attn`, verified base model and the decoded owned WAV.
|
||
The existing bounded decoder used absolute 30-second seeking and sample trimming;
|
||
its output contained exactly 480000 samples. Native ASR exited zero after
|
||
42493.25 ms; decoding took 271.42 ms. The owned diagnostic runner exited zero
|
||
after recording `strict_parse: rejected`. This is not a successful ASR result
|
||
or a warmed throughput measurement. No other model inference ran concurrently
|
||
under this coordinator's CPU slot; unrelated VM load was not instrumented.
|
||
|
||
## Exact failure and pinned native source
|
||
|
||
Strict UTF-8 decoding rejects bytes **1137–1138** (zero-based half-open range
|
||
1137–1139). The segment text ends with bytes `E2 80` immediately before the
|
||
closing JSON quote: a three-byte UTF-8 sequence has no final continuation byte.
|
||
The last ordinary token, id 913, also ends with exactly `E2 80` at byte 28900.
|
||
Earlier token text contains complete `E2 80 8D` codepoints. Raw bytes were
|
||
inspected directly, without replacement decoding or writing repaired JSON.
|
||
|
||
The pinned native core constructs segment text by concatenating token strings.
|
||
The CLI full-JSON serializer merges adjacent token byte pieces while a codepoint
|
||
needs continuation **and another token exists**. At the last token there is no
|
||
continuation to merge; it writes the remaining incomplete bytes. Its segment
|
||
text serializer likewise writes the already incomplete segment bytes. The
|
||
escaping function only escapes quotes/backslashes; it cannot restore a missing
|
||
codepoint byte. Thus this is incomplete recognized byte output, reproduced in
|
||
both segment and token text, rather than a Python ANSI conversion or DTW time
|
||
unit error. The exact internal reason the decoder terminated this token sequence
|
||
has not been instrumented and remains unproven.
|
||
|
||
Relevant pinned source: [CLI serializer and token merging](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/examples/cli/cli.cpp),
|
||
[UTF-8 continuation helper](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/examples/common-whisper.cpp),
|
||
and [segment construction](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/src/whisper.cpp).
|
||
|
||
## Minimal next change and limits
|
||
|
||
Before changing a native worker, add a strict UTF-8 validator at its JSON boundary
|
||
for original segment strings and merged token strings. If original recognized
|
||
bytes remain invalid after adjacent-token merging, return an explicit typed
|
||
recognition-output error with bounded raw evidence; never replace characters,
|
||
truncate text, synthesize missing bytes or fabricate timestamps. Test a valid
|
||
split codepoint and an incomplete final codepoint. This makes the failure
|
||
machine-readable; it does **not** repair recognition or establish improved
|
||
retrieval. An alternative timestamp/recognition policy must be declared and
|
||
evaluated separately before any default changes.
|
||
|
||
The Python harness already fails closed, retains bounded raw bytes with SHA and
|
||
parse positions, and atomically records an incomplete, ineligible checkpoint.
|
||
The original partial DTW report contains three NASA windows with 21 valid
|
||
point-based sentence spans and one separately retained ordinary-interval error.
|
||
It lacks remaining piano windows and three other competitors. Neither that
|
||
partial report nor this one-window diagnosis can receive an accepted quality
|
||
score. Packaging, independent bilingual speech, silence/music hallucination,
|
||
resource peaks and actual production hybrid integration remain open.
|
||
|
||
## Complete frozen VAD + DTW follow-up
|
||
|
||
A subsequent separately frozen combination used the same original Silero VAD
|
||
source intersections and base DTW point policy. All five sources remained
|
||
explicit: twelve speech windows in NASA, and four no-speech competitors that
|
||
launched no ASR because of the unchanged actual VAD decisions. No label selected
|
||
the gate or removed the malformed piano window. Raw Google audio retrieval stays
|
||
unchanged. This combination finished with zero parsing/alignment failures and
|
||
21 sentence passages. Source/tool hashes were revalidated; the combination
|
||
manifest SHA is `d3bf453f21dac03fd029344af2fe700480cf686d2ba5b5d7fcc79134dda1c563`.
|
||
|
||
Independent Rust verification reconstructed every VAD window and DTW point from
|
||
raw evidence before actual Google document/query CPU inference. Both models used
|
||
one thread; indexing role retained 2048 tokens and query role 512. The normal
|
||
auto-capable Google worker reported `google/embeddinggemma-2`, 768 dimensions,
|
||
CPU and `b11461-no-logits-v1`. The scorer accepted the complete report with zero
|
||
excluded windows against the unchanged eight queries.
|
||
|
||
| Fixed metric | Ungated base | Frozen VAD base | Frozen VAD + DTW |
|
||
| --- | ---: | ---: | ---: |
|
||
| Correct top file | 8/8 | 8/8 | 8/8 |
|
||
| Strict timestamp-start hits | 4/8 | 4/8 | **6/8** |
|
||
| Labelled interval overlap | 6/8 | 6/8 | 6/8 |
|
||
|
||
The two gains against **gated base** are the Mars queries: start changed from
|
||
54.440 seconds, before the labelled 56.539–63.496 interval, to 58.820 seconds.
|
||
Moon starts changed from ungated 0.000 seconds to gated-base 1.700 seconds and
|
||
gated-DTW 1.820 seconds; both gated starts already pass the frozen 1.551–3.603
|
||
interval. Funding queries still pass. Both orange-soil queries still fail;
|
||
their top DTW point spans are 26.690–27.030 seconds, outside the topic. Correct
|
||
file identity alone does not solve this missing recognized passage.
|
||
|
||
These are four topics in **one English NASA recording**, with eight correlated
|
||
English/German search queries. They do not validate German speech or independent
|
||
accents. VAD produced no recognized passages for the four competitors, so 8/8
|
||
file identity is especially weak evidence; all five source identities remain
|
||
verified, but this is not broad music/no-answer quality. The direct recognized-
|
||
text diagnostic is not production hybrid search. No production default,
|
||
transcription integration or improved media self-rating follows.
|
||
|
||
ASR process time summed to 88090.51 ms; window decoding summed to 1784.10 ms.
|
||
This excludes probe/hash/checkpoint and the earlier VAD cost. Google indexing
|
||
session initialization plus document encoding took 3086.03 ms, query-session
|
||
startup 919.69 ms. Eight query/ranking measurements had median 96.83 ms and
|
||
nearest-rank p95 128.75 ms; these tiny shared-VM measurements are not desktop
|
||
first-input, clean-room or large-library latency. The already running user app
|
||
retained its warmed CPU model; it received no further coordinated search inputs.
|
||
|
||
| Retained ignored artifact | SHA-256 |
|
||
| --- | --- |
|
||
| `gated-base-dtw-results-v1.json` | `3b6a791df6503a7a4e91ed708be7b722d1c124a2cf6c5a290cd94296bebc3c41` |
|
||
| `gated-base-dtw-google-ranks-v1.json` | `f743265a53ade09b36fef25fe4e90b70a46cd2610a12aaa976f179ab9835fe91` |
|
||
| `gated-base-dtw-google-score-v1.json` | `4cfbc0f540ed8edcbed6e45f55fac80ee11867597152928d3407dabd7db34502` |
|
||
| Actual Google worker | `c01cb3ec13cfca722ee768e8350e1399a8b9a4d14a24a35adc3473a5cfc82a73` |
|
||
| Actual ranking executable | `58f4b1cf90cbf403220b60579d72ced9dd7bc795bd05a7386820e9ab84b5f519` |
|
||
|
||
The original failed ungated DTW and ordinary-token reports remain unchanged.
|