{{ message }}
Repository navigation
Tags: blank-query/network-backtalk
Tags
Hands-free's idle clock counts only the device's own session's reply … …(2026-10-18: a stuck phone open mic kept its clock restarted by a peer's turn on another session, as any helper's turn would have). Check: tests/check_control_tag.py
Speech never reads markdown symbols aloud: speakable() strips asteris… …ks, backticks, emphasis underscores at word edges (snake_case kept), # headers, and line-start bullets; a star between digits is spoken as "times". Screens keep the text as written. Check: tests/check_speakable.py
backtalk.json is live: the voice line checks the file each second (mt…
…ime and size, never per message) and on a change re-reads it, updates CFG in place for the keys the file changed, and logs each ("[config] reloaded: open_mic_silence_ms 2200 -> 1800", "(at the next restart)" after a launch-only key); a file that fails to parse is logged and the old values kept. open_mic_silence_ms applies at once on every open mic (Ears reads it per frame unless given its own) and goes to every device as {"type": "settings", "open_mic_silence_ms": N}, also sent on hello, for an app's own recognizer. config.LIVE lists the keys that apply live. Check: tests/check_live_config.py
Hands-free on a phone with its own recognizer: hold its segments unti… …l the utterance ends (the Pi's ear ends it, or the phone goes quiet for open_mic_silence_ms), then send them as one message
Phone recognizer on: the server's transcript is only a backup. The ha… …nds-free utterance is captured but not transcribed (ears.DEFERRED); it is transcribed only if the phone's words never arrive within PHONE_GRACE_S, and the wait ends as soon as they do. Log lines: "[ears] phone transcript used" and "[ears] the phone heard nothing, transcribing the backup". open_mic_silence_ms default 1200 -> 2200. Check: tests/check_phone_backup.py
Idle clear and cook summary handoff, both off by default: after idle_… …clear_minutes of silence (no turn, helper, dedicated session, pending confirmation, or speech) the main session saves any unfinished task in a quiet internal turn, then clears fully, and the next person to speak is asked whether to resume it; never twice on an empty session. With cook_fresh_session, a cook-with-me session that ends writes a summary that goes to the main session to record and ask for a rating. The ears log line names the server, not the Pi. Check: tests/check_idle_clear.py
Batch attachments: the line ahead of a question reads "shared 3 attac… …hments with this message, in this order"
Batch attachments: a device may have any number of pictures and files…
… waiting, up to 50 MB together, and its next question takes them all in the order they came
web.py's Attachments holds each device's items (saved under .backtalk/images and .backtalk/files, pruning never removes one still waiting) and writes the one line that goes ahead of the question, numbered when there are several. An image or file frame may carry an "id" (echoed in its image_ok / file_ok) and come in parts ("part" from 0, "last"), so no frame nears a client's send limit (OkHttp closes the socket past a 16 MB queue). The 50 MB total, uploads in progress included, is enforced here: past it, {"type": "attach_refused", "id", "reason"} and nothing is kept. {"type": "attach_drop", "id"} discards one item; image_drop still discards everything. The identity frame carries "attach": 50 so a client knows the bridge takes batches. Older apps (whole frames, no id) work as before. main.py's separate image and file dicts are gone. Check: tests/check_attachments.py
Voice console: the matcher forgives how speech is written down, and t…
…he agent can flip the settings itself when asked
The phrase matcher refused correct commands as the phones and Whisper wrote them: a repeated name ("Jarvis. Jarvis. Push to talk mode"), a stray word after the phrase ("push to talk mode whoa", "push to talk, most", "go hands free mode"), a small mishearing ("pushed a talk mode"), "Travis" for the name, or filler ("okay Jarvis, ... please"). Now punctuation and case never matter, the name may repeat or be misheard down to 0.65, filler around it drops, and a phrase of three or more words also matches with one trailing word or at 0.9 similarity. Short phrases and clearing the session stay exact. New phrases: the hands-free timeout on or off, and more effort wordings.
<<control VERB>> in a reply runs the same console handlers on the device that asked, once the reply has finished (a clear or compact never cuts it off), without a spoken confirmation of its own: hands_free, push_to_talk, pause, resume, timeout_on, timeout_off, deep, fast, effort_<level>, compact, clear, usage. Permissions and abort stay spoken phrases only; a peer agent's session is refused. The voice-session instructions tell the agent to use it only when the person explicitly asks in that turn, and never to send them back to an exact phrase.
The hands-free timeout follows the device's caps "hf_timeout" (the app's switch, app 80); the tag records the same and sends the device {"type": "hands_free_timeout", "on"}. This machine's own mic has its own switch.
Checks: tests/check_console.py, tests/check_control_tag.py
A dedicated session's device never times out of hands-free, and a ses… …sion whose purpose mentions cooking always locks hands-free on: cooking sessions handed off with hands_free false dropped out of hands-free every 2 minutes, mid-cook.
PreviousNext
