Repository navigation
Release 2.2.0a3 - #62
Closed
github-actions[bot] wants to merge 31 commits into
Closed
github-actions[bot] wants to merge 31 commits into
github-actions[bot] wants to merge 31 commits into
Conversation
#43) - setup.py -> pyproject.toml (dynamic version + deps from requirements.txt); port the hivemind.binary.protocol entry point to [project.entry-points]; add __version__ to version.py; license Apache-2.0; requires-python >=3.10. - replace hand-rolled setup.py-based workflows with the gh-automations set (incl. opm-check for the plugin entry point). Verified: python -m build OK (2.1.6a1); entry point present in wheel metadata. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test: add hivescope e2e binary audio suite Stream binary/b64 audio frames from a satellite to a master running the real AudioBinaryProtocol (with stub STT/TTS/VAD/wakeword plugins) and assert RAW_AUDIO, STT_AUDIO_TRANSCRIBE/HANDLE, and b64 transcribe/speak flows are received and decoded intact. Pin hivescope in the test extra and wire the gh-automations coverage workflow to run them. Refs #45 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(license): don't declare AGPL hivemind-core as a runtime dep hivemind-core (AGPL-3.0 / NetworkCopyleft) was listed in requirements.txt, so the license check flagged it via the runtime freeze. This protocol plugin is loaded *by* a hivemind-core host, which provides the package at runtime (same pattern as the green hivemind-http/websocket-protocol plugins, which import hivemind_core.protocol without declaring it). Move it out of runtime deps; the test extra's hivescope already supplies it for the e2e suite. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
HIVEMIND-AUDIO-1 §2 requires a receiver that can not process the stated format to reject the payload rather than misinterpret the bytes. The RAW_AUDIO path did that; STT_AUDIO_TRANSCRIBE and STT_AUDIO_HANDLE did not. They built an AudioData with whatever rate and width the peer declared and handed it to the STT plugin, so a peer that declares 44100 Hz gets a plausible but wrong transcript instead of a rejection - and on the HANDLE path that wrong transcript is injected into the agent. Both STT paths now check the format first and answer with recognizer_loop:speech.recognition.unknown carrying error=unsupported_audio_format. The supported format (the §2 default, 16 kHz signed 16-bit PCM) is named once as SAMPLE_RATE/SAMPLE_WIDTH and shared with FakeMicrophone and the RAW_AUDIO check. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This cap was the last link in a chain that made the conformance harness unresolvable: harness[dev] -> hivemind-audio-binary-protocol -> hivemind_bus_client<1.0.0, against a hivemind-core that now requires >=1.0.3a1. This package's entire bus-client surface is HiveMessage, HiveMessageType and HiveMindBinaryPayloadType. All three import unchanged on 1.0.4a1, and the binary payload tags are still 0-6. HiveMessageType.THIRDPRTY, the one member 1.x removed, is not referenced anywhere in this package.
There is no listener component: there is only hivemind-core. The name was shorthand for hivemind-core with the audio binary protocol plugin enabled. Use hivemind-core, or name the plugin, where the prose called a listener a thing you run. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
HIVEMIND-AUDIO-1 §2 — a receiver that cannot process the stated format must reject the payload. The STT tags already do (#51), but a RAW_AUDIO stream at the wrong sample rate or width was logged and dropped on the floor. There is no in-band format negotiation in a raw stream, so a satellite that is never told keeps streaming into a void. The stream is now refused with the same `recognizer_loop:speech.recognition.unknown` / `unsupported_audio_format` reply the STT tags use. A raw stream is continuous, so the peer is told once rather than once per chunk; the next supported chunk clears the mark, as does a disconnect. No listener is started for a format we refuse. Wire-visible only in that a satellite which today gets silence now gets an explicit refusal naming the format this node accepts.
…#48) * refactor: consume transformer runner services from ovos-plugin-manager The utterance, dialog and metadata transformer runners are now thin subclasses of the canonical services in ovos_plugin_manager.transformer_services, keeping the enabled_plugins constructor contract used by AudioBinaryProtocol. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat: audio and tts transformer pipelines Fills the two transformer gaps in the audio binary protocol: - audio transformers run before every STT stage (handle_stt_transcribe_request, handle_stt_handle_request and the b64 transcription helper); an AudioLanguageDetector in the chain resolves a missing language, and the chain context is merged into the injected utterance message context - tts transformers post-process synthesized audio in get_tts, covering get_b64_tts, handle_speak_b64 and handle_speak_synth; they operate on a temp copy so the TTS plugin's audio cache is never mutated Config-gated and opt-in via the audio_transformers / tts_transformers config sections, same contract as the existing utterance/dialog/metadata chains. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: audio and tts transformer configuration Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
directory: "/requirements" points at a directory this repo does not have, so Dependabot has errored on every weekly run. It has never opened a single PR here; Renovate (renovate.json) does the dependency updates and does open them. The config was pure red noise, and it masked real dev-branch failures. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* docs: correct claims that no longer match the code
- docs/audio_flow.md, docs/operations.md: an unsupported audio format is not
only logged. The frame is dropped and the client is sent
recognizer_loop:speech.recognition.unknown with
{"error": "unsupported_audio_format", ...}, once per peer for a continuous
stream.
- README.md: document audio_transformers and tts_transformers in the
configuration table.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs: the once-per-peer refusal covers the mic stream only
handle_microphone_input suppresses via refused_streams; the one-shot STT
paths call _reject_audio_format on every request, so those do log per
request.
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Human review requested!