makepad/libs/converse/Cargo.toml
Admin 3cef1eb290 Arcade binary -40%: make TTS optional, and lazy when present
libs/converse gains a default-on `tts` feature so gamemaker and route are
unaffected; Arcade takes default-features = false and re-enables it through
its existing `voice` feature. With tts off, SpeechOutput still exists and its
worker drains the queue silently, so no Arcade source changes were needed —
which also avoided colliding with concurrent edits to those files. No
capability is lost: speech is fully reachable under --features voice.

  Arcade before            25.11 MB
  Arcade after (default)   15.01 MB   (-10.10 MB, -40%)
  Arcade --features voice  26.18 MB
  hello_world              13.46 MB

Isolated by A/B in a throwaway worktree before making the real change. Of the
10.1 MB, 2.78 MB is us_lexicon.bin embedded via include_bytes!; __const alone
was 11.2 MB, larger than __text.

Also: Kokoro construction is now lazy, deferring ~327 MB until first
utterance. That already closed the RSS gap this pass was chasing — Arcade's
max RSS measures 190 MB against hello_world's 222 MB on the same method, i.e.
BELOW the baseline app, so the premised memory problem no longer exists and
was not invented into one. The lean-isolate prelude was likewise dropped after
instrumentation showed Arcade allocates no script isolate on the demo path at
all; it should be re-measured against a loaded script game before anyone
spends effort there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 09:22:03 +02:00

28 lines
1.1 KiB
TOML

[package]
name = "makepad-converse"
version = "0.1.0"
edition = "2021"
description = "Conversational voice pipeline for Makepad apps: streamed agent replies spoken as they arrive, with a pluggable transcript filter between speech-to-text and the backend LLM."
license = "MIT OR Apache-2.0"
[features]
# Speech synthesis (Kokoro). Default ON so existing consumers are unchanged,
# but separable: the model plus its embedded pronunciation lexicon is ~10 MB of
# binary and ~327 MB resident, which a build that can never speak should not
# carry. With it off, SpeechOutput still exists and every non-audio path
# behaves identically — the worker just drains its queue in silence.
default = ["tts"]
tts = ["dep:makepad-tts"]
# The local filtering LLM (QwenFilter) on makepad-llama; heavy, so opt-in.
local-llm = ["dep:makepad-llama"]
[dependencies]
makepad-widgets = { path = "../../widgets" }
makepad-ai = { path = "../makepad_ai" }
makepad-tts = { path = "../tts", optional = true }
makepad-llama = { path = "../llama", optional = true }
[[bin]]
name = "filter-repl"
path = "src/bin/filter_repl.rs"
required-features = ["local-llm"]