Bring devel into main: echo gate, per-turn timing, CI and logo work #2

Merged
troed merged 30 commits from devel into main 2026-08-07 11:19:25 +02:00
Owner

Syncs the 42 commits on devel that have accumulated since the last merge to main.

Highlights:

  • Echo gate / playback-ack: client output_audio.played ack, echo gate held until playback drain, realtime-paced echo reference feed (audio feedback prevention)
  • Per-turn latency timing: turn-timing tracker, queue get/put boundaries, TTS first-audio latency, finalization on response done / barge-in cancel
  • Native-llm STT fixes: PCM wrapped in WAV before base64, empty-transcript-with-audio handling, singleton loading guard
  • CI hardening: uv bootstrap via curl, libportaudio2, mypy/lint fixes, single sanity job
  • Deploy workflow: deploy.sh + server deploy docs, ssh background-start fix
  • Branding: new purple app logo (SVG source + 1024x1024 PNG) in the README, docs/example-script alignment with renamed computer binaries
Syncs the 42 commits on `devel` that have accumulated since the last merge to `main`. Highlights: - **Echo gate / playback-ack**: client `output_audio.played` ack, echo gate held until playback drain, realtime-paced echo reference feed (audio feedback prevention) - **Per-turn latency timing**: turn-timing tracker, queue get/put boundaries, TTS first-audio latency, finalization on response done / barge-in cancel - **Native-llm STT fixes**: PCM wrapped in WAV before base64, empty-transcript-with-audio handling, singleton loading guard - **CI hardening**: uv bootstrap via curl, libportaudio2, mypy/lint fixes, single sanity job - **Deploy workflow**: `deploy.sh` + server deploy docs, ssh background-start fix - **Branding**: new purple app logo (SVG source + 1024x1024 PNG) in the README, docs/example-script alignment with renamed `computer` binaries
When --stt native-llm is used, transcript is empty but audio_bytes are present.
The _on_transcription_completed condition was 'if transcript' which skipped
adding a user message, causing:
  1. Audio injected into wrong message or not at all → stale responses
  2. Consecutive assistant messages at end of history → llama-server 400 error

Fix: use placeholder text '[audio]' when audio is present but transcript empty.
The _serialize() method then finds the user message and injects the input_audio
content part correctly.
llama-server requires a valid WAV file for input_audio, not bare int16 PCM
samples. Added _pcm_to_wav() helper that writes a RIFF/WAV header around the
raw PCM bytes (16kHz mono int16).
Decouple from upstream fork, rename to computer, publish via Forgejo Packages
Some checks failed
CI / ruff (pull_request) Has been cancelled
CI / mypy (pull_request) Has been cancelled
CI / pytest (pull_request) Has been cancelled
CI / package (pull_request) Has been cancelled
CI / Install smoke (linux) (pull_request) Has been cancelled
CI / Install smoke (macos-arm64) (pull_request) Has been cancelled
e32e134d1b
- Rename importable module speech_to_speech -> computer (all src, tests, scripts, docs)
- Move workflows to .forgejo/ (Forgejo Actions), publish PyPI-compatible package to
  git.sync.wtf package registry instead of PyPI; drop GitHub-only artifacts
- Rewrite AGENTS.md for devel/main branch workflow + Forgejo Packages releases
- Remove unused files: Dockerfiles, demo/, archive/, star-history assets
- Make openwakeword a core dependency (wake word is core functionality)
- Fix 30 stale tests (qwen3 _setup_faster quant param, speculative-turns interrupt attrs)
chore: remove .DS_Store from repo, add to .gitignore
Some checks failed
CI / ruff (pull_request) Has been cancelled
CI / mypy (pull_request) Has been cancelled
CI / pytest (pull_request) Has been cancelled
CI / package (pull_request) Has been cancelled
CI / Install smoke (linux) (pull_request) Has been cancelled
CI / Install smoke (macos-arm64) (pull_request) Has been cancelled
aeef6d21a5
ci: simplify to single ubuntu-latest sanity job
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 33s
cb08dadb7f
ci: retrigger sanity job
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 0s
f789cf6cd0
ci: retrigger after runner URL fix
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 2s
f17f351caa
ci: install uv via curl, drop setup-uv action (node incompat)
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 3s
3264f90b61
ci: retrigger with node:24-trixie image
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 2m34s
78a00315ee
ci: fix lint and format errors that blocked the sanity job
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 2m39s
ae07e07495
fix: resolve mypy errors blocking CI (typing, None guards)
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 2m54s
9bb669da4c
ci: install libportaudio2 for sounddevice in sanity job
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 3m11s
f644fcb388
ci: include faster-whisper extra for test_model_singletons
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 3m15s
efaac30be0
test: skip real wake word model tests when computer.onnx is absent
All checks were successful
CI / Sanity check (ubuntu-latest) (pull_request) Successful in 3m26s
d73fb1656f
Merge main into devel to resolve PR #1 conflict
All checks were successful
CI / Sanity check (ubuntu-latest) (pull_request) Successful in 3m27s
d5fed8f0e1
feat: add purple app logo with white-filled interior to README
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 3m9s
a684a65aea
troed force-pushed devel from a684a65aea
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 3m9s
to d61d263f88
Some checks failed
CI / Sanity check (ubuntu-latest) (pull_request) Failing after 2m14s
2026-08-07 11:17:57 +02:00
Compare
troed merged commit 47de46b4c4 into main 2026-08-07 11:19:25 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
starfleet/computer!2
No description provided.