Skip to content

Enable web-based LoRA/full-model training with live output#1

Open
KhryptorGraphics wants to merge 17 commits into
mainfrom
svc-fork-integration
Open

Enable web-based LoRA/full-model training with live output#1
KhryptorGraphics wants to merge 17 commits into
mainfrom
svc-fork-integration

Conversation

@KhryptorGraphics

Copy link
Copy Markdown
Owner

Summary

  • Backend training API now accepts selectable training_mode (lora | full) and architecture (como | diffusion_mel | mel_gan | svc_fork).
  • Full-model training can be started before the 30-minute clean-vocal threshold via an explicit force: true override.
  • TrainingJobManager._save_trained_adapter() now returns/persists adapter_model / serving_model_path, and _update_profile_training_state() prefers the self-contained serving artifact over the deltas-only adapter file.
  • New GET /api/v1/training/jobs/<job_id>/logs?offset=N endpoint backed by TrainingJobManager.append_job_log() / get_job_logs().
  • Frontend: TrainingConfigPanel exposes LoRA vs Full-model mode and the CoMoSVC architecture; ConversionWorkflowPage sends force: true for early full-model starts and surfaces returned warnings; LiveTrainingMonitor polls the new logs endpoint and renders a live output panel.
  • Playwright mocks/smoke spec updated for LoRA/full mode, force, logs polling, and live monitor behavior.

Verification

  • python -m py_compile src/auto_voice/web/api_training.py src/auto_voice/training/job_manager.py src/auto_voice/cli.py — clean.
  • pytest -q tests/test_training_ui_routes.py — 9 passed (4 new: config-options architecture, unknown-QA warning path, force-override full training, job logs buffering).
  • cd frontend && npm run build — clean production build.
  • cd frontend && npm run test:e2e -- training-ui.smoke.spec.ts — 3 passed.
  • Manual API smoke against a live in-process server: POST /training/jobs (lora, force=true) -> 201; GET .../logs -> real buffered lines; POST .../cancel -> 200.
  • GitNexus change-impact check on the 10 changed files: risk score 0.00, 0 test gaps (native detect_changes timed out on this box; code-review-graph equivalent used as the scoped fallback).

Commits

  • 3564457c Enable web training mode selection
  • 331b1027 Refresh agent helper metadata (unrelated .claude/helpers/* + agentdb.rvf* refresh, split out per session notes)

kp added 4 commits July 6, 2026 11:04
… local artifacts

- analyze_spectrum(.py/2.py): spectral comparison diagnostics used to chase
  the fast-note-change 'autotune' artifact and detection-percentage tuning
- create_svcfork_checkpoint.py: build svc-fork checkpoint metadata
- update_connor_profile.py: profile json updater for the Conor voice
- .gitignore: keep local debug launchers (inline flask secret), ruvector.db,
  .codegraph/, playwright live reports, and .claude/settings.local.json out
  of the repo
54 agent definitions, command templates, and hook helpers referenced by
CLAUDE.md so the tooling setup is reproducible across checkouts.
Machine-local settings (.claude/settings.local.json) stay untracked.
@cr-gpt

cr-gpt Bot commented Jul 12, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

@greptile-apps

greptile-apps Bot commented Jul 12, 2026

Copy link
Copy Markdown

Too many files changed for review. (313 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, we are unable to review this pull request

The GitHub API does not allow us to fetch diffs exceeding 20000 lines

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

kp added 2 commits July 12, 2026 18:23
…c device; add local-audio ingestion + V100 launchers

- trainer: DataLoader uses spawn context (16 workers) to avoid fork+CUDA
  deadlock after GPU ContentVec precompute; warmup scales from immutable
  scheduler base_lrs (was get_last_lr(), which compounds ExponentialLR and
  collapsed lr to ~0 on small datasets)
- encoder: ContentVecEncoder.encode aligns the HF model to the input device
  (latent CPU/CUDA mismatch surfaced by multi-sample on-the-fly extraction)
- scripts/ingest_local_audio_profile.py: reusable video/audio -> profile
  ingestion via pretrained htdemucs_ft, optional --slice-seconds clipping
- scripts/serve_local_threading.py: threading-mode server (no eventlet)
- scripts/start_v100.sh: V100 launcher, UUID GPU pin + sm70 assertion
@cr-gpt

cr-gpt Bot commented Jul 12, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

- serialize concurrent log fetches (in-flight guard) so the immediate
  poll + interval + React StrictMode double-invoke can't all fetch at
  offset 0 and append the first lines twice
- discard a log response whose jobId switched mid-flight (cancel -> start
  new run) so the old job's lines don't append into the new job's log
@cr-gpt

cr-gpt Bot commented Jul 12, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…f16 gate

- voice_profiles.list_training_samples re-anchors stored absolute sample
  paths to the store's actual location, so profiles survive data-dir
  relocation / cross-machine sync (AV-ksek)
- VocalSeparator.separate clamps a too-large segment to the model's max
  (min across sub-models for htdemucs_ft), preventing the >7.8s htdemucs
  reshape crash for every caller; api_profiles no longer passes 10.0 (AV-e4p7)
- trainer.resolve_precision downgrades bf16 -> fp16 on pre-Ampere GPUs
  (capability < sm80, e.g. V100 sm70), fail-safe on unknown capability (AV-ua0w)
- add tests/test_bugfix_paths_segment_precision.py
@cr-gpt

cr-gpt Bot commented Jul 12, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

ConversionHistoryPage crashed with 'Cannot read properties of null (reading toFixed)'
when a conversion record had rtf/processing_time_seconds === null (the !== undefined
guard let null through). Guard with typeof === 'number' so the history page renders
records missing those metrics.
@cr-gpt

cr-gpt Bot commented Jul 13, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

@cr-gpt

cr-gpt Bot commented Jul 13, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…training UI

Fixes crash 'Cannot read properties of undefined (reading toFixed)' on
checkpoint.final_loss (LoRA-only checkpoints omit web metrics). Swept the same
class on the training/profile/history path: TrainingJobQueue (null-passing
!== undefined guard), GPUMonitor, VoiceProfilePage/ConversionWorkflowPage sample
durations, and QualityMetricsPanel gauges. QualityMetrics leaves the async
metrics path (get_job_metrics -> _calculate_metrics) omits — mean_error_cents,
embedding_distance, spectral_distortion — marked optional; GaugeProps.value
widened + NaN bar-width clamped.
@cr-gpt

cr-gpt Bot commented Jul 13, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…); file 3 follow-ups (api.ts split, ConversionHistoryPage guard, fp32 mem watch)
@cr-gpt

cr-gpt Bot commented Jul 13, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…al-decoder <-> svc-fork-integration divergence)
@cr-gpt

cr-gpt Bot commented Jul 13, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…d, fp32 mem); record AV-owvr divergence assessment
@cr-gpt

cr-gpt Bot commented Jul 14, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

…n unique commits cherry-picked into hq-lora-universal-decoder)
@cr-gpt

cr-gpt Bot commented Jul 14, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

@cr-gpt

cr-gpt Bot commented Jul 14, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

@cr-gpt

cr-gpt Bot commented Jul 14, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant