mirror of
https://github.com/hanzoai/attendant.git
synced 2026-09-30 20:43:25 +00:00
A meeting has one floor. At any instant one person is talking, so a room of any size needs one transcript handed from speaker to speaker rather than one per person. Measured on a real multi-party fixture: twelve in the room cost the same 17.0s as three, against 198.3s for a transcript each. Two things about the room's speaker signal had to be found by running it against the live SFU rather than assumed. It is a RANKING, sent only when it changes: a speaker stayed ranked first for thirteen seconds after her last packet, and five seconds passed with no report at all while somebody talked straight through. So the room says who is loudest, the tracks say who is still there, and the floor reads both on its own clock. Each speaker's last 1.2s of audio is kept, which is what lets a turn begin before we knew whose it was and what makes the 500ms a rival waits before taking the floor cost nothing. Co-authored-by: Hanzo Dev <[email protected]>
25 lines
1.1 KiB
Bash
Executable File
25 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# Build the multi-party fixture: three speakers, three voices, one sentence each,
|
|
# synthesized by the same hanzoai/speech that transcribes them back.
|
|
#
|
|
# Ogg opus, because that is what a browser publishes and what the attendant
|
|
# decodes — the fixture goes through the room's own path, not a shortcut.
|
|
#
|
|
# SPEECH defaults to a port-forward of svc/speech in namespace hanzo.
|
|
set -eu
|
|
SPEECH=${SPEECH:-http://127.0.0.1:8799}
|
|
cd "$(dirname "$0")"
|
|
|
|
say() { # voice, file, words
|
|
curl -sS -m 120 -X POST "$SPEECH/v1/audio/speech" \
|
|
-H 'content-type: application/json' \
|
|
-d "{\"model\":\"kokoro\",\"voice\":\"$1\",\"response_format\":\"opus\",\"input\":\"$3\"}" \
|
|
-o "$2.ogg"
|
|
printf '%s\t%s\t%s bytes\n' "$2" "$1" "$(wc -c <"$2.ogg")"
|
|
}
|
|
|
|
say af_heart ana "The index rebuild finished at four this morning, and every shard is reporting green across both regions."
|
|
say am_michael ben "Then we can cut the release today, as long as the migration test passes on the second cluster."
|
|
say af_bella cleo "I still owe you the capacity numbers, and I would rather not guess at them in front of everyone."
|
|
say am_michael nod "Mhm. Yeah."
|