Commit Graph
483 Commits
Author SHA1 Message Date
Palash Debnath c52fdd263f fix: integrate current main and finish review requirements for #2074 2026-09-17 12:10:19 +05:30
Palash Debnath 54c89453a4 Handle empty signing secrets and retry immutable Electron release tags 2026-09-17 04:16:51 +05:30
Palash Debnath 1fea27543b Harden release authorization and preserve demo playback across languages 2026-09-17 02:38:09 +05:30
Palash Debnath 6cb1200b4e Merge branch 'velixio_dev' into fix/linux-electron-setup-sidebar 2026-09-17 01:55:33 +05:30
Palash Debnath 50d01567d4 Keep read-only telemetry outside worker drain and shutdown gates 2026-09-17 01:55:23 +05:30
Palash Debnath 835a2a9964 Gate Electron publication on signing checks or an explicit unsigned exception 2026-09-17 01:43:52 +05:30
Palash Debnath 715bbbde70 Merge branch 'velixio_dev' into fix/linux-electron-setup-sidebar 2026-09-17 01:41:14 +05:30
Palash Debnath 9ca9f74255 Merge branch 'review/gpu-2149' into fix/linux-electron-setup-sidebar 2026-09-17 01:41:08 +05:30
Palash Debnath 8804ddac9a Own telemetry probes through shutdown and localize Electron metrics 2026-09-17 01:40:58 +05:30
Palash Debnath 2faaafa9fc Merge remote-tracking branch 'origin/main' into review/gpu-2149 2026-09-17 01:39:08 +05:30
Palash Debnath 18e54e2352 Sequence the Electron transition after the final Tauri draft 2026-09-17 01:29:01 +05:30
Palash Debnath 9af0fcbd89 Merge branch 'fix/macos-sidebar-titlebar' into fix/linux-electron-setup-sidebar
# Conflicts:
#	CHANGELOG.md
2026-09-17 01:21:38 +05:30
Palash Debnath a06ef166aa Merge branch 'fix/dubbing-demo-editor' into fix/linux-electron-setup-sidebar
# Conflicts:
#	CHANGELOG.md
2026-09-17 01:21:27 +05:30
Palash Debnath fc2d94d266 Merge main and resolve sidebar and disabled notification review findings 2026-09-17 01:21:27 +05:30
Palash Debnath 1f978ef3ee Merge main and preserve A/B playback position when switching samples 2026-09-17 01:20:22 +05:30
Palash Debnath 22637a7954 Align CI fixtures with safe dubbing and compact Electron documentation 2026-09-17 01:18:48 +05:30
Palash Debnath 2b0e43da05 Refresh and brand VoiceStudio installable agent skills 2026-09-17 01:10:37 +05:30
Palash Debnath 5af8fe6967 Make Electron the default desktop and refresh setup documentation 2026-09-16 22:11:59 +05:30
Palash Debnath 0b8de98783 Prepare Electron desktop releases and final Tauri sunset workflow 2026-09-16 21:24:27 +05:30
Palash Debnath f21fab4e03 Polish Electron navigation and theme, refresh README and agent skills 2026-09-16 17:25:00 +05:30
Shivendra-CoherentandClaude Opus 5 64f74e0dd2 fix: keep the backend alive on pre-Ampere NVIDIA GPUs (#2135)
On a Tesla T4 the backend exited during the first /generate with no
traceback and no HTTP response, leaving the client with
RemoteDisconnected and every later call with ConnectionRefused. Three
separate defects combined, which is why none of the reporter's
workarounds helped.

1. torch.compile(mode="reduce-overhead") captures CUDA graphs. T4
   (sm_75) passed the existing arch gate, so capture was attempted and
   aborted the process from inside the native CUDA library — below the
   interpreter, where neither the #278 eager-fallback wrapper nor any
   except clause can see it. The compile mode is now resolved per GPU:
   Ampere (sm_80) and newer keep the cudagraph mode, older cards drop to
   the non-cudagraph "default" mode and keep their compiled Inductor
   kernels. Fails open on any probe error, so no GPU that works today
   loses the optimization. OMNIVOICE_FORCE_CUDAGRAPH=1 restores it.

2. should_torch_compile() never read TORCH_COMPILE_DISABLE. main.py sets
   it on win32, build_engine_env injected it into subprocesses, and
   docs/install/windows.md tells users to export it — but the in-process
   gate ignored it, so the reporter exported the documented variable and
   still got "torch.compile applied". The gate now honours
   TORCH_COMPILE_DISABLE / TORCHDYNAMO_DISABLE / TORCHINDUCTOR_DISABLE on
   every platform, and an env opt-out on the parent propagates to engine
   subprocesses. The settings DB path is logged alongside the toggle:
   the reporter had three omnivoice.db files and edited one the backend
   never opened.

3. Settings -> Performance -> "Disable torch.compile" was rendered
   disabled outside Windows in both the Tauri and Electron UIs, so the
   one control that would have stopped this was unreachable for the
   affected Linux user. The toggle is now live on every platform, and
   build_engine_env honours it everywhere rather than only on win32.

Also arms faulthandler before torch is imported, so a fatal native
signal writes the faulting thread's Python stack to backend_err.log
instead of the process vanishing silently. This does not prevent a
crash; it makes one diagnosable. OMNIVOICE_DISABLE_FAULTHANDLER=1 skips
it.

Tests fail before / pass after, verified by stashing the source and
running the new tests against unfixed code. The crash test kills a real
child interpreter with a real SIGSEGV and requires a named Python frame
in the output. test_torch_compile_path_gate's fixture now clears the
compile-disable env vars: main.py setdefaults them on win32, so on a
Windows runner they leaked into os.environ and decided those tests.

Not verified on real hardware — no Turing GPU available. The sm_80 floor
is inferred from the crash report and from docs/hardware-notes-tesla-t4.md,
which already flagged cudagraphs on T4 as attempted by default and never
evaluated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 17:20:09 +05:30
Palash Debnath 3f1f9bf9d0 docs: refresh Electron showcase and packaging prep 2026-09-16 13:09:32 +05:30
Palash Debnath 1d5d3d873e feat: refresh support and integrations experience 2026-09-16 12:38:16 +05:30
Palash Debnath 61d52944f2 fix(dub): correct long timeline rendering and repeated ASR context 2026-09-15 20:02:18 +05:30
Palash Debnath 36ccec5e61 feat(dub): show translation output and live logs in shared agent footer 2026-09-15 19:38:20 +05:30
Palash Debnath 730c7f377c feat(dub): save custom agent translation style instructions 2026-09-15 19:10:24 +05:30
Palash Debnath 7758ccc500 fix(dub): preserve original sound outside dialogue intervals 2026-09-15 19:02:25 +05:30
Palash Debnath 0a6ea976cb fix(dub): preserve complete speech and reject silent partial output 2026-09-15 15:44:57 +05:30
debpalash d47884ed14 fix(electron): improve dubbing demo playback and editing 2026-09-15 15:36:12 +05:30
debpalash 332d09e1a0 fix(electron): register notification hit region after titlebar drag regions 2026-09-15 15:25:03 +05:30
Palash Debnath c524ea3235 fix(electron): widen persistent secondary sidebars and fit video controls 2026-09-15 15:14:22 +05:30
Palash Debnath f137333abd fix(electron): queue early video playback and pass compositing launch flag 2026-09-15 15:06:26 +05:30
Palash Debnath 3569ac2d24 fix(electron): render video preview posters and document Linux compositing workaround 2026-09-15 14:59:58 +05:30
Palash Debnath a4cfc49af2 fix(electron): polish Linux onboarding and workspace sidebar controls 2026-09-15 14:46:33 +05:30
debpalash a0e3347639 fix(electron): refine macOS sidebar and titlebar controls 2026-09-15 12:13:12 +05:30
Palash Debnath 141b42f7a6 fix: restore desktop integration contracts 2026-09-14 10:53:55 -07:00
Palash Debnath f832d616f7 feat(electron): add full VoiceStudio desktop app 2026-09-14 10:22:23 -07:00
Palash Debnath a35c7babdf docs(mcp): the first generation also downloads the model inside the budget 2026-09-10 16:16:01 -07:00
Palash Debnath bd9be744eb Merge remote-tracking branch 'origin/main' into fix/mcp-timeout-follows-backend
# Conflicts:
#	CHANGELOG.md
2026-09-10 16:15:59 -07:00
Palash Debnath e7911e3e97 fix(asr): reduced VRAM budgets only for exact OpenAI Whisper ids
Review follow-up. The budget matched model names by substring, so a custom
repo whose name contains "turbo", "small" or "base" (or a word such as
"database") got a reduced budget and could be admitted to CUDA without
enough memory. Reduced budgets now apply only to the exact OpenAI
checkpoint ids, .en variants included. Any other repository, fine-tunes
included, keeps the conservative 5.0 GB, as the engine doc says.
2026-09-10 15:33:11 -07:00
Palash Debnath d37da79b34 fix(mcp): generation waits also cover the backend's queue clock
Review follow-up. A generation first waits in the GPU pool's queue, on its
own clock (GPU_QUEUE_TIMEOUT_S, 1800 s by default), before its execution
budget starts, so a 630 s wait could still give up before the backend
returned its queue error. The generate wait now adds the queue budget.
Transcription is unchanged: run_transcribe_guarded starts its 300 s clock
at submission, so queue time already counts against it.

Parity tests pin each tool's wait above the backend's own worst case,
from ASR_TRANSCRIBE_TIMEOUT_S, GPU_QUEUE_TIMEOUT_S and generate_timeout_s
on cpu, cuda and mps. A later backend change that outgrows the MCP wait
now fails a test. A new case covers a CPU budget larger than the GPU one.
2026-09-10 15:31:14 -07:00
Palash Debnath 033f8f2f64 fix(asr): PyTorch Whisper budgets the VRAM its model needs
The CUDA preflight demanded 5.0 GB of free VRAM for every model, sized for
full large-v3. The default model is large-v3-turbo, which the pipeline
loads in fp16: about 1.6 GB of weights, not the 3.2 GiB fp32 figure in the
old comment. So a 6 GB card with nothing else resident reported 5.0 GB
free and was sent to CPU every time, although CUDA ran the same audio in
37 s against minutes on CPU.

The budget is now fp16 weights + 1.5 GB workspace (batch 16) + 0.5 GB
headroom, per model and capped at the old 5.0 GB. That is 3.6 GB for turbo
and 5.0 GB for full large-v3 and any unrecognised model. Both CPU-fallback
warnings name the model and the OMNIVOICE_ASR_VRAM_PREFLIGHT=0 opt-out.
The engine doc lists the budgets.

Fixes #2041
2026-09-10 15:06:45 -07:00
Palash Debnath 58d590a686 fix(mcp): tools wait for the backend's own budget, not a fixed 120 s
The MCP tools gave up on a backend POST after OMNIVOICE_MCP_TIMEOUT_S,
default 120 s, while the backend's own budgets run longer: 300 s for ASR,
and 300 s or more for generation. A transcription the backend would have
finished came back as an empty client-side timeout, and the abandoned
job kept holding the worker. The docstring said the timeout followed
OMNIVOICE_GENERATE_TIMEOUT_S, but it never read it.

Unset, each tool now waits for the backend's budget plus 30 s, never less
than 120 s. transcribe follows OMNIVOICE_ASR_TRANSCRIBE_TIMEOUT_S, and
generate_speech follows the larger of the GPU and CPU generation budgets,
scaled by text length like the backend. An explicit
OMNIVOICE_MCP_TIMEOUT_S still wins. docs/mcp.md says so.

Fixes #2040
2026-09-10 15:05:18 -07:00
Palash Debnath 0688c37f04 Merge pull request #2020 from debpalash/feat/engine-list-detail
feat(catalogue): engine list + detail panel, weights under their engine
2026-09-10 14:06:26 -07:00
Palash Debnath 5f3f35f134 Merge remote-tracking branch 'origin/main' into fix/darwin-eperm-exit-settle
# Conflicts:
#	CHANGELOG.md
2026-09-10 13:04:31 -07:00
Palash Debnath 32393613be Merge branch 'main' into feat/engine-list-detail 2026-09-10 13:03:00 -07:00
Palash Debnath 8cf7bebb61 fix(lifecycle): wait for a Darwin exit to register after EPERM
XNU stops signalling a process as soon as it starts exiting but posts
NOTE_EXIT later in the same exit. A KILL that lands in that window gets
EPERM while the exit probe still reads "alive", so stopping a child that
TERM had just ended could fail with "Operation not permitted". This
flaked the macOS run of contained_exit_probe_preserves_a_live_child.

The EPERM branch now re-probes for up to 250 ms before treating the error
as a live, unsignalable root. Live roots, reaped roots and probe failures
are still errors.
2026-09-10 13:02:00 -07:00
Palash Debnath 0eaa1bdc3e Merge branch 'main' into feat/catalogue-one-page 2026-09-10 12:34:20 -07:00
Palash Debnath 44d3639c02 Merge pull request #2025 from debpalash/feat/cosyvoice3-isolated
feat(engines): CosyVoice 3 installs in one click into its own venv
2026-09-10 12:33:01 -07:00
Palash Debnath ba8f6cfd15 Merge feat/catalogue-one-page (with main) into feat/engine-list-detail
Conflicts: RecoBanner (deleted here: the recommendation card is gone),
ModelStoreTab + EngineCompatibilityMatrix (this branch's rewrite kept),
supertonic3 backend (main's own-venv check kept, message without the
retired "→ Engines" step), CHANGELOG (base layout + the #2020 line).

Carried over from main and the review:
- The list row hides Install while only the license review is left
  (main's #2017 rule, now in the row; Accept lives in the panel).
- Engine action aria labels go through i18n (engines.aria*, all 21
  locales) instead of hardcoded English.
- Every "Model Catalogue → Engines/Models" path main added, plus the
  frontend strings that still named the retired panes, now point at the
  one-page catalogue.
- test_engine_unavailable_reason_1866 reads the license matcher from its
  new home, engines/engineDisplay.js.
2026-09-10 12:17:02 -07:00