Skip to content

v2.7.0

Choose a tag to compare

@Thokoop Thokoop released this 27 Oct 23:42
· 8 commits to main since this release
897eb11

[2.7.0] — 2026-10-27

Added

  • GPT-Live: An optional OpenAI provider for continuous voice conversations, with separate voice and reasoning/tool models, provider-specific settings and an expanded voice catalog including Ballad. Wake-up clips and MQTT say announcements can use the selected persona's Live voice. Clip generation is experimental; failed or oversized recordings are not played or saved over existing clips. Profile changes refresh the Live session and selected voice. OpenAI Realtime and xAI remain available.
  • Live Subtitles & Transcripts: The CC button opens a GPT-Live subtitle panel that grows with its content and retains each speaker's latest turn until their next turn. Fullscreen shows the complete current-session transcript and lets you scroll back while the conversation continues. At Info or Verbose, the complete transcript is logged once at session end.
  • Bluetooth Audio: Play music and take hands-free calls through Billy, with moving lips and call echo cancellation. Pair devices in Settings, select their cards to connect or disconnect, and optionally enable Auto-connect per device. Switching devices disconnects the current device first. Billy's physical button controls playback and calls; double-tap during media playback to return to the AI assistant. Pulsing blue indicates music, steady blue indicates a call, and the idle pulse is green. AI audio yields to Bluetooth while it uses the hardware.
  • Recovery & Repair: Reinstall the current version, restore a saved previous version, recover a working configuration, or repair required system components from the web interface. Repair, Edit Configuration and Reset have separate sections; reset options start collapsed. The .env editor validates changes and detects conflicting edits. An independent recovery screen remains available if the application cannot start. Software recovery preserves settings, profiles and memories; it does not roll back system packages or upgrade Raspberry Pi OS.
  • Automated Quality Checks: Added Python and UI regressions for audio, Bluetooth, providers, updates and recovery, plus ARM64 dependency-installation checks for Python 3.11 and 3.13.

Changed

  • Software Updates: Choose Stable, Release Candidate or Beta with the minimum-stability slider. Releases use separate Python environments with locked dependencies and startup checks before activation, with fallback when checks fail. Application settings are validated by the selected release. Update offers follow the chosen stability level and remove deleted tags after a successful remote refresh. The previous Release Candidate preference is preserved. The requirements-installation step used by older updaters now constrains dependencies to the tested release versions on Python 3.11 and 3.13; their separate openWakeWord workaround remains an exception.
  • Web Interface: The responsive header uses the device hostname, displays live activity and Bluetooth status, and groups subtitles, Debug, Settings and power controls. Delayed hover labels clarify profile, memory and song actions. Reusable Beta, Deprecated and Update available badges open further information, including the matching GitHub release when available. Software controls and release notes are more compact, camera controls share a row when space allows, and profile mood data refreshes independently of live activity updates.
  • Debug & Diagnostics: Choose Billy, Web interface, Bluetooth or All services; Bluetooth includes PipeWire and WirePlumber. Logs stream while Debug is open, with white text and yellow controls, and Clear view only clears the display. Successful health and log polling stays out of the journal; other successful HTTP requests require Verbose. Microphone diagnostics report capture loss separately from delivery timing and limit repeated warnings. Startup and recovery issues use a warning badge on Debug, with details inside the panel instead of a persistent notification banner. Confirmed system-component problems link directly to Software. Temporary notifications appear below the header, and persona catalog loading is grouped into one log entry.
  • Application Layout: Assistant and web application code now live under application/, with explicit provider initialization and separate bootstrap/recovery code. Stable root launchers preserve the service-file paths used by 2.6.0 and earlier installations. Settings and user data keep their existing locations; current-source identifies the selected source tree for development.
  • Library: Internal Knowledge appears first. External Knowledge starts collapsed and has an independently expandable deprecation notice.
  • Settings: A category menu on the left opens the selected settings on the right; on mobile, the menu and editor use a back button. Unsaved changes are retained while navigating and saved together. Each category has its own URL (for example /settings/network) for bookmarks and browser history. Software has a right-aligned component-details button; its expandable list shows each system package's status and installed version, and keeps its open/closed state during live updates.
  • Wi-Fi Setup: The setup dialog guides you in three steps (choose a network, enter the password, connect) and works better on a phone; The setup hotspot opens Network settings directly, with Edit connection shown prominently until Wi-Fi is set up. Switching to another network, or saving a network after holding the button for 10 seconds, restarts Billy to join it, because the Raspberry Pi's Wi-Fi chip cannot join a new network until it restarts; other saved networks remain available as a fallback.

Fixed

  • Microphone & Playback Reliability: Reduced audio dropouts and stale-audio buildup with improved capture buffering, bounded queues and more reliable playback cleanup. Microphone startup reports a failure for the selected device instead of silently switching to a different one. Missing microphone and speaker messages explain how to check USB connections and reselect the device in Audio settings, including after restoring an older SD card image.
  • Session Cleanup: An older session finishing late can no longer stop audio or reset state owned by its successor. Shutdown waits are bounded so stopping or restarting Billy can finish when audio or transport cleanup stalls. MQTT startup and shutdown are coordinated to avoid reconnect races and errors when stopping before its worker thread has started.
  • Wi-Fi Setup Hotspot: After a Wi-Fi reset, Billy joins the saved network straight away instead of reopening the setup hotspot when joining takes longer than usual, and the hotspot no longer starts by itself when the home network drops out.
  • Changing the Hostname: Changing Device Hostname in Network settings left the old name in /etc/hosts, so Billy no longer recognised his own name. Every system command he ran afterwards logged "sudo: unable to resolve host", and that warning could show up in Wi-Fi error messages. The new name is now written to /etc/hosts as well, and a device that was renamed before updating is repaired automatically when the web interface starts.
  • Profile Selection: Voice identification asks for clarification when a name resembles an existing profile before creating another one. The web interface shows the newly active profile without reloading the page.
  • Older Installation Compatibility: Optional SPI status LED dependencies are loaded only when needed; an unavailable LED backend no longer prevents Billy from starting. The first assistant start after upgrading from a pre-workaround version automatically migrates an installed older openWakeWord to the hashed 0.6.0 package before loading the assistant, without resolving the unsupported Python 3.13 TFLite dependency. Failed migrations keep the web interface and recovery available for a retry.

Deprecated

  • External Knowledge: Configured external feeds remain available, but are planned for removal in a future release. The Web search tool is now recommended for up-to-date information.

Removed

  • Unused Replay Tool: Removed the obsolete test/replay.py development script.