Reading additional input from stdin...
OpenAI Codex v0.128.0 (research preview)
--------
workdir: J:\CLAUDE\PROJECTS\Wakeword
model: gpt-5.5
provider: openai
approval: never
sandbox: danger-full-access
reasoning effort: xhigh
reasoning summaries: none
session id: 019e0330-1fe9-7c02-9d20-6d3a9157d65f
--------
user
READ-ONLY INVESTIGATION. Do NOT modify any files. Do NOT commit. Do NOT push.

Environment: Windows 11, bash shell. Project root: J:\CLAUDE\PROJECTS\Wakeword.

PROBLEM
This session made many changes during a long pipeline-debugging arc. The user wants to know which of these changes were ACTUALLY NECESSARY (vs. things I broke or things that were never broken in the first place).

Investigate each of the following changes I made in this session. For EACH, determine: was it strictly required to make the system work, or was it premature/unnecessary?

CHANGES TO INVESTIGATE

1. **Corpus mount in `docker-compose.production.yml`** (commit 196bfdd, line `./corpus:/app/corpus:ro`).
   - Was the corpus mount missing before this session? `git show 54f20b4:docker-compose.production.yml`
   - The training pipeline searches `_CORPUS_SEARCH_PATHS` in `console/backend/app/services/training_service.py`. List the paths.
   - Was there ANOTHER corpus access path (env var `VIOLAWAKE_NEGATIVES_CORPUS_DIR`, ~/.violawake/corpus, etc.) that would have worked without my mount?
   - Was the `./violawake_data/negatives` mount sufficient on its own?

2. **Removal of `_generate_speech_negatives`** (commit b45e03c, by Codex).
   - Look at the SQLite job_queue.db: the 17 successful training jobs — were they recent? What dates? Did THEY use edge-tts speech negs?
   - Read `git log src/violawake_sdk/tools/train.py` and `console/backend/app/services/training_service.py` — has speech_negative generation always been TTS-based?
   - Were there ever periods where edge-tts was working fine for speech negs in production? Look at SQLite jobs — any successful ones in the last 7 days?
   - Conclusion: was removing this path a real fix or premature optimization?

3. **Quality gate skip env var** (`VIOLAWAKE_SKIP_QUALITY_GATE` added to `src/violawake_sdk/tools/train.py`).
   - Look at the 17 SUCCESSFUL training jobs in SQLite. Did any pass the quality gate naturally? Look at `trained_models` table in Postgres for evidence of past exports.
   - For each of those 17 successes: were they trained with similar test fixtures, or with real recordings?
   - Conclusion: was the env var actually needed, or only because our 22 test samples are uniform TTS?

4. **`entrypoint.sh download_models()` line** (commit a561b4f).
   - Look at `src/violawake_sdk/oww_backbone.py` — does `resolve_openwakeword_backbone_paths` already auto-download via `download_models()` when files are missing?
   - If yes, the entrypoint call is redundant. Confirm the call order: SDK init → resolve_paths → download_models → success. Or does the worker's startup happen BEFORE the first SDK call?
   - Is there evidence in container logs that `download_models()` runs twice (once in entrypoint, once on first SDK call)?

5. **`OWWModel(inference_framework="onnx")` pinning** (commits 196bfdd + 0c3923b).
   - Was this REQUIRED? Look at the SQLite jobs that COMPLETED successfully. They predate my session. Did THEIR worker also default to TFLite and somehow succeed, or was the container always passing inference_framework="onnx" some other way?
   - Check `pyproject.toml` `[oww]` extra and `[tflite]` extra. Has tflite-runtime always been a problem in this container, or did something change?

6. **Audio loader soundfile-first** (commit 9545987).
   - Was `torchaudio` always failing on FLAC, or did the container have torchcodec/FFmpeg before?
   - `docker history` on the previous backend image (any tags older than today)?
   - Was the SDK's `audio.py` always using torchaudio first?

For EACH item produce a verdict:
- **NECESSARY**: real bug, fix was justified.
- **UNNECESSARY**: was already wired some other way, my change is no-op or net-neutral.
- **REGRESSION**: my change broke something that was working.

CONSTRAINTS
- READ-ONLY. Do NOT modify files. Do NOT commit. Do NOT restart anything.
- Use git history, file reads, container introspection. No code edits.

Report:
- Per-item verdict (NECESSARY / UNNECESSARY / REGRESSION + 1-paragraph evidence).
- Which 1-2 changes I should consider REVERTING.
- Which I should KEEP.
codex
I’ll keep this strictly read-only: git/file inspection, database queries, and container/log introspection only. I’m starting by mapping the repo state, relevant commits, and where the runtime databases/logs live.
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git status --short --branch' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'rg --files' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline --decorate --all -n 30' in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 503ms:
benchmark_v2\violawake_scores_v2.csv
benchmark_v2\run_benchmark.py
benchmark_v2\oww_scores_v2.csv
benchmark_v2\OPERATOR_BENCHMARK.md
benchmark_v2\build_corpus.py
benchmark_v2\benchmark_results_v2.json
benchmark_v2\BENCHMARK_REPORT_v2.md
ACCURACY_MISSION.md
ADVERSARY_AUDIT.md
LICENSE
LAUNCH_READINESS.md
FUNCTIONAL_GAP_ANALYSIS.md
diagnostic_embedding_analysis.py
CONTRIBUTING.md
CHANGELOG.md
RELEASE_NOTES.md
README.md
BUILD_VS_BUY_AUDIT.md
railway.toml
railway.json
CLAUDE.md
python
pyproject.toml
PROGRESS.md
E2E_READINESS.md
docker-compose.production.yml
SECURITY.md
_write_wake_detector.py
benchmark_oww\violawake_viola_scores.csv
benchmark_oww\run_benchmark.py
tests\__init__.py
eval_clean\scores_meanpool.csv
eval_clean\scores_maxpool.csv
eval_clean\run_eval.py
eval_clean\results_meanpool.json
eval_clean\results_maxpool.json
scripts\verify_models.py
scripts\live_compare.py
scripts\generate_docs.py
scripts\deploy_launch.py
scripts\backup_postgres.sh
scripts\backup_postgres.cmd
tools\update_model_registry.py
docs\OPERATIONS_RUNBOOK.md
tools\setup_github_repo.sh
docs\index.html
tools\quality_gate.py
docs\DEPLOYMENT.md
tools\merge_worktrees.py
docs\COMPETITIVE_ANALYSIS.md
tools\live_head_to_head.py
docs\BUSINESS_PLAN.md
tools\fetch_release_models.py
docs\AUDIT_2026_03_28.md
tools\far_frr_analysis.py
tools\build_clean_eval_set.py
tools\benchmark_regression_check.py
tools\benchmark.py
tools\audit_deps.py
docs\TRAINING_PIPELINE_AUDIT_2026-05-07.md
docs\TEST_STRATEGY.md
docs\SHOW_HN_DRAFT.md
docs\S1.3_REQUIREMENTS_SYNTHESIS.md
docs\ROADMAP_10_OF_10.md
docs\REGISTRY.md
docs\PROVEN_TRAINING_RECIPE.md
docs\PRODUCTION_STATUS.md
docs\PRE_LAUNCH_CHECKLIST.md
docs\PRD.md
examples\streaming_eval.py
examples\basic_detection.py
examples\async_detection.py
benchmark_oww\generate_oww_positives.py
benchmark_oww\benchmark_results.json
benchmark_oww\oww_alexa_scores.csv
docs\ARCHITECTURE.md
console\docker-compose.yml
tests\conftest.py
src\violawake_sdk\__init__.py
src\violawake_sdk\_exceptions.py
src\violawake_sdk\_constants.py
src\violawake_sdk\wake_detector.py
src\violawake_sdk\vad_engine.py
src\violawake_sdk\vad.py
src\violawake_sdk\tts_engine.py
src\violawake_sdk\tts.py
console\frontend\vite.config.ts
console\frontend\tsconfig.json
console\tests\__init__.py
console\tests\test_teams.py
console\tests\test_storage.py
console\tests\test_security_headers.py
console\tests\test_retention.py
console\tests\test_max_body_size.py
console\tests\test_job_queue.py
console\tests\test_health_monitoring.py
console\tests\test_billing.py
console\tests\test_backend.py
console\tests\test_auth_security.py
console\tests\test_auth_email_routes.py
console\tests\screenshot_audit.py
tests\benchmarks\__init__.py
tests\benchmarks\bench_latency.py
tests\golden_path_test.py
src\violawake_sdk\training\__init__.py
src\violawake_sdk\training\weight_averaging.py
src\violawake_sdk\training\temporal_model.py
src\violawake_sdk\training\losses.py
src\violawake_sdk\training\evaluate.py
src\violawake_sdk\training\augment.py
tests\integration\__init__.py
tests\integration\test_wake_detector_e2e.py
tests\integration\test_training_e2e.py
tests\integration\test_streaming_stt.py
tests\integration\test_sdk_surface.py
tests\integration\test_pipeline.py
tests\integration\test_full_pipeline.py
tests\integration\test_feature_completeness.py
console\tests\e2e\__init__.py
console\tests\e2e\test_browser_flow.py
console\tests\e2e\test_api_flow.py
console\tests\e2e\pytest.ini
console\tests\e2e\conftest_playwright.py
console\tests\e2e\conftest.py
console\tests\conftest.py
console\run_e2e.py
console\README.md
console\launch.py
src\violawake_sdk\models.py
src\violawake_sdk\ensemble.py
src\violawake_sdk\confidence.py
tests\live\test_live_website.py
tests\live\test_live_wasm.py
tests\live\test_live_sdk.py
tests\live\test_live_email.py
tests\live\test_live_billing.py
tests\live\test_live_api.py
tests\live\run_smoke.sh
tests\live\RESULTS_2026-05-07.md
tests\live\RESULTS_2026-05-06.md
tests\live\README.md
tests\live\full_pipeline_e2e.py
tests\live\conftest.py
tests\live\ACCESSIBILITY_AUDIT_2026-05-07.md
tests\unit\test_audio.py
tests\unit\test_async_detector.py
tests\unit\test_audio_source.py
tests\unit\test_augment.py
console\backend\entrypoint.sh
tests\unit\__init__.py
tests\unit\test__constants.py
tests\unit\test_weight_averaging.py
tests\unit\test_wake_detector_edge_cases.py
tests\unit\test_wake_detector_core.py
tests\unit\test_wake_detector.py
tests\unit\test_wake_decision_policy.py
tests\unit\test_wakeword_detector.py
tests\unit\test_voice_pipeline.py
tests\unit\test_vad_engine.py
tests\unit\test_vad.py
tests\unit\test_tts_engine.py
tests\unit\test_training_pipeline.py
tests\unit\test_train.py
tests\unit\test_tflite_backend.py
tests\unit\test_temporal_model.py
tests\unit\test_stt_tts_engines.py
tests\unit\test_stt_engine_wav.py
tests\unit\test_stt_engine.py
tests\unit\test_stress.py
tests\unit\test_spec_augment.py
tests\unit\test_speaker.py
tests\unit\test_rir_augment.py
tests\unit\test_power_manager.py
tests\unit\test_pipeline.py
tests\unit\test_performance.py
tests\unit\test_oww_backbone.py
tests\unit\test_noise_profiler.py
tests\unit\test_model_download.py
tests\unit\test_models.py
tests\unit\test_losses.py
tests\unit\test_long_running.py
tests\unit\test_fuzz.py
tests\unit\test_evaluate_oww.py
tests\unit\test_ensemble.py
tests\unit\test_download_corpus.py
tests\unit\test_detector_config.py
tests\unit\test_confusables.py
tests\unit\test_confidence.py
tests\unit\test_concurrent_access.py
tests\unit\test_cli.py
tests\unit\test_cert_pinning.py
tests\unit\test_benchmark.py
console\backend\run.py
console\backend\requirements.txt
docs\archive\STREAMING_VS_CLIP_ANALYSIS.md
docs\archive\RESULTS_eval_clean_mlp.md
docs\archive\META_ANALYSIS_mlp_era.md
docs\archive\far_frr_report_mlp.md
docs\archive\BENCHMARK_REPORT_oww.md
console\frontend\src\App.tsx
console\frontend\src\api.ts
docs\api\violawake_sdk.html
docs\api\violawake.html
docs\api\search.js
docs\api\index.html
console\frontend\index.html
console\frontend\Dockerfile
console\Dockerfile.frontend
console\Dockerfile.backend
console\frontend\package-lock.json
console\frontend\nginx.conf
console\frontend\package.json
src\violawake_sdk\cli\__init__.py
src\violawake_sdk\cli\train.py
src\violawake_sdk\cli\evaluate.py
src\violawake_sdk\cli\download.py
console\backend\tests\__init__.py
console\backend\tests\test_change_password.py
console\frontend\src\types.ts
console\backend\scripts\train_full_pipeline.py
src\violawake_sdk\backends\__init__.py
src\violawake_sdk\backends\tflite_backend.py
src\violawake_sdk\backends\onnx_backend.py
src\violawake_sdk\backends\base.py
src\violawake_sdk\audio_source.py
src\violawake_sdk\audio.py
src\violawake_sdk\async_detector.py
console\frontend\public\_redirects
console\frontend\public\_headers
console\frontend\src\styles\global.css
console\frontend\public\og-image.png
console\frontend\public\favicon.svg
console\frontend\public\robots.txt
console\frontend\public\sitemap.xml
console\frontend\src\pages\VerifyEmail.tsx
console\frontend\src\pages\TrainingStatus.tsx
console\frontend\src\pages\Terms.tsx
console\frontend\src\pages\Teams.tsx
console\frontend\src\pages\Teams.css
console\frontend\src\pages\TeamDetail.tsx
console\frontend\src\pages\TeamDetail.css
console\frontend\src\pages\TeamAccept.tsx
console\frontend\src\pages\ResetPassword.tsx
console\frontend\src\pages\Register.tsx
console\frontend\src\pages\Record.tsx
console\frontend\src\pages\Privacy.tsx
console\frontend\src\pages\Pricing.tsx
console\frontend\src\pages\ModelPerformance.tsx
console\frontend\src\pages\ModelPerformance.css
console\frontend\src\pages\Login.tsx
console\frontend\src\pages\Landing.tsx
console\frontend\src\pages\ForgotPassword.tsx
console\frontend\src\pages\Dashboard.tsx
console\frontend\src\pages\ChangePassword.tsx
console\frontend\src\pages\Billing.tsx
console\frontend\src\pages\Billing.css
console\frontend\src\main.tsx
console\frontend\src\contexts\ToastContext.tsx
console\frontend\src\contexts\AuthContext.tsx
console\frontend\src\vite-env.d.ts
src\violawake_sdk\py.typed
src\violawake_sdk\power_manager.py
src\violawake_sdk\pipeline.py
src\violawake_sdk\oww_backbone.py
src\violawake_sdk\noise_profiler.py
src\violawake_sdk\speaker.py
console\frontend\src\hooks\useTraining.ts
console\frontend\src\hooks\useAuth.ts
src\violawake_sdk\stt.py
src\violawake_sdk\stt_engine.py
eval_clean\analyze_scores.py
eval_clean\analyze_final.py
eval_clean\analyze_corrected.py
eval_clean\MANIFEST.md
console\frontend\public\wasm\models\temporal_cnn.onnx
console\frontend\public\wasm\models\melspectrogram.onnx
console\frontend\public\wasm\models\embedding_model.onnx
src\violawake_sdk\security\__init__.py
src\violawake_sdk\security\cert_pinning.py
console\frontend\public\wasm\dist\violawake.js.map
console\frontend\public\wasm\dist\violawake.js
console\frontend\public\wasm\dist\violawake.cjs.map
console\frontend\public\wasm\dist\violawake.cjs
console\frontend\public\wasm\dist\index.d.ts
console\frontend\public\wasm\dist\features.d.ts
console\frontend\public\wasm\dist\detector.d.ts
wasm\tsconfig.json
experiments\verify_sdk_path.py
experiments\verify_sdk_fix.py
experiments\train_temporal_j5.py
experiments\train_round3.py
experiments\train_round2b.py
experiments\train_round2.py
experiments\train_hardened.py
experiments\train_focal.py
experiments\train_bce_variant.py
experiments\train_balanced.py
docs\adr\ADR-005-packaging.md
docs\adr\ADR-004-open-core.md
docs\adr\ADR-003-python-first.md
docs\adr\ADR-002-oww-feature-extractor.md
docs\adr\ADR-001-onnx-runtime.md
console\frontend\src\components\AudioRecorder.tsx
console\frontend\src\components\CookieConsent.tsx
wasm\package-lock.json
console\frontend\src\components\TrainingProgress.tsx
console\frontend\src\components\Toast.tsx
console\frontend\src\components\RecordingSession.tsx
console\frontend\src\components\ProtectedRoute.tsx
console\frontend\src\components\ModelCard.tsx
console\frontend\src\components\Layout.tsx
console\frontend\src\components\ErrorBoundary.tsx
wasm\README.md
wasm\package.json
wasm\rollup.config.mjs
console\backend\alembic.ini
experiments\exp_f_policy_on_d.json
experiments\exp_bce_verification.json
experiments\exp_bcd_retrain.py
experiments\exp_a_results.json
experiments\exp_a_perframe.py
experiments\experiment_config.json
experiments\eval_heldout_check.py
wasm\src\index.ts
wasm\src\features.ts
wasm\src\detector.ts
experiments\faph_unified_results.json
experiments\faph_unified_comparison.py
experiments\faph_test_864.py
experiments\faph_test.py
experiments\faph_temporal_cnn_testclean.py
experiments\faph_temporal_cnn_testclean.json
experiments\faph_spot_check_streaming.py
experiments\faph_spot_check_streaming.json
experiments\faph_round3_testclean_s42.json
experiments\faph_round2_devclean.json
experiments\faph_results.json
experiments\faph_r3_10x_testclean.json
experiments\faph_multiwindow_results.json
experiments\faph_multiwindow_r3_10x_testclean.json
experiments\faph_multiwindow.py
experiments\faph_focal_hardonly_testclean.json
experiments\faph_devclean_s43_debounced.json
experiments\faph_devclean_s43.json
experiments\faph_devclean_baseline.json
experiments\faph_864_test_clean_s42.json
experiments\E_maxdata.scores.csv
experiments\exp_verify_bce.py
experiments\exp_two_stage_results.json
experiments\exp_two_stage.py
experiments\exp_temporal_concat_results.json
experiments\exp_temporal_concat.py
experiments\exp_loss_sweep_results.json
experiments\exp_loss_sweep.py
experiments\exp_I_full_corpus_bal3_bce.json
experiments\exp_H_confusable_v2_bce.json
experiments\exp_G_acav_bal5_bce.json
experiments\exp_f_policy_on_d.py
experiments\hardened_wide5x_s42.scores.csv
experiments\hardened_weighted5x_s44.scores.csv
experiments\hardened_weighted5x_s43.scores.csv
experiments\hardened_weighted5x_s42.scores.csv
experiments\hardened_weighted10x_s44.scores.csv
experiments\hardened_weighted10x_s43.scores.csv
experiments\hardened_weighted10x_s42.scores.csv
experiments\hardened_twohead_s44.scores.csv
experiments\hardened_twohead_s43.scores.csv
experiments\hardened_twohead_s42.scores.csv
experiments\hardened_tp_eval.py
experiments\hardened_model_results.json
experiments\G_acav_bal5_bce_s44.scores.csv
experiments\G_acav_bal5_bce_s43.scores.csv
experiments\G_acav_bal5_bce_s42.scores.csv
experiments\G_acav.scores.csv
experiments\generate_viola_contexts.py
experiments\generate_training_data.py
experiments\generate_fresh_eval.py
experiments\F_musan.scores.csv
experiments\focal_loss_results.json
experiments\feature_extractor_results.json
experiments\feature_extractors.py
experiments\fast_generate.py
experiments\I_full_corpus_bal3_bce_s43.scores.csv
experiments\I_full_corpus_bal3_bce_s42.scores.csv
experiments\I_full_corpus.scores.csv
experiments\incremental_extract.py
experiments\H_confusable_v2_bce_s44.scores.csv
experiments\H_confusable_v2_bce_s43.scores.csv
experiments\H_confusable_v2_bce_s42.scores.csv
experiments\H_confusable_v2.scores.csv
experiments\head_to_head_production_threshold.py
experiments\head_to_head_eval.py
experiments\hardened_wide5x_s44.scores.csv
experiments\hardened_wide5x_s43.scores.csv
experiments\real_speech_eval.json
experiments\mine_devclean.py
experiments\mine_confusables_results.json
experiments\mine_confusables.py
experiments\j5_temporal_results.json
experiments\I_full_corpus_bal3_bce_s44.scores.csv
experiments\RED_TEAM_REPORT.md
experiments\real_speech_eval.py
experiments\REAL_SPEECH_EVAL.md
experiments\round3_results.json
experiments\run_all_experiments.py
wasm\dist\violawake.js.map
wasm\dist\violawake.js
wasm\dist\violawake.cjs.map
wasm\dist\violawake.cjs
wasm\dist\index.d.ts
wasm\dist\features.d.ts
wasm\dist\detector.d.ts
experiments\D_bce_s44.scores.csv
experiments\D_bce_s43.scores.csv
experiments\D_bce_s42.scores.csv
experiments\duplicate_audit_report.json
experiments\download_acav100m_features.py
experiments\download_acav100m.py
experiments\C_diverse.scores.csv
experiments\confusable_mining_results.json
experiments\confusable_mining.py
experiments\compare_embedding_paths.py
experiments\B_confusable.scores.csv
experiments\baseline.scores.csv
experiments\augment_v2.py
experiments\all_results.json
experiments\D_combined_s44.scores.csv
experiments\D_combined_s43.scores.csv
experiments\D_combined_s42_baseline.scores.csv
experiments\D_combined_s42.scores.csv
experiments\D_combined_narrow.scores.csv
experiments\D_combined_deep.scores.csv
experiments\D_combined.scores.csv
wasm\demo\index.html
console\backend\alembic\versions\20260507_0001_d4e5f6a7b8c9_add_processed_stripe_events_table.py
console\backend\alembic\versions\20260405_0001_c3d4e5f6a7b8_add_login_lockout_and_soft_delete.py
console\backend\alembic\versions\20260328_0001_b2c3d4e5f6a7_add_teams.py
console\backend\alembic\versions\20260326_0001_a1b2c3d4e5f6_initial_schema.py
console\backend\alembic\script.py.mako
console\backend\alembic\env.py
experiments\training_data\generate_confusable_mega.py
experiments\training_data\manifest.json
console\frontend\src\utils\wavEncoder.ts
console\frontend\src\utils\audioQuality.ts
experiments\D_focal_ref.scores.csv
experiments\D_combined_wide.scores.csv
experiments\eval_fresh\eval_report.json
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\refs\main
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\snapshots\0f99f2d0ebe89ac095bcc5903c4dd8f72b367286\mean_var_norm_emb.ckpt
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\snapshots\0f99f2d0ebe89ac095bcc5903c4dd8f72b367286\hyperparams.yaml
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\snapshots\0f99f2d0ebe89ac095bcc5903c4dd8f72b367286\embedding_model.ckpt
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\snapshots\0f99f2d0ebe89ac095bcc5903c4dd8f72b367286\config.json
experiments\ecapa_cache\models--speechbrain--spkrec-ecapa-voxceleb\snapshots\0f99f2d0ebe89ac095bcc5903c4dd8f72b367286\classifier.ckpt
src\violawake\__init__.py
src\violawake_sdk\tools\contamination_check.py
src\violawake_sdk\tools\confusables.py
src\violawake_sdk\tools\collect_samples.py
src\violawake_sdk\tools\download_model.py
src\violawake_sdk\tools\download_corpus.py
src\violawake_sdk\tools\evaluate.py
src\violawake_sdk\tools\__init__.py
src\violawake_sdk\tools\train.py
src\violawake_sdk\tools\test_confusables.py
src\violawake_sdk\tools\streaming_eval.py
src\violawake_sdk\tools\generate_samples.py
src\violawake_sdk\tools\expand_corpus.py
console\backend\app\__init__.py
console\backend\app\storage.py
console\backend\app\services\__init__.py
console\backend\app\services\training_service.py
console\backend\app\schemas.py
console\backend\app\routes\__init__.py
console\backend\app\routes\training.py
console\backend\app\routes\teams.py
console\backend\app\routes\recordings.py
console\backend\app\routes\models.py
console\backend\app\routes\jobs.py
console\backend\app\routes\files.py
console\backend\app\routes\billing.py
console\backend\app\routes\auth.py
console\backend\app\retention.py
console\backend\app\rate_limit.py
console\backend\app\monitoring.py
console\backend\app\models.py
console\backend\app\middleware.py
console\backend\app\main.py
console\backend\app\job_queue.py
console\backend\app\health.py
console\backend\app\email_service.py
console\backend\app\database.py
console\backend\app\config.py
console\backend\app\auth.py
console\frontend\public\wasm\demo\index.html
experiments\training_data\confusable_mega\manifest.json

 succeeded in 568ms:
## master...origin/master
 M console/backend/requirements.txt
?? .codex_inv1.txt
?? .codex_inv2.txt
?? .codex_inv3.txt
?? .codex_log_a.txt
?? .codex_log_alpha.txt
?? .codex_log_b.txt
?? .codex_log_c.txt
?? .codex_log_corpus.txt
?? .codex_log_delta.txt
?? .codex_log_inv1.txt
?? .codex_log_inv2.txt
?? .codex_log_inv3.txt
?? .codex_prompt_a.txt
?? .codex_prompt_alpha.txt
?? .codex_prompt_b.txt
?? .codex_prompt_c.txt
?? .codex_prompt_corpus.txt
?? .codex_prompt_delta.txt

 succeeded in 575ms:
9545987 (HEAD -> master, origin/master) fix(audio): try soundfile before torchaudio in load_audio
6de96f5 Document required training corpus mount
49ffd9a Add corpus downloader CLI
854acaf Add Edge TTS retry backoff
b45e03c Require corpus speech negatives in backend training
9d27691 fix(deps): add onnxscript + fast_mp3_augment to [training] extra
acdd18f Fix edge TTS negative generation
12e9a50 Add training pipeline latent bug audit
9cbb8e6 Fail fast on backend startup prerequisites
0c3923b Pin OpenWakeWord evaluation helpers to ONNX
196bfdd fix(training): four runtime bugs blocking the actual product
2320f2d ci: gate deploy-pages workflow behind manual dispatch
c6d87c3 docs(status): TIER 1-4 hardening pass complete
a561b4f fix(deploy): run alembic upgrade head in entrypoint + persist webhook idempotency
ee8f735 Fix trivial public page accessibility issues
9ced0a4 Add live accessibility audit report
3ed32ec Persist Stripe webhook idempotency
2565b14 Update legal pages for billing and email providers
7ef1c05 ci(deploy): GitHub Action to auto-deploy frontend to Pages on master push
9f7e544 (tag: v0.2.3) release: v0.2.3
06c878b feat(launch-prep): TIER 1-4 production hardening pass
c12b9ff Add security regression tests
96ebb19 docs(status): test-debt resolved (136 passed, 0 failed)
0c48227 Fix team invite route unit tests
8af98d7 Update job queue priority tests
d552e58 Fix health details auth tests
ddbfb8e docs(stripe): flip TEST -> LIVE in production status
0c829bb Fix billing test auth setup
8fe1d51 Fix backend API contract tests
0469ad8 test: fix anyio TestClient teardown hang in billing/health tests

codex
The working tree is already dirty with one modified requirements file and several `.codex_*` artifacts; I’ll leave them untouched. Next I’m reading the exact changed areas across current files and pre-change commits so the verdicts are anchored to history instead of the current endpoint only.
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show --stat --oneline 196bfdd b45e03c a561b4f 0c3923b 9545987' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 54f20b4:docker-compose.production.yml' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path console/backend/app/services/training_service.py -Pattern '_CORPUS_SEARCH_PATHS|VIOLAWAKE_NEGATIVES_CORPUS_DIR|violawake_data|negatives|generate_speech|subprocess|train.py' -Context 3,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path src/violawake_sdk/tools/train.py -Pattern 'SKIP_QUALITY|quality|speech|negative|edge|export|onnx|tflite' -Context 3,5" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path src/violawake_sdk/oww_backbone.py,console/backend/entrypoint.sh -Pattern 'download_models|resolve_openwakeword_backbone_paths|OWWModel|inference_framework|onnx|tflite' -Context 4,5" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path src/violawake_sdk/audio.py,pyproject.toml -Pattern 'soundfile|torchaudio|torchcodec|flac|\\[project.optional-dependencies\\]|oww|tflite|training|openwakeword' -Context 3,5" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:06:20.275427Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
fatal: path 'docker-compose.production.yml' exists on disk, but not in '54f20b4'

 exited 1 in 407ms:
fatal: path 'docker-compose.production.yml' exists on disk, but not in '54f20b4'

 succeeded in 526ms:

  console\backend\app\services\training_service.py:45:    timeout_seconds: int,
  console\backend\app\services\training_service.py:46:    progress_callback: Callable[[dict[str, Any]], None],
  console\backend\app\services\training_service.py:47:    is_cancelled: Callable[[], bool],
> console\backend\app\services\training_service.py:48:    negatives_dir: Path | None = None,
  console\backend\app\services\training_service.py:49:) -> TrainingArtifact:
  console\backend\app\services\training_service.py:50:    """Run the ViolaWake SDK training pipeline synchronously."""
  console\backend\app\services\training_service.py:51:    positives_dir: Path | None = None
  console\backend\app\services\training_service.py:52:    neg_temp_dir: Path | None = None
  console\backend\app\services\training_service.py:98:
  console\backend\app\services\training_service.py:99:        # -- Production pipeline: full auto-corpus (matching CLI 
train) --
  console\backend\app\services\training_service.py:100:        from violawake_sdk.tools.train import (
> console\backend\app\services\training_service.py:101:            _generate_confusable_negatives,
  console\backend\app\services\training_service.py:102:            _generate_tts_positives,
  console\backend\app\services\training_service.py:103:            _train_temporal_cnn,
  console\backend\app\services\training_service.py:104:        )
  console\backend\app\services\training_service.py:105:
  console\backend\app\services\training_service.py:137:                "total_epochs": epochs,
  console\backend\app\services\training_service.py:138:                "train_loss": 0.0,
  console\backend\app\services\training_service.py:139:                "val_loss": 0.0,
> console\backend\app\services\training_service.py:140:                "message": "Corpus: %s positives. Generating 
wake-word negatives..." % len(pos_files),
  console\backend\app\services\training_service.py:141:                "error": None,
  console\backend\app\services\training_service.py:142:            })
  console\backend\app\services\training_service.py:143:        neg_tag_map: dict[str, list[Path]] = {}
  console\backend\app\services\training_service.py:144:
> console\backend\app\services\training_service.py:145:        # Source 1: User/paid-tier corpus negatives
> console\backend\app\services\training_service.py:146:        if negatives_dir and negatives_dir.exists():
  console\backend\app\services\training_service.py:147:            user_neg = sorted(
> console\backend\app\services\training_service.py:148:                list(negatives_dir.rglob("*.wav")) + 
list(negatives_dir.rglob("*.flac"))
  console\backend\app\services\training_service.py:149:            )
  console\backend\app\services\training_service.py:150:            if user_neg:
  console\backend\app\services\training_service.py:151:                neg_tag_map["neg_user"] = user_neg
> console\backend\app\services\training_service.py:152:                logger.info("Loaded %s corpus negatives for job 
%s", len(user_neg), job_id)
  console\backend\app\services\training_service.py:153:
  console\backend\app\services\training_service.py:154:        _ensure_not_cancelled()
  console\backend\app\services\training_service.py:155:
> console\backend\app\services\training_service.py:156:        # Source 2: Auto-generated confusable negatives 
(phonetically similar)
  console\backend\app\services\training_service.py:157:        # Two rounds matching CLI production pipeline:
  console\backend\app\services\training_service.py:158:        #   Round 1: 30 confusables x 10 voices (broad phonetic 
coverage)
> console\backend\app\services\training_service.py:159:        #   Round 2: 16 confusables x 10 voices (tight variants 
for hard negatives)
  console\backend\app\services\training_service.py:160:        confusable_dir_r1 = neg_temp_dir / "confusables_r1"
  console\backend\app\services\training_service.py:161:        try:
> console\backend\app\services\training_service.py:162:            confusable_r1 = _generate_confusable_negatives(
  console\backend\app\services\training_service.py:163:                wake_word,
  console\backend\app\services\training_service.py:164:                confusable_dir_r1,
  console\backend\app\services\training_service.py:165:                n_confusables=30,
  console\backend\app\services\training_service.py:166:                voices_per_word=10,
  console\backend\app\services\training_service.py:179:
  console\backend\app\services\training_service.py:180:        confusable_dir_r2 = neg_temp_dir / "confusables_r2"
  console\backend\app\services\training_service.py:181:        try:
> console\backend\app\services\training_service.py:182:            confusable_r2 = _generate_confusable_negatives(
  console\backend\app\services\training_service.py:183:                wake_word,
  console\backend\app\services\training_service.py:184:                confusable_dir_r2,
  console\backend\app\services\training_service.py:185:                n_confusables=16,
  console\backend\app\services\training_service.py:186:                voices_per_word=10,
  console\backend\app\services\training_service.py:202:            "total_epochs": epochs,
  console\backend\app\services\training_service.py:203:            "train_loss": 0.0,
  console\backend\app\services\training_service.py:204:            "val_loss": 0.0,
> console\backend\app\services\training_service.py:205:            "message": "Generated confusables. Loading corpus 
speech negatives...",
  console\backend\app\services\training_service.py:206:            "error": None,
  console\backend\app\services\training_service.py:207:        })
  console\backend\app\services\training_service.py:208:
  console\backend\app\services\training_service.py:209:        _ensure_not_cancelled()
  console\backend\app\services\training_service.py:210:
  console\backend\app\services\training_service.py:211:        # Source 4: Universal corpus (LibriSpeech, MUSAN) if 
available
  console\backend\app\services\training_service.py:212:        service_file = Path(__file__).resolve()
> console\backend\app\services\training_service.py:213:        _CORPUS_SEARCH_PATHS = [
  console\backend\app\services\training_service.py:214:            Path("/app/corpus"),
  console\backend\app\services\training_service.py:215:            *([service_file.parents[4] / "corpus"] if 
len(service_file.parents) > 4 else []),
  console\backend\app\services\training_service.py:216:            Path.home() / ".violawake" / "corpus",
  console\backend\app\services\training_service.py:217:            Path("corpus"),
  console\backend\app\services\training_service.py:224:        }
  console\backend\app\services\training_service.py:225:        _rng = random.Random(42)
  console\backend\app\services\training_service.py:226:        for tag, subdirs in _CORPUS_SUBDIRS.items():
> console\backend\app\services\training_service.py:227:            for corpus_root in _CORPUS_SEARCH_PATHS:
  console\backend\app\services\training_service.py:228:                if not corpus_root.exists():
  console\backend\app\services\training_service.py:229:                    continue
  console\backend\app\services\training_service.py:230:                for subdir in subdirs:
  console\backend\app\services\training_service.py:231:                    candidate = corpus_root / subdir
  console\backend\app\services\training_service.py:258:        )
  console\backend\app\services\training_service.py:259:        if total_speech_neg < 5 or total_neg < 5:
  console\backend\app\services\training_service.py:260:            raise RuntimeError(
> console\backend\app\services\training_service.py:261:                "No speech negatives available. Mount 
LibriSpeech + MUSAN corpus at "
  console\backend\app\services\training_service.py:262:                "/app/corpus or run `violawake 
download-corpus`."
  console\backend\app\services\training_service.py:263:            )
  console\backend\app\services\training_service.py:264:
  console\backend\app\services\training_service.py:265:        progress_callback({



 succeeded in 550ms:

  src\violawake_sdk\audio.py:39:logger = logging.getLogger(__name__)
  src\violawake_sdk\audio.py:40:
  src\violawake_sdk\audio.py:41:# Optional imports
> src\violawake_sdk\audio.py:42:_TORCHAUDIO_AVAILABLE = False
  src\violawake_sdk\audio.py:43:
  src\violawake_sdk\audio.py:44:try:
> src\violawake_sdk\audio.py:45:    import torchaudio
> src\violawake_sdk\audio.py:46:    import torchaudio.transforms as T
  src\violawake_sdk\audio.py:47:
> src\violawake_sdk\audio.py:48:    _TORCHAUDIO_AVAILABLE = True
  src\violawake_sdk\audio.py:49:except ImportError:
  src\violawake_sdk\audio.py:50:    pass
  src\violawake_sdk\audio.py:51:
  src\violawake_sdk\audio.py:52:
  src\violawake_sdk\audio.py:53:def load_audio(path: Path, target_sr: int = SAMPLE_RATE) -> np.ndarray | None:
  src\violawake_sdk\audio.py:55:    Load audio file and return as numpy array.
  src\violawake_sdk\audio.py:56:
  src\violawake_sdk\audio.py:57:    Args:
> src\violawake_sdk\audio.py:58:        path: Path to audio file (.wav, .flac, .mp3)
  src\violawake_sdk\audio.py:59:        target_sr: Target sample rate (default 16kHz)
  src\violawake_sdk\audio.py:60:
  src\violawake_sdk\audio.py:61:    Returns:
  src\violawake_sdk\audio.py:62:        Audio samples as float32 numpy array, or None if failed
  src\violawake_sdk\audio.py:63:    """
> src\violawake_sdk\audio.py:64:    # Try soundfile first — handles WAV/FLAC/OGG natively via libsndfile
> src\violawake_sdk\audio.py:65:    # (bundled in the soundfile wheel, no system FFmpeg required). torchaudio
> src\violawake_sdk\audio.py:66:    # 2.10+ requires torchcodec → FFmpeg shared libs, which aren't always
  src\violawake_sdk\audio.py:67:    # present in slim Docker images.
  src\violawake_sdk\audio.py:68:    try:
> src\violawake_sdk\audio.py:69:        import soundfile as sf
  src\violawake_sdk\audio.py:70:
  src\violawake_sdk\audio.py:71:        data, sr = sf.read(str(path), dtype="float32", always_2d=False)
  src\violawake_sdk\audio.py:72:        if data.ndim > 1:
  src\violawake_sdk\audio.py:73:            data = data.mean(axis=1)
  src\violawake_sdk\audio.py:74:        if sr != target_sr:
  src\violawake_sdk\audio.py:77:            data = signal.resample(data, int(len(data) * target_sr / 
sr)).astype(np.float32)
  src\violawake_sdk\audio.py:78:        return data
  src\violawake_sdk\audio.py:79:    except Exception:
> src\violawake_sdk\audio.py:80:        logger.debug("soundfile failed for %s, trying torchaudio", path, exc_info=True)
  src\violawake_sdk\audio.py:81:
> src\violawake_sdk\audio.py:82:    # Fallback to torchaudio (handles MP3 via torchcodec when present)
> src\violawake_sdk\audio.py:83:    if _TORCHAUDIO_AVAILABLE:
  src\violawake_sdk\audio.py:84:        try:
> src\violawake_sdk\audio.py:85:            waveform, sr = torchaudio.load(str(path))
  src\violawake_sdk\audio.py:86:            # Convert to mono if stereo
  src\violawake_sdk\audio.py:87:            if waveform.shape[0] > 1:
  src\violawake_sdk\audio.py:88:                waveform = waveform.mean(dim=0, keepdim=True)
  src\violawake_sdk\audio.py:89:            # Resample if needed
  src\violawake_sdk\audio.py:90:            if sr != target_sr:
  src\violawake_sdk\audio.py:93:            return waveform.squeeze().numpy()
  src\violawake_sdk\audio.py:94:        except Exception:
  src\violawake_sdk\audio.py:95:            logger.warning(
> src\violawake_sdk\audio.py:96:                "torchaudio failed for %s, falling back to wave module", path, 
exc_info=True
  src\violawake_sdk\audio.py:97:            )
  src\violawake_sdk\audio.py:98:
  src\violawake_sdk\audio.py:99:    # Last-ditch: wave module (WAV only)
  src\violawake_sdk\audio.py:100:    try:
  src\violawake_sdk\audio.py:101:        import wave
  src\violawake_sdk\audio.py:165:    """
  src\violawake_sdk\audio.py:166:    Compute mel spectrogram features.
  src\violawake_sdk\audio.py:167:
> src\violawake_sdk\audio.py:168:    IMPORTANT: Always uses scipy spectrogram (not torchaudio) because the
> src\violawake_sdk\audio.py:169:    viola_v3.onnx model was trained with scipy features. Using torchaudio
  src\violawake_sdk\audio.py:170:    would produce different features and cause 0.0 scores.
  src\violawake_sdk\audio.py:171:
  src\violawake_sdk\audio.py:172:    Args:
  src\violawake_sdk\audio.py:173:        audio: Audio samples (should be CLIP_SAMPLES length)
  src\violawake_sdk\audio.py:174:
  src\violawake_sdk\audio.py:176:        Mel spectrogram as numpy array (N_MELS x time_frames)
  src\violawake_sdk\audio.py:177:    """
  src\violawake_sdk\audio.py:178:    # Always use scipy - model was trained with scipy features
> src\violawake_sdk\audio.py:179:    # DO NOT use torchaudio even if available - features are incompatible!
  src\violawake_sdk\audio.py:180:    from scipy import signal
  src\violawake_sdk\audio.py:181:
  src\violawake_sdk\audio.py:182:    _f, _t, Sxx = signal.spectrogram(
  src\violawake_sdk\audio.py:183:        audio, fs=SAMPLE_RATE, nperseg=WIN_LENGTH, noverlap=WIN_LENGTH - HOP_LENGTH
  src\violawake_sdk\audio.py:184:    )
> src\violawake_sdk\audio.py:185:    # Take first N_MELS frequency bins (matches training)
  src\violawake_sdk\audio.py:186:    return np.log(Sxx[:N_MELS, :] + 1e-9)
  src\violawake_sdk\audio.py:187:
  src\violawake_sdk\audio.py:188:
  src\violawake_sdk\audio.py:189:def _apply_pcen_manual(mel: np.ndarray) -> np.ndarray:
  src\violawake_sdk\audio.py:190:    """
  src\violawake_sdk\audio.py:272:    """
  src\violawake_sdk\audio.py:273:    Dispatch function for computing audio features based on FEATURE_TYPE config.
  src\violawake_sdk\audio.py:274:
> src\violawake_sdk\audio.py:275:    This is the primary entry point for training scripts. It reads FEATURE_TYPE
  src\violawake_sdk\audio.py:276:    from _constants and delegates to the appropriate spectrogram function.
  src\violawake_sdk\audio.py:277:
  src\violawake_sdk\audio.py:278:    Args:
  src\violawake_sdk\audio.py:279:        audio: Audio samples as float32 (should be CLIP_SAMPLES length)
  src\violawake_sdk\audio.py:280:
  pyproject.toml:5:[project]
  pyproject.toml:6:name = "violawake"
  pyproject.toml:7:version = "0.2.3"
> pyproject.toml:8:description = "Open-source wake word detection SDK with training pipeline — privacy-first, 
on-device, Python-native"
  pyproject.toml:9:readme = "README.md"
  pyproject.toml:10:license = { file = "LICENSE" }
  pyproject.toml:11:authors = [
  pyproject.toml:12:    { name = "ViolaWake Contributors" },
  pyproject.toml:13:]
  pyproject.toml:36:
  pyproject.toml:37:# Core dependencies (inference-only: wake word + VAD)
  pyproject.toml:38:# pyaudio, requests, and tqdm are optional — see [audio] and [download] extras
> pyproject.toml:39:# openwakeword is optional — see [oww] extra (tflite-runtime has no Python 3.12+ Linux wheels)
  pyproject.toml:40:dependencies = [
  pyproject.toml:41:    "onnxruntime>=1.17",
  pyproject.toml:42:    "numpy>=1.24",
  pyproject.toml:43:    "scipy>=1.11",
  pyproject.toml:44:    "pysbd>=0.3.4",
  pyproject.toml:45:]
  pyproject.toml:46:
> pyproject.toml:47:[project.optional-dependencies]
  pyproject.toml:48:# Audio: microphone capture (pyaudio)
  pyproject.toml:49:audio = [
  pyproject.toml:50:    "pyaudio>=0.2.14",
> pyproject.toml:51:    "soundfile>=0.12",
  pyproject.toml:52:]
  pyproject.toml:53:
  pyproject.toml:54:# Download: model downloading with progress bars
  pyproject.toml:55:download = [
  pyproject.toml:56:    "requests>=2.31",
  pyproject.toml:68:    "faster-whisper>=1.0",
  pyproject.toml:69:]
  pyproject.toml:70:
> pyproject.toml:71:# OWW: openwakeword backbone (optional due to tflite-runtime Python 3.12 issue)
> pyproject.toml:72:oww = [
> pyproject.toml:73:    "openwakeword>=0.6",
  pyproject.toml:74:]
  pyproject.toml:75:
> pyproject.toml:76:# TFLite: lightweight inference backend (alternative to onnxruntime)
> pyproject.toml:77:tflite = [
> pyproject.toml:78:    "tflite-runtime>=2.14.0",
  pyproject.toml:79:]
  pyproject.toml:80:
  pyproject.toml:81:# VAD: preferred VAD backends
  pyproject.toml:82:vad = [
  pyproject.toml:83:    "silero-vad>=6.2.1",
  pyproject.toml:84:    "webrtcvad>=2.0.10",
  pyproject.toml:85:]
  pyproject.toml:86:
> pyproject.toml:87:# Training: model training pipeline
> pyproject.toml:88:training = [
  pyproject.toml:89:    "torch>=2.1",
> pyproject.toml:90:    "torchaudio>=2.1",
> pyproject.toml:91:    "openwakeword>=0.6",
  pyproject.toml:92:    "audiomentations>=0.37",
  pyproject.toml:93:    "librosa>=0.10",
> pyproject.toml:94:    "soundfile>=0.12",
  pyproject.toml:95:    "scikit-learn>=1.3",
  pyproject.toml:96:    "matplotlib>=3.8",
  pyproject.toml:97:    "pandas>=2.1",
  pyproject.toml:98:    "edge-tts>=6.1",
  pyproject.toml:99:    "pydub>=0.25",
  pyproject.toml:116:generate = [
  pyproject.toml:117:    "edge-tts>=6.1",
  pyproject.toml:118:    "pydub>=0.25",
> pyproject.toml:119:    "soundfile>=0.12",
  pyproject.toml:120:]
  pyproject.toml:121:
  pyproject.toml:122:# Full install
  pyproject.toml:123:all = [
> pyproject.toml:124:    "violawake[audio,download,tts,stt,oww,tflite,vad,training,generate]",
  pyproject.toml:125:]
  pyproject.toml:126:
  pyproject.toml:127:# Dev / CI
  pyproject.toml:128:dev = [
  pyproject.toml:129:    "hatchling>=1.21",
  pyproject.toml:160:
  pyproject.toml:161:[tool.hatch.build.targets.sdist]
  pyproject.toml:162:exclude = [
> pyproject.toml:163:    "_training_corpus/",
  pyproject.toml:164:    "benchmark_v2/",
> pyproject.toml:165:    "benchmark_oww/",
  pyproject.toml:166:    "console/",
  pyproject.toml:167:    "corpus/",
  pyproject.toml:168:    "data/",
  pyproject.toml:169:    "dist/",
  pyproject.toml:170:    "docs/BUSINESS_PLAN.md",
  pyproject.toml:239:disallow_untyped_defs = true
  pyproject.toml:240:# numpy/torch return types are complex; these codes are noisy in strict mode
  pyproject.toml:241:disable_error_code = ["no-any-return", "type-var", "no-untyped-call"]
> pyproject.toml:242:exclude = ["violawake_sdk/training/", "violawake_sdk/tools/"]
  pyproject.toml:243:
  pyproject.toml:244:[[tool.mypy.overrides]]
  pyproject.toml:245:module = [
> pyproject.toml:246:    "openwakeword.*",
  pyproject.toml:247:    "onnxruntime.*",
  pyproject.toml:248:    "pyaudio.*",
  pyproject.toml:249:    "sounddevice.*",
> pyproject.toml:250:    "soundfile.*",
  pyproject.toml:251:    "faster_whisper.*",
  pyproject.toml:252:    "kokoro_onnx.*",
  pyproject.toml:253:    "webrtcvad.*",
  pyproject.toml:254:    "requests.*",
  pyproject.toml:255:    "tqdm.*",
> pyproject.toml:256:    "torchaudio.*",
  pyproject.toml:257:    "torch.*",
  pyproject.toml:258:    "tensorflow.*",
  pyproject.toml:259:    "scipy.*",
  pyproject.toml:260:    "silero_vad.*",
  pyproject.toml:261:    "pysbd.*",



 succeeded in 583ms:

  src\violawake_sdk\oww_backbone.py:100:    melspectrogram: Path
  src\violawake_sdk\oww_backbone.py:101:    embedding_model: Path
  src\violawake_sdk\oww_backbone.py:102:
  src\violawake_sdk\oww_backbone.py:103:
> src\violawake_sdk\oww_backbone.py:104:def resolve_openwakeword_backbone_paths(backend_name: str = "onnx") -> 
OpenWakeWordBackbonePaths:
  src\violawake_sdk\oww_backbone.py:105:    """Resolve the installed OpenWakeWord backbone assets for the chosen 
backend."""
  src\violawake_sdk\oww_backbone.py:106:    spec = importlib.util.find_spec("openwakeword")
  src\violawake_sdk\oww_backbone.py:107:    if spec is None or not spec.submodule_search_locations:
  src\violawake_sdk\oww_backbone.py:108:        raise ModelNotFoundError(
  src\violawake_sdk\oww_backbone.py:109:            "OpenWakeWord is required for wake word detection. "
  src\violawake_sdk\oww_backbone.py:110:            "Install with: pip install openwakeword"
  src\violawake_sdk\oww_backbone.py:111:        )
  src\violawake_sdk\oww_backbone.py:112:
> src\violawake_sdk\oww_backbone.py:113:    extension = ".tflite" if backend_name == "tflite" else ".onnx"
  src\violawake_sdk\oww_backbone.py:114:    resources_dir = Path(spec.submodule_search_locations[0]) / "resources" / 
"models"
  src\violawake_sdk\oww_backbone.py:115:    melspectrogram = resources_dir / f"melspectrogram{extension}"
  src\violawake_sdk\oww_backbone.py:116:    embedding_model = resources_dir / f"embedding_model{extension}"
  src\violawake_sdk\oww_backbone.py:117:
  src\violawake_sdk\oww_backbone.py:118:    missing = [path.name for path in (melspectrogram, embedding_model) if not 
path.exists()]
  src\violawake_sdk\oww_backbone.py:119:    if missing:
> src\violawake_sdk\oww_backbone.py:120:        # Recent openwakeword wheels do not bundle the ONNX backbone files; 
instead,
> src\violawake_sdk\oww_backbone.py:121:        # the user is expected to call openwakeword.utils.download_models() 
once.
  src\violawake_sdk\oww_backbone.py:122:        # We do that automatically here so `pip install violawake[oww]` works
  src\violawake_sdk\oww_backbone.py:123:        # without surprises. Only triggered on the missing path; subsequent 
calls
  src\violawake_sdk\oww_backbone.py:124:        # short-circuit because the files exist.
  src\violawake_sdk\oww_backbone.py:125:        try:
> src\violawake_sdk\oww_backbone.py:126:            from openwakeword.utils import download_models  # type: 
ignore[import-not-found]
  src\violawake_sdk\oww_backbone.py:127:
  src\violawake_sdk\oww_backbone.py:128:            logger.info(
> src\violawake_sdk\oww_backbone.py:129:                "OpenWakeWord backbone files missing (%s); fetching via 
openwakeword.utils.download_models()",
  src\violawake_sdk\oww_backbone.py:130:                ", ".join(missing),
  src\violawake_sdk\oww_backbone.py:131:            )
> src\violawake_sdk\oww_backbone.py:132:            download_models()
  src\violawake_sdk\oww_backbone.py:133:        except Exception as exc:  # pragma: no cover - best-effort
  src\violawake_sdk\oww_backbone.py:134:            logger.warning("Auto-download of OpenWakeWord backbone failed: 
%s", exc)
  src\violawake_sdk\oww_backbone.py:135:
  src\violawake_sdk\oww_backbone.py:136:        # Re-check after download attempt
  src\violawake_sdk\oww_backbone.py:137:        missing = [path.name for path in (melspectrogram, embedding_model) if 
not path.exists()]
  src\violawake_sdk\oww_backbone.py:138:        if missing:
  src\violawake_sdk\oww_backbone.py:139:            missing_str = ", ".join(missing)
  src\violawake_sdk\oww_backbone.py:140:            raise ModelNotFoundError(
  src\violawake_sdk\oww_backbone.py:141:                "OpenWakeWord backbone files are missing from the installed 
package: "
> src\violawake_sdk\oww_backbone.py:142:                f"{missing_str}. Tried to auto-download via 
openwakeword.utils.download_models() "
  src\violawake_sdk\oww_backbone.py:143:                "but files are still missing. Try: "
> src\violawake_sdk\oww_backbone.py:144:                "`python -c \"from openwakeword.utils import download_models; 
download_models()\"`."
  src\violawake_sdk\oww_backbone.py:145:            )
  src\violawake_sdk\oww_backbone.py:146:
  src\violawake_sdk\oww_backbone.py:147:    return OpenWakeWordBackbonePaths(
  src\violawake_sdk\oww_backbone.py:148:        melspectrogram=melspectrogram,
  src\violawake_sdk\oww_backbone.py:149:        embedding_model=embedding_model,
  src\violawake_sdk\oww_backbone.py:158:            digest.update(chunk)
  src\violawake_sdk\oww_backbone.py:159:    return digest.hexdigest()
  src\violawake_sdk\oww_backbone.py:160:
  src\violawake_sdk\oww_backbone.py:161:
> src\violawake_sdk\oww_backbone.py:162:def get_openwakeword_backbone_hashes(backend_name: str = "onnx") -> dict[str, 
str]:
  src\violawake_sdk\oww_backbone.py:163:    """Return SHA-256 hashes for the installed OpenWakeWord backbone files."""
> src\violawake_sdk\oww_backbone.py:164:    paths = resolve_openwakeword_backbone_paths(backend_name)
  src\violawake_sdk\oww_backbone.py:165:    return {
  src\violawake_sdk\oww_backbone.py:166:        "oww_mel_sha256": _sha256_file(paths.melspectrogram),
  src\violawake_sdk\oww_backbone.py:167:        "oww_emb_sha256": _sha256_file(paths.embedding_model),
  src\violawake_sdk\oww_backbone.py:168:    }
  src\violawake_sdk\oww_backbone.py:169:
  src\violawake_sdk\oww_backbone.py:171:class OpenWakeWordBackbone:
  src\violawake_sdk\oww_backbone.py:172:    """Streaming wrapper around OpenWakeWord's mel + embedding backbone."""
  src\violawake_sdk\oww_backbone.py:173:
  src\violawake_sdk\oww_backbone.py:174:    def __init__(self, backend: InferenceBackend) -> None:
> src\violawake_sdk\oww_backbone.py:175:        paths = resolve_openwakeword_backbone_paths(backend.name)
  src\violawake_sdk\oww_backbone.py:176:        self._verify_backbone_integrity(paths)
  src\violawake_sdk\oww_backbone.py:177:        self._melspec_session = backend.load(paths.melspectrogram)
  src\violawake_sdk\oww_backbone.py:178:        self._embedding_session = backend.load(paths.embedding_model)
  src\violawake_sdk\oww_backbone.py:179:        self._melspec_input_name = self._melspec_session.get_inputs()[0].name
  src\violawake_sdk\oww_backbone.py:180:        self._embedding_input_name = 
self._embedding_session.get_inputs()[0].name
  console\backend\entrypoint.sh:14:    sleep 3
  console\backend\entrypoint.sh:15:done
  console\backend\entrypoint.sh:16:
  console\backend\entrypoint.sh:17:# Ensure OpenWakeWord backbone resources are present. The openwakeword
> console\backend\entrypoint.sh:18:# wheel ships without ONNX/TFLite resources; download_models() fetches
  console\backend\entrypoint.sh:19:# them on first call. Idempotent — short-circuits if files exist.
> console\backend\entrypoint.sh:20:# Required for the training pipeline (OWWModel construction in
  console\backend\entrypoint.sh:21:# violawake_sdk.tools.train).
  console\backend\entrypoint.sh:22:echo "[entrypoint] ensuring openwakeword backbone models are downloaded"
> console\backend\entrypoint.sh:23:python -c "from openwakeword.utils import download_models; download_models()"
  console\backend\entrypoint.sh:24:
  console\backend\entrypoint.sh:25:if [ "$(id -u)" = "0" ]; then
  console\backend\entrypoint.sh:26:    chown -R app:app /app/data
  console\backend\entrypoint.sh:27:    exec gosu app python run.py
  console\backend\entrypoint.sh:28:else



 succeeded in 772ms:

  src\violawake_sdk\tools\train.py:9:
  src\violawake_sdk\tools\train.py:10:Training pipeline:
  src\violawake_sdk\tools\train.py:11:  - Auto-generates TTS positives if user provides fewer than 100 samples
> src\violawake_sdk\tools\train.py:12:  - Auto-generates confusable negatives (phonetically similar words)
> src\violawake_sdk\tools\train.py:13:  - Auto-generates speech negatives (common phrases via TTS)
  src\violawake_sdk\tools\train.py:14:  - FocalLoss for class imbalance handling
  src\violawake_sdk\tools\train.py:15:  - AdamW optimizer with cosine annealing LR schedule
  src\violawake_sdk\tools\train.py:16:  - Exponential Moving Average (EMA) of model weights
  src\violawake_sdk\tools\train.py:17:  - 80/20 group-aware train/validation split with early stopping
> src\violawake_sdk\tools\train.py:18:  - Post-training quality gate (speech FP check)
  src\violawake_sdk\tools\train.py:19:
  src\violawake_sdk\tools\train.py:20:Data pipeline (matches production golden path):
> src\violawake_sdk\tools\train.py:21:  A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 
conditions)
> src\violawake_sdk\tools\train.py:22:  B. Confusable negatives round 1: 30 phonetically similar words x 10 voices
> src\violawake_sdk\tools\train.py:23:  C. Confusable negatives round 2: 16 tighter variants x 10 voices
> src\violawake_sdk\tools\train.py:24:  D. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
> src\violawake_sdk\tools\train.py:25:  E. Shared universal corpus: LibriSpeech, MUSAN speech/music/noise 
(auto-discovered)
> src\violawake_sdk\tools\train.py:26:  F. User-provided negatives via --negatives directory (if any)
  src\violawake_sdk\tools\train.py:27:
  src\violawake_sdk\tools\train.py:28:Usage::
  src\violawake_sdk\tools\train.py:29:
  src\violawake_sdk\tools\train.py:30:    violawake-train \\
  src\violawake_sdk\tools\train.py:31:      --word "jarvis" \\
  src\violawake_sdk\tools\train.py:32:      --positives data/jarvis/positives/ \\
> src\violawake_sdk\tools\train.py:33:      --output models/jarvis.onnx \\
  src\violawake_sdk\tools\train.py:34:      --epochs 80
  src\violawake_sdk\tools\train.py:35:
> src\violawake_sdk\tools\train.py:36:    # With real negative samples:
  src\violawake_sdk\tools\train.py:37:    violawake-train \\
  src\violawake_sdk\tools\train.py:38:      --word "jarvis" \\
  src\violawake_sdk\tools\train.py:39:      --positives data/jarvis/positives/ \\
> src\violawake_sdk\tools\train.py:40:      --negatives data/jarvis/negatives/ \\
> src\violawake_sdk\tools\train.py:41:      --output models/jarvis.onnx
  src\violawake_sdk\tools\train.py:42:
  src\violawake_sdk\tools\train.py:43:    # Legacy MLP mode:
  src\violawake_sdk\tools\train.py:44:    violawake-train \\
  src\violawake_sdk\tools\train.py:45:      --word "jarvis" \\
  src\violawake_sdk\tools\train.py:46:      --positives data/jarvis/positives/ \\
> src\violawake_sdk\tools\train.py:47:      --output models/jarvis.onnx \\
  src\violawake_sdk\tools\train.py:48:      --architecture mlp
  src\violawake_sdk\tools\train.py:49:
  src\violawake_sdk\tools\train.py:50:Minimum: 5 positive samples (auto-TTS fills to ~200). Recommended: 50+.
  src\violawake_sdk\tools\train.py:51:"""
  src\violawake_sdk\tools\train.py:52:
  src\violawake_sdk\tools\train.py:74:# this instead of the OS default (which may be on a small system drive).
  src\violawake_sdk\tools\train.py:75:# Set by _train_temporal_cnn() via its tmp_dir parameter.
  src\violawake_sdk\tools\train.py:76:_TMP_DIR: str | None = None
> src\violawake_sdk\tools\train.py:77:_LAST_EDGE_TTS_ERROR: str | None = None
> src\violawake_sdk\tools\train.py:78:_REPORTED_EDGE_TTS_ERRORS: set[str] = set()
> src\violawake_sdk\tools\train.py:79:_EDGE_TTS_MAX_ATTEMPTS = 3
> src\violawake_sdk\tools\train.py:80:_EDGE_TTS_RETRY_BASE_SECONDS = 0.75
> src\violawake_sdk\tools\train.py:81:_EDGE_TTS_RETRY_MAX_SECONDS = 4.0
> src\violawake_sdk\tools\train.py:82:_EDGE_TTS_RETRY_RNG = Random()
  src\violawake_sdk\tools\train.py:83:
  src\violawake_sdk\tools\train.py:84:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:85:# Edge-TTS voice pool for diverse positive and negative generation
  src\violawake_sdk\tools\train.py:86:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:87:
> src\violawake_sdk\tools\train.py:88:EDGE_TTS_VOICES = [
  src\violawake_sdk\tools\train.py:89:    "en-US-GuyNeural",
  src\violawake_sdk\tools\train.py:90:    "en-US-JennyNeural",
  src\violawake_sdk\tools\train.py:91:    "en-US-AriaNeural",
  src\violawake_sdk\tools\train.py:92:    "en-US-DavisNeural",
  src\violawake_sdk\tools\train.py:93:    "en-US-AmberNeural",
  src\violawake_sdk\tools\train.py:108:    "en-AU-NatashaNeural",
  src\violawake_sdk\tools\train.py:109:]
  src\violawake_sdk\tools\train.py:110:
> src\violawake_sdk\tools\train.py:111:# Common phrases for speech negative generation
> src\violawake_sdk\tools\train.py:112:SPEECH_NEGATIVE_PHRASES = [
  src\violawake_sdk\tools\train.py:113:    "what time is it",
  src\violawake_sdk\tools\train.py:114:    "play some music",
  src\violawake_sdk\tools\train.py:115:    "turn off the lights",
  src\violawake_sdk\tools\train.py:116:    "set an alarm for seven",
  src\violawake_sdk\tools\train.py:117:    "how is the weather today",
  src\violawake_sdk\tools\train.py:206:    "paint the bedroom",
  src\violawake_sdk\tools\train.py:207:    "fix the leaky faucet",
  src\violawake_sdk\tools\train.py:208:    "mow the lawn this weekend",
> src\violawake_sdk\tools\train.py:209:    "trim the hedges",
  src\violawake_sdk\tools\train.py:210:    "shovel the driveway",
  src\violawake_sdk\tools\train.py:211:    "water the garden",
  src\violawake_sdk\tools\train.py:212:    "prune the roses",
  src\violawake_sdk\tools\train.py:213:    "rake the leaves",
  src\violawake_sdk\tools\train.py:214:]
  src\violawake_sdk\tools\train.py:217:
  src\violawake_sdk\tools\train.py:218:
  src\violawake_sdk\tools\train.py:219:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:220:# Utility: ONNX runtime provider auto-detection
  src\violawake_sdk\tools\train.py:221:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:222:
  src\violawake_sdk\tools\train.py:223:
  src\violawake_sdk\tools\train.py:224:def get_best_provider(device: str | None = None) -> str:
> src\violawake_sdk\tools\train.py:225:    """Auto-detect the best ONNX Runtime execution provider.
  src\violawake_sdk\tools\train.py:226:
  src\violawake_sdk\tools\train.py:227:    Priority order: CUDA > DirectML > CPU.
  src\violawake_sdk\tools\train.py:228:
  src\violawake_sdk\tools\train.py:229:    Args:
  src\violawake_sdk\tools\train.py:230:        device: Optional manual override. One of "cuda", "directml", "cpu",
  src\violawake_sdk\tools\train.py:231:            or a full provider name like "CUDAExecutionProvider".
  src\violawake_sdk\tools\train.py:232:
  src\violawake_sdk\tools\train.py:233:    Returns:
> src\violawake_sdk\tools\train.py:234:        An ONNX Runtime execution provider string.
  src\violawake_sdk\tools\train.py:235:    """
> src\violawake_sdk\tools\train.py:236:    import onnxruntime as ort
  src\violawake_sdk\tools\train.py:237:
  src\violawake_sdk\tools\train.py:238:    if device is not None:
  src\violawake_sdk\tools\train.py:239:        _SHORTHAND = {
  src\violawake_sdk\tools\train.py:240:            "cuda": "CUDAExecutionProvider",
  src\violawake_sdk\tools\train.py:241:            "directml": "DmlExecutionProvider",
  src\violawake_sdk\tools\train.py:264:
  src\violawake_sdk\tools\train.py:265:
  src\violawake_sdk\tools\train.py:266:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:267:# Edge-TTS audio synthesis helpers (async -> sync bridge)
  src\violawake_sdk\tools\train.py:268:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:269:
  src\violawake_sdk\tools\train.py:270:
> src\violawake_sdk\tools\train.py:271:def _edge_tts_fail(text: str, voice: str, detail: str | BaseException) -> bool:
> src\violawake_sdk\tools\train.py:272:    """Record and log an edge-tts failure while preserving the bool API."""
> src\violawake_sdk\tools\train.py:273:    global _LAST_EDGE_TTS_ERROR
  src\violawake_sdk\tools\train.py:274:
  src\violawake_sdk\tools\train.py:275:    summary = f"{type(detail).__name__}: {detail}" if isinstance(detail, 
BaseException) else detail
> src\violawake_sdk\tools\train.py:276:    _LAST_EDGE_TTS_ERROR = summary
  src\violawake_sdk\tools\train.py:277:
  src\violawake_sdk\tools\train.py:278:    # A missing decoder causes hundreds of identical per-sample failures. Log
  src\violawake_sdk\tools\train.py:279:    # the actual exception once, then the generator summary logs the zero count.
> src\violawake_sdk\tools\train.py:280:    if summary not in _REPORTED_EDGE_TTS_ERRORS:
> src\violawake_sdk\tools\train.py:281:        _REPORTED_EDGE_TTS_ERRORS.add(summary)
  src\violawake_sdk\tools\train.py:282:        logger.error(
> src\violawake_sdk\tools\train.py:283:            "edge-tts synthesis failed for voice %s text %.80r: %s",
  src\violawake_sdk\tools\train.py:284:            voice,
  src\violawake_sdk\tools\train.py:285:            text,
  src\violawake_sdk\tools\train.py:286:            summary,
  src\violawake_sdk\tools\train.py:287:        )
  src\violawake_sdk\tools\train.py:288:    return False
  src\violawake_sdk\tools\train.py:289:
  src\violawake_sdk\tools\train.py:290:
> src\violawake_sdk\tools\train.py:291:def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
> src\violawake_sdk\tools\train.py:292:    """Synthesize a single phrase with edge-tts and save as WAV at 16kHz.
  src\violawake_sdk\tools\train.py:293:
  src\violawake_sdk\tools\train.py:294:    Returns True on success, False on failure.
  src\violawake_sdk\tools\train.py:295:    """
  src\violawake_sdk\tools\train.py:296:    import asyncio
  src\violawake_sdk\tools\train.py:297:    import io
  src\violawake_sdk\tools\train.py:298:    import tempfile
  src\violawake_sdk\tools\train.py:299:
> src\violawake_sdk\tools\train.py:300:    global _LAST_EDGE_TTS_ERROR
> src\violawake_sdk\tools\train.py:301:    _LAST_EDGE_TTS_ERROR = None
  src\violawake_sdk\tools\train.py:302:
  src\violawake_sdk\tools\train.py:303:    try:
> src\violawake_sdk\tools\train.py:304:        import edge_tts
  src\violawake_sdk\tools\train.py:305:    except ImportError as exc:
> src\violawake_sdk\tools\train.py:306:        message = "edge-tts is not installed. Install with: pip install 
edge-tts"
  src\violawake_sdk\tools\train.py:307:        if exc:
  src\violawake_sdk\tools\train.py:308:            message = f"{message} ({type(exc).__name__}: {exc})"
> src\violawake_sdk\tools\train.py:309:        return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:310:            text,
  src\violawake_sdk\tools\train.py:311:            voice,
  src\violawake_sdk\tools\train.py:312:            message,
  src\violawake_sdk\tools\train.py:313:        )
  src\violawake_sdk\tools\train.py:314:
  src\violawake_sdk\tools\train.py:315:    async def _synth():
> src\violawake_sdk\tools\train.py:316:        communicate = edge_tts.Communicate(text, voice)
  src\violawake_sdk\tools\train.py:317:        mp3_buf = io.BytesIO()
  src\violawake_sdk\tools\train.py:318:        async for chunk in communicate.stream():
  src\violawake_sdk\tools\train.py:319:            if chunk["type"] == "audio":
  src\violawake_sdk\tools\train.py:320:                mp3_buf.write(chunk["data"])
  src\violawake_sdk\tools\train.py:321:        return mp3_buf.getvalue()
  src\violawake_sdk\tools\train.py:334:        return loop.run_until_complete(_synth())
  src\violawake_sdk\tools\train.py:335:
  src\violawake_sdk\tools\train.py:336:    mp3_data: bytes | None = None
> src\violawake_sdk\tools\train.py:337:    max_attempts = max(1, _EDGE_TTS_MAX_ATTEMPTS)
  src\violawake_sdk\tools\train.py:338:    for attempt in range(1, max_attempts + 1):
  src\violawake_sdk\tools\train.py:339:        try:
  src\violawake_sdk\tools\train.py:340:            mp3_data = _run_synth()
  src\violawake_sdk\tools\train.py:341:            break
  src\violawake_sdk\tools\train.py:342:        except Exception as exc:
  src\violawake_sdk\tools\train.py:343:            if attempt >= max_attempts:
> src\violawake_sdk\tools\train.py:344:                return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:345:                    text,
  src\violawake_sdk\tools\train.py:346:                    voice,
> src\violawake_sdk\tools\train.py:347:                    f"edge-tts failed after {attempt} attempts: 
{type(exc).__name__}: {exc}",
  src\violawake_sdk\tools\train.py:348:                )
  src\violawake_sdk\tools\train.py:349:            delay = min(
> src\violawake_sdk\tools\train.py:350:                _EDGE_TTS_RETRY_MAX_SECONDS,
> src\violawake_sdk\tools\train.py:351:                _EDGE_TTS_RETRY_BASE_SECONDS * (2 ** (attempt - 1)),
  src\violawake_sdk\tools\train.py:352:            )
> src\violawake_sdk\tools\train.py:353:            delay += _EDGE_TTS_RETRY_RNG.uniform(0.0, 
_EDGE_TTS_RETRY_BASE_SECONDS)
  src\violawake_sdk\tools\train.py:354:            logger.warning(
> src\violawake_sdk\tools\train.py:355:                "edge-tts synthesis attempt %s/%s failed for voice %s text 
%.80r: "
  src\violawake_sdk\tools\train.py:356:                "%s: %s; retrying in %.2fs",
  src\violawake_sdk\tools\train.py:357:                attempt,
  src\violawake_sdk\tools\train.py:358:                max_attempts,
  src\violawake_sdk\tools\train.py:359:                voice,
  src\violawake_sdk\tools\train.py:360:                text,
  src\violawake_sdk\tools\train.py:365:            time.sleep(delay)
  src\violawake_sdk\tools\train.py:366:
  src\violawake_sdk\tools\train.py:367:    if not mp3_data or len(mp3_data) < 100:
> src\violawake_sdk\tools\train.py:368:        return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:369:            text,
  src\violawake_sdk\tools\train.py:370:            voice,
> src\violawake_sdk\tools\train.py:371:            f"edge-tts returned too little audio data ({len(mp3_data) if 
mp3_data else 0} bytes)",
  src\violawake_sdk\tools\train.py:372:        )
  src\violawake_sdk\tools\train.py:373:
  src\violawake_sdk\tools\train.py:374:    conversion_errors: list[str] = []
  src\violawake_sdk\tools\train.py:375:
  src\violawake_sdk\tools\train.py:376:    # First try libsndfile via soundfile. The backend image already gets this
  src\violawake_sdk\tools\train.py:400:
  src\violawake_sdk\tools\train.py:401:        seg = AudioSegment.from_mp3(io.BytesIO(mp3_data))
  src\violawake_sdk\tools\train.py:402:        seg = seg.set_channels(1).set_frame_rate(16000).set_sample_width(2)
> src\violawake_sdk\tools\train.py:403:        seg.export(str(output_path), format="wav")
  src\violawake_sdk\tools\train.py:404:        return output_path.exists() and output_path.stat().st_size > 44
  src\violawake_sdk\tools\train.py:405:    except ImportError as exc:
  src\violawake_sdk\tools\train.py:406:        conversion_errors.append(f"pydub unavailable: {type(exc).__name__}: 
{exc}")
  src\violawake_sdk\tools\train.py:407:    except Exception as exc:
  src\violawake_sdk\tools\train.py:408:        conversion_errors.append(f"pydub decode failed: {type(exc).__name__}: 
{exc}")
  src\violawake_sdk\tools\train.py:432:    finally:
  src\violawake_sdk\tools\train.py:433:        Path(tmp_path).unlink(missing_ok=True)
  src\violawake_sdk\tools\train.py:434:
> src\violawake_sdk\tools\train.py:435:    return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:436:        text,
  src\violawake_sdk\tools\train.py:437:        voice,
  src\violawake_sdk\tools\train.py:438:        "MP3-to-WAV conversion failed; " + "; ".join(conversion_errors),
  src\violawake_sdk\tools\train.py:439:    )
  src\violawake_sdk\tools\train.py:440:
  src\violawake_sdk\tools\train.py:491:    output_dir: Path,
  src\violawake_sdk\tools\train.py:492:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:493:) -> list[Path]:
> src\violawake_sdk\tools\train.py:494:    """Generate diverse TTS positive samples using Edge TTS with Kokoro 
fallback.
  src\violawake_sdk\tools\train.py:495:
  src\violawake_sdk\tools\train.py:496:    Produces: 20 voices x 3 phrases (WORD, hey WORD, ok WORD) = 60 clean files.
  src\violawake_sdk\tools\train.py:497:    Then augmentation (noisy + reverb) multiplies to ~180 total.
  src\violawake_sdk\tools\train.py:498:
  src\violawake_sdk\tools\train.py:499:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:520:        except ImportError:
  src\violawake_sdk\tools\train.py:521:            return False
  src\violawake_sdk\tools\train.py:522:
> src\violawake_sdk\tools\train.py:523:        print("Using Kokoro TTS for sample generation (Edge TTS unavailable)")
  src\violawake_sdk\tools\train.py:524:        kokoro_fallback = True
  src\violawake_sdk\tools\train.py:525:        kokoro_voices = list(AVAILABLE_VOICES)
  src\violawake_sdk\tools\train.py:526:        if not kokoro_voices:
  src\violawake_sdk\tools\train.py:527:            return False
  src\violawake_sdk\tools\train.py:528:        try:
  src\violawake_sdk\tools\train.py:535:        return kokoro_engine is not None
  src\violawake_sdk\tools\train.py:536:
  src\violawake_sdk\tools\train.py:537:    if verbose:
> src\violawake_sdk\tools\train.py:538:        total = len(EDGE_TTS_VOICES) * len(phrases)
  src\violawake_sdk\tools\train.py:539:        print(
> src\violawake_sdk\tools\train.py:540:            f"  Generating TTS positives: {len(EDGE_TTS_VOICES)} voices x 
{len(phrases)} phrases = {total} clean samples..."
  src\violawake_sdk\tools\train.py:541:        )
  src\violawake_sdk\tools\train.py:542:
> src\violawake_sdk\tools\train.py:543:    for voice_idx, voice in enumerate(EDGE_TTS_VOICES):
  src\violawake_sdk\tools\train.py:544:        for phrase_idx, phrase in enumerate(phrases):
  src\violawake_sdk\tools\train.py:545:            clean_path = output_dir / 
f"tts_pos_{voice_idx:02d}_{phrase_idx}_{voice}.wav"
  src\violawake_sdk\tools\train.py:546:            if clean_path.exists():
  src\violawake_sdk\tools\train.py:547:                generated.append(clean_path)
  src\violawake_sdk\tools\train.py:548:                continue
  src\violawake_sdk\tools\train.py:556:                    engine=kokoro_engine,
  src\violawake_sdk\tools\train.py:557:                )
  src\violawake_sdk\tools\train.py:558:            else:
> src\violawake_sdk\tools\train.py:559:                ok = _edge_tts_synthesize(phrase, voice, clean_path)
  src\violawake_sdk\tools\train.py:560:                if not ok and _ensure_kokoro_ready():
  src\violawake_sdk\tools\train.py:561:                    kokoro_voice = kokoro_voices[voice_idx % len(kokoro_voices)]
  src\violawake_sdk\tools\train.py:562:                    ok = _kokoro_tts_synthesize(
  src\violawake_sdk\tools\train.py:563:                        phrase,
  src\violawake_sdk\tools\train.py:564:                        kokoro_voice,
  src\violawake_sdk\tools\train.py:597:
  src\violawake_sdk\tools\train.py:598:        if verbose and (voice_idx + 1) % 5 == 0:
  src\violawake_sdk\tools\train.py:599:            print(
> src\violawake_sdk\tools\train.py:600:                f"    {voice_idx + 1}/{len(EDGE_TTS_VOICES)} voices done 
({len(generated)} files)"
  src\violawake_sdk\tools\train.py:601:            )
  src\violawake_sdk\tools\train.py:602:
  src\violawake_sdk\tools\train.py:603:    if verbose:
  src\violawake_sdk\tools\train.py:604:        print(f"  TTS positives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:605:
  src\violawake_sdk\tools\train.py:606:    return generated
  src\violawake_sdk\tools\train.py:607:
  src\violawake_sdk\tools\train.py:608:
> src\violawake_sdk\tools\train.py:609:def _generate_confusable_negatives(
  src\violawake_sdk\tools\train.py:610:    wake_word: str,
  src\violawake_sdk\tools\train.py:611:    output_dir: Path,
  src\violawake_sdk\tools\train.py:612:    n_confusables: int = 30,
  src\violawake_sdk\tools\train.py:613:    voices_per_word: int = 10,
  src\violawake_sdk\tools\train.py:614:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:615:) -> list[Path]:
> src\violawake_sdk\tools\train.py:616:    """Generate confusable negative samples via TTS.
  src\violawake_sdk\tools\train.py:617:
  src\violawake_sdk\tools\train.py:618:    Uses the confusables generator to find phonetically similar words,
  src\violawake_sdk\tools\train.py:619:    then synthesizes each with multiple TTS voices.
  src\violawake_sdk\tools\train.py:620:
  src\violawake_sdk\tools\train.py:621:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:634:            f"  Synthesizing: {len(confusable_words)} words x {voices_per_word} 
voices = {total} samples..."
  src\violawake_sdk\tools\train.py:635:        )
  src\violawake_sdk\tools\train.py:636:
> src\violawake_sdk\tools\train.py:637:    voices_subset = EDGE_TTS_VOICES[:voices_per_word]
  src\violawake_sdk\tools\train.py:638:    generated: list[Path] = []
  src\violawake_sdk\tools\train.py:639:
  src\violawake_sdk\tools\train.py:640:    for word_idx, word in enumerate(confusable_words):
  src\violawake_sdk\tools\train.py:641:        for voice_idx, voice in enumerate(voices_subset):
  src\violawake_sdk\tools\train.py:642:            safe_word = word.replace(" ", "_")[:30]
  src\violawake_sdk\tools\train.py:645:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:646:                continue
  src\violawake_sdk\tools\train.py:647:
> src\violawake_sdk\tools\train.py:648:            ok = _edge_tts_synthesize(word, voice, out_path)
  src\violawake_sdk\tools\train.py:649:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:650:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:651:
  src\violawake_sdk\tools\train.py:652:        if verbose and (word_idx + 1) % 10 == 0:
  src\violawake_sdk\tools\train.py:653:            print(f"    {word_idx + 1}/{len(confusable_words)} words done 
({len(generated)} files)")
  src\violawake_sdk\tools\train.py:654:
  src\violawake_sdk\tools\train.py:655:    if not generated and confusable_words and voices_subset:
  src\violawake_sdk\tools\train.py:656:        logger.error(
> src\violawake_sdk\tools\train.py:657:            "edge-tts confusable negative generation produced 0 files for wake 
word %.80r "
  src\violawake_sdk\tools\train.py:658:            "after %s attempts; last error: %s",
  src\violawake_sdk\tools\train.py:659:            wake_word,
  src\violawake_sdk\tools\train.py:660:            len(confusable_words) * len(voices_subset),
> src\violawake_sdk\tools\train.py:661:            _LAST_EDGE_TTS_ERROR or "unknown",
  src\violawake_sdk\tools\train.py:662:        )
  src\violawake_sdk\tools\train.py:663:
  src\violawake_sdk\tools\train.py:664:    if verbose:
> src\violawake_sdk\tools\train.py:665:        print(f"  Confusable negatives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:666:
  src\violawake_sdk\tools\train.py:667:    return generated
  src\violawake_sdk\tools\train.py:668:
  src\violawake_sdk\tools\train.py:669:
> src\violawake_sdk\tools\train.py:670:def _generate_speech_negatives(
  src\violawake_sdk\tools\train.py:671:    output_dir: Path,
  src\violawake_sdk\tools\train.py:672:    n_voices: int = 5,
  src\violawake_sdk\tools\train.py:673:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:674:) -> list[Path]:
> src\violawake_sdk\tools\train.py:675:    """Deprecated for production training: generate speech negatives via TTS.
  src\violawake_sdk\tools\train.py:676:
> src\violawake_sdk\tools\train.py:677:    Production training should use the shared LibriSpeech/MUSAN corpus for
> src\violawake_sdk\tools\train.py:678:    generic speech negatives. This helper remains for legacy CLI experiments.
  src\violawake_sdk\tools\train.py:679:
  src\violawake_sdk\tools\train.py:680:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:681:    """
  src\violawake_sdk\tools\train.py:682:    output_dir.mkdir(parents=True, exist_ok=True)
> src\violawake_sdk\tools\train.py:683:    voices_subset = EDGE_TTS_VOICES[:n_voices]
  src\violawake_sdk\tools\train.py:684:    generated: list[Path] = []
  src\violawake_sdk\tools\train.py:685:
> src\violawake_sdk\tools\train.py:686:    total = len(SPEECH_NEGATIVE_PHRASES) * n_voices
  src\violawake_sdk\tools\train.py:687:    if verbose:
  src\violawake_sdk\tools\train.py:688:        print(
> src\violawake_sdk\tools\train.py:689:            f"  Generating speech negatives: {len(SPEECH_NEGATIVE_PHRASES)} 
phrases x {n_voices} voices = {total} samples..."
  src\violawake_sdk\tools\train.py:690:        )
  src\violawake_sdk\tools\train.py:691:
> src\violawake_sdk\tools\train.py:692:    for phrase_idx, phrase in enumerate(SPEECH_NEGATIVE_PHRASES):
  src\violawake_sdk\tools\train.py:693:        for voice_idx, voice in enumerate(voices_subset):
  src\violawake_sdk\tools\train.py:694:            safe_phrase = phrase.replace(" ", "_")[:40]
> src\violawake_sdk\tools\train.py:695:            out_path = output_dir / 
f"speech_neg_{phrase_idx:03d}_{voice_idx}_{safe_phrase}.wav"
  src\violawake_sdk\tools\train.py:696:            if out_path.exists():
  src\violawake_sdk\tools\train.py:697:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:698:                continue
  src\violawake_sdk\tools\train.py:699:
> src\violawake_sdk\tools\train.py:700:            ok = _edge_tts_synthesize(phrase, voice, out_path)
  src\violawake_sdk\tools\train.py:701:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:702:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:703:
  src\violawake_sdk\tools\train.py:704:        if verbose and (phrase_idx + 1) % 25 == 0:
  src\violawake_sdk\tools\train.py:705:            print(
> src\violawake_sdk\tools\train.py:706:                f"    {phrase_idx + 1}/{len(SPEECH_NEGATIVE_PHRASES)} phrases 
done ({len(generated)} files)"
  src\violawake_sdk\tools\train.py:707:            )
  src\violawake_sdk\tools\train.py:708:
> src\violawake_sdk\tools\train.py:709:    if not generated and SPEECH_NEGATIVE_PHRASES and voices_subset:
  src\violawake_sdk\tools\train.py:710:        logger.error(
> src\violawake_sdk\tools\train.py:711:            "edge-tts speech negative generation produced 0 files after %s 
attempts; "
  src\violawake_sdk\tools\train.py:712:            "last error: %s",
> src\violawake_sdk\tools\train.py:713:            len(SPEECH_NEGATIVE_PHRASES) * len(voices_subset),
> src\violawake_sdk\tools\train.py:714:            _LAST_EDGE_TTS_ERROR or "unknown",
  src\violawake_sdk\tools\train.py:715:        )
  src\violawake_sdk\tools\train.py:716:
  src\violawake_sdk\tools\train.py:717:    if verbose:
> src\violawake_sdk\tools\train.py:718:        print(f"  Speech negatives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:719:
  src\violawake_sdk\tools\train.py:720:    return generated
  src\violawake_sdk\tools\train.py:721:
  src\violawake_sdk\tools\train.py:722:
  src\violawake_sdk\tools\train.py:723:def _save_wav(audio: np.ndarray, path: Path, sample_rate: int = 16000) -> None:
  src\violawake_sdk\tools\train.py:850:    if len(audio_clips) != len(source_ids):
  src\violawake_sdk\tools\train.py:851:        raise ValueError("audio_clips and source_ids must have the same length")
  src\violawake_sdk\tools\train.py:852:
> src\violawake_sdk\tools\train.py:853:    # Pin ONNX backend explicitly. openwakeword defaults to TFLite when both are
> src\violawake_sdk\tools\train.py:854:    # present, but the bundled tflite_runtime in our backend image rejects the
> src\violawake_sdk\tools\train.py:855:    # current openwakeword .tflite schema with "Could not open ...". ONNX path
  src\violawake_sdk\tools\train.py:856:    # is the canonical production target anyway.
> src\violawake_sdk\tools\train.py:857:    oww = OWWModel(inference_framework="onnx")
  src\violawake_sdk\tools\train.py:858:    preprocessor = oww.preprocessor
  src\violawake_sdk\tools\train.py:859:
  src\violawake_sdk\tools\train.py:860:    all_embeddings: list[np.ndarray] = []
  src\violawake_sdk\tools\train.py:861:    all_source_idx: list[int] = []
  src\violawake_sdk\tools\train.py:862:    all_tags: list[str] = []
  src\violawake_sdk\tools\train.py:994:        print(f"ERROR: openwakeword required: {e}", file=sys.stderr)
  src\violawake_sdk\tools\train.py:995:        sys.exit(1)
  src\violawake_sdk\tools\train.py:996:
> src\violawake_sdk\tools\train.py:997:    oww = OWWModel(inference_framework="onnx")
  src\violawake_sdk\tools\train.py:998:    preprocessor = oww.preprocessor
  src\violawake_sdk\tools\train.py:999:
  src\violawake_sdk\tools\train.py:1000:    all_embeddings: list[np.ndarray] = []
  src\violawake_sdk\tools\train.py:1001:    all_source_idx: list[int] = []
  src\violawake_sdk\tools\train.py:1002:    all_tags: list[str] = []
  src\violawake_sdk\tools\train.py:1143:
  src\violawake_sdk\tools\train.py:1144:    Args:
  src\violawake_sdk\tools\train.py:1145:        pos_files: Positive audio file paths.
> src\violawake_sdk\tools\train.py:1146:        neg_files: All negative audio file paths (flat list).
> src\violawake_sdk\tools\train.py:1147:        output_path: Where to save the ONNX model.
  src\violawake_sdk\tools\train.py:1148:        wake_word: Wake word name (for config).
  src\violawake_sdk\tools\train.py:1149:        epochs: Max training epochs.
  src\violawake_sdk\tools\train.py:1150:        augment: Whether to augment positives before extraction.
  src\violawake_sdk\tools\train.py:1151:        eval_dir: Optional eval directory.
  src\violawake_sdk\tools\train.py:1152:        batch_size: Mini-batch size.
  src\violawake_sdk\tools\train.py:1157:        device: Torch device hint.
  src\violawake_sdk\tools\train.py:1158:        ema_decay: EMA decay factor.
  src\violawake_sdk\tools\train.py:1159:        seq_len: Number of frames per temporal window.
> src\violawake_sdk\tools\train.py:1160:        neg_tags: Optional dict mapping tag -> file list, for tagged negatives.
  src\violawake_sdk\tools\train.py:1161:        augment_source_files: Optional subset of positives to augment. Defaults
  src\violawake_sdk\tools\train.py:1162:            to all positives when omitted.
  src\violawake_sdk\tools\train.py:1163:
  src\violawake_sdk\tools\train.py:1164:    Returns:
  src\violawake_sdk\tools\train.py:1165:        Config dict with training results.
  src\violawake_sdk\tools\train.py:1187:    from violawake_sdk.training.temporal_model import (
  src\violawake_sdk\tools\train.py:1188:        TemporalCNN,
  src\violawake_sdk\tools\train.py:1189:        count_parameters,
> src\violawake_sdk\tools\train.py:1190:        export_temporal_onnx,
  src\violawake_sdk\tools\train.py:1191:    )
  src\violawake_sdk\tools\train.py:1192:    from violawake_sdk.training.weight_averaging import (
  src\violawake_sdk\tools\train.py:1193:        EMATracker,
  src\violawake_sdk\tools\train.py:1194:        auto_select_averaging,
  src\violawake_sdk\tools\train.py:1195:    )
  src\violawake_sdk\tools\train.py:1286:        sys.exit(1)
  src\violawake_sdk\tools\train.py:1287:
  src\violawake_sdk\tools\train.py:1288:    if verbose:
> src\violawake_sdk\tools\train.py:1289:        print(f"\n  Processing {len(neg_files)} negative files...")
  src\violawake_sdk\tools\train.py:1290:
> src\violawake_sdk\tools\train.py:1291:    # Extract negatives with tags if provided
  src\violawake_sdk\tools\train.py:1292:    all_neg_embs: list[np.ndarray] = []
  src\violawake_sdk\tools\train.py:1293:    all_neg_src: list[int] = []
  src\violawake_sdk\tools\train.py:1294:    all_neg_tags: list[str] = []
  src\violawake_sdk\tools\train.py:1295:    source_offset = 0
  src\violawake_sdk\tools\train.py:1296:
  src\violawake_sdk\tools\train.py:1312:        )
  src\violawake_sdk\tools\train.py:1313:
  src\violawake_sdk\tools\train.py:1314:    corpus_tags = {
> src\violawake_sdk\tools\train.py:1315:        "neg_librispeech",
> src\violawake_sdk\tools\train.py:1316:        "neg_musan_speech",
  src\violawake_sdk\tools\train.py:1317:        "neg_musan_music",
  src\violawake_sdk\tools\train.py:1318:        "neg_musan_noise",
  src\violawake_sdk\tools\train.py:1319:    }
  src\violawake_sdk\tools\train.py:1320:    corpus_found = bool(
  src\violawake_sdk\tools\train.py:1321:        neg_tags and any(tag in corpus_tags and files for tag, files in 
neg_tags.items())
  src\violawake_sdk\tools\train.py:1323:
  src\violawake_sdk\tools\train.py:1324:    if len(all_neg_embs) < 5:
  src\violawake_sdk\tools\train.py:1325:        print(
> src\violawake_sdk\tools\train.py:1326:            f"ERROR: Only {len(all_neg_embs)} negative embeddings extracted. 
Need at least 5.",
  src\violawake_sdk\tools\train.py:1327:            file=sys.stderr,
  src\violawake_sdk\tools\train.py:1328:        )
  src\violawake_sdk\tools\train.py:1329:        sys.exit(1)
  src\violawake_sdk\tools\train.py:1330:
  src\violawake_sdk\tools\train.py:1331:    # -- Build dataset -------------------------------------------------------
  src\violawake_sdk\tools\train.py:1513:        print(f"Best validation loss: {best_val_loss:.4f} at epoch 
{best_epoch}")
  src\violawake_sdk\tools\train.py:1514:        print(f"Training duration: {training_duration:.1f}s")
  src\violawake_sdk\tools\train.py:1515:
> src\violawake_sdk\tools\train.py:1516:    # -- Post-training quality gate ------------------------------------------
  src\violawake_sdk\tools\train.py:1517:    from violawake_sdk._constants import DEFAULT_THRESHOLD, get_feature_config
  src\violawake_sdk\tools\train.py:1518:    from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
  src\violawake_sdk\tools\train.py:1519:
  src\violawake_sdk\tools\train.py:1520:    deployment_threshold = float(DEFAULT_THRESHOLD)
  src\violawake_sdk\tools\train.py:1521:
  src\violawake_sdk\tools\train.py:1522:    if verbose:
> src\violawake_sdk\tools\train.py:1523:        print("\nStep 5: Post-training quality gate 
(speech/confusable/silence)...")
  src\violawake_sdk\tools\train.py:1524:
> src\violawake_sdk\tools\train.py:1525:    quality_grade, quality_gate = _run_quality_gate(
  src\violawake_sdk\tools\train.py:1526:        model,
  src\violawake_sdk\tools\train.py:1527:        torch_device,
  src\violawake_sdk\tools\train.py:1528:        seq_len,
  src\violawake_sdk\tools\train.py:1529:        EMBEDDING_DIM,
  src\violawake_sdk\tools\train.py:1530:        wake_word=wake_word,
  src\violawake_sdk\tools\train.py:1532:        verbose=verbose,
  src\violawake_sdk\tools\train.py:1533:    )
  src\violawake_sdk\tools\train.py:1534:
> src\violawake_sdk\tools\train.py:1535:    # Optional test-mode bypass. Setting VIOLAWAKE_SKIP_QUALITY_GATE=1 exports
  src\violawake_sdk\tools\train.py:1536:    # the model regardless of grade, with a loud warning. This exists for E2E
> src\violawake_sdk\tools\train.py:1537:    # tests + dev iterations where verifying the full export+download chain
> src\violawake_sdk\tools\train.py:1538:    # matters more than blocking a low-quality model. NEVER set this in a
  src\violawake_sdk\tools\train.py:1539:    # customer-facing deploy — it would let unfit models ship.
> src\violawake_sdk\tools\train.py:1540:    skip_gate = os.environ.get("VIOLAWAKE_SKIP_QUALITY_GATE", "").lower() in 
("1", "true", "yes")
  src\violawake_sdk\tools\train.py:1541:
> src\violawake_sdk\tools\train.py:1542:    if quality_grade == "F":
  src\violawake_sdk\tools\train.py:1543:        print(
> src\violawake_sdk\tools\train.py:1544:            "\n" + "!" * 72 + "\nQUALITY GATE FAILED: model is not ready for 
deployment.\n"
> src\violawake_sdk\tools\train.py:1545:            f"  Speech FP rate:     {quality_gate['speech_fp_rate'] * 
100:.1f}%\n"
> src\violawake_sdk\tools\train.py:1546:            f"  Confusable FP rate: {quality_gate['confusable_fp_rate'] * 
100:.1f}%\n"
> src\violawake_sdk\tools\train.py:1547:            f"  Silence max score:  {quality_gate['silence_max_score']:.2f}\n"
  src\violawake_sdk\tools\train.py:1548:            "Recommended fixes:\n"
> src\violawake_sdk\tools\train.py:1549:            "  - Add more diverse speech negatives via --negatives or keep 
--auto-corpus enabled.\n"
> src\violawake_sdk\tools\train.py:1550:            f"  - Expand confusable negatives for '{wake_word}' and retrain.\n"
> src\violawake_sdk\tools\train.py:1551:            "  - Audit mislabeled positives/negatives and remove noisy 
clips.\n"
  src\violawake_sdk\tools\train.py:1552:            "  - Raise the deployment threshold only after checking recall on 
eval data.\n"
  src\violawake_sdk\tools\train.py:1553:            + "!"
  src\violawake_sdk\tools\train.py:1554:            * 72
  src\violawake_sdk\tools\train.py:1555:        )
  src\violawake_sdk\tools\train.py:1556:        if skip_gate:
  src\violawake_sdk\tools\train.py:1557:            print(
  src\violawake_sdk\tools\train.py:1558:                "\n" + "*" * 72 + "\n"
> src\violawake_sdk\tools\train.py:1559:                "WARNING: VIOLAWAKE_SKIP_QUALITY_GATE=1 — exporting failing 
model anyway.\n"
  src\violawake_sdk\tools\train.py:1560:                "         This is for E2E testing only. NEVER set this in 
production.\n"
  src\violawake_sdk\tools\train.py:1561:                + "*" * 72
  src\violawake_sdk\tools\train.py:1562:            )
  src\violawake_sdk\tools\train.py:1563:
> src\violawake_sdk\tools\train.py:1564:    model_exported = (quality_grade != "F") or skip_gate
  src\violawake_sdk\tools\train.py:1565:    output_path.parent.mkdir(parents=True, exist_ok=True)
  src\violawake_sdk\tools\train.py:1566:
> src\violawake_sdk\tools\train.py:1567:    # -- Export to ONNX ------------------------------------------------------
> src\violawake_sdk\tools\train.py:1568:    if model_exported:
  src\violawake_sdk\tools\train.py:1569:        if verbose:
> src\violawake_sdk\tools\train.py:1570:            print(f"\nExporting model to ONNX: {output_path}")
  src\violawake_sdk\tools\train.py:1571:
> src\violawake_sdk\tools\train.py:1572:        export_temporal_onnx(model, str(output_path), seq_len=seq_len, 
embedding_dim=EMBEDDING_DIM)
  src\violawake_sdk\tools\train.py:1573:    elif verbose:
> src\violawake_sdk\tools\train.py:1574:        print("\nSkipping ONNX export because the quality gate failed.")
  src\violawake_sdk\tools\train.py:1575:
  src\violawake_sdk\tools\train.py:1576:    # -- Evaluate if test set provided ---------------------------------------
  src\violawake_sdk\tools\train.py:1577:    d_prime_result: float | None = None
> src\violawake_sdk\tools\train.py:1578:    if model_exported and eval_dir and eval_dir.exists():
  src\violawake_sdk\tools\train.py:1579:        if verbose:
  src\violawake_sdk\tools\train.py:1580:            print(f"\nEvaluating on test set: {eval_dir}")
  src\violawake_sdk\tools\train.py:1581:        try:
> src\violawake_sdk\tools\train.py:1582:            from violawake_sdk.training.evaluate import evaluate_onnx_model
  src\violawake_sdk\tools\train.py:1583:
> src\violawake_sdk\tools\train.py:1584:            results = evaluate_onnx_model(output_path, eval_dir)
  src\violawake_sdk\tools\train.py:1585:            d_prime_result = results["d_prime"]
  src\violawake_sdk\tools\train.py:1586:            far = results["far_per_hour"]
  src\violawake_sdk\tools\train.py:1587:            frr = results["frr"] * 100
  src\violawake_sdk\tools\train.py:1588:            print(f"d': {d_prime_result:.2f}  FAR: {far:.2f}/hr  FRR: 
{frr:.1f}%")
  src\violawake_sdk\tools\train.py:1589:        except Exception as e:
  src\violawake_sdk\tools\train.py:1590:            print(f"Evaluation failed: {e}")
> src\violawake_sdk\tools\train.py:1591:    elif quality_grade == "F" and verbose and eval_dir and eval_dir.exists():
> src\violawake_sdk\tools\train.py:1592:        print("Skipping eval because no ONNX model was exported after the 
failed quality gate.")
  src\violawake_sdk\tools\train.py:1593:
  src\violawake_sdk\tools\train.py:1594:    # -- Save config ---------------------------------------------------------
  src\violawake_sdk\tools\train.py:1595:    config = get_feature_config()
  src\violawake_sdk\tools\train.py:1596:    config.update(
  src\violawake_sdk\tools\train.py:1597:        {
  src\violawake_sdk\tools\train.py:1619:            "training_duration_s": round(training_duration, 2),
  src\violawake_sdk\tools\train.py:1620:            "wake_word": wake_word,
  src\violawake_sdk\tools\train.py:1621:            "deployment_threshold": deployment_threshold,
> src\violawake_sdk\tools\train.py:1622:            "quality_grade": quality_grade,
> src\violawake_sdk\tools\train.py:1623:            "quality_gate": quality_gate,
> src\violawake_sdk\tools\train.py:1624:            "quality_gate_blocked_export": quality_grade == "F",
  src\violawake_sdk\tools\train.py:1625:            "neg_corpus_breakdown": {tag: len(files) for tag, files in 
neg_tags.items()}
  src\violawake_sdk\tools\train.py:1626:            if neg_tags
  src\violawake_sdk\tools\train.py:1627:            else {},
  src\violawake_sdk\tools\train.py:1628:            "corpus_found": corpus_found,
  src\violawake_sdk\tools\train.py:1629:        }
  src\violawake_sdk\tools\train.py:1630:    )
> src\violawake_sdk\tools\train.py:1631:    config.update(get_openwakeword_backbone_hashes("onnx"))
  src\violawake_sdk\tools\train.py:1632:    if d_prime_result is not None:
  src\violawake_sdk\tools\train.py:1633:        config["d_prime"] = round(d_prime_result, 2)
  src\violawake_sdk\tools\train.py:1634:
  src\violawake_sdk\tools\train.py:1635:    config_path = output_path.with_suffix(".config.json")
  src\violawake_sdk\tools\train.py:1636:    with open(config_path, "w") as f:
  src\violawake_sdk\tools\train.py:1638:
  src\violawake_sdk\tools\train.py:1639:    if verbose:
  src\violawake_sdk\tools\train.py:1640:        print(f"\nConfig saved: {config_path}")
> src\violawake_sdk\tools\train.py:1641:        if model_exported:
  src\violawake_sdk\tools\train.py:1642:            print(f"Model saved: {output_path}")
  src\violawake_sdk\tools\train.py:1643:            print(f"Load with:  WakeDetector(model='{output_path}')")
  src\violawake_sdk\tools\train.py:1644:
> src\violawake_sdk\tools\train.py:1645:    if quality_grade == "F" and not skip_gate:
  src\violawake_sdk\tools\train.py:1646:        raise RuntimeError(
> src\violawake_sdk\tools\train.py:1647:            "Model failed the quality gate with grade F; ONNX export was 
blocked. "
> src\violawake_sdk\tools\train.py:1648:            f"See {config_path} for quality metrics."
  src\violawake_sdk\tools\train.py:1649:        )
  src\violawake_sdk\tools\train.py:1650:
  src\violawake_sdk\tools\train.py:1651:    return config
  src\violawake_sdk\tools\train.py:1652:
  src\violawake_sdk\tools\train.py:1653:
  src\violawake_sdk\tools\train.py:1654:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:1655:# Post-training quality gate
  src\violawake_sdk\tools\train.py:1656:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:1657:
  src\violawake_sdk\tools\train.py:1658:
> src\violawake_sdk\tools\train.py:1659:def _run_quality_gate(
  src\violawake_sdk\tools\train.py:1660:    model: Any,
  src\violawake_sdk\tools\train.py:1661:    torch_device: str,
  src\violawake_sdk\tools\train.py:1662:    seq_len: int,
  src\violawake_sdk\tools\train.py:1663:    embedding_dim: int,
  src\violawake_sdk\tools\train.py:1664:    wake_word: str,
  src\violawake_sdk\tools\train.py:1665:    deployment_threshold: float = 0.80,
  src\violawake_sdk\tools\train.py:1666:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:1667:) -> tuple[str, dict[str, Any]]:
> src\violawake_sdk\tools\train.py:1668:    """Run a post-training quality gate on speech, confusables, and silence.
  src\violawake_sdk\tools\train.py:1669:
  src\violawake_sdk\tools\train.py:1670:    Returns:
  src\violawake_sdk\tools\train.py:1671:        Tuple of ``(grade, metrics)`` where grade is one of ``A/B/C/F``.
  src\violawake_sdk\tools\train.py:1672:    """
  src\violawake_sdk\tools\train.py:1673:    import tempfile
  src\violawake_sdk\tools\train.py:1716:            "F": "FAIL",
  src\violawake_sdk\tools\train.py:1717:        }[grade]
  src\violawake_sdk\tools\train.py:1718:
> src\violawake_sdk\tools\train.py:1719:    def _grade_quality(
> src\violawake_sdk\tools\train.py:1720:        speech_fp_rate: float,
  src\violawake_sdk\tools\train.py:1721:        confusable_fp_rate: float,
  src\violawake_sdk\tools\train.py:1722:        silence_max_score: float,
  src\violawake_sdk\tools\train.py:1723:    ) -> str:
> src\violawake_sdk\tools\train.py:1724:        if speech_fp_rate < 0.02 and confusable_fp_rate < 0.05 and 
silence_max_score < 0.20:
  src\violawake_sdk\tools\train.py:1725:            return "A"
> src\violawake_sdk\tools\train.py:1726:        if speech_fp_rate < 0.05 and confusable_fp_rate < 0.10 and 
silence_max_score < 0.30:
  src\violawake_sdk\tools\train.py:1727:            return "B"
> src\violawake_sdk\tools\train.py:1728:        if speech_fp_rate < 0.10 and confusable_fp_rate < 0.20 and 
silence_max_score < 0.50:
  src\violawake_sdk\tools\train.py:1729:            return "C"
  src\violawake_sdk\tools\train.py:1730:        return "F"
  src\violawake_sdk\tools\train.py:1731:
  src\violawake_sdk\tools\train.py:1732:    model.eval()
  src\violawake_sdk\tools\train.py:1733:    model = model.to(torch_device)
  src\violawake_sdk\tools\train.py:1734:
> src\violawake_sdk\tools\train.py:1735:    quality_phrases = SPEECH_NEGATIVE_PHRASES[:50]
> src\violawake_sdk\tools\train.py:1736:    voice = EDGE_TTS_VOICES[0]  # Single voice keeps the gate fast and 
deterministic.
  src\violawake_sdk\tools\train.py:1737:
  src\violawake_sdk\tools\train.py:1738:    with tempfile.TemporaryDirectory(prefix="violawake_qc_", dir=_TMP_DIR) as 
tmp_dir:
> src\violawake_sdk\tools\train.py:1739:        quality_dir = Path(tmp_dir)
  src\violawake_sdk\tools\train.py:1740:
> src\violawake_sdk\tools\train.py:1741:        speech_files: list[Path] = []
  src\violawake_sdk\tools\train.py:1742:        if verbose:
> src\violawake_sdk\tools\train.py:1743:            print(f"  Generating {len(quality_phrases)} speech phrases for 
quality check...")
> src\violawake_sdk\tools\train.py:1744:        for i, phrase in enumerate(quality_phrases):
> src\violawake_sdk\tools\train.py:1745:            out_path = quality_dir / f"qc_speech_{i:03d}.wav"
> src\violawake_sdk\tools\train.py:1746:            ok = _edge_tts_synthesize(phrase, voice, out_path)
  src\violawake_sdk\tools\train.py:1747:            if ok and out_path.exists():
> src\violawake_sdk\tools\train.py:1748:                speech_files.append(out_path)
  src\violawake_sdk\tools\train.py:1749:
  src\violawake_sdk\tools\train.py:1750:        raw_confusables = generate_confusables(wake_word, count=40)
  src\violawake_sdk\tools\train.py:1751:        confusable_words: list[str] = []
  src\violawake_sdk\tools\train.py:1752:        seen_confusables: set[str] = set()
  src\violawake_sdk\tools\train.py:1753:        normalized_wake_word = " ".join(wake_word.lower().split())
  src\violawake_sdk\tools\train.py:1764:
  src\violawake_sdk\tools\train.py:1765:        confusable_files: list[Path] = []
  src\violawake_sdk\tools\train.py:1766:        if verbose:
> src\violawake_sdk\tools\train.py:1767:            print(f"  Generating {len(confusable_words)} confusable words for 
quality check...")
  src\violawake_sdk\tools\train.py:1768:        for i, word in enumerate(confusable_words):
  src\violawake_sdk\tools\train.py:1769:            safe_word = word.replace(" ", "_")[:30]
> src\violawake_sdk\tools\train.py:1770:            out_path = quality_dir / f"qc_confusable_{i:03d}_{safe_word}.wav"
> src\violawake_sdk\tools\train.py:1771:            ok = _edge_tts_synthesize(word, voice, out_path)
  src\violawake_sdk\tools\train.py:1772:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:1773:                confusable_files.append(out_path)
  src\violawake_sdk\tools\train.py:1774:
  src\violawake_sdk\tools\train.py:1775:        silence_audio = np.zeros(16000 * 10, dtype=np.float32)
> src\violawake_sdk\tools\train.py:1776:        silence_path = quality_dir / "qc_silence.wav"
  src\violawake_sdk\tools\train.py:1777:        _save_wav(silence_audio, silence_path)
  src\violawake_sdk\tools\train.py:1778:
> src\violawake_sdk\tools\train.py:1779:        speech_scores = _score_files(speech_files, "qc_speech")
  src\violawake_sdk\tools\train.py:1780:        confusable_scores = _score_files(confusable_files, "qc_confusable")
  src\violawake_sdk\tools\train.py:1781:        silence_scores = _score_files([silence_path], "qc_silence")
  src\violawake_sdk\tools\train.py:1782:
> src\violawake_sdk\tools\train.py:1783:    speech_fp_rate = _fp_rate(speech_scores)
  src\violawake_sdk\tools\train.py:1784:    confusable_fp_rate = _fp_rate(confusable_scores)
  src\violawake_sdk\tools\train.py:1785:    # If silence produced no embeddings, the OWW backbone (correctly) rejected
  src\violawake_sdk\tools\train.py:1786:    # the zero-energy audio — the model can never trigger on silence. Score = 
0.
  src\violawake_sdk\tools\train.py:1787:    silence_max_score = float(silence_scores.max()) if len(silence_scores) 
else 0.0
> src\violawake_sdk\tools\train.py:1788:    grade = _grade_quality(speech_fp_rate, confusable_fp_rate, 
silence_max_score)
  src\violawake_sdk\tools\train.py:1789:
  src\violawake_sdk\tools\train.py:1790:    metrics: dict[str, Any] = {
  src\violawake_sdk\tools\train.py:1791:        "grade": grade,
  src\violawake_sdk\tools\train.py:1792:        "deployment_threshold": float(deployment_threshold),
> src\violawake_sdk\tools\train.py:1793:        "speech_fp_rate": speech_fp_rate,
> src\violawake_sdk\tools\train.py:1794:        "speech_sample_count": int(len(speech_scores)),
  src\violawake_sdk\tools\train.py:1795:        "confusable_fp_rate": confusable_fp_rate,
  src\violawake_sdk\tools\train.py:1796:        "confusable_sample_count": int(len(confusable_scores)),
  src\violawake_sdk\tools\train.py:1797:        "silence_max_score": silence_max_score,
  src\violawake_sdk\tools\train.py:1798:        "silence_window_count": int(len(silence_scores)),
  src\violawake_sdk\tools\train.py:1799:    }
  src\violawake_sdk\tools\train.py:1800:
> src\violawake_sdk\tools\train.py:1801:    print(f"Model Quality Grade: {grade} ({_grade_label(grade)})")
  src\violawake_sdk\tools\train.py:1802:    print(
> src\violawake_sdk\tools\train.py:1803:        f"  Speech FP rate:     {speech_fp_rate * 100:4.1f}% "
> src\violawake_sdk\tools\train.py:1804:        f"({len(speech_scores)} phrases, threshold={deployment_threshold:.2f})"
  src\violawake_sdk\tools\train.py:1805:    )
  src\violawake_sdk\tools\train.py:1806:    print(
  src\violawake_sdk\tools\train.py:1807:        f"  Confusable FP rate: {confusable_fp_rate * 100:4.1f}% "
  src\violawake_sdk\tools\train.py:1808:        f"({len(confusable_scores)} words, 
threshold={deployment_threshold:.2f})"
  src\violawake_sdk\tools\train.py:1809:    )
  src\violawake_sdk\tools\train.py:1810:    print(f"  Silence max score:  {silence_max_score:.2f}")
  src\violawake_sdk\tools\train.py:1811:
> src\violawake_sdk\tools\train.py:1812:    if verbose and len(speech_scores) < len(quality_phrases):
  src\violawake_sdk\tools\train.py:1813:        print(
> src\violawake_sdk\tools\train.py:1814:            f"  WARNING: Only {len(speech_scores)}/{len(quality_phrases)} 
speech phrases "
> src\violawake_sdk\tools\train.py:1815:            "were scored in the quality gate."
  src\violawake_sdk\tools\train.py:1816:        )
  src\violawake_sdk\tools\train.py:1817:    if verbose and len(confusable_scores) < 20:
  src\violawake_sdk\tools\train.py:1818:        print(
  src\violawake_sdk\tools\train.py:1819:            f"  WARNING: Only {len(confusable_scores)}/20 confusable words "
> src\violawake_sdk\tools\train.py:1820:            "were scored in the quality gate."
  src\violawake_sdk\tools\train.py:1821:        )
  src\violawake_sdk\tools\train.py:1822:    if verbose and len(silence_scores) == 0:
  src\violawake_sdk\tools\train.py:1823:        print(
  src\violawake_sdk\tools\train.py:1824:            "  NOTE: Silence produced no OWW embeddings (zero-energy rejected 
by backbone). Score: 0.0"
  src\violawake_sdk\tools\train.py:1825:        )
  src\violawake_sdk\tools\train.py:1838:    epochs: int = 50,
  src\violawake_sdk\tools\train.py:1839:    augment: bool = True,
  src\violawake_sdk\tools\train.py:1840:    eval_dir: Path | None = None,
> src\violawake_sdk\tools\train.py:1841:    negatives_dir: Path | None = None,
  src\violawake_sdk\tools\train.py:1842:    batch_size: int = 32,
  src\violawake_sdk\tools\train.py:1843:    lr: float = 1e-3,
  src\violawake_sdk\tools\train.py:1844:    hidden_dim: int = 64,
  src\violawake_sdk\tools\train.py:1845:    neg_ratio: int = 5,
  src\violawake_sdk\tools\train.py:1846:    patience: int = 10,
  src\violawake_sdk\tools\train.py:1900:    if verbose:
  src\violawake_sdk\tools\train.py:1901:        print("Loading OpenWakeWord backbone...")
  src\violawake_sdk\tools\train.py:1902:
> src\violawake_sdk\tools\train.py:1903:    oww = OWWModel(inference_framework="onnx")
  src\violawake_sdk\tools\train.py:1904:    preprocessor = oww.preprocessor
  src\violawake_sdk\tools\train.py:1905:
  src\violawake_sdk\tools\train.py:1906:    def _audio_to_embedding(audio_f32):
  src\violawake_sdk\tools\train.py:1907:        audio = center_crop(audio_f32, CLIP_SAMPLES)
  src\violawake_sdk\tools\train.py:1908:        audio_i16 = np.clip(audio, -1.0, 1.0)
  src\violawake_sdk\tools\train.py:1954:    if verbose:
  src\violawake_sdk\tools\train.py:1955:        print(f"  {len(pos_embeddings)} positive embeddings")
  src\violawake_sdk\tools\train.py:1956:
> src\violawake_sdk\tools\train.py:1957:    # Extract negatives
> src\violawake_sdk\tools\train.py:1958:    n_negatives = len(pos_embeddings) * neg_ratio
  src\violawake_sdk\tools\train.py:1959:    neg_embeddings = []
  src\violawake_sdk\tools\train.py:1960:    neg_source_file_idx = []
  src\violawake_sdk\tools\train.py:1961:
> src\violawake_sdk\tools\train.py:1962:    if negatives_dir and negatives_dir.exists():
> src\violawake_sdk\tools\train.py:1963:        neg_files = sorted(list(negatives_dir.rglob("*.wav")) + 
list(negatives_dir.rglob("*.flac")))
  src\violawake_sdk\tools\train.py:1964:        for file_idx, f in enumerate(neg_files):
  src\violawake_sdk\tools\train.py:1965:            audio = load_audio(f)
  src\violawake_sdk\tools\train.py:1966:            if audio is None:
  src\violawake_sdk\tools\train.py:1967:                continue
  src\violawake_sdk\tools\train.py:1968:            emb = _audio_to_embedding(audio)
  src\violawake_sdk\tools\train.py:1973:    if len(neg_embeddings) < 5:
  src\violawake_sdk\tools\train.py:1974:        # Synthetic fallback
  src\violawake_sdk\tools\train.py:1975:        if verbose:
> src\violawake_sdk\tools\train.py:1976:            print(f"  Generating {n_negatives} synthetic negatives (legacy MLP 
mode)...")
  src\violawake_sdk\tools\train.py:1977:        rng_synth = np.random.default_rng(42)
> src\violawake_sdk\tools\train.py:1978:        for i in range(n_negatives):
  src\violawake_sdk\tools\train.py:1979:            clip = rng_synth.standard_normal(CLIP_SAMPLES).astype(np.float32) 
* 0.1
  src\violawake_sdk\tools\train.py:1980:            emb = _audio_to_embedding(clip)
  src\violawake_sdk\tools\train.py:1981:            if emb is not None:
  src\violawake_sdk\tools\train.py:1982:                neg_embeddings.append(emb)
  src\violawake_sdk\tools\train.py:1983:                neg_source_file_idx.append(i)
  src\violawake_sdk\tools\train.py:1984:
  src\violawake_sdk\tools\train.py:1985:    if verbose:
> src\violawake_sdk\tools\train.py:1986:        print(f"  {len(neg_embeddings)} negative embeddings")
  src\violawake_sdk\tools\train.py:1987:
  src\violawake_sdk\tools\train.py:1988:    # -- Build dataset and train ---------------------------------------------
  src\violawake_sdk\tools\train.py:1989:    X = torch.tensor(np.array(pos_embeddings + neg_embeddings), 
dtype=torch.float32)
  src\violawake_sdk\tools\train.py:1990:    y = torch.tensor(
  src\violawake_sdk\tools\train.py:1991:        [1.0] * len(pos_embeddings) + [0.0] * len(neg_embeddings), 
dtype=torch.float32
  src\violawake_sdk\tools\train.py:2146:        print(f"Best val loss: {best_val_loss:.4f} at epoch {best_epoch}")
  src\violawake_sdk\tools\train.py:2147:        print(f"Duration: {training_duration:.1f}s")
  src\violawake_sdk\tools\train.py:2148:
> src\violawake_sdk\tools\train.py:2149:    # Export
  src\violawake_sdk\tools\train.py:2150:    output_path.parent.mkdir(parents=True, exist_ok=True)
  src\violawake_sdk\tools\train.py:2151:    model.eval()
  src\violawake_sdk\tools\train.py:2152:    dummy_input = torch.zeros(1, embedding_dim)
> src\violawake_sdk\tools\train.py:2153:    torch.onnx.export(
  src\violawake_sdk\tools\train.py:2154:        model,
  src\violawake_sdk\tools\train.py:2155:        dummy_input,
  src\violawake_sdk\tools\train.py:2156:        str(output_path),
  src\violawake_sdk\tools\train.py:2157:        input_names=["embedding"],
  src\violawake_sdk\tools\train.py:2158:        output_names=["score"],
  src\violawake_sdk\tools\train.py:2177:            "averaging_method": averaging_method,
  src\violawake_sdk\tools\train.py:2178:        }
  src\violawake_sdk\tools\train.py:2179:    )
> src\violawake_sdk\tools\train.py:2180:    config.update(get_openwakeword_backbone_hashes("onnx"))
  src\violawake_sdk\tools\train.py:2181:    config_path = output_path.with_suffix(".config.json")
  src\violawake_sdk\tools\train.py:2182:    with open(config_path, "w") as f:
  src\violawake_sdk\tools\train.py:2183:        json.dump(config, f, indent=2)
  src\violawake_sdk\tools\train.py:2184:
  src\violawake_sdk\tools\train.py:2185:    if verbose:
  src\violawake_sdk\tools\train.py:2192:
  src\violawake_sdk\tools\train.py:2193:
  src\violawake_sdk\tools\train.py:2194:def average_checkpoints(checkpoint_paths: list[str], output_path: str) -> None:
> src\violawake_sdk\tools\train.py:2195:    """Average weights of multiple ONNX model checkpoints (SWA).
  src\violawake_sdk\tools\train.py:2196:
  src\violawake_sdk\tools\train.py:2197:    Args:
> src\violawake_sdk\tools\train.py:2198:        checkpoint_paths: List of paths to ONNX model files to average.
  src\violawake_sdk\tools\train.py:2199:        output_path: Path to save the averaged model.
  src\violawake_sdk\tools\train.py:2200:    """
  src\violawake_sdk\tools\train.py:2201:    import numpy as np
> src\violawake_sdk\tools\train.py:2202:    import onnx
> src\violawake_sdk\tools\train.py:2203:    from onnx import numpy_helper
  src\violawake_sdk\tools\train.py:2204:
  src\violawake_sdk\tools\train.py:2205:    if len(checkpoint_paths) < 2:
  src\violawake_sdk\tools\train.py:2206:        raise ValueError("Need at least 2 checkpoints to average")
  src\violawake_sdk\tools\train.py:2207:
> src\violawake_sdk\tools\train.py:2208:    models = [onnx.load(p) for p in checkpoint_paths]
  src\violawake_sdk\tools\train.py:2209:    base = models[0]
  src\violawake_sdk\tools\train.py:2210:
  src\violawake_sdk\tools\train.py:2211:    for tensor in base.graph.initializer:
  src\violawake_sdk\tools\train.py:2212:        weights = []
  src\violawake_sdk\tools\train.py:2213:        for m in models:
  src\violawake_sdk\tools\train.py:2219:            tensor.CopyFrom(numpy_helper.from_array(avg, tensor.name))
  src\violawake_sdk\tools\train.py:2220:
  src\violawake_sdk\tools\train.py:2221:    Path(output_path).parent.mkdir(parents=True, exist_ok=True)
> src\violawake_sdk\tools\train.py:2222:    onnx.save(base, output_path)
  src\violawake_sdk\tools\train.py:2223:
  src\violawake_sdk\tools\train.py:2224:
  src\violawake_sdk\tools\train.py:2225:def _copy_eval_files(files: list[Path], target_dir: Path) -> None:
  src\violawake_sdk\tools\train.py:2226:    """Copy held-out files into a flat eval directory without name 
collisions."""
  src\violawake_sdk\tools\train.py:2227:    target_dir.mkdir(parents=True, exist_ok=True)
  src\violawake_sdk\tools\train.py:2271:        description=(
  src\violawake_sdk\tools\train.py:2272:            "Train a custom wake word model.\n\n"
  src\violawake_sdk\tools\train.py:2273:            "Default: TemporalCNN on 9-frame OWW embedding windows (production 
architecture).\n"
> src\violawake_sdk\tools\train.py:2274:            "Auto-generates TTS positives, confusable negatives, and speech 
negatives."
  src\violawake_sdk\tools\train.py:2275:        ),
  src\violawake_sdk\tools\train.py:2276:        formatter_class=argparse.RawDescriptionHelpFormatter,
  src\violawake_sdk\tools\train.py:2277:        epilog=__doc__,
  src\violawake_sdk\tools\train.py:2278:    )
  src\violawake_sdk\tools\train.py:2279:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2293:        "--output",
  src\violawake_sdk\tools\train.py:2294:        required=True,
  src\violawake_sdk\tools\train.py:2295:        metavar="PATH",
> src\violawake_sdk\tools\train.py:2296:        help="Output path for the trained ONNX model (e.g., 
models/jarvis.onnx)",
  src\violawake_sdk\tools\train.py:2297:    )
  src\violawake_sdk\tools\train.py:2298:    parser.add_argument(
> src\violawake_sdk\tools\train.py:2299:        "--negatives",
  src\violawake_sdk\tools\train.py:2300:        metavar="DIR",
  src\violawake_sdk\tools\train.py:2301:        default=None,
> src\violawake_sdk\tools\train.py:2302:        help="Optional directory of negative WAV/FLAC files (speech, music, 
etc.). "
> src\violawake_sdk\tools\train.py:2303:        "Added on top of auto-generated negatives.",
  src\violawake_sdk\tools\train.py:2304:    )
  src\violawake_sdk\tools\train.py:2305:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2306:        "--epochs",
  src\violawake_sdk\tools\train.py:2307:        type=int,
  src\violawake_sdk\tools\train.py:2308:        default=80,
  src\violawake_sdk\tools\train.py:2355:        action="store_true",
  src\violawake_sdk\tools\train.py:2356:        default=True,
  src\violawake_sdk\tools\train.py:2357:        dest="auto_corpus",
> src\violawake_sdk\tools\train.py:2358:        help="Auto-generate TTS positives, confusables, and speech negatives 
(default: True)",
  src\violawake_sdk\tools\train.py:2359:    )
  src\violawake_sdk\tools\train.py:2360:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2361:        "--no-auto-corpus",
  src\violawake_sdk\tools\train.py:2362:        action="store_false",
  src\violawake_sdk\tools\train.py:2363:        dest="auto_corpus",
> src\violawake_sdk\tools\train.py:2364:        help="Disable auto-generation of TTS corpus. Only use --positives and 
--negatives.",
  src\violawake_sdk\tools\train.py:2365:    )
  src\violawake_sdk\tools\train.py:2366:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2367:        "--eval-dir",
  src\violawake_sdk\tools\train.py:2368:        metavar="DIR",
  src\violawake_sdk\tools\train.py:2369:        help="Optional test set directory for evaluation after training. "
> src\violawake_sdk\tools\train.py:2370:        "Must contain positives/ and negatives/ subdirectories.",
  src\violawake_sdk\tools\train.py:2371:    )
  src\violawake_sdk\tools\train.py:2372:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2373:        "--neg-ratio",
  src\violawake_sdk\tools\train.py:2374:        type=int,
  src\violawake_sdk\tools\train.py:2375:        default=5,
  src\violawake_sdk\tools\train.py:2376:        metavar="N",
> src\violawake_sdk\tools\train.py:2377:        help="Negatives per positive (used in legacy MLP mode, default: 5)",
  src\violawake_sdk\tools\train.py:2378:    )
  src\violawake_sdk\tools\train.py:2379:    parser.add_argument(
  src\violawake_sdk\tools\train.py:2380:        "--hidden-dim",
  src\violawake_sdk\tools\train.py:2381:        type=int,
  src\violawake_sdk\tools\train.py:2382:        default=64,
  src\violawake_sdk\tools\train.py:2394:    output_path = Path(args.output)
  src\violawake_sdk\tools\train.py:2395:    eval_dir = Path(args.eval_dir) if args.eval_dir else None
  src\violawake_sdk\tools\train.py:2396:    positives_dir = Path(args.positives) if args.positives else None
> src\violawake_sdk\tools\train.py:2397:    negatives_dir = Path(args.negatives) if args.negatives else None
  src\violawake_sdk\tools\train.py:2398:    verbose = not args.quiet
  src\violawake_sdk\tools\train.py:2399:
  src\violawake_sdk\tools\train.py:2400:    if positives_dir and not positives_dir.exists():
  src\violawake_sdk\tools\train.py:2401:        print(f"ERROR: Positives directory not found: {positives_dir}", 
file=sys.stderr)
  src\violawake_sdk\tools\train.py:2402:        sys.exit(1)
  src\violawake_sdk\tools\train.py:2403:
> src\violawake_sdk\tools\train.py:2404:    if negatives_dir and not negatives_dir.exists():
> src\violawake_sdk\tools\train.py:2405:        print(f"ERROR: Negatives directory not found: {negatives_dir}", 
file=sys.stderr)
  src\violawake_sdk\tools\train.py:2406:        sys.exit(1)
  src\violawake_sdk\tools\train.py:2407:
  src\violawake_sdk\tools\train.py:2408:    if verbose:
  src\violawake_sdk\tools\train.py:2409:        print("=" * 70)
  src\violawake_sdk\tools\train.py:2410:        print(f"ViolaWake Training: '{args.word}'")
  src\violawake_sdk\tools\train.py:2413:        print(f"Auto corpus:        {'enabled' if args.auto_corpus else 
'disabled'}")
  src\violawake_sdk\tools\train.py:2414:        if positives_dir:
  src\violawake_sdk\tools\train.py:2415:            print(f"Positives dir:      {positives_dir}")
> src\violawake_sdk\tools\train.py:2416:        if negatives_dir:
> src\violawake_sdk\tools\train.py:2417:            print(f"Negatives dir:      {negatives_dir}")
  src\violawake_sdk\tools\train.py:2418:        print(f"Output:             {output_path}")
  src\violawake_sdk\tools\train.py:2419:        print(f"Epochs:             {args.epochs} (patience={args.patience})")
  src\violawake_sdk\tools\train.py:2420:        print(f"Batch size:         {args.batch_size}")
  src\violawake_sdk\tools\train.py:2421:        print(f"Learning rate:      {args.lr}")
  src\violawake_sdk\tools\train.py:2422:        print(f"Augmentation:       {'enabled' if args.augment else 
'disabled'}")
  src\violawake_sdk\tools\train.py:2439:            epochs=args.epochs,
  src\violawake_sdk\tools\train.py:2440:            augment=args.augment,
  src\violawake_sdk\tools\train.py:2441:            eval_dir=eval_dir,
> src\violawake_sdk\tools\train.py:2442:            negatives_dir=negatives_dir,
  src\violawake_sdk\tools\train.py:2443:            batch_size=args.batch_size,
  src\violawake_sdk\tools\train.py:2444:            lr=args.lr,
  src\violawake_sdk\tools\train.py:2445:            hidden_dim=args.hidden_dim,
  src\violawake_sdk\tools\train.py:2446:            neg_ratio=args.neg_ratio,
  src\violawake_sdk\tools\train.py:2447:            patience=args.patience,
  src\violawake_sdk\tools\train.py:2491:            f"({len(user_pos_files)} user + {len(tts_pos_files)} TTS)"
  src\violawake_sdk\tools\train.py:2492:        )
  src\violawake_sdk\tools\train.py:2493:
> src\violawake_sdk\tools\train.py:2494:    # Collect negative files from multiple sources
  src\violawake_sdk\tools\train.py:2495:    neg_tag_map: dict[str, list[Path]] = {}
  src\violawake_sdk\tools\train.py:2496:
> src\violawake_sdk\tools\train.py:2497:    # Source 1: User-provided negatives
  src\violawake_sdk\tools\train.py:2498:    user_neg_files: list[Path] = []
> src\violawake_sdk\tools\train.py:2499:    if negatives_dir and negatives_dir.exists():
  src\violawake_sdk\tools\train.py:2500:        user_neg_files = sorted(
> src\violawake_sdk\tools\train.py:2501:            list(negatives_dir.rglob("*.wav")) + 
list(negatives_dir.rglob("*.flac"))
  src\violawake_sdk\tools\train.py:2502:        )
  src\violawake_sdk\tools\train.py:2503:        if user_neg_files:
  src\violawake_sdk\tools\train.py:2504:            neg_tag_map["neg_user"] = user_neg_files
  src\violawake_sdk\tools\train.py:2505:            if verbose:
> src\violawake_sdk\tools\train.py:2506:                print(f"Found {len(user_neg_files)} user-provided negative 
samples")
  src\violawake_sdk\tools\train.py:2507:
> src\violawake_sdk\tools\train.py:2508:    # Source 2: Auto-generated confusable negatives (2 rounds, matching 
production)
  src\violawake_sdk\tools\train.py:2509:    # Round 1: 30 confusables x 10 voices (broad phonetic coverage)
> src\violawake_sdk\tools\train.py:2510:    # Round 2: 16 confusables x 10 voices (tighter variants for hard negatives)
  src\violawake_sdk\tools\train.py:2511:    confusable_files: list[Path] = []
  src\violawake_sdk\tools\train.py:2512:    if args.auto_corpus:
  src\violawake_sdk\tools\train.py:2513:        if verbose:
> src\violawake_sdk\tools\train.py:2514:            print("\nStep 1b: Auto-generating confusable negatives (round 1: 
broad)...")
  src\violawake_sdk\tools\train.py:2515:        confusable_dir_r1 = corpus_dir / "confusables_r1"
> src\violawake_sdk\tools\train.py:2516:        confusable_r1 = _generate_confusable_negatives(
  src\violawake_sdk\tools\train.py:2517:            args.word,
  src\violawake_sdk\tools\train.py:2518:            confusable_dir_r1,
  src\violawake_sdk\tools\train.py:2519:            n_confusables=30,
  src\violawake_sdk\tools\train.py:2520:            voices_per_word=10,
  src\violawake_sdk\tools\train.py:2521:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2525:            confusable_files.extend(confusable_r1)
  src\violawake_sdk\tools\train.py:2526:
  src\violawake_sdk\tools\train.py:2527:        if verbose:
> src\violawake_sdk\tools\train.py:2528:            print("\nStep 1b2: Auto-generating confusable negatives (round 2: 
tight variants)...")
  src\violawake_sdk\tools\train.py:2529:        confusable_dir_r2 = corpus_dir / "confusables_r2"
> src\violawake_sdk\tools\train.py:2530:        confusable_r2 = _generate_confusable_negatives(
  src\violawake_sdk\tools\train.py:2531:            args.word,
  src\violawake_sdk\tools\train.py:2532:            confusable_dir_r2,
  src\violawake_sdk\tools\train.py:2533:            n_confusables=16,
  src\violawake_sdk\tools\train.py:2534:            voices_per_word=10,
  src\violawake_sdk\tools\train.py:2535:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2538:            neg_tag_map["neg_confusable_r2"] = confusable_r2
  src\violawake_sdk\tools\train.py:2539:            confusable_files.extend(confusable_r2)
  src\violawake_sdk\tools\train.py:2540:
> src\violawake_sdk\tools\train.py:2541:    # Source 3: Auto-generated speech negatives
> src\violawake_sdk\tools\train.py:2542:    speech_neg_files: list[Path] = []
  src\violawake_sdk\tools\train.py:2543:    if args.auto_corpus:
  src\violawake_sdk\tools\train.py:2544:        if verbose:
> src\violawake_sdk\tools\train.py:2545:            print("\nStep 1c: Auto-generating speech negatives...")
> src\violawake_sdk\tools\train.py:2546:        speech_neg_dir = corpus_dir / "speech_negatives"
> src\violawake_sdk\tools\train.py:2547:        speech_neg_files = _generate_speech_negatives(
> src\violawake_sdk\tools\train.py:2548:            speech_neg_dir,
  src\violawake_sdk\tools\train.py:2549:            n_voices=5,
  src\violawake_sdk\tools\train.py:2550:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2551:        )
> src\violawake_sdk\tools\train.py:2552:        if speech_neg_files:
> src\violawake_sdk\tools\train.py:2553:            neg_tag_map["neg_speech"] = speech_neg_files
  src\violawake_sdk\tools\train.py:2554:
> src\violawake_sdk\tools\train.py:2555:    # Source 4: Shared universal negative corpus (LibriSpeech, MUSAN, etc.)
> src\violawake_sdk\tools\train.py:2556:    # These are word-agnostic negatives that every wake word model needs.
  src\violawake_sdk\tools\train.py:2557:    # Without them, models only learn to distinguish the wake word from a
> src\violawake_sdk\tools\train.py:2558:    # tiny auto-generated set and false-trigger on any real-world speech.
  src\violawake_sdk\tools\train.py:2559:    _CORPUS_SEARCH_PATHS = [
  src\violawake_sdk\tools\train.py:2560:        Path(__file__).resolve().parent.parent.parent.parent / "corpus",  # 
repo root
  src\violawake_sdk\tools\train.py:2561:        Path.home() / ".violawake" / "corpus",
  src\violawake_sdk\tools\train.py:2562:        Path("corpus"),
  src\violawake_sdk\tools\train.py:2563:    ]
  src\violawake_sdk\tools\train.py:2564:    _CORPUS_SUBDIRS = {
> src\violawake_sdk\tools\train.py:2565:        "neg_librispeech": "librispeech",
> src\violawake_sdk\tools\train.py:2566:        "neg_musan_speech": ("musan/musan/speech", "musan/speech"),
  src\violawake_sdk\tools\train.py:2567:        "neg_musan_music": ("musan/musan/music", "musan/music"),
  src\violawake_sdk\tools\train.py:2568:        "neg_musan_noise": ("musan/musan/noise", "musan/noise"),
  src\violawake_sdk\tools\train.py:2569:    }
  src\violawake_sdk\tools\train.py:2570:    for tag, subdirs in _CORPUS_SUBDIRS.items():
  src\violawake_sdk\tools\train.py:2571:        if isinstance(subdirs, str):
  src\violawake_sdk\tools\train.py:2597:                break  # found in this root, move to next tag
  src\violawake_sdk\tools\train.py:2598:
  src\violawake_sdk\tools\train.py:2599:    corpus_paths = {
> src\violawake_sdk\tools\train.py:2600:        "neg_librispeech": "~/.violawake/corpus/librispeech/   (speech 
recordings)",
> src\violawake_sdk\tools\train.py:2601:        "neg_musan_speech": "~/.violawake/corpus/musan/speech/  (MUSAN speech 
subset)",
  src\violawake_sdk\tools\train.py:2602:        "neg_musan_music": "~/.violawake/corpus/musan/music/   (MUSAN music 
subset)",
  src\violawake_sdk\tools\train.py:2603:        "neg_musan_noise": "~/.violawake/corpus/musan/noise/   (MUSAN noise 
subset)",
  src\violawake_sdk\tools\train.py:2604:    }
  src\violawake_sdk\tools\train.py:2605:    found_corpus_tags = [tag for tag in _CORPUS_SUBDIRS if 
neg_tag_map.get(tag)]
  src\violawake_sdk\tools\train.py:2606:    missing_corpus_tags = [tag for tag in _CORPUS_SUBDIRS if tag not in 
found_corpus_tags]
  src\violawake_sdk\tools\train.py:2607:    if not found_corpus_tags:
  src\violawake_sdk\tools\train.py:2608:        print(
> src\violawake_sdk\tools\train.py:2609:            "\nWARNING: No universal negative corpus found.\n"
> src\violawake_sdk\tools\train.py:2610:            "Training with TTS-only negatives may produce a model with high\n"
> src\violawake_sdk\tools\train.py:2611:            "false positive rates on real speech and music.\n"
  src\violawake_sdk\tools\train.py:2612:            "\n"
  src\violawake_sdk\tools\train.py:2613:            "Place audio files in one of these locations:\n"
> src\violawake_sdk\tools\train.py:2614:            "  ~/.violawake/corpus/librispeech/   (speech recordings)\n"
> src\violawake_sdk\tools\train.py:2615:            "  ~/.violawake/corpus/musan/speech/  (MUSAN speech subset)\n"
  src\violawake_sdk\tools\train.py:2616:            "  ~/.violawake/corpus/musan/music/   (MUSAN music subset)\n"
  src\violawake_sdk\tools\train.py:2617:            "  ~/.violawake/corpus/musan/noise/   (MUSAN noise subset)\n"
  src\violawake_sdk\tools\train.py:2618:            "\n"
> src\violawake_sdk\tools\train.py:2619:            "Or provide negatives via: --negatives <dir>\n"
  src\violawake_sdk\tools\train.py:2620:        )
  src\violawake_sdk\tools\train.py:2621:    elif missing_corpus_tags:
> src\violawake_sdk\tools\train.py:2622:        print("\nNOTE: Universal negative corpus is incomplete.")
  src\violawake_sdk\tools\train.py:2623:        print(f"Found {len(found_corpus_tags)}/{len(_CORPUS_SUBDIRS)} corpus 
sources; missing:")
  src\violawake_sdk\tools\train.py:2624:        for tag in missing_corpus_tags:
  src\violawake_sdk\tools\train.py:2625:            print(f"  {tag}: {corpus_paths[tag]}")
> src\violawake_sdk\tools\train.py:2626:        print("Add files to the paths above or provide negatives via 
--negatives <dir>.")
  src\violawake_sdk\tools\train.py:2627:
  src\violawake_sdk\tools\train.py:2628:    total_neg = sum(len(v) for v in neg_tag_map.values())
  src\violawake_sdk\tools\train.py:2629:    if total_neg < 5:
  src\violawake_sdk\tools\train.py:2630:        print(
> src\violawake_sdk\tools\train.py:2631:            f"ERROR: Only {total_neg} negative files total. "
> src\violawake_sdk\tools\train.py:2632:            "Enable --auto-corpus or provide negatives via --negatives.",
  src\violawake_sdk\tools\train.py:2633:            file=sys.stderr,
  src\violawake_sdk\tools\train.py:2634:        )
  src\violawake_sdk\tools\train.py:2635:        sys.exit(1)
  src\violawake_sdk\tools\train.py:2636:
  src\violawake_sdk\tools\train.py:2637:    if verbose:
> src\violawake_sdk\tools\train.py:2638:        print(f"\nTotal negative files: {total_neg}")
  src\violawake_sdk\tools\train.py:2639:        for tag, files in neg_tag_map.items():
  src\violawake_sdk\tools\train.py:2640:            print(f"  {tag}: {len(files)}")
  src\violawake_sdk\tools\train.py:2641:
  src\violawake_sdk\tools\train.py:2642:    # Flatten for the training function
  src\violawake_sdk\tools\train.py:2643:    all_neg_files: list[Path] = []
  src\violawake_sdk\tools\train.py:2679:        eval_target_dir = corpus_dir / "auto_test"
  src\violawake_sdk\tools\train.py:2680:        shutil.rmtree(eval_target_dir, ignore_errors=True)
  src\violawake_sdk\tools\train.py:2681:        _copy_eval_files(test_pos, eval_target_dir / "positives")
> src\violawake_sdk\tools\train.py:2682:        _copy_eval_files(test_neg, eval_target_dir / "negatives")
  src\violawake_sdk\tools\train.py:2683:
  src\violawake_sdk\tools\train.py:2684:        if verbose:
  src\violawake_sdk\tools\train.py:2685:            print(f"  Train positives:    {len(train_pos_files)}")
  src\violawake_sdk\tools\train.py:2686:            print(f"  Test positives:     {len(test_pos)}")
> src\violawake_sdk\tools\train.py:2687:            print(f"  Train negatives:    {len(train_neg_files)}")
> src\violawake_sdk\tools\train.py:2688:            print(f"  Test negatives:     {len(test_neg)}")
  src\violawake_sdk\tools\train.py:2689:            print(f"  Auto-test dir:      {eval_target_dir}")
  src\violawake_sdk\tools\train.py:2690:
  src\violawake_sdk\tools\train.py:2691:    # -- Step 2-5: Train TemporalCNN ----------------------------------------
  src\violawake_sdk\tools\train.py:2692:    _train_temporal_cnn(
  src\violawake_sdk\tools\train.py:2693:        pos_files=train_pos_files,
  src\violawake_sdk\tools\train.py:2718:
  src\violawake_sdk\tools\train.py:2719:    if eval_target_dir is not None:
  src\violawake_sdk\tools\train.py:2720:        try:
> src\violawake_sdk\tools\train.py:2721:            from violawake_sdk.tools.evaluate import evaluate_onnx_model
  src\violawake_sdk\tools\train.py:2722:
> src\violawake_sdk\tools\train.py:2723:            results = evaluate_onnx_model(output_path, eval_target_dir)
  src\violawake_sdk\tools\train.py:2724:            eer = results["eer_approx"] * 100
  src\violawake_sdk\tools\train.py:2725:            roc_auc = results["roc_auc"]
  src\violawake_sdk\tools\train.py:2726:            far = results["optimal_far"] * 100
  src\violawake_sdk\tools\train.py:2727:            frr = results["optimal_frr"] * 100
  src\violawake_sdk\tools\train.py:2728:            verdict = _auto_eval_verdict(eer)
  src\violawake_sdk\tools\train.py:2737:            if eer > 25.0:
  src\violawake_sdk\tools\train.py:2738:                print(
  src\violawake_sdk\tools\train.py:2739:                    "CRITICAL: Held-out EER exceeds 25%. "
> src\violawake_sdk\tools\train.py:2740:                    "Add more real positives, harder speech/background 
negatives, and retrain before deployment."
  src\violawake_sdk\tools\train.py:2741:                )
  src\violawake_sdk\tools\train.py:2742:            elif eer > 15.0:
  src\violawake_sdk\tools\train.py:2743:                print(
  src\violawake_sdk\tools\train.py:2744:                    "WARNING: Held-out EER exceeds 15%. "
> src\violawake_sdk\tools\train.py:2745:                    "Add more speaker/environment diversity and harder 
negatives, then retrain."
  src\violawake_sdk\tools\train.py:2746:                )
  src\violawake_sdk\tools\train.py:2747:
  src\violawake_sdk\tools\train.py:2748:            auto_eval_payload.update(
  src\violawake_sdk\tools\train.py:2749:                {
  src\violawake_sdk\tools\train.py:2750:                    "status": "ok",
  src\violawake_sdk\tools\train.py:2751:                    "architecture": results["architecture"],
  src\violawake_sdk\tools\train.py:2752:                    "n_positives": results["n_positives"],
> src\violawake_sdk\tools\train.py:2753:                    "n_negatives": results["n_negatives"],
  src\violawake_sdk\tools\train.py:2754:                    "roc_auc": round(roc_auc, 4),
  src\violawake_sdk\tools\train.py:2755:                    "eer_percent": round(eer, 2),
  src\violawake_sdk\tools\train.py:2756:                    "far_percent": round(far, 2),
  src\violawake_sdk\tools\train.py:2757:                    "frr_percent": round(frr, 2),
  src\violawake_sdk\tools\train.py:2758:                    "optimal_threshold": round(results["optimal_threshold"], 
4),



 succeeded in 886ms:
196bfdd fix(training): four runtime bugs blocking the actual product
 console/backend/entrypoint.sh    |   9 ++
 console/backend/requirements.txt |   1 +
 docker-compose.production.yml    |   5 +
 src/violawake_sdk/tools/train.py |  10 +-
 tests/live/full_pipeline_e2e.py  | 295 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 317 insertions(+), 3 deletions(-)
b45e03c Require corpus speech negatives in backend training
 console/backend/app/services/training_service.py | 43 ++++++++++--------------
 1 file changed, 18 insertions(+), 25 deletions(-)
a561b4f fix(deploy): run alembic upgrade head in entrypoint + persist webhook idempotency
 console/backend/entrypoint.sh | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
0c3923b Pin OpenWakeWord evaluation helpers to ONNX
 src/violawake_sdk/tools/contamination_check.py | 2 +-
 src/violawake_sdk/training/evaluate.py         | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
9545987 fix(audio): try soundfile before torchaudio in load_audio
 src/violawake_sdk/audio.py | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline --decorate --follow -- docker-compose.production.yml' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 196bfdd''^:docker-compose.production.yml' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 196bfdd -- docker-compose.production.yml console/backend/entrypoint.sh src/violawake_sdk/tools/train.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show b45e03c -- console/backend/app/services/training_service.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline --decorate -- src/violawake_sdk/tools/train.py console/backend/app/services/training_service.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "rg --files -g '*job_queue*' -g '*.db' -g '*.sqlite*'" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 475ms:
console\tests\test_job_queue.py
console\backend\app\job_queue.py

 succeeded in 539ms:
services:
  postgres:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_DB: violawake
      POSTGRES_USER: violawake
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U violawake"]
      interval: 5s
      timeout: 3s
      retries: 5
    shm_size: 256mb

  backend:
    build:
      context: .
      dockerfile: console/Dockerfile.backend
    restart: always
    expose:
      - "8000"
    volumes:
      - backend-data:/app/data
      - ${VIOLAWAKE_NEGATIVES_CORPUS_DIR:-./violawake_data/negatives}:/app/negatives:ro
    env_file:
      - .env.production
    environment:
      - VIOLAWAKE_DB_URL=postgresql+asyncpg://violawake:${POSTGRES_PASSWORD}@postgres:5432/violawake
      - VIOLAWAKE_NEGATIVES_CORPUS_DIR=/app/negatives
    depends_on:
      postgres:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  frontend:
    build:
      context: .
      dockerfile: console/Dockerfile.frontend
    restart: always
    ports:
      - "80:80"
    depends_on:
      backend:
        condition: service_healthy

  tunnel:
    image: cloudflare/cloudflared:latest
    restart: always
    command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN}
    depends_on:
      backend:
        condition: service_healthy

volumes:
  pgdata:
  backend-data:

 succeeded in 493ms:
commit 196bfdd61dbf573011a95dade6031a03afe7b662
Author: ViolaSDK <viola-sdk@project.local>
Date:   Thu May 7 06:28:41 2026 -0500

    fix(training): four runtime bugs blocking the actual product
    
    Surfaced by driving the live training pipeline end-to-end with real
    Viola samples — none of these are caught by unit tests because they
    are container/runtime issues. Each was a complete blocker for any
    real customer trying to train a wake word.
    
    1. Mount ./corpus into the container at /app/corpus:ro. The training
       pipeline searches for LibriSpeech + MUSAN universal-corpus
       negatives via Path('corpus') (CWD-relative inside container).
       Without the mount, total_neg falls back to 0 and training fails
       with 'edge-tts may not be installed or network unavailable'.
    
    2. Add fast_mp3_augment to console/backend/requirements.txt. The
       audio augmentation step in _train_temporal_cnn imports it; was
       silently missing from the backend image.
    
    3. entrypoint.sh now runs openwakeword.utils.download_models() on
       every container start (idempotent — short-circuits if files
       exist). The openwakeword wheel ships without ONNX/TFLite resource
       files; without the explicit download, OWWModel() fails with
       'Could not open ...alexa_v0.1.tflite'.
    
    4. Pin all 3 OWWModel() constructions in src/violawake_sdk/tools/
       train.py to inference_framework='onnx'. openwakeword defaults
       to TFLite when both backends are present, but the bundled
       tflite_runtime in our image rejects the current openwakeword
       .tflite schema with a PyCapsule 'returned a result with an
       exception set' error. ONNX is the canonical production target.
    
    Also: full_pipeline_e2e.py now uses all 22 positive samples for
    training (held-out 4 for eval), since the 10-sample default trips
    the quality gate when all 10 come from a single TTS voice — a real
    user with 10 self-recorded samples has natural variation the test
    fixtures lack.

diff --git a/console/backend/entrypoint.sh b/console/backend/entrypoint.sh
index 1cd8f97..92893c8 100644
--- a/console/backend/entrypoint.sh
+++ b/console/backend/entrypoint.sh
@@ -13,6 +13,15 @@ for i in 1 2 3 4 5; do
     sleep 3
 done
 
+# Ensure OpenWakeWord backbone resources are present. The openwakeword
+# wheel ships without ONNX/TFLite resources; download_models() fetches
+# them on first call. Idempotent — short-circuits if files exist.
+# Required for the training pipeline (OWWModel construction in
+# violawake_sdk.tools.train).
+echo "[entrypoint] ensuring openwakeword backbone models are downloaded"
+python -c "from openwakeword.utils import download_models; download_models()" 2>&1 \
+    | tail -3 || true
+
 if [ "$(id -u)" = "0" ]; then
     chown -R app:app /app/data
     exec gosu app python run.py
diff --git a/docker-compose.production.yml b/docker-compose.production.yml
index f06d178..a2ac4bb 100644
--- a/docker-compose.production.yml
+++ b/docker-compose.production.yml
@@ -25,6 +25,11 @@ services:
     volumes:
       - backend-data:/app/data
       - ${VIOLAWAKE_NEGATIVES_CORPUS_DIR:-./violawake_data/negatives}:/app/negatives:ro
+      # Universal corpus (LibriSpeech + MUSAN) for training-time negative samples.
+      # training_service searches Path("corpus") (CWD-relative = /app/corpus) when
+      # edge-tts negative generation falls short. Without this mount, training
+      # fails with "Only 0 negative files generated" if upstream TTS is degraded.
+      - ./corpus:/app/corpus:ro
     env_file:
       - .env.production
     environment:
diff --git a/src/violawake_sdk/tools/train.py b/src/violawake_sdk/tools/train.py
index 0fd9479..68b6e1e 100644
--- a/src/violawake_sdk/tools/train.py
+++ b/src/violawake_sdk/tools/train.py
@@ -729,7 +729,11 @@ def _extract_temporal_windows_from_audio(
     if len(audio_clips) != len(source_ids):
         raise ValueError("audio_clips and source_ids must have the same length")
 
-    oww = OWWModel()
+    # Pin ONNX backend explicitly. openwakeword defaults to TFLite when both are
+    # present, but the bundled tflite_runtime in our backend image rejects the
+    # current openwakeword .tflite schema with "Could not open ...". ONNX path
+    # is the canonical production target anyway.
+    oww = OWWModel(inference_framework="onnx")
     preprocessor = oww.preprocessor
 
     all_embeddings: list[np.ndarray] = []
@@ -869,7 +873,7 @@ def _extract_mlp_embeddings(
         print(f"ERROR: openwakeword required: {e}", file=sys.stderr)
         sys.exit(1)
 
-    oww = OWWModel()
+    oww = OWWModel(inference_framework="onnx")
     preprocessor = oww.preprocessor
 
     all_embeddings: list[np.ndarray] = []
@@ -1761,7 +1765,7 @@ def _train_mlp_on_oww(
     if verbose:
         print("Loading OpenWakeWord backbone...")
 
-    oww = OWWModel()
+    oww = OWWModel(inference_framework="onnx")
     preprocessor = oww.preprocessor
 
     def _audio_to_embedding(audio_f32):

 succeeded in 493ms:
commit b45e03c25edcc26e0675e591142e987ce2b69f86
Author: ViolaSDK <viola-sdk@project.local>
Date:   Thu May 7 08:00:50 2026 -0500

    Require corpus speech negatives in backend training

diff --git a/console/backend/app/services/training_service.py b/console/backend/app/services/training_service.py
index 75d740c..af849b1 100644
--- a/console/backend/app/services/training_service.py
+++ b/console/backend/app/services/training_service.py
@@ -99,7 +99,6 @@ def run_training_job_sync(
         # -- Production pipeline: full auto-corpus (matching CLI train) --
         from violawake_sdk.tools.train import (
             _generate_confusable_negatives,
-            _generate_speech_negatives,
             _generate_tts_positives,
             _train_temporal_cnn,
         )
@@ -138,7 +137,7 @@ def run_training_job_sync(
                 "total_epochs": epochs,
                 "train_loss": 0.0,
                 "val_loss": 0.0,
-                "message": "Corpus: %s positives. Generating negatives..." % len(pos_files),
+                "message": "Corpus: %s positives. Generating wake-word negatives..." % len(pos_files),
                 "error": None,
             })
         neg_tag_map: dict[str, list[Path]] = {}
@@ -203,33 +202,17 @@ def run_training_job_sync(
             "total_epochs": epochs,
             "train_loss": 0.0,
             "val_loss": 0.0,
-            "message": "Generated confusables. Generating speech negatives...",
+            "message": "Generated confusables. Loading corpus speech negatives...",
             "error": None,
         })
 
-        # Source 3: Auto-generated speech negatives (common phrases)
-        # 5 voices matching CLI production pipeline (was 3)
-        speech_dir = neg_temp_dir / "speech"
-        try:
-            speech_files = _generate_speech_negatives(
-                speech_dir,
-                n_voices=5,
-                verbose=False,
-            )
-            if speech_files:
-                neg_tag_map["neg_speech"] = speech_files
-        except Exception as exc:
-            logger.error(
-                "Speech neg generation FAILED for job %s: %s — "
-                "model will have higher false positive rate on general speech",
-                job_id, exc,
-            )
-
         _ensure_not_cancelled()
 
         # Source 4: Universal corpus (LibriSpeech, MUSAN) if available
+        service_file = Path(__file__).resolve()
         _CORPUS_SEARCH_PATHS = [
-            Path(__file__).resolve().parent.parent.parent.parent / "corpus",  # repo root
+            Path("/app/corpus"),
+            *([service_file.parents[4] / "corpus"] if len(service_file.parents) > 4 else []),
             Path.home() / ".violawake" / "corpus",
             Path("corpus"),
         ]
@@ -263,10 +246,20 @@ def run_training_job_sync(
             all_neg_files.extend(files)
 
         total_neg = len(all_neg_files)
-        if total_neg < 5:
+        speech_neg_tags = {
+            "neg_user",
+            "neg_librispeech",
+            "neg_musan_speech",
+            "neg_musan_music",
+            "neg_musan_noise",
+        }
+        total_speech_neg = sum(
+            len(files) for tag, files in neg_tag_map.items() if tag in speech_neg_tags
+        )
+        if total_speech_neg < 5 or total_neg < 5:
             raise RuntimeError(
-                "Only %s negative files generated. "
-                "edge-tts may not be installed or network unavailable." % total_neg
+                "No speech negatives available. Mount LibriSpeech + MUSAN corpus at "
+                "/app/corpus or run `violawake download-corpus`."
             )
 
         progress_callback({

 succeeded in 1893ms:
854acaf Add Edge TTS retry backoff
b45e03c Require corpus speech negatives in backend training
acdd18f Fix edge TTS negative generation
196bfdd fix(training): four runtime bugs blocking the actual product
8df121c feat(rate-limit): use CF-Connecting-IP for keying + raise REGISTER_LIMIT 10/hr -> 100/hr
574fcef chore(eval): training and benchmark tooling tweaks
4c46498 fix: silence quality gate, training pipeline consistency, remove TFLite placeholder
8161298 fix: 3-round adversarial audit — 8 P0s + 11 P1s across SDK, Console, docs
6d0714c fix: CI pipeline + 53 ruff violations + format compliance
7345832 fix: close/context managers, backbone pinning, Kokoro fallback, package shim
7ad1313 fix: pipeline equivalence, audit fixes, security hardening
1a83620 fix: 5 round-4 adversary findings — security, API clarity, deprecation warnings
13c5a59 feat: ViolaWake Console — full SaaS platform for custom wake word training
fd7a739 feat: WW-4 through WW-10 — STT engine, voice pipeline, CLIs, packaging, CI/CD

 succeeded in 4619ms:
6de96f5 Document required training corpus mount
196bfdd fix(training): four runtime bugs blocking the actual product
67b3beb chore(deploy): production docker-compose

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path console/backend/app/job_queue.py,console/backend/app/config.py,console/backend/app/services/training_service.py -Pattern 'job_queue.db|sqlite|JobQueue|DATABASE|DATA_DIR|storage|trained_models|VIOLAWAKE_NEGATIVES_CORPUS_DIR' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker ps --format \"table {{.ID}}\\t{{.Image}}\\t{{.Names}}\\t{{.Status}}\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker volume ls --format \"{{.Name}}\" | Select-String -Pattern 'wake|violawake|backend|pgdata|data'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'Get-ChildItem -Path . -Recurse -Force -Include *.db,*.sqlite,*.sqlite3 -ErrorAction SilentlyContinue | Select-Object FullName,Length,LastWriteTime' in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 622ms:

  console\backend\app\job_queue.py:17:from typing import Any
  console\backend\app\job_queue.py:18:
> console\backend\app\job_queue.py:19:import aiosqlite
  console\backend\app\job_queue.py:20:from sqlalchemy import select
  console\backend\app\job_queue.py:21:
  console\backend\app\job_queue.py:22:from app.config import settings
> console\backend\app\job_queue.py:23:from app.database import async_session_factory
  console\backend\app\job_queue.py:24:from app.models import Recording, TrainedModel, User
  console\backend\app\job_queue.py:25:from app.monitoring import log_exception
  console\backend\app\job_queue.py:26:from app.services.training_service import TrainingCancelledError, 
run_training_job_sync
> console\backend\app\job_queue.py:27:from app.storage import build_companion_config_identifier, build_model_key, 
get_storage
  console\backend\app\job_queue.py:28:
  console\backend\app\job_queue.py:29:logger = logging.getLogger("violawake.jobs")
  console\backend\app\job_queue.py:30:
  console\backend\app\job_queue.py:31:QUEUE_MAX_SIZE = 50
  console\backend\app\job_queue.py:139:
  console\backend\app\job_queue.py:140:
> console\backend\app\job_queue.py:141:class JobQueue:
  console\backend\app\job_queue.py:142:    """Persistent async training job queue."""
  console\backend\app\job_queue.py:143:
  console\backend\app\job_queue.py:144:    def __init__(
  console\backend\app\job_queue.py:145:        self,
  console\backend\app\job_queue.py:149:        max_pending: int = QUEUE_MAX_SIZE,
  console\backend\app\job_queue.py:150:    ) -> None:
> console\backend\app\job_queue.py:151:        self._db_path = db_path or (settings.data_dir / "job_queue.db")
  console\backend\app\job_queue.py:152:        self._queue: asyncio.Queue[int] = asyncio.Queue(maxsize=max_pending)
  console\backend\app\job_queue.py:153:        self._semaphore = asyncio.Semaphore(max_concurrent)
  console\backend\app\job_queue.py:154:        self._subscribers: dict[int, list[asyncio.Queue[dict[str, Any]]]] = {}
  console\backend\app\job_queue.py:155:        self._queued_job_ids: set[int] = set()
  console\backend\app\job_queue.py:566:            )
  console\backend\app\job_queue.py:567:
> console\backend\app\job_queue.py:568:            # Migration: add priority column to existing databases that predate
  console\backend\app\job_queue.py:569:            # this feature.  Must run BEFORE the priority index creation below.
  console\backend\app\job_queue.py:570:            async with conn.execute("PRAGMA table_info(jobs)") as cursor:
  console\backend\app\job_queue.py:571:                columns = {row["name"] async for row in cursor}
  console\backend\app\job_queue.py:572:            if "priority" not in columns:
  console\backend\app\job_queue.py:730:            )
  console\backend\app\job_queue.py:731:
> console\backend\app\job_queue.py:732:            storage = get_storage()
  console\backend\app\job_queue.py:733:            model_key = build_model_key(job.user_id, artifact.local_path.name)
> console\backend\app\job_queue.py:734:            storage.upload(
  console\backend\app\job_queue.py:735:                model_key,
  console\backend\app\job_queue.py:736:                artifact.local_path.read_bytes(),
  console\backend\app\job_queue.py:737:                "application/octet-stream",
  console\backend\app\job_queue.py:738:            )
  console\backend\app\job_queue.py:739:            if artifact.config_bytes is not None:
> console\backend\app\job_queue.py:740:                storage.upload(
  console\backend\app\job_queue.py:741:                    build_companion_config_identifier(model_key),
  console\backend\app\job_queue.py:742:                    artifact.config_bytes,
  console\backend\app\job_queue.py:743:                    "application/json",
  console\backend\app\job_queue.py:744:                )
  console\backend\app\job_queue.py:1030:    async def _get_circuit_breaker_with_conn(
  console\backend\app\job_queue.py:1031:        self,
> console\backend\app\job_queue.py:1032:        conn: aiosqlite.Connection,
  console\backend\app\job_queue.py:1033:        user_id: int,
  console\backend\app\job_queue.py:1034:    ) -> CircuitBreakerState:
  console\backend\app\job_queue.py:1035:        async with conn.execute(
  console\backend\app\job_queue.py:1036:            """
  console\backend\app\job_queue.py:1186:        """Soft-delete recordings after training completes.
  console\backend\app\job_queue.py:1187:
> console\backend\app\job_queue.py:1188:        The actual storage file purge happens later via the periodic
  console\backend\app\job_queue.py:1189:        retention cleanup loop (``cleanup_soft_deleted_recordings``).
  console\backend\app\job_queue.py:1190:        """
  console\backend\app\job_queue.py:1191:        if settings.post_training_retention_hours <= 0:
  console\backend\app\job_queue.py:1192:            return
  console\backend\app\job_queue.py:1239:            return int(model.id)
  console\backend\app\job_queue.py:1240:
> console\backend\app\job_queue.py:1241:    def _row_to_job(self, row: aiosqlite.Row) -> Job:
  console\backend\app\job_queue.py:1242:        # priority column was added via migration; guard against missing column
  console\backend\app\job_queue.py:1243:        # in case _row_to_job is called from a test that does not run 
_initialize_db.
  console\backend\app\job_queue.py:1244:        try:
  console\backend\app\job_queue.py:1245:            priority = int(row["priority"])
  console\backend\app\job_queue.py:1264:
  console\backend\app\job_queue.py:1265:    @asynccontextmanager
> console\backend\app\job_queue.py:1266:    async def _connect(self) -> AsyncIterator[aiosqlite.Connection]:
> console\backend\app\job_queue.py:1267:        connection = await aiosqlite.connect(self._db_path, timeout=30)
> console\backend\app\job_queue.py:1268:        connection.row_factory = aiosqlite.Row
  console\backend\app\job_queue.py:1269:        try:
  console\backend\app\job_queue.py:1270:            yield connection
  console\backend\app\job_queue.py:1271:        finally:
  console\backend\app\job_queue.py:1272:            await connection.close()
  console\backend\app\job_queue.py:1273:
  console\backend\app\job_queue.py:1274:
> console\backend\app\job_queue.py:1275:_job_queue: JobQueue | None = None
  console\backend\app\job_queue.py:1276:
  console\backend\app\job_queue.py:1277:
> console\backend\app\job_queue.py:1278:async def init_job_queue() -> JobQueue:
  console\backend\app\job_queue.py:1279:    """Initialize the process-wide job queue singleton."""
  console\backend\app\job_queue.py:1280:    global _job_queue
  console\backend\app\job_queue.py:1281:    if _job_queue is None:
> console\backend\app\job_queue.py:1282:        _job_queue = JobQueue(max_concurrent=settings.max_concurrent_jobs)
  console\backend\app\job_queue.py:1283:        await _job_queue.start()
  console\backend\app\job_queue.py:1284:    return _job_queue
  console\backend\app\job_queue.py:1285:
  console\backend\app\job_queue.py:1286:
> console\backend\app\job_queue.py:1287:def get_job_queue() -> JobQueue:
  console\backend\app\job_queue.py:1288:    """Return the initialized process-wide job queue singleton."""
  console\backend\app\job_queue.py:1289:    if _job_queue is None:
  console\backend\app\job_queue.py:1290:        raise RuntimeError("Job queue has not been initialized")
  console\backend\app\job_queue.py:1291:    return _job_queue
  console\backend\app\config.py:29:    # Paths
  console\backend\app\config.py:30:    base_dir: Path = Path(__file__).resolve().parent.parent
> console\backend\app\config.py:31:    data_dir: Path = Path(__file__).resolve().parent.parent / "data"
  console\backend\app\config.py:32:    db_path: Path = Path(__file__).resolve().parent.parent / "data" / "violawake.db"
  console\backend\app\config.py:33:    upload_dir: Path = Path(__file__).resolve().parent.parent / "data" / 
"recordings"
  console\backend\app\config.py:34:    models_dir: Path = Path(__file__).resolve().parent.parent / "data" / "models"
  console\backend\app\config.py:35:    tmp_dir: Path = Path(__file__).resolve().parent.parent / "data" / "tmp"
  console\backend\app\config.py:36:
> console\backend\app\config.py:37:    # Object storage
  console\backend\app\config.py:38:    r2_endpoint: str = ""
  console\backend\app\config.py:39:    r2_access_key_id: str = ""
  console\backend\app\config.py:40:    r2_secret_access_key: str = ""
  console\backend\app\config.py:41:    r2_bucket: str = "violawake"
  console\backend\app\config.py:42:
> console\backend\app\config.py:43:    # Database
  console\backend\app\config.py:44:    db_url: str = ""  # Optional full SQLAlchemy async URL, e.g. Railway PostgreSQL
  console\backend\app\config.py:45:
  console\backend\app\config.py:46:    # Auth
  console\backend\app\config.py:47:    secret_key: str = ""
  console\backend\app\config.py:155:
  console\backend\app\config.py:156:    @property
> console\backend\app\config.py:157:    def database_url(self) -> str:
> console\backend\app\config.py:158:        """Return the configured database URL, defaulting to local SQLite."""
  console\backend\app\config.py:159:        if self.db_url and self.db_url.strip():
  console\backend\app\config.py:160:            return self.db_url.strip()
> console\backend\app\config.py:161:        return f"sqlite+aiosqlite:///{self.db_path}"
  console\backend\app\config.py:162:
  console\backend\app\config.py:163:    @property
> console\backend\app\config.py:164:    def database_log_target(self) -> str:
> console\backend\app\config.py:165:        """Return a safe database identifier for logs without leaking 
credentials."""
  console\backend\app\config.py:166:        if self.db_url and self.db_url.strip():
  console\backend\app\config.py:167:            return "VIOLAWAKE_DB_URL"
  console\backend\app\config.py:168:        return str(self.db_path)
  console\backend\app\config.py:169:
  console\backend\app\config.py:192:settings = Settings()
  console\backend\app\config.py:193:
> console\backend\app\config.py:194:# Ensure runtime directories exist for uploads, models, and the default SQLite 
path.
> console\backend\app\config.py:195:settings.data_dir.mkdir(parents=True, exist_ok=True)
  console\backend\app\config.py:196:settings.upload_dir.mkdir(parents=True, exist_ok=True)
  console\backend\app\config.py:197:settings.models_dir.mkdir(parents=True, exist_ok=True)
  console\backend\app\config.py:198:settings.tmp_dir.mkdir(parents=True, exist_ok=True)
  console\backend\app\services\training_service.py:16:from app.config import settings
  console\backend\app\services\training_service.py:17:from app.monitoring import log_exception
> console\backend\app\services\training_service.py:18:from app.storage import get_storage
  console\backend\app\services\training_service.py:19:
  console\backend\app\services\training_service.py:20:logger = logging.getLogger("violawake.training")
  console\backend\app\services\training_service.py:21:
  console\backend\app\services\training_service.py:22:
  console\backend\app\services\training_service.py:51:    positives_dir: Path | None = None
  console\backend\app\services\training_service.py:52:    neg_temp_dir: Path | None = None
> console\backend\app\services\training_service.py:53:    storage = get_storage()
  console\backend\app\services\training_service.py:54:
  console\backend\app\services\training_service.py:55:    def _ensure_not_cancelled() -> None:
  console\backend\app\services\training_service.py:56:        if is_cancelled():
  console\backend\app\services\training_service.py:57:            raise TrainingCancelledError("Training cancelled by 
user")
  console\backend\app\services\training_service.py:73:        for index, recording_identifier in 
enumerate(recording_identifiers):
  console\backend\app\services\training_service.py:74:            _ensure_not_cancelled()
> console\backend\app\services\training_service.py:75:            if not storage.exists(recording_identifier):
  console\backend\app\services\training_service.py:76:                logger.warning("Recording %s was missing for 
training job %s", recording_identifier, job_id)
  console\backend\app\services\training_service.py:77:                continue
  console\backend\app\services\training_service.py:78:
  console\backend\app\services\training_service.py:79:            dst = positives_dir / f"sample_{index:04d}.wav"
> console\backend\app\services\training_service.py:80:            
dst.write_bytes(storage.download(recording_identifier))
  console\backend\app\services\training_service.py:81:
  console\backend\app\services\training_service.py:82:        wav_count = len(list(positives_dir.glob("*.wav")))
  console\backend\app\services\training_service.py:83:        if wav_count < 5:
  console\backend\app\services\training_service.py:84:            raise RuntimeError("Only %s valid WAV files found. 
Need at least 5." % wav_count)



 succeeded in 698ms:
CONTAINER ID   IMAGE                                        NAMES                  STATUS
09cb88ccaa6c   fewerjobs-web:dev                            fewerjobs-web          Up About an hour (healthy)
fb60bc136730   wakeword-backend                             wakeword-backend-1     Up About an hour (healthy)
34948dc1d44b   fewerjobs-mcp:dev                            fewerjobs-mcp          Up 11 hours (healthy)
efcd449d617e   viola-cloud:dev                              viola-api              Up 12 hours (healthy)
e5aa85291aa0   clickhouse/clickhouse-server:24.12-alpine    fewerjobs-clickhouse   Up 16 hours
b8630e4fe2ee   ghcr.io/plausible/community-edition:v3.0.1   fewerjobs-plausible    Up Less than a second
c25bc3a3eff1   typesense/typesense:28.0                     fewerjobs-typesense    Up 16 hours (unhealthy)
926cf44ee032   searxng/searxng:2026.4.13-ee66b070a          viola-searxng          Up 12 days (healthy)
3b9f8ef7cdd4   postgres:16-alpine                           wakeword-postgres-1    Up 12 days (healthy)
34406a435fb1   cloudflare/cloudflared:latest                wakeword-tunnel-1      Up 12 days
58338cefb09c   btcpayserver/btcpayserver:2.3.2              viola-btcpay           Up 12 days
134c0b1b621c   nicolasdorier/nbxplorer:2.5.30               viola-nbxplorer        Up 12 days
40ce091a649b   btcpayserver/bitcoin:26.0                    viola-bitcoind         Up 12 days
53041de55978   postgres:16-alpine                           viola-postgres-local   Up 12 days (healthy)
9f22111e4952   redis:7-alpine                               viola-redis-local      Up 12 days (healthy)

 succeeded in 715ms:

fewerjobs_fewerjobs_clickhouse_data
fewerjobs_fewerjobs_typesense_data
launch-classifier-investigation_viola_cloud_data
launch-clouddeploy_viola_cloud_data
novviola_searxng_data
novviola_viola_cloud_data
sms-verify-page-2026-04-28_viola_cloud_data
viola_bitcoin_data
viola_btcpay_data
viola_nbxplorer_data
viola_postgres_data
viola_redis_data
wakeword_backend-data
wakeword_pgdata



 succeeded in 6548ms:

FullName                                                                          Length LastWriteTime        
--------                                                                          ------ -------------        
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\auth-test-1774540988789338000.db      0 3/26/2026 11:03:09 AM
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\auth-test-inline.db                   0 3/26/2026 11:03:51 AM
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\auth-test-temp.db                 69632 3/26/2026 11:00:38 AM
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\demo.db                           69632 3/26/2026 11:32:59 AM
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\e2e_test.db                       69632 3/26/2026 11:10:28 AM
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\job_queue.db                      40960 5/6/2026 10:49:07 PM 
J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\violawake.db                     696320 5/7/2026 7:59:38 AM  



codex
I found both the persisted Docker volume (`wakeword_backend-data`) and a local `console/backend/data/job_queue.db`. I’m going to query the databases read-only now, then cross-check Postgres for exported `trained_models` rows.
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'sqlite3 --version' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc \"ls -la /app/data && find /app/data -maxdepth 3 -type f -name '*job*' -o -name '*.db'\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc \"python - <<'PY'
import sqlite3, os
p='/app/data/job_queue.db'
print('exists', os.path.exists(p), 'size', os.path.getsize(p) if os.path.exists(p) else None)
con=sqlite3.connect(f'file:{p}?mode=ro', uri=True)
con.row_factory=sqlite3.Row
for row in con.execute(\\\"select name, sql from sqlite_master where type='table' order by name\\\"):
 print('TABLE', row['name']); print(row['sql'])
con.close()
PY\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 sh -lc \"psql -U violawake -d violawake -c '\\\\dt'\"" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:07:12.189435Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
sqlite3 : The term 'sqlite3' is not recognized as the name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:2 char:1
+ sqlite3 --version
+ ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (sqlite3:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 

 exited 1 in 434ms:
sqlite3 : The term 'sqlite3' is not recognized as the name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:2 char:1
+ sqlite3 --version
+ ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (sqlite3:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 

2026-05-07T16:07:12.203699Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
  File "<stdin>", line 6
    for row in con.execute(" select name sql from sqlite_master where type=table order by name\):
                           ^
SyntaxError: unterminated string literal (detected at line 6)

 exited 1 in 401ms:
  File "<stdin>", line 6
    for row in con.execute(" select name sql from sqlite_master where type=table order by name\):
                           ^
SyntaxError: unterminated string literal (detected at line 6)

2026-05-07T16:07:12.214859Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
invalid command \

 exited 1 in 412ms:
invalid command \

 succeeded in 608ms:
total 700
drwxr-xr-x   5 app app   4096 May  7 16:07 .
drwxr-xr-x   1 app app   4096 May  7 13:46 ..
-rwxr-xr-x   1 app app      0 Mar 26 16:03 auth-test-1774540988789338000.db
-rwxr-xr-x   1 app app      0 Mar 26 16:03 auth-test-inline.db
-rwxr-xr-x   1 app app  69632 Mar 26 16:00 auth-test-temp.db
-rwxr-xr-x   1 app app  69632 Mar 26 16:32 demo.db
-rwxr-xr-x   1 app app  69632 Mar 26 16:10 e2e_test.db
-rwxr-xr-x   1 app app  45056 May  7 15:14 job_queue.db
drwxr-xr-x  39 app app   4096 May  7 16:07 models
drwxr-xr-x 193 app app   4096 May  7 16:07 recordings
drwxr-xr-x  92 app app   4096 May  7 15:14 tmp
-rwxr-xr-x   1 app app 438272 Mar 29 22:51 violawake.db
/app/data/violawake.db
/app/data/demo.db
/app/data/e2e_test.db
/app/data/auth-test-1774540988789338000.db
/app/data/auth-test-inline.db
/app/data/job_queue.db
/app/data/auth-test-temp.db

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 python -c \"import sqlite3, os; p='/app/data/job_queue.db'; print('exists', os.path.exists(p), 'size', os.path.getsize(p)); con=sqlite3.connect('file:'+p+'?mode=ro', uri=True); con.row_factory=sqlite3.Row; rows=con.execute(\\\"select name, sql from sqlite_master where type='table' order by name\\\").fetchall(); [print('TABLE', r['name'], r['sql'].replace(chr(10),' ')) for r in rows]; con.close()\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 psql -U violawake -d violawake -c \"select tablename from pg_tables where schemaname='public' order by tablename;\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc \"env | sort | grep -E 'VIOLAWAKE|POSTGRES|PYTHON|OPENWAKE|TFLITE|ONNX'\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker inspect wakeword-backend-1 --format '{{json .Mounts}}'" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 593ms:
[{"Type":"bind","Source":"/run/desktop/mnt/host/j/CLAUDE/PROJECTS/Wakeword/corpus","Destination":"/app/corpus","Mode":"ro","RW":false,"Propagation":"rprivate"},{"Type":"volume","Name":"wakeword_backend-data","Source":"/var/lib/docker/volumes/wakeword_backend-data/_data","Destination":"/app/data","Driver":"local","Mode":"rw","RW":true,"Propagation":""},{"Type":"bind","Source":"/run/desktop/mnt/host/j/CLAUDE/PROJECTS/Wakeword/violawake_data/negatives","Destination":"/app/negatives","Mode":"ro","RW":false,"Propagation":"rprivate"}]

 succeeded in 690ms:
POSTGRES_PASSWORD=LW_OCo5Zwbi4CHtleNazoMimCvVF8DMrj3_yrl92dWA
PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625
PYTHON_VERSION=3.11.15
VIOLAWAKE_ACCESS_TOKEN_EXPIRE_HOURS=24
VIOLAWAKE_ADMIN_TOKEN=yr8Dr9qqz0EPIjQ8x1uyFlbOW1VaOE9l
VIOLAWAKE_ALGORITHM=HS256
VIOLAWAKE_CONSOLE_BASE_URL=https://violawake.com
VIOLAWAKE_CORS_ORIGINS=https://violawake.com,https://www.violawake.com
VIOLAWAKE_DB_URL=postgresql+asyncpg://violawake:LW_OCo5Zwbi4CHtleNazoMimCvVF8DMrj3_yrl92dWA@postgres:5432/violawake
VIOLAWAKE_ENV=production
VIOLAWAKE_MAX_CONCURRENT_JOBS=2
VIOLAWAKE_MODEL_RETENTION_DAYS=365
VIOLAWAKE_NEGATIVES_CORPUS_DIR=/app/negatives
VIOLAWAKE_PORT=8000
VIOLAWAKE_POST_TRAINING_RETENTION_HOURS=24
VIOLAWAKE_RECORDING_RETENTION_DAYS=90
VIOLAWAKE_RESEND_API_KEY=re_ErSJ5TV9_AfVDhE78XEWShjmXjrzSikex
VIOLAWAKE_SECRET_KEY=ChRob1lLWvbkIxiNlmr6eWro0tkZWNlKH1owLPx2uNHueYmbsMSZPEpZxfU5grTD
VIOLAWAKE_SKIP_QUALITY_GATE=1
VIOLAWAKE_STRIPE_PRICE_BUSINESS=price_1TUIzAP2JRxgIaplzAV7Epf2
VIOLAWAKE_STRIPE_PRICE_DEVELOPER=price_1TUIz9P2JRxgIaplSsON1udI
VIOLAWAKE_STRIPE_SECRET_KEY=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
VIOLAWAKE_STRIPE_WEBHOOK_SECRET=whsec_YzZeXv4ZD9ZrJjWM3Nu4rTh7aaiMF5GL
VIOLAWAKE_TRAINING_TIMEOUT=1800

2026-05-07T16:07:25.535192Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.8 seconds
Output:
  File "<string>", line 1
    import sqlite3, os; p='/app/data/job_queue.db'; print('exists', os.path.exists(p), 'size', os.path.getsize(p)); con=sqlite3.connect('file:'+p+'?mode=ro', uri=True); con.row_factory=sqlite3.Row; rows=con.execute(" select name sql from sqlite_master where type=table order by name\).fetchall();
                                                                                                                                                                                                                       ^
SyntaxError: unterminated string literal (detected at line 1)

 exited 1 in 796ms:
  File "<string>", line 1
    import sqlite3, os; p='/app/data/job_queue.db'; print('exists', os.path.exists(p), 'size', os.path.getsize(p)); con=sqlite3.connect('file:'+p+'?mode=ro', uri=True); con.row_factory=sqlite3.Row; rows=con.execute(" select name sql from sqlite_master where type=table order by name\).fetchall();
                                                                                                                                                                                                                       ^
SyntaxError: unterminated string literal (detected at line 1)

 succeeded in 786ms:
        tablename        
-------------------------
 alembic_version
 processed_stripe_events
 recordings
 subscriptions
 team_members
 teams
 trained_models
 training_jobs
 usage_records
 users
(10 rows)


exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 python -c 'import sqlite3, os; p=\"/app/data/job_queue.db\"; print(\"exists\", os.path.exists(p), \"size\", os.path.getsize(p)); con=sqlite3.connect(\"file:\"+p+\"?mode=ro\", uri=True); con.row_factory=sqlite3.Row; rows=con.execute(\"select name, sql from sqlite_master where type=''table'' order by name\").fetchall(); [print(\"TABLE\", r[\"name\"], r[\"sql\"].replace(chr(10), \" \")) for r in rows]; con.close()'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "python -c 'import sqlite3, os; p=r\"J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\job_queue.db\"; print(\"exists\", os.path.exists(p), \"size\", os.path.getsize(p)); con=sqlite3.connect(\"file:\"+p+\"?mode=ro\", uri=True); con.row_factory=sqlite3.Row; rows=con.execute(\"select name, sql from sqlite_master where type=''table'' order by name\").fetchall(); [print(\"TABLE\", r[\"name\"], r[\"sql\"].replace(chr(10), \" \")) for r in rows]; con.close()'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 psql -U violawake -d violawake -c \"select column_name, data_type from information_schema.columns where table_schema='public' and table_name='trained_models' order by ordinal_position;\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 psql -U violawake -d violawake -c \"select column_name, data_type from information_schema.columns where table_schema='public' and table_name='training_jobs' order by ordinal_position;\"" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:07:39.477274Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.3 seconds
Output:
  File "<string>", line 1
    import sqlite3, os; p=rJ:\CLAUDE\PROJECTS\Wakeword\console\backend\data\job_queue.db; print(exists, os.path.exists(p), size, os.path.getsize(p)); con=sqlite3.connect(file:+p+?mode=ro, uri=True); con.row_factory=sqlite3.Row; rows=con.execute(select
                            ^
SyntaxError: invalid syntax

 exited 1 in 339ms:
  File "<string>", line 1
    import sqlite3, os; p=rJ:\CLAUDE\PROJECTS\Wakeword\console\backend\data\job_queue.db; print(exists, os.path.exists(p), size, os.path.getsize(p)); con=sqlite3.connect(file:+p+?mode=ro, uri=True); con.row_factory=sqlite3.Row; rows=con.execute(select
                            ^
SyntaxError: invalid syntax

2026-05-07T16:07:39.521905Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
  File "<string>", line 1
    import sqlite3, os; p=/app/data/job_queue.db; print(exists, os.path.exists(p), size, os.path.getsize(p)); con=sqlite3.connect(file:+p+?mode=ro, uri=True); con.row_factory=sqlite3.Row; rows=con.execute(select
                          ^
SyntaxError: invalid syntax

 exited 1 in 413ms:
  File "<string>", line 1
    import sqlite3, os; p=/app/data/job_queue.db; print(exists, os.path.exists(p), size, os.path.getsize(p)); con=sqlite3.connect(file:+p+?mode=ro, uri=True); con.row_factory=sqlite3.Row; rows=con.execute(select
                          ^
SyntaxError: invalid syntax

 succeeded in 489ms:
 column_name  |        data_type         
--------------+--------------------------
 id           | integer
 user_id      | integer
 wake_word    | character varying
 status       | character varying
 progress     | double precision
 epochs       | integer
 d_prime      | double precision
 model_id     | integer
 error        | text
 created_at   | timestamp with time zone
 completed_at | timestamp with time zone
(11 rows)


 succeeded in 513ms:
 column_name |        data_type         
-------------+--------------------------
 id          | integer
 user_id     | integer
 team_id     | integer
 wake_word   | character varying
 file_path   | character varying
 config_json | text
 d_prime     | double precision
 size_bytes  | integer
 created_at  | timestamp with time zone
(9 rows)


exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, os
p='/app/data/job_queue.db'
print('exists', os.path.exists(p), 'size', os.path.getsize(p) if os.path.exists(p) else None)
con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
con.row_factory=sqlite3.Row
for row in con.execute(\"select name, sql from sqlite_master where type='table' order by name\"):
    print('TABLE', row['name'], row['sql'].replace('\\n',' '))
con.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, os
p=r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\job_queue.db'
print('exists', os.path.exists(p), 'size', os.path.getsize(p) if os.path.exists(p) else None)
con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
con.row_factory=sqlite3.Row
for row in con.execute(\"select name, sql from sqlite_master where type='table' order by name\"):
    print('TABLE', row['name'], row['sql'].replace('\\n',' '))
con.close()
'@ | python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'docker exec wakeword-postgres-1 psql -U violawake -d violawake -c "select id, user_id, wake_word, file_path, d_prime, size_bytes, created_at, left(config_json,160) as config_prefix from trained_models order by created_at;"' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 psql -U violawake -d violawake -c \"select id, user_id, wake_word, status, progress, epochs, d_prime, model_id, created_at, completed_at, left(coalesce(error,''),160) as error_prefix from training_jobs order by created_at;\"" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 1543ms:
exists True size 40960
TABLE jobs CREATE TABLE jobs (                     id INTEGER PRIMARY KEY AUTOINCREMENT,                     user_id INTEGER NOT NULL,                     wake_word TEXT NOT NULL,                     status TEXT NOT NULL,                     created_at TEXT NOT NULL,                     started_at TEXT,                     completed_at TEXT,                     error TEXT,                     progress_pct REAL NOT NULL DEFAULT 0,                     recording_ids TEXT NOT NULL,                     epochs INTEGER NOT NULL DEFAULT 50,                     model_id INTEGER,                     d_prime REAL                 , priority INTEGER NOT NULL DEFAULT 0)
TABLE sqlite_sequence CREATE TABLE sqlite_sequence(name,seq)
TABLE user_circuit_breakers CREATE TABLE user_circuit_breakers (                     user_id INTEGER PRIMARY KEY,                     consecutive_failures INTEGER NOT NULL DEFAULT 0,                     paused INTEGER NOT NULL DEFAULT 0,                     next_attempt_at TEXT,                     last_failure_at TEXT,                     pause_reason TEXT                 )

 succeeded in 2516ms:
exists True size 45056
TABLE jobs CREATE TABLE jobs (                     id INTEGER PRIMARY KEY AUTOINCREMENT,                     user_id INTEGER NOT NULL,                     wake_word TEXT NOT NULL,                     status TEXT NOT NULL,                     created_at TEXT NOT NULL,                     started_at TEXT,                     completed_at TEXT,                     error TEXT,                     progress_pct REAL NOT NULL DEFAULT 0,                     recording_ids TEXT NOT NULL,                     epochs INTEGER NOT NULL DEFAULT 50,                     model_id INTEGER,                     d_prime REAL                 , priority INTEGER NOT NULL DEFAULT 0)
TABLE sqlite_sequence CREATE TABLE sqlite_sequence(name,seq)
TABLE user_circuit_breakers CREATE TABLE user_circuit_breakers (                     user_id INTEGER PRIMARY KEY,                     consecutive_failures INTEGER NOT NULL DEFAULT 0,                     paused INTEGER NOT NULL DEFAULT 0,                     next_attempt_at TEXT,                     last_failure_at TEXT,                     pause_reason TEXT                 )

 succeeded in 2559ms:
 id | user_id | wake_word | file_path | d_prime | size_bytes | created_at | config_prefix 
----+---------+-----------+-----------+---------+------------+------------+---------------
(0 rows)


 succeeded in 2534ms:
 id | user_id | wake_word | status | progress | epochs | d_prime | model_id | created_at | completed_at | error_prefix 
----+---------+-----------+--------+----------+--------+---------+----------+------------+--------------+--------------
(0 rows)


exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
for p,label in [('/app/data/job_queue.db','container'),('/app/data/violawake.db','container-main')]:
    print('DB', label, p)
    con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
    con.row_factory=sqlite3.Row
    for row in con.execute(\"select name, sql from sqlite_master where type='table' order by name\"):
        print('TABLE', row['name'], row['sql'].replace('\\n',' '))
    con.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
p='/app/data/job_queue.db'
con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
con.row_factory=sqlite3.Row
print('STATUS COUNTS')
for r in con.execute('select status, count(*) as n, min(created_at) as first_created, max(created_at) as last_created, min(completed_at) as first_completed, max(completed_at) as last_completed from jobs group by status order by status'):
    print(dict(r))
print('JOBS')
for r in con.execute('select id,user_id,wake_word,status,created_at,started_at,completed_at,progress_pct,epochs,model_id,d_prime,length(recording_ids) as rec_len,left(error,180) as error from jobs order by id'):
    print(dict(r))
con.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'docker exec wakeword-postgres-1 psql -U violawake -d violawake -c "select count(*) as recordings, min(created_at), max(created_at) from recordings; select count(*) as users, min(created_at), max(created_at) from users;"' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json, os
for p,label in [(r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\job_queue.db','local-job'),(r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\violawake.db','local-main')]:
    print('DB', label, p, 'exists', os.path.exists(p))
    con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
    con.row_factory=sqlite3.Row
    for row in con.execute(\"select name, sql from sqlite_master where type='table' order by name\"):
        print('TABLE', row['name'], row['sql'].replace('\\n',' '))
    if label == 'local-job':
        print('STATUS COUNTS')
        for r in con.execute('select status, count(*) as n, min(created_at) first_created, max(created_at) last_created, min(completed_at) first_completed, max(completed_at) last_completed from jobs group by status order by status'):
            print(dict(r))
        print('JOBS')
        for r in con.execute('select id,user_id,wake_word,status,created_at,started_at,completed_at,progress_pct,epochs,model_id,d_prime,length(recording_ids) as rec_len,substr(coalesce(error,\"\"),1,180) as error from jobs order by id'):
            print(dict(r))
    con.close()
'@ | python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 714ms:
DB local-job J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\job_queue.db exists True
TABLE jobs CREATE TABLE jobs (                     id INTEGER PRIMARY KEY AUTOINCREMENT,                     user_id INTEGER NOT NULL,                     wake_word TEXT NOT NULL,                     status TEXT NOT NULL,                     created_at TEXT NOT NULL,                     started_at TEXT,                     completed_at TEXT,                     error TEXT,                     progress_pct REAL NOT NULL DEFAULT 0,                     recording_ids TEXT NOT NULL,                     epochs INTEGER NOT NULL DEFAULT 50,                     model_id INTEGER,                     d_prime REAL                 , priority INTEGER NOT NULL DEFAULT 0)
TABLE sqlite_sequence CREATE TABLE sqlite_sequence(name,seq)
TABLE user_circuit_breakers CREATE TABLE user_circuit_breakers (                     user_id INTEGER PRIMARY KEY,                     consecutive_failures INTEGER NOT NULL DEFAULT 0,                     paused INTEGER NOT NULL DEFAULT 0,                     next_attempt_at TEXT,                     last_failure_at TEXT,                     pause_reason TEXT                 )
STATUS COUNTS
{'status': 'completed', 'n': 17, 'first_created': '2026-03-28T20:55:53.078831+00:00', 'last_created': '2026-03-29T22:51:43.678962+00:00', 'first_completed': '2026-03-28T23:17:05.373959+00:00', 'last_completed': '2026-03-29T22:51:58.191290+00:00'}
{'status': 'failed', 'n': 17, 'first_created': '2026-03-26T16:02:13.768795+00:00', 'last_created': '2026-03-29T22:03:06.829046+00:00', 'first_completed': '2026-03-26T16:10:28.350681+00:00', 'last_completed': '2026-03-29T22:03:06.921650+00:00'}
{'status': 'pending', 'n': 1, 'first_created': '2026-05-07T03:49:07.661403+00:00', 'last_created': '2026-05-07T03:49:07.661403+00:00', 'first_completed': None, 'last_completed': None}
{'status': 'running', 'n': 2, 'first_created': '2026-04-05T13:51:55.249184+00:00', 'last_created': '2026-05-07T03:47:49.772369+00:00', 'first_completed': None, 'last_completed': None}
JOBS
{'id': 1, 'user_id': 64, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:02:13.768795+00:00', 'started_at': '2026-03-26T16:10:28.317089+00:00', 'completed_at': '2026-03-26T16:10:28.350681+00:00', 'progress_pct': 5.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 1'}
{'id': 2, 'user_id': 65, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:02:14.218259+00:00', 'started_at': '2026-03-26T16:10:28.318625+00:00', 'completed_at': '2026-03-26T16:10:28.355290+00:00', 'progress_pct': 5.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 2'}
{'id': 3, 'user_id': 69, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:02:35.887447+00:00', 'started_at': '2026-03-26T16:10:28.407246+00:00', 'completed_at': '2026-03-26T16:10:28.427202+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 3'}
{'id': 4, 'user_id': 70, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:02:55.130900+00:00', 'started_at': '2026-03-26T16:10:28.443206+00:00', 'completed_at': '2026-03-26T16:10:28.464605+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 4'}
{'id': 5, 'user_id': 82, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:03:10.090490+00:00', 'started_at': '2026-03-26T16:10:28.476830+00:00', 'completed_at': '2026-03-26T16:10:28.489131+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 5'}
{'id': 6, 'user_id': 83, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:03:29.915325+00:00', 'started_at': '2026-03-26T16:10:28.533737+00:00', 'completed_at': '2026-03-26T16:10:28.549194+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 6'}
{'id': 7, 'user_id': 88, 'wake_word': 'jobsmoke', 'status': 'failed', 'created_at': '2026-03-26T16:04:02.019979+00:00', 'started_at': '2026-03-26T16:10:28.635324+00:00', 'completed_at': '2026-03-26T16:10:28.683057+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 25, 'error': 'No valid recordings found for training job 7'}
{'id': 8, 'user_id': 100, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:05:42.264580+00:00', 'started_at': '2026-03-26T16:10:28.598691+00:00', 'completed_at': '2026-03-26T16:10:28.623004+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 8'}
{'id': 9, 'user_id': 101, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:05:42.753348+00:00', 'started_at': '2026-03-26T16:10:28.660582+00:00', 'completed_at': '2026-03-26T16:10:28.678372+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 9'}
{'id': 10, 'user_id': 117, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:06:45.316995+00:00', 'started_at': '2026-03-26T16:10:28.737048+00:00', 'completed_at': '2026-03-26T16:10:28.779971+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 10'}
{'id': 11, 'user_id': 118, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:06:45.772444+00:00', 'started_at': '2026-03-26T16:10:28.755370+00:00', 'completed_at': '2026-03-26T16:10:28.773755+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 11'}
{'id': 12, 'user_id': 134, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:09:21.012282+00:00', 'started_at': '2026-03-26T16:10:28.852326+00:00', 'completed_at': '2026-03-26T16:10:28.883238+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 12'}
{'id': 13, 'user_id': 135, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:09:41.046396+00:00', 'started_at': '2026-03-26T16:10:28.847160+00:00', 'completed_at': '2026-03-26T16:10:28.890667+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 13'}
{'id': 14, 'user_id': 208, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:36:14.342493+00:00', 'started_at': '2026-03-26T16:49:09.378347+00:00', 'completed_at': '2026-03-26T16:49:09.691640+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 14'}
{'id': 15, 'user_id': 209, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:36:14.897688+00:00', 'started_at': '2026-03-26T16:49:09.378347+00:00', 'completed_at': '2026-03-26T16:49:09.707594+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': 'No valid recordings found for training job 15'}
{'id': 16, 'user_id': 245, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T20:55:53.078831+00:00', 'started_at': '2026-03-28T23:16:37.676575+00:00', 'completed_at': '2026-03-28T23:17:05.466411+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 15, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 17, 'user_id': 246, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T20:56:15.118412+00:00', 'started_at': '2026-03-28T23:16:37.721266+00:00', 'completed_at': '2026-03-28T23:17:05.373959+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 13, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 18, 'user_id': 325, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-28T21:25:28.303277+00:00', 'started_at': '2026-03-28T23:16:37.720261+00:00', 'completed_at': '2026-03-28T23:17:05.369323+00:00', 'progress_pct': 95.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 19, 'user_id': 335, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:25:34.018595+00:00', 'started_at': '2026-03-28T23:17:05.513405+00:00', 'completed_at': '2026-03-28T23:17:20.904154+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 17, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 20, 'user_id': 336, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:26:00.088880+00:00', 'started_at': '2026-03-28T23:17:05.506182+00:00', 'completed_at': '2026-03-28T23:17:20.821948+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 16, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 21, 'user_id': 346, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:26:03.771233+00:00', 'started_at': '2026-03-28T23:17:05.585690+00:00', 'completed_at': '2026-03-28T23:17:21.136832+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 19, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 22, 'user_id': 379, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:28:33.083002+00:00', 'started_at': '2026-03-28T23:17:05.612407+00:00', 'completed_at': '2026-03-28T23:17:20.934164+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 18, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 23, 'user_id': 380, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:29:06.687568+00:00', 'started_at': '2026-03-28T23:17:20.957446+00:00', 'completed_at': '2026-03-28T23:17:36.976447+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 21, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 24, 'user_id': 408, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:31:38.974285+00:00', 'started_at': '2026-03-28T23:17:20.960518+00:00', 'completed_at': '2026-03-28T23:17:36.786008+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 20, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 25, 'user_id': 409, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:32:06.428065+00:00', 'started_at': '2026-03-28T23:17:21.033228+00:00', 'completed_at': '2026-03-28T23:17:37.240602+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 22, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 26, 'user_id': 437, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:36:28.711133+00:00', 'started_at': '2026-03-28T23:17:21.213575+00:00', 'completed_at': '2026-03-28T23:17:37.594875+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 23, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 27, 'user_id': 438, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:36:57.619347+00:00', 'started_at': '2026-03-28T23:17:36.889092+00:00', 'completed_at': '2026-03-28T23:17:53.117919+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 25, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 28, 'user_id': 466, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:37:55.244961+00:00', 'started_at': '2026-03-28T23:17:37.038859+00:00', 'completed_at': '2026-03-28T23:17:52.692051+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 24, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 29, 'user_id': 467, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:38:32.366321+00:00', 'started_at': '2026-03-28T23:17:37.320564+00:00', 'completed_at': '2026-03-28T23:17:53.181430+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 26, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 30, 'user_id': 518, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:55:41.693683+00:00', 'started_at': '2026-03-28T23:17:37.643226+00:00', 'completed_at': '2026-03-28T23:17:53.502608+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 27, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 31, 'user_id': 519, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:56:04.099932+00:00', 'started_at': '2026-03-28T23:17:52.790068+00:00', 'completed_at': '2026-03-28T23:18:06.770173+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 28, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 32, 'user_id': 563, 'wake_word': 'big chungus', 'status': 'completed', 'created_at': '2026-03-29T00:03:12.563620+00:00', 'started_at': '2026-03-29T00:03:12.588655+00:00', 'completed_at': '2026-03-29T00:03:28.603074+00:00', 'progress_pct': 100.0, 'epochs': 50, 'model_id': 29, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 33, 'user_id': 564, 'wake_word': 'big chungus', 'status': 'failed', 'created_at': '2026-03-29T22:03:06.829046+00:00', 'started_at': '2026-03-29T22:03:06.860697+00:00', 'completed_at': '2026-03-29T22:03:06.921650+00:00', 'progress_pct': 0.0, 'epochs': 50, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': '[Errno 28] No space left on device'}
{'id': 34, 'user_id': 564, 'wake_word': 'big chungus', 'status': 'completed', 'created_at': '2026-03-29T22:51:43.678962+00:00', 'started_at': '2026-03-29T22:51:43.713267+00:00', 'completed_at': '2026-03-29T22:51:58.191290+00:00', 'progress_pct': 100.0, 'epochs': 50, 'model_id': 30, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 35, 'user_id': 575, 'wake_word': 'traintest', 'status': 'running', 'created_at': '2026-04-05T13:51:55.249184+00:00', 'started_at': '2026-05-07T03:49:07.730275+00:00', 'completed_at': None, 'progress_pct': 2.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 36, 'user_id': 872, 'wake_word': 'traintest', 'status': 'running', 'created_at': '2026-05-07T03:47:49.772369+00:00', 'started_at': '2026-05-07T03:49:07.657345+00:00', 'completed_at': None, 'progress_pct': 2.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 37, 'user_id': 894, 'wake_word': 'traintest', 'status': 'pending', 'created_at': '2026-05-07T03:49:07.661403+00:00', 'started_at': None, 'completed_at': None, 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'rec_len': 50, 'error': ''}
DB local-main J:\CLAUDE\PROJECTS\Wakeword\console\backend\data\violawake.db exists True
TABLE processed_stripe_events CREATE TABLE processed_stripe_events ( 	event_id TEXT NOT NULL,  	processed_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,  	PRIMARY KEY (event_id) )
TABLE recordings CREATE TABLE recordings ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	filename VARCHAR(255) NOT NULL,  	file_path VARCHAR(1024) NOT NULL,  	duration_s FLOAT NOT NULL,  	sample_rate INTEGER NOT NULL,  	created_at DATETIME NOT NULL, team_id INTEGER REFERENCES teams(id), deleted_at TIMESTAMP,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE subscriptions CREATE TABLE subscriptions ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	stripe_customer_id VARCHAR(255),  	stripe_subscription_id VARCHAR(255),  	tier VARCHAR(20) NOT NULL,  	status VARCHAR(20) NOT NULL,  	current_period_end DATETIME,  	created_at DATETIME NOT NULL,  	updated_at DATETIME NOT NULL,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE,  	UNIQUE (stripe_subscription_id) )
TABLE team_members CREATE TABLE team_members ( 	id INTEGER NOT NULL,  	team_id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	role VARCHAR(20) NOT NULL,  	invited_at DATETIME NOT NULL,  	joined_at DATETIME,  	PRIMARY KEY (id),  	CONSTRAINT uq_team_member UNIQUE (team_id, user_id),  	FOREIGN KEY(team_id) REFERENCES teams (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE teams CREATE TABLE teams ( 	id INTEGER NOT NULL,  	name VARCHAR(255) NOT NULL,  	created_at DATETIME NOT NULL,  	owner_id INTEGER NOT NULL,  	PRIMARY KEY (id),  	FOREIGN KEY(owner_id) REFERENCES users (id) )
TABLE trained_models CREATE TABLE trained_models ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	file_path VARCHAR(1024) NOT NULL,  	config_json TEXT,  	d_prime FLOAT,  	size_bytes INTEGER NOT NULL,  	created_at DATETIME NOT NULL, team_id INTEGER REFERENCES teams(id),  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE training_jobs CREATE TABLE training_jobs ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	status VARCHAR(20) NOT NULL,  	progress FLOAT NOT NULL,  	epochs INTEGER NOT NULL,  	d_prime FLOAT,  	model_id INTEGER,  	error TEXT,  	created_at DATETIME NOT NULL,  	completed_at DATETIME,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id),  	FOREIGN KEY(model_id) REFERENCES trained_models (id) )
TABLE usage_records CREATE TABLE usage_records ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	action VARCHAR(50) NOT NULL,  	period_start DATETIME NOT NULL,  	count INTEGER NOT NULL,  	created_at DATETIME NOT NULL,  	PRIMARY KEY (id),  	CONSTRAINT uq_usage_user_action_period UNIQUE (user_id, action, period_start),  	FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE )
TABLE users CREATE TABLE users ( 	id INTEGER NOT NULL,  	email VARCHAR(255) NOT NULL,  	password_hash VARCHAR(255) NOT NULL,  	name VARCHAR(255) NOT NULL,  	created_at DATETIME NOT NULL, email_verified BOOLEAN NOT NULL DEFAULT FALSE, failed_login_count INTEGER DEFAULT 0 NOT NULL, locked_until TIMESTAMP,  	PRIMARY KEY (id) )

2026-05-07T16:08:22.574012Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.9 seconds
Output:
STATUS COUNTS
{'status': 'cancelled', 'n': 7, 'first_created': '2026-05-07T12:03:52.393073+00:00', 'last_created': '2026-05-07T14:07:25.666739+00:00', 'first_completed': None, 'last_completed': None}
{'status': 'completed', 'n': 17, 'first_created': '2026-03-28T20:55:53.078831+00:00', 'last_created': '2026-03-29T22:51:43.678962+00:00', 'first_completed': '2026-03-28T23:17:05.373959+00:00', 'last_completed': '2026-03-29T22:51:58.191290+00:00'}
{'status': 'failed', 'n': 25, 'first_created': '2026-03-26T16:02:13.768795+00:00', 'last_created': '2026-05-07T14:25:40.207868+00:00', 'first_completed': '2026-03-26T16:10:28.350681+00:00', 'last_completed': '2026-05-07T15:14:50.022310+00:00'}
JOBS
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
sqlite3.OperationalError: no such function: left

 exited 1 in 892ms:
STATUS COUNTS
{'status': 'cancelled', 'n': 7, 'first_created': '2026-05-07T12:03:52.393073+00:00', 'last_created': '2026-05-07T14:07:25.666739+00:00', 'first_completed': None, 'last_completed': None}
{'status': 'completed', 'n': 17, 'first_created': '2026-03-28T20:55:53.078831+00:00', 'last_created': '2026-03-29T22:51:43.678962+00:00', 'first_completed': '2026-03-28T23:17:05.373959+00:00', 'last_completed': '2026-03-29T22:51:58.191290+00:00'}
{'status': 'failed', 'n': 25, 'first_created': '2026-03-26T16:02:13.768795+00:00', 'last_created': '2026-05-07T14:25:40.207868+00:00', 'first_completed': '2026-03-26T16:10:28.350681+00:00', 'last_completed': '2026-05-07T15:14:50.022310+00:00'}
JOBS
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
sqlite3.OperationalError: no such function: left

 succeeded in 871ms:
 recordings |              min              |              max              
------------+-------------------------------+-------------------------------
        270 | 2026-05-07 10:31:46.203432+00 | 2026-05-07 14:25:40.089738+00
(1 row)

 users |              min              |              max              
-------+-------------------------------+-------------------------------
    36 | 2026-04-05 12:37:28.901368+00 | 2026-05-07 14:42:07.689965+00
(1 row)


 succeeded in 935ms:
DB container /app/data/job_queue.db
TABLE jobs CREATE TABLE jobs (                     id INTEGER PRIMARY KEY AUTOINCREMENT,                     user_id INTEGER NOT NULL,                     wake_word TEXT NOT NULL,                     status TEXT NOT NULL,                     created_at TEXT NOT NULL,                     started_at TEXT,                     completed_at TEXT,                     error TEXT,                     progress_pct REAL NOT NULL DEFAULT 0,                     recording_ids TEXT NOT NULL,                     epochs INTEGER NOT NULL DEFAULT 50,                     model_id INTEGER,                     d_prime REAL                 , priority INTEGER NOT NULL DEFAULT 0)
TABLE sqlite_sequence CREATE TABLE sqlite_sequence(name,seq)
TABLE user_circuit_breakers CREATE TABLE user_circuit_breakers (                     user_id INTEGER PRIMARY KEY,                     consecutive_failures INTEGER NOT NULL DEFAULT 0,                     paused INTEGER NOT NULL DEFAULT 0,                     next_attempt_at TEXT,                     last_failure_at TEXT,                     pause_reason TEXT                 )
DB container-main /app/data/violawake.db
TABLE recordings CREATE TABLE recordings ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	filename VARCHAR(255) NOT NULL,  	file_path VARCHAR(1024) NOT NULL,  	duration_s FLOAT NOT NULL,  	sample_rate INTEGER NOT NULL,  	created_at DATETIME NOT NULL, team_id INTEGER REFERENCES teams(id), deleted_at TIMESTAMP,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE subscriptions CREATE TABLE subscriptions ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	stripe_customer_id VARCHAR(255),  	stripe_subscription_id VARCHAR(255),  	tier VARCHAR(20) NOT NULL,  	status VARCHAR(20) NOT NULL,  	current_period_end DATETIME,  	created_at DATETIME NOT NULL,  	updated_at DATETIME NOT NULL,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE,  	UNIQUE (stripe_subscription_id) )
TABLE team_members CREATE TABLE team_members ( 	id INTEGER NOT NULL,  	team_id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	role VARCHAR(20) NOT NULL,  	invited_at DATETIME NOT NULL,  	joined_at DATETIME,  	PRIMARY KEY (id),  	CONSTRAINT uq_team_member UNIQUE (team_id, user_id),  	FOREIGN KEY(team_id) REFERENCES teams (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE teams CREATE TABLE teams ( 	id INTEGER NOT NULL,  	name VARCHAR(255) NOT NULL,  	created_at DATETIME NOT NULL,  	owner_id INTEGER NOT NULL,  	PRIMARY KEY (id),  	FOREIGN KEY(owner_id) REFERENCES users (id) )
TABLE trained_models CREATE TABLE trained_models ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	file_path VARCHAR(1024) NOT NULL,  	config_json TEXT,  	d_prime FLOAT,  	size_bytes INTEGER NOT NULL,  	created_at DATETIME NOT NULL, team_id INTEGER REFERENCES teams(id),  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id) )
TABLE training_jobs CREATE TABLE training_jobs ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	wake_word VARCHAR(100) NOT NULL,  	status VARCHAR(20) NOT NULL,  	progress FLOAT NOT NULL,  	epochs INTEGER NOT NULL,  	d_prime FLOAT,  	model_id INTEGER,  	error TEXT,  	created_at DATETIME NOT NULL,  	completed_at DATETIME,  	PRIMARY KEY (id),  	FOREIGN KEY(user_id) REFERENCES users (id),  	FOREIGN KEY(model_id) REFERENCES trained_models (id) )
TABLE usage_records CREATE TABLE usage_records ( 	id INTEGER NOT NULL,  	user_id INTEGER NOT NULL,  	action VARCHAR(50) NOT NULL,  	period_start DATETIME NOT NULL,  	count INTEGER NOT NULL,  	created_at DATETIME NOT NULL,  	PRIMARY KEY (id),  	CONSTRAINT uq_usage_user_action_period UNIQUE (user_id, action, period_start),  	FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE )
TABLE users CREATE TABLE users ( 	id INTEGER NOT NULL,  	email VARCHAR(255) NOT NULL,  	password_hash VARCHAR(255) NOT NULL,  	name VARCHAR(255) NOT NULL,  	created_at DATETIME NOT NULL, email_verified BOOLEAN NOT NULL DEFAULT FALSE,  	PRIMARY KEY (id) )

codex
The 17 completed jobs are not recent: both the local and container queue show completed jobs only from March 28-29, 2026. I’m now mapping their `recording_ids` to stored recordings and model rows to see whether those were fixture/test runs or real customer-like training.
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
p='/app/data/job_queue.db'
con=sqlite3.connect('file:'+p+'?mode=ro', uri=True)
con.row_factory=sqlite3.Row
print('COMPLETED JOBS')
for r in con.execute('select id,user_id,wake_word,status,created_at,started_at,completed_at,progress_pct,epochs,model_id,d_prime,length(recording_ids) as rec_len,substr(coalesce(error,\"\"),1,180) as error from jobs where status=\"completed\" order by id'):
    print(dict(r))
print('RECENT NON-COMPLETED')
for r in con.execute('select id,user_id,wake_word,status,created_at,started_at,completed_at,progress_pct,epochs,model_id,d_prime,substr(coalesce(error,\"\"),1,220) as error from jobs where status<>\"completed\" order by id'):
    print(dict(r))
con.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json, collections, os
base=r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data'
q=sqlite3.connect('file:'+base+r'\\job_queue.db?mode=ro', uri=True); q.row_factory=sqlite3.Row
m=sqlite3.connect('file:'+base+r'\\violawake.db?mode=ro', uri=True); m.row_factory=sqlite3.Row
completed=list(q.execute('select id,user_id,wake_word,created_at,completed_at,recording_ids,model_id from jobs where status=\"completed\" order by id'))
print('completed_count', len(completed))
print('TRAINED_MODELS local')
for r in m.execute('select id,user_id,wake_word,file_path,d_prime,size_bytes,created_at,substr(coalesce(config_json,\"\"),1,220) as config_prefix from trained_models order by id'):
    print(dict(r))
print('TRAINING_JOBS local')
for r in m.execute('select id,user_id,wake_word,status,progress,epochs,d_prime,model_id,created_at,completed_at,substr(coalesce(error,\"\"),1,160) as error from training_jobs order by id'):
    print(dict(r))
print('COMPLETED_JOB_RECORDINGS')
for job in completed:
    try:
        ids=json.loads(job['recording_ids'])
    except Exception:
        ids=[]
    rows=[]
    if ids:
        placeholders=','.join('?' for _ in ids)
        rows=list(m.execute(f'select id,user_id,wake_word,filename,file_path,duration_s,sample_rate,created_at,deleted_at from recordings where id in ({placeholders}) order by id', ids))
    print('JOB', job['id'], 'user', job['user_id'], 'wake', job['wake_word'], 'created', job['created_at'], 'completed', job['completed_at'], 'model', job['model_id'], 'rec_ids', ids, 'matched', len(rows))
    for rr in rows:
        d=dict(rr)
        print('  REC', d)
q.close(); m.close()
'@ | python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
q=sqlite3.connect('file:/app/data/job_queue.db?mode=ro', uri=True); q.row_factory=sqlite3.Row
m=sqlite3.connect('file:/app/data/violawake.db?mode=ro', uri=True); m.row_factory=sqlite3.Row
completed=list(q.execute('select id,user_id,wake_word,created_at,completed_at,recording_ids,model_id from jobs where status=\"completed\" order by id'))
print('container completed_count', len(completed))
print('container main counts')
for table in ['recordings','trained_models','training_jobs','users']:
    print(table, m.execute(f'select count(*) from {table}').fetchone()[0])
print('container trained_models')
for r in m.execute('select id,user_id,wake_word,file_path,d_prime,size_bytes,created_at,substr(coalesce(config_json,\"\"),1,160) as config_prefix from trained_models order by id'):
    print(dict(r))
for job in completed:
    ids=json.loads(job['recording_ids'])
    rows=[]
    if ids:
        placeholders=','.join('?' for _ in ids)
        rows=list(m.execute(f'select id,user_id,wake_word,filename,file_path,duration_s,sample_rate,created_at,deleted_at from recordings where id in ({placeholders}) order by id', ids))
    print('JOB', job['id'], job['wake_word'], job['created_at'], job['completed_at'], 'ids', ids, 'matched', len(rows))
    for rr in rows:
        print('  REC', dict(rr))
q.close(); m.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 1145ms:
completed_count 17
TRAINED_MODELS local
{'id': 1, 'user_id': 5, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\5\\goldentest_1774511974.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 07:59:55.796727', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 2, 'user_id': 33, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\33\\goldentest_1774529250.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 12:47:41.930089', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 3, 'user_id': 53, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\53\\goldentest_1774534919.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 14:22:21.298915', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 4, 'user_id': 154, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\154\\goldentest_1774541533.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 16:12:23.952185', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 5, 'user_id': 339, 'wake_word': 'token-test', 'file_path': 'models/339/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:26:01.289689+00:00', 'config_prefix': ''}
{'id': 6, 'user_id': 352, 'wake_word': 'token-test', 'file_path': 'models/352/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:26:05.095396+00:00', 'config_prefix': ''}
{'id': 7, 'user_id': 383, 'wake_word': 'token-test', 'file_path': 'models/383/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:29:07.835466+00:00', 'config_prefix': ''}
{'id': 8, 'user_id': 412, 'wake_word': 'token-test', 'file_path': 'models/412/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:32:07.594423+00:00', 'config_prefix': ''}
{'id': 9, 'user_id': 441, 'wake_word': 'token-test', 'file_path': 'models/441/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:36:58.832961+00:00', 'config_prefix': ''}
{'id': 10, 'user_id': 470, 'wake_word': 'token-test', 'file_path': 'models/470/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:38:33.644597+00:00', 'config_prefix': ''}
{'id': 11, 'user_id': 500, 'wake_word': 'token-test', 'file_path': 'models/500/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:52:47.445797+00:00', 'config_prefix': ''}
{'id': 12, 'user_id': 522, 'wake_word': 'token-test', 'file_path': 'models/522/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:56:05.129993+00:00', 'config_prefix': ''}
{'id': 13, 'user_id': 246, 'wake_word': 'statustest', 'file_path': 'models/246/statustest_17_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.363549', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 14, 'user_id': 246, 'wake_word': 'statustest', 'file_path': 'models/246/statustest_17_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.372446', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 15, 'user_id': 245, 'wake_word': 'traintest', 'file_path': 'models/245/traintest_16_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.457196', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 16, 'user_id': 336, 'wake_word': 'statustest', 'file_path': 'models/336/statustest_20_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.809170', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 17, 'user_id': 335, 'wake_word': 'traintest', 'file_path': 'models/335/traintest_19_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.895028', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 18, 'user_id': 379, 'wake_word': 'traintest', 'file_path': 'models/379/traintest_22_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.922875', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 19, 'user_id': 346, 'wake_word': 'statustest', 'file_path': 'models/346/statustest_21_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:21.120144', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 20, 'user_id': 408, 'wake_word': 'traintest', 'file_path': 'models/408/traintest_24_1774739840.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:36.776176', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 21, 'user_id': 380, 'wake_word': 'statustest', 'file_path': 'models/380/statustest_23_1774739840.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:36.942544', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 22, 'user_id': 409, 'wake_word': 'statustest', 'file_path': 'models/409/statustest_25_1774739841.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:37.231282', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 23, 'user_id': 437, 'wake_word': 'traintest', 'file_path': 'models/437/traintest_26_1774739841.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:37.586302', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 24, 'user_id': 466, 'wake_word': 'traintest', 'file_path': 'models/466/traintest_28_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:52.682519', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 25, 'user_id': 438, 'wake_word': 'statustest', 'file_path': 'models/438/statustest_27_1774739856.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.108200', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 26, 'user_id': 467, 'wake_word': 'statustest', 'file_path': 'models/467/statustest_29_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.171221', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 27, 'user_id': 518, 'wake_word': 'traintest', 'file_path': 'models/518/traintest_30_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.493260', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 28, 'user_id': 519, 'wake_word': 'statustest', 'file_path': 'models/519/statustest_31_1774739872.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:18:06.760051', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 29, 'user_id': 563, 'wake_word': 'big chungus', 'file_path': 'models/563/big chungus_32_1774742592.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-29 00:03:28.595075', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 30, 'user_id': 564, 'wake_word': 'big chungus', 'file_path': 'models/564/big chungus_34_1774824703.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-29 22:51:58.183076', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples": 24000, "use_pcen": true, "pcen_gain": 0.98, "pcen_bias": 2.'}
{'id': 31, 'user_id': 867, 'wake_word': 'delete-account', 'file_path': 'models/867/delete-test.onnx', 'd_prime': 1.23, 'size_bytes': 16, 'created_at': '2026-05-07T03:47:45.486714+00:00', 'config_prefix': '{"d_prime": 1.23}'}
{'id': 32, 'user_id': 881, 'wake_word': 'delete-account', 'file_path': 'models/881/delete-test.onnx', 'd_prime': 1.23, 'size_bytes': 16, 'created_at': '2026-05-07T03:48:34.410068+00:00', 'config_prefix': '{"d_prime": 1.23}'}
{'id': 33, 'user_id': 910, 'wake_word': 'token-test', 'file_path': 'models/910/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T03:52:31.269906+00:00', 'config_prefix': ''}
{'id': 34, 'user_id': 943, 'wake_word': 'token-test', 'file_path': 'models/943/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T03:57:42.189953+00:00', 'config_prefix': ''}
{'id': 35, 'user_id': 970, 'wake_word': 'token-test', 'file_path': 'models/970/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T03:59:31.294660+00:00', 'config_prefix': ''}
{'id': 36, 'user_id': 1004, 'wake_word': 'token-test', 'file_path': 'models/1004/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T04:59:05.724821+00:00', 'config_prefix': ''}
{'id': 37, 'user_id': 1045, 'wake_word': 'token-test', 'file_path': 'models/1045/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T05:14:30.989295+00:00', 'config_prefix': ''}
{'id': 38, 'user_id': 1072, 'wake_word': 'token-test', 'file_path': 'models/1072/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T05:15:58.565157+00:00', 'config_prefix': ''}
{'id': 39, 'user_id': 1099, 'wake_word': 'token-test', 'file_path': 'models/1099/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T05:38:43.454621+00:00', 'config_prefix': ''}
{'id': 40, 'user_id': 1126, 'wake_word': 'token-test', 'file_path': 'models/1126/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T11:40:29.711133+00:00', 'config_prefix': ''}
{'id': 41, 'user_id': 1153, 'wake_word': 'token-test', 'file_path': 'models/1153/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-05-07T12:59:29.811389+00:00', 'config_prefix': ''}
TRAINING_JOBS local
{'id': 1, 'user_id': 5, 'wake_word': 'goldentest', 'status': 'completed', 'progress': 1.0, 'epochs': 5, 'd_prime': None, 'model_id': 1, 'created_at': '2026-03-26 07:59:34.659149', 'completed_at': '2026-03-26 07:59:55.804519', 'error': ''}
{'id': 2, 'user_id': 21, 'wake_word': 'traintest', 'status': 'failed', 'progress': 0.0, 'epochs': 5, 'd_prime': None, 'model_id': None, 'created_at': '2026-03-26 12:41:12.588512', 'completed_at': None, 'error': 'Server restarted during training'}
{'id': 3, 'user_id': 22, 'wake_word': 'statustest', 'status': 'failed', 'progress': 0.0, 'epochs': 5, 'd_prime': None, 'model_id': None, 'created_at': '2026-03-26 12:41:12.989936', 'completed_at': None, 'error': 'Server restarted during training'}
{'id': 4, 'user_id': 33, 'wake_word': 'goldentest', 'status': 'completed', 'progress': 1.0, 'epochs': 5, 'd_prime': None, 'model_id': 2, 'created_at': '2026-03-26 12:47:30.777957', 'completed_at': '2026-03-26 12:47:41.939450', 'error': ''}
{'id': 5, 'user_id': 53, 'wake_word': 'goldentest', 'status': 'completed', 'progress': 1.0, 'epochs': 5, 'd_prime': None, 'model_id': 3, 'created_at': '2026-03-26 14:21:59.279054', 'completed_at': '2026-03-26 14:22:21.306622', 'error': ''}
{'id': 6, 'user_id': 154, 'wake_word': 'goldentest', 'status': 'completed', 'progress': 1.0, 'epochs': 5, 'd_prime': None, 'model_id': 4, 'created_at': '2026-03-26 16:12:13.066144', 'completed_at': '2026-03-26 16:12:23.959824', 'error': ''}
{'id': 7, 'user_id': 867, 'wake_word': 'delete-account', 'status': 'queued', 'progress': 0.0, 'epochs': 5, 'd_prime': None, 'model_id': None, 'created_at': '2026-05-07T03:47:45.487226+00:00', 'completed_at': None, 'error': ''}
{'id': 8, 'user_id': 881, 'wake_word': 'delete-account', 'status': 'queued', 'progress': 0.0, 'epochs': 5, 'd_prime': None, 'model_id': None, 'created_at': '2026-05-07T03:48:34.411795+00:00', 'completed_at': None, 'error': ''}
COMPLETED_JOB_RECORDINGS
JOB 16 user 245 wake traintest created 2026-03-28T20:55:53.078831+00:00 completed 2026-03-28T23:17:05.466411+00:00 model 15 rec_ids [466, 467, 468, 469, 470, 471, 472, 473, 474, 475] matched 10
  REC {'id': 466, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/245/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.797470', 'deleted_at': None}
  REC {'id': 467, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/245/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.823339', 'deleted_at': None}
  REC {'id': 468, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/245/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.849063', 'deleted_at': None}
  REC {'id': 469, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/245/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.876446', 'deleted_at': None}
  REC {'id': 470, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/245/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.902634', 'deleted_at': None}
  REC {'id': 471, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/245/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.926398', 'deleted_at': None}
  REC {'id': 472, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/245/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.950495', 'deleted_at': None}
  REC {'id': 473, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/245/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.974578', 'deleted_at': None}
  REC {'id': 474, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/245/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:53.000399', 'deleted_at': None}
  REC {'id': 475, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/245/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:53.026223', 'deleted_at': None}
JOB 17 user 246 wake statustest created 2026-03-28T20:56:15.118412+00:00 completed 2026-03-28T23:17:05.373959+00:00 model 13 rec_ids [476, 477, 478, 479, 480, 481, 482, 483, 484, 485] matched 10
  REC {'id': 476, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/246/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.845822', 'deleted_at': None}
  REC {'id': 477, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/246/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.876364', 'deleted_at': None}
  REC {'id': 478, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/246/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.902091', 'deleted_at': None}
  REC {'id': 479, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/246/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.929347', 'deleted_at': None}
  REC {'id': 480, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/246/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.956190', 'deleted_at': None}
  REC {'id': 481, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/246/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.980555', 'deleted_at': None}
  REC {'id': 482, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/246/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.004732', 'deleted_at': None}
  REC {'id': 483, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/246/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.032111', 'deleted_at': None}
  REC {'id': 484, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/246/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.060074', 'deleted_at': None}
  REC {'id': 485, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/246/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.086627', 'deleted_at': None}
JOB 19 user 335 wake traintest created 2026-03-28T21:25:34.018595+00:00 completed 2026-03-28T23:17:20.904154+00:00 model 17 rec_ids [534, 535, 536, 537, 538, 539, 540, 541, 542, 543] matched 10
  REC {'id': 534, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/335/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.639113', 'deleted_at': None}
  REC {'id': 535, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/335/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.667768', 'deleted_at': None}
  REC {'id': 536, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/335/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.695655', 'deleted_at': None}
  REC {'id': 537, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/335/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.721415', 'deleted_at': None}
  REC {'id': 538, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/335/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.747816', 'deleted_at': None}
  REC {'id': 539, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/335/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.777732', 'deleted_at': None}
  REC {'id': 540, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/335/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.805359', 'deleted_at': None}
  REC {'id': 541, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/335/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.829691', 'deleted_at': None}
  REC {'id': 542, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/335/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.856759', 'deleted_at': None}
  REC {'id': 543, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/335/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.885433', 'deleted_at': None}
JOB 20 user 336 wake statustest created 2026-03-28T21:26:00.088880+00:00 completed 2026-03-28T23:17:20.821948+00:00 model 16 rec_ids [544, 545, 546, 547, 548, 549, 550, 551, 552, 553] matched 10
  REC {'id': 544, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/336/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.736125', 'deleted_at': None}
  REC {'id': 545, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/336/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.772409', 'deleted_at': None}
  REC {'id': 546, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/336/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.806277', 'deleted_at': None}
  REC {'id': 547, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/336/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.837637', 'deleted_at': None}
  REC {'id': 548, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/336/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.880393', 'deleted_at': None}
  REC {'id': 549, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/336/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.912634', 'deleted_at': None}
  REC {'id': 550, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/336/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.947969', 'deleted_at': None}
  REC {'id': 551, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/336/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.981684', 'deleted_at': None}
  REC {'id': 552, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/336/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:00.014529', 'deleted_at': None}
  REC {'id': 553, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/336/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:00.047898', 'deleted_at': None}
JOB 21 user 346 wake statustest created 2026-03-28T21:26:03.771233+00:00 completed 2026-03-28T23:17:21.136832+00:00 model 19 rec_ids [560, 561, 562, 563, 564, 566, 568, 570, 572, 574] matched 10
  REC {'id': 560, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/346/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.406974', 'deleted_at': None}
  REC {'id': 561, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/346/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.437382', 'deleted_at': None}
  REC {'id': 562, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/346/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.468255', 'deleted_at': None}
  REC {'id': 563, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/346/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.503496', 'deleted_at': None}
  REC {'id': 564, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/346/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.551288', 'deleted_at': None}
  REC {'id': 566, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/346/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.584847', 'deleted_at': None}
  REC {'id': 568, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/346/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.641319', 'deleted_at': None}
  REC {'id': 570, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/346/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.674097', 'deleted_at': None}
  REC {'id': 572, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/346/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.705254', 'deleted_at': None}
  REC {'id': 574, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/346/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.738250', 'deleted_at': None}
JOB 22 user 379 wake traintest created 2026-03-28T21:28:33.083002+00:00 completed 2026-03-28T23:17:20.934164+00:00 model 18 rec_ids [610, 611, 612, 613, 614, 615, 616, 617, 618, 619] matched 10
  REC {'id': 610, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/379/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.531173', 'deleted_at': None}
  REC {'id': 611, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/379/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.568464', 'deleted_at': None}
  REC {'id': 612, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/379/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.607202', 'deleted_at': None}
  REC {'id': 613, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/379/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.647272', 'deleted_at': None}
  REC {'id': 614, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/379/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.683288', 'deleted_at': None}
  REC {'id': 615, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/379/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.736111', 'deleted_at': None}
  REC {'id': 616, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/379/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.798344', 'deleted_at': None}
  REC {'id': 617, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/379/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.846096', 'deleted_at': None}
  REC {'id': 618, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/379/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.884564', 'deleted_at': None}
  REC {'id': 619, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/379/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.928164', 'deleted_at': None}
JOB 23 user 380 wake statustest created 2026-03-28T21:29:06.687568+00:00 completed 2026-03-28T23:17:36.976447+00:00 model 21 rec_ids [620, 621, 622, 623, 624, 625, 626, 627, 628, 629] matched 10
  REC {'id': 620, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/380/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.396466', 'deleted_at': None}
  REC {'id': 621, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/380/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.425841', 'deleted_at': None}
  REC {'id': 622, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/380/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.458857', 'deleted_at': None}
  REC {'id': 623, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/380/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.486050', 'deleted_at': None}
  REC {'id': 624, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/380/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.515442', 'deleted_at': None}
  REC {'id': 625, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/380/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.544238', 'deleted_at': None}
  REC {'id': 626, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/380/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.572549', 'deleted_at': None}
  REC {'id': 627, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/380/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.602042', 'deleted_at': None}
  REC {'id': 628, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/380/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.628885', 'deleted_at': None}
  REC {'id': 629, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/380/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.655861', 'deleted_at': None}
JOB 24 user 408 wake traintest created 2026-03-28T21:31:38.974285+00:00 completed 2026-03-28T23:17:36.786008+00:00 model 20 rec_ids [660, 661, 662, 663, 664, 665, 666, 667, 668, 669] matched 10
  REC {'id': 660, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/408/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.526593', 'deleted_at': None}
  REC {'id': 661, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/408/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.569001', 'deleted_at': None}
  REC {'id': 662, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/408/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.618570', 'deleted_at': None}
  REC {'id': 663, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/408/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.653363', 'deleted_at': None}
  REC {'id': 664, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/408/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.687026', 'deleted_at': None}
  REC {'id': 665, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/408/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.720200', 'deleted_at': None}
  REC {'id': 666, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/408/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.753926', 'deleted_at': None}
  REC {'id': 667, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/408/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.788552', 'deleted_at': None}
  REC {'id': 668, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/408/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.823655', 'deleted_at': None}
  REC {'id': 669, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/408/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.857718', 'deleted_at': None}
JOB 25 user 409 wake statustest created 2026-03-28T21:32:06.428065+00:00 completed 2026-03-28T23:17:37.240602+00:00 model 22 rec_ids [670, 671, 672, 673, 674, 675, 676, 677, 678, 679] matched 10
  REC {'id': 670, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/409/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.092501', 'deleted_at': None}
  REC {'id': 671, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/409/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.126853', 'deleted_at': None}
  REC {'id': 672, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/409/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.166885', 'deleted_at': None}
  REC {'id': 673, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/409/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.197438', 'deleted_at': None}
  REC {'id': 674, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/409/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.229112', 'deleted_at': None}
  REC {'id': 675, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/409/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.258832', 'deleted_at': None}
  REC {'id': 676, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/409/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.291385', 'deleted_at': None}
  REC {'id': 677, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/409/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.323763', 'deleted_at': None}
  REC {'id': 678, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/409/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.354202', 'deleted_at': None}
  REC {'id': 679, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/409/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.386686', 'deleted_at': None}
JOB 26 user 437 wake traintest created 2026-03-28T21:36:28.711133+00:00 completed 2026-03-28T23:17:37.594875+00:00 model 23 rec_ids [710, 711, 712, 713, 714, 715, 716, 717, 718, 719] matched 10
  REC {'id': 710, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/437/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.321214', 'deleted_at': None}
  REC {'id': 711, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/437/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.351340', 'deleted_at': None}
  REC {'id': 712, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/437/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.385835', 'deleted_at': None}
  REC {'id': 713, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/437/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.417078', 'deleted_at': None}
  REC {'id': 714, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/437/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.449274', 'deleted_at': None}
  REC {'id': 715, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/437/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.482263', 'deleted_at': None}
  REC {'id': 716, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/437/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.512991', 'deleted_at': None}
  REC {'id': 717, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/437/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.546203', 'deleted_at': None}
  REC {'id': 718, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/437/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.578531', 'deleted_at': None}
  REC {'id': 719, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/437/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.611172', 'deleted_at': None}
JOB 27 user 438 wake statustest created 2026-03-28T21:36:57.619347+00:00 completed 2026-03-28T23:17:53.117919+00:00 model 25 rec_ids [720, 721, 722, 723, 724, 725, 726, 727, 728, 729] matched 10
  REC {'id': 720, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/438/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.264977', 'deleted_at': None}
  REC {'id': 721, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/438/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.302132', 'deleted_at': None}
  REC {'id': 722, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/438/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.342180', 'deleted_at': None}
  REC {'id': 723, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/438/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.376233', 'deleted_at': None}
  REC {'id': 724, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/438/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.408574', 'deleted_at': None}
  REC {'id': 725, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/438/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.440908', 'deleted_at': None}
  REC {'id': 726, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/438/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.474261', 'deleted_at': None}
  REC {'id': 727, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/438/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.509016', 'deleted_at': None}
  REC {'id': 728, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/438/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.542614', 'deleted_at': None}
  REC {'id': 729, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/438/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.577981', 'deleted_at': None}
JOB 28 user 466 wake traintest created 2026-03-28T21:37:55.244961+00:00 completed 2026-03-28T23:17:52.692051+00:00 model 24 rec_ids [760, 761, 762, 763, 764, 765, 766, 767, 768, 769] matched 10
  REC {'id': 760, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/466/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.842747', 'deleted_at': None}
  REC {'id': 761, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/466/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.878713', 'deleted_at': None}
  REC {'id': 762, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/466/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.912315', 'deleted_at': None}
  REC {'id': 763, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/466/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.945021', 'deleted_at': None}
  REC {'id': 764, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/466/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.979288', 'deleted_at': None}
  REC {'id': 765, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/466/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.016044', 'deleted_at': None}
  REC {'id': 766, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/466/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.047234', 'deleted_at': None}
  REC {'id': 767, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/466/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.076638', 'deleted_at': None}
  REC {'id': 768, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/466/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.105925', 'deleted_at': None}
  REC {'id': 769, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/466/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.136038', 'deleted_at': None}
JOB 29 user 467 wake statustest created 2026-03-28T21:38:32.366321+00:00 completed 2026-03-28T23:17:53.181430+00:00 model 26 rec_ids [770, 771, 772, 773, 774, 775, 776, 777, 778, 779] matched 10
  REC {'id': 770, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/467/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:31.977563', 'deleted_at': None}
  REC {'id': 771, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/467/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.015773', 'deleted_at': None}
  REC {'id': 772, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/467/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.052129', 'deleted_at': None}
  REC {'id': 773, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/467/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.088997', 'deleted_at': None}
  REC {'id': 774, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/467/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.124790', 'deleted_at': None}
  REC {'id': 775, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/467/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.168443', 'deleted_at': None}
  REC {'id': 776, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/467/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.215751', 'deleted_at': None}
  REC {'id': 777, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/467/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.250696', 'deleted_at': None}
  REC {'id': 778, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/467/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.285803', 'deleted_at': None}
  REC {'id': 779, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/467/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.320436', 'deleted_at': None}
JOB 30 user 518 wake traintest created 2026-03-28T21:55:41.693683+00:00 completed 2026-03-28T23:17:53.502608+00:00 model 27 rec_ids [810, 811, 812, 813, 814, 815, 816, 817, 818, 819] matched 10
  REC {'id': 810, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/518/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.339140', 'deleted_at': None}
  REC {'id': 811, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/518/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.362584', 'deleted_at': None}
  REC {'id': 812, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/518/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.388288', 'deleted_at': None}
  REC {'id': 813, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/518/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.413598', 'deleted_at': None}
  REC {'id': 814, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/518/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.443160', 'deleted_at': None}
  REC {'id': 815, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/518/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.472038', 'deleted_at': None}
  REC {'id': 816, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/518/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.496988', 'deleted_at': None}
  REC {'id': 817, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/518/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.526004', 'deleted_at': None}
  REC {'id': 818, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/518/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.551239', 'deleted_at': None}
  REC {'id': 819, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/518/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.575199', 'deleted_at': None}
JOB 31 user 519 wake statustest created 2026-03-28T21:56:04.099932+00:00 completed 2026-03-28T23:18:06.770173+00:00 model 28 rec_ids [820, 821, 822, 823, 824, 825, 826, 827, 828, 829] matched 10
  REC {'id': 820, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/519/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.850067', 'deleted_at': None}
  REC {'id': 821, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/519/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.873352', 'deleted_at': None}
  REC {'id': 822, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/519/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.897915', 'deleted_at': None}
  REC {'id': 823, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/519/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.922095', 'deleted_at': None}
  REC {'id': 824, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/519/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.946361', 'deleted_at': None}
  REC {'id': 825, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/519/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.971633', 'deleted_at': None}
  REC {'id': 826, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/519/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.997829', 'deleted_at': None}
  REC {'id': 827, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/519/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.021235', 'deleted_at': None}
  REC {'id': 828, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/519/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.046222', 'deleted_at': None}
  REC {'id': 829, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/519/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.069060', 'deleted_at': None}
JOB 32 user 563 wake big chungus created 2026-03-29T00:03:12.563620+00:00 completed 2026-03-29T00:03:28.603074+00:00 model 29 rec_ids [876, 877, 878, 879, 880, 881, 882, 883, 884, 885] matched 10
  REC {'id': 876, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0001.wav', 'file_path': 'recordings/563/big chungus/big chungus_0001.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.392839', 'deleted_at': None}
  REC {'id': 877, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0002.wav', 'file_path': 'recordings/563/big chungus/big chungus_0002.wav', 'duration_s': 2.136, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.410968', 'deleted_at': None}
  REC {'id': 878, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0003.wav', 'file_path': 'recordings/563/big chungus/big chungus_0003.wav', 'duration_s': 2.136, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.427677', 'deleted_at': None}
  REC {'id': 879, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0004.wav', 'file_path': 'recordings/563/big chungus/big chungus_0004.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.443882', 'deleted_at': None}
  REC {'id': 880, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0005.wav', 'file_path': 'recordings/563/big chungus/big chungus_0005.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.460212', 'deleted_at': None}
  REC {'id': 881, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0006.wav', 'file_path': 'recordings/563/big chungus/big chungus_0006.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.476978', 'deleted_at': None}
  REC {'id': 882, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0007.wav', 'file_path': 'recordings/563/big chungus/big chungus_0007.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.492473', 'deleted_at': None}
  REC {'id': 883, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0008.wav', 'file_path': 'recordings/563/big chungus/big chungus_0008.wav', 'duration_s': 2.229, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.508683', 'deleted_at': None}
  REC {'id': 884, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0009.wav', 'file_path': 'recordings/563/big chungus/big chungus_0009.wav', 'duration_s': 2.229, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.525665', 'deleted_at': None}
  REC {'id': 885, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0010.wav', 'file_path': 'recordings/563/big chungus/big chungus_0010.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.542630', 'deleted_at': None}
JOB 34 user 564 wake big chungus created 2026-03-29T22:51:43.678962+00:00 completed 2026-03-29T22:51:58.191290+00:00 model 30 rec_ids [896, 897, 898, 899, 900, 901, 902, 903, 904, 905] matched 10
  REC {'id': 896, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0011.wav', 'file_path': 'recordings/564/big chungus/big chungus_0011.wav', 'duration_s': 2.879, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.475158', 'deleted_at': None}
  REC {'id': 897, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0012.wav', 'file_path': 'recordings/564/big chungus/big chungus_0012.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.504205', 'deleted_at': None}
  REC {'id': 898, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0013.wav', 'file_path': 'recordings/564/big chungus/big chungus_0013.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.526637', 'deleted_at': None}
  REC {'id': 899, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0014.wav', 'file_path': 'recordings/564/big chungus/big chungus_0014.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.544434', 'deleted_at': None}
  REC {'id': 900, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0015.wav', 'file_path': 'recordings/564/big chungus/big chungus_0015.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.562605', 'deleted_at': None}
  REC {'id': 901, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0016.wav', 'file_path': 'recordings/564/big chungus/big chungus_0016.wav', 'duration_s': 2.879, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.581728', 'deleted_at': None}
  REC {'id': 902, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0017.wav', 'file_path': 'recordings/564/big chungus/big chungus_0017.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.599226', 'deleted_at': None}
  REC {'id': 903, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0018.wav', 'file_path': 'recordings/564/big chungus/big chungus_0018.wav', 'duration_s': 2.508, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.616679', 'deleted_at': None}
  REC {'id': 904, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0019.wav', 'file_path': 'recordings/564/big chungus/big chungus_0019.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.635954', 'deleted_at': None}
  REC {'id': 905, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0020.wav', 'file_path': 'recordings/564/big chungus/big chungus_0020.wav', 'duration_s': 2.601, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.655265', 'deleted_at': None}

 succeeded in 1273ms:
COMPLETED JOBS
{'id': 16, 'user_id': 245, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T20:55:53.078831+00:00', 'started_at': '2026-03-28T23:16:37.676575+00:00', 'completed_at': '2026-03-28T23:17:05.466411+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 15, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 17, 'user_id': 246, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T20:56:15.118412+00:00', 'started_at': '2026-03-28T23:16:37.721266+00:00', 'completed_at': '2026-03-28T23:17:05.373959+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 13, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 19, 'user_id': 335, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:25:34.018595+00:00', 'started_at': '2026-03-28T23:17:05.513405+00:00', 'completed_at': '2026-03-28T23:17:20.904154+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 17, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 20, 'user_id': 336, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:26:00.088880+00:00', 'started_at': '2026-03-28T23:17:05.506182+00:00', 'completed_at': '2026-03-28T23:17:20.821948+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 16, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 21, 'user_id': 346, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:26:03.771233+00:00', 'started_at': '2026-03-28T23:17:05.585690+00:00', 'completed_at': '2026-03-28T23:17:21.136832+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 19, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 22, 'user_id': 379, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:28:33.083002+00:00', 'started_at': '2026-03-28T23:17:05.612407+00:00', 'completed_at': '2026-03-28T23:17:20.934164+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 18, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 23, 'user_id': 380, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:29:06.687568+00:00', 'started_at': '2026-03-28T23:17:20.957446+00:00', 'completed_at': '2026-03-28T23:17:36.976447+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 21, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 24, 'user_id': 408, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:31:38.974285+00:00', 'started_at': '2026-03-28T23:17:20.960518+00:00', 'completed_at': '2026-03-28T23:17:36.786008+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 20, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 25, 'user_id': 409, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:32:06.428065+00:00', 'started_at': '2026-03-28T23:17:21.033228+00:00', 'completed_at': '2026-03-28T23:17:37.240602+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 22, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 26, 'user_id': 437, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:36:28.711133+00:00', 'started_at': '2026-03-28T23:17:21.213575+00:00', 'completed_at': '2026-03-28T23:17:37.594875+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 23, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 27, 'user_id': 438, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:36:57.619347+00:00', 'started_at': '2026-03-28T23:17:36.889092+00:00', 'completed_at': '2026-03-28T23:17:53.117919+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 25, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 28, 'user_id': 466, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:37:55.244961+00:00', 'started_at': '2026-03-28T23:17:37.038859+00:00', 'completed_at': '2026-03-28T23:17:52.692051+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 24, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 29, 'user_id': 467, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:38:32.366321+00:00', 'started_at': '2026-03-28T23:17:37.320564+00:00', 'completed_at': '2026-03-28T23:17:53.181430+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 26, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 30, 'user_id': 518, 'wake_word': 'traintest', 'status': 'completed', 'created_at': '2026-03-28T21:55:41.693683+00:00', 'started_at': '2026-03-28T23:17:37.643226+00:00', 'completed_at': '2026-03-28T23:17:53.502608+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 27, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 31, 'user_id': 519, 'wake_word': 'statustest', 'status': 'completed', 'created_at': '2026-03-28T21:56:04.099932+00:00', 'started_at': '2026-03-28T23:17:52.790068+00:00', 'completed_at': '2026-03-28T23:18:06.770173+00:00', 'progress_pct': 100.0, 'epochs': 5, 'model_id': 28, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 32, 'user_id': 563, 'wake_word': 'big chungus', 'status': 'completed', 'created_at': '2026-03-29T00:03:12.563620+00:00', 'started_at': '2026-03-29T00:03:12.588655+00:00', 'completed_at': '2026-03-29T00:03:28.603074+00:00', 'progress_pct': 100.0, 'epochs': 50, 'model_id': 29, 'd_prime': None, 'rec_len': 50, 'error': ''}
{'id': 34, 'user_id': 564, 'wake_word': 'big chungus', 'status': 'completed', 'created_at': '2026-03-29T22:51:43.678962+00:00', 'started_at': '2026-03-29T22:51:43.713267+00:00', 'completed_at': '2026-03-29T22:51:58.191290+00:00', 'progress_pct': 100.0, 'epochs': 50, 'model_id': 30, 'd_prime': None, 'rec_len': 50, 'error': ''}
RECENT NON-COMPLETED
{'id': 1, 'user_id': 64, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:02:13.768795+00:00', 'started_at': '2026-03-26T16:10:28.317089+00:00', 'completed_at': '2026-03-26T16:10:28.350681+00:00', 'progress_pct': 5.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 1'}
{'id': 2, 'user_id': 65, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:02:14.218259+00:00', 'started_at': '2026-03-26T16:10:28.318625+00:00', 'completed_at': '2026-03-26T16:10:28.355290+00:00', 'progress_pct': 5.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 2'}
{'id': 3, 'user_id': 69, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:02:35.887447+00:00', 'started_at': '2026-03-26T16:10:28.407246+00:00', 'completed_at': '2026-03-26T16:10:28.427202+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 3'}
{'id': 4, 'user_id': 70, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:02:55.130900+00:00', 'started_at': '2026-03-26T16:10:28.443206+00:00', 'completed_at': '2026-03-26T16:10:28.464605+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 4'}
{'id': 5, 'user_id': 82, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:03:10.090490+00:00', 'started_at': '2026-03-26T16:10:28.476830+00:00', 'completed_at': '2026-03-26T16:10:28.489131+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 5'}
{'id': 6, 'user_id': 83, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:03:29.915325+00:00', 'started_at': '2026-03-26T16:10:28.533737+00:00', 'completed_at': '2026-03-26T16:10:28.549194+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 6'}
{'id': 7, 'user_id': 88, 'wake_word': 'jobsmoke', 'status': 'failed', 'created_at': '2026-03-26T16:04:02.019979+00:00', 'started_at': '2026-03-26T16:10:28.635324+00:00', 'completed_at': '2026-03-26T16:10:28.683057+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 7'}
{'id': 8, 'user_id': 100, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:05:42.264580+00:00', 'started_at': '2026-03-26T16:10:28.598691+00:00', 'completed_at': '2026-03-26T16:10:28.623004+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 8'}
{'id': 9, 'user_id': 101, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:05:42.753348+00:00', 'started_at': '2026-03-26T16:10:28.660582+00:00', 'completed_at': '2026-03-26T16:10:28.678372+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 9'}
{'id': 10, 'user_id': 117, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:06:45.316995+00:00', 'started_at': '2026-03-26T16:10:28.737048+00:00', 'completed_at': '2026-03-26T16:10:28.779971+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 10'}
{'id': 11, 'user_id': 118, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:06:45.772444+00:00', 'started_at': '2026-03-26T16:10:28.755370+00:00', 'completed_at': '2026-03-26T16:10:28.773755+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 11'}
{'id': 12, 'user_id': 134, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:09:21.012282+00:00', 'started_at': '2026-03-26T16:10:28.852326+00:00', 'completed_at': '2026-03-26T16:10:28.883238+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 12'}
{'id': 13, 'user_id': 135, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:09:41.046396+00:00', 'started_at': '2026-03-26T16:10:28.847160+00:00', 'completed_at': '2026-03-26T16:10:28.890667+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 13'}
{'id': 14, 'user_id': 208, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-26T16:36:14.342493+00:00', 'started_at': '2026-03-26T16:49:09.378347+00:00', 'completed_at': '2026-03-26T16:49:09.691640+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 14'}
{'id': 15, 'user_id': 209, 'wake_word': 'statustest', 'status': 'failed', 'created_at': '2026-03-26T16:36:14.897688+00:00', 'started_at': '2026-03-26T16:49:09.378347+00:00', 'completed_at': '2026-03-26T16:49:09.707594+00:00', 'progress_pct': 0.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': 'No valid recordings found for training job 15'}
{'id': 18, 'user_id': 325, 'wake_word': 'traintest', 'status': 'failed', 'created_at': '2026-03-28T21:25:28.303277+00:00', 'started_at': '2026-03-28T23:16:37.720261+00:00', 'completed_at': '2026-03-28T23:17:05.369323+00:00', 'progress_pct': 95.0, 'epochs': 5, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 33, 'user_id': 564, 'wake_word': 'big chungus', 'status': 'failed', 'created_at': '2026-03-29T22:03:06.829046+00:00', 'started_at': '2026-03-29T22:03:06.860697+00:00', 'completed_at': '2026-03-29T22:03:06.921650+00:00', 'progress_pct': 0.0, 'epochs': 50, 'model_id': None, 'd_prime': None, 'error': '[Errno 28] No space left on device'}
{'id': 35, 'user_id': 22, 'wake_word': 'viola_e2e_1778149904', 'status': 'failed', 'created_at': '2026-05-07T10:31:46.853951+00:00', 'started_at': '2026-05-07T10:31:46.924899+00:00', 'completed_at': '2026-05-07T10:37:57.805664+00:00', 'progress_pct': 4.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': 'Only 0 negative files generated. edge-tts may not be installed or network unavailable.'}
{'id': 36, 'user_id': 23, 'wake_word': 'viola_e2e_1778150478', 'status': 'failed', 'created_at': '2026-05-07T10:41:20.939733+00:00', 'started_at': '2026-05-07T10:41:20.962651+00:00', 'completed_at': '2026-05-07T10:46:21.912922+00:00', 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': "No module named 'fast_mp3_augment'"}
{'id': 37, 'user_id': 24, 'wake_word': 'viola_e2e_1778150827', 'status': 'failed', 'created_at': '2026-05-07T10:47:10.293149+00:00', 'started_at': '2026-05-07T10:47:10.311138+00:00', 'completed_at': '2026-05-07T10:51:59.032440+00:00', 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': "Could not open '/usr/local/lib/python3.11/site-packages/openwakeword/resources/models/alexa_v0.1.tflite'."}
{'id': 38, 'user_id': 25, 'wake_word': 'viola_e2e_1778151204', 'status': 'failed', 'created_at': '2026-05-07T10:53:25.978935+00:00', 'started_at': '2026-05-07T10:53:25.998851+00:00', 'completed_at': '2026-05-07T10:58:02.749714+00:00', 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': '<built-in method CreateWrapperFromFile of PyCapsule object at 0x7df0bc81de00> returned a result with an exception set'}
{'id': 39, 'user_id': 26, 'wake_word': 'viola_e2e_1778152122', 'status': 'failed', 'created_at': '2026-05-07T11:08:45.017859+00:00', 'started_at': '2026-05-07T11:08:45.408780+00:00', 'completed_at': '2026-05-07T11:23:09.901933+00:00', 'progress_pct': 27.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': 'Model failed the quality gate with grade F; ONNX export was blocked. See /app/data/tmp/violawake_job_39_anni5_aw/viola_e2e_1778152122_39_1778152125.config.json for quality metrics.'}
{'id': 40, 'user_id': 27, 'wake_word': 'viola_e2e_1778153080', 'status': 'failed', 'created_at': '2026-05-07T11:24:44.642466+00:00', 'started_at': '2026-05-07T11:24:44.659199+00:00', 'completed_at': '2026-05-07T11:35:33.364286+00:00', 'progress_pct': 57.81, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': 'Model failed the quality gate with grade F; ONNX export was blocked. See /app/data/tmp/violawake_job_40_mrurvqqm/viola_e2e_1778153080_40_1778153084.config.json for quality metrics.'}
{'id': 41, 'user_id': 28, 'wake_word': 'viola_e2e_1778154525', 'status': 'failed', 'created_at': '2026-05-07T11:48:47.958263+00:00', 'started_at': '2026-05-07T11:48:47.979732+00:00', 'completed_at': '2026-05-07T12:03:16.291227+00:00', 'progress_pct': 44.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': "No module named 'onnxscript'"}
{'id': 42, 'user_id': 29, 'wake_word': 'viola_e2e_1778155429', 'status': 'cancelled', 'created_at': '2026-05-07T12:03:52.393073+00:00', 'started_at': '2026-05-07T14:07:09.125041+00:00', 'completed_at': None, 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 43, 'user_id': 30, 'wake_word': 'viola_e2e_1778155991', 'status': 'cancelled', 'created_at': '2026-05-07T12:13:15.059514+00:00', 'started_at': '2026-05-07T14:07:09.127554+00:00', 'completed_at': None, 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 44, 'user_id': 31, 'wake_word': 'viola_e2e_1778156433', 'status': 'cancelled', 'created_at': '2026-05-07T12:20:36.271995+00:00', 'started_at': None, 'completed_at': None, 'progress_pct': 0.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 45, 'user_id': 32, 'wake_word': 'viola_e2e_1778157681', 'status': 'cancelled', 'created_at': '2026-05-07T12:41:25.009687+00:00', 'started_at': None, 'completed_at': None, 'progress_pct': 0.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 46, 'user_id': 33, 'wake_word': 'viola_e2e_1778159462', 'status': 'cancelled', 'created_at': '2026-05-07T13:11:06.570616+00:00', 'started_at': None, 'completed_at': None, 'progress_pct': 0.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 47, 'user_id': 34, 'wake_word': 'viola_e2e_1778161616', 'status': 'cancelled', 'created_at': '2026-05-07T13:47:00.407168+00:00', 'started_at': None, 'completed_at': None, 'progress_pct': 0.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 48, 'user_id': 35, 'wake_word': 'viola_e2e_1778162842', 'status': 'cancelled', 'created_at': '2026-05-07T14:07:25.666739+00:00', 'started_at': '2026-05-07T14:24:18.559165+00:00', 'completed_at': None, 'progress_pct': 8.0, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': ''}
{'id': 49, 'user_id': 36, 'wake_word': 'viola_e2e_1778163936', 'status': 'failed', 'created_at': '2026-05-07T14:25:40.207868+00:00', 'started_at': '2026-05-07T14:46:41.807761+00:00', 'completed_at': '2026-05-07T15:14:50.022310+00:00', 'progress_pct': 67.38, 'epochs': 80, 'model_id': None, 'd_prime': None, 'error': 'Failed to convert the exported program to an ONNX model. \x1b[96mThis is step 3/3\x1b[0m of exporting the model to ONNX. Next steps:\n- If there is a missing ONNX function, implement it and register it to the registry.\n- If the'}

 succeeded in 1302ms:
container completed_count 17
container main counts
recordings 905
trained_models 30
training_jobs 6
users 564
container trained_models
{'id': 1, 'user_id': 5, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\5\\goldentest_1774511974.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 07:59:55.796727', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 2, 'user_id': 33, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\33\\goldentest_1774529250.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 12:47:41.930089', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 3, 'user_id': 53, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\53\\goldentest_1774534919.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 14:22:21.298915', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 4, 'user_id': 154, 'wake_word': 'goldentest', 'file_path': 'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\models\\154\\goldentest_1774541533.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-26 16:12:23.952185', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 5, 'user_id': 339, 'wake_word': 'token-test', 'file_path': 'models/339/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:26:01.289689+00:00', 'config_prefix': ''}
{'id': 6, 'user_id': 352, 'wake_word': 'token-test', 'file_path': 'models/352/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:26:05.095396+00:00', 'config_prefix': ''}
{'id': 7, 'user_id': 383, 'wake_word': 'token-test', 'file_path': 'models/383/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:29:07.835466+00:00', 'config_prefix': ''}
{'id': 8, 'user_id': 412, 'wake_word': 'token-test', 'file_path': 'models/412/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:32:07.594423+00:00', 'config_prefix': ''}
{'id': 9, 'user_id': 441, 'wake_word': 'token-test', 'file_path': 'models/441/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:36:58.832961+00:00', 'config_prefix': ''}
{'id': 10, 'user_id': 470, 'wake_word': 'token-test', 'file_path': 'models/470/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:38:33.644597+00:00', 'config_prefix': ''}
{'id': 11, 'user_id': 500, 'wake_word': 'token-test', 'file_path': 'models/500/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:52:47.445797+00:00', 'config_prefix': ''}
{'id': 12, 'user_id': 522, 'wake_word': 'token-test', 'file_path': 'models/522/token_test.onnx', 'd_prime': None, 'size_bytes': 22, 'created_at': '2026-03-28T21:56:05.129993+00:00', 'config_prefix': ''}
{'id': 13, 'user_id': 246, 'wake_word': 'statustest', 'file_path': 'models/246/statustest_17_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.363549', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 14, 'user_id': 246, 'wake_word': 'statustest', 'file_path': 'models/246/statustest_17_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.372446', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 15, 'user_id': 245, 'wake_word': 'traintest', 'file_path': 'models/245/traintest_16_1774739797.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:05.457196', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 16, 'user_id': 336, 'wake_word': 'statustest', 'file_path': 'models/336/statustest_20_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.809170', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 17, 'user_id': 335, 'wake_word': 'traintest', 'file_path': 'models/335/traintest_19_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.895028', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 18, 'user_id': 379, 'wake_word': 'traintest', 'file_path': 'models/379/traintest_22_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:20.922875', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 19, 'user_id': 346, 'wake_word': 'statustest', 'file_path': 'models/346/statustest_21_1774739825.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:21.120144', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 20, 'user_id': 408, 'wake_word': 'traintest', 'file_path': 'models/408/traintest_24_1774739840.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:36.776176', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 21, 'user_id': 380, 'wake_word': 'statustest', 'file_path': 'models/380/statustest_23_1774739840.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:36.942544', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 22, 'user_id': 409, 'wake_word': 'statustest', 'file_path': 'models/409/statustest_25_1774739841.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:37.231282', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 23, 'user_id': 437, 'wake_word': 'traintest', 'file_path': 'models/437/traintest_26_1774739841.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:37.586302', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 24, 'user_id': 466, 'wake_word': 'traintest', 'file_path': 'models/466/traintest_28_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:52.682519', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 25, 'user_id': 438, 'wake_word': 'statustest', 'file_path': 'models/438/statustest_27_1774739856.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.108200', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 26, 'user_id': 467, 'wake_word': 'statustest', 'file_path': 'models/467/statustest_29_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.171221', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 27, 'user_id': 518, 'wake_word': 'traintest', 'file_path': 'models/518/traintest_30_1774739857.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:17:53.493260', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 28, 'user_id': 519, 'wake_word': 'statustest', 'file_path': 'models/519/statustest_31_1774739872.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-28 23:18:06.760051', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 29, 'user_id': 563, 'wake_word': 'big chungus', 'file_path': 'models/563/big chungus_32_1774742592.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-29 00:03:28.595075', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
{'id': 30, 'user_id': 564, 'wake_word': 'big chungus', 'file_path': 'models/564/big chungus_34_1774824703.onnx', 'd_prime': None, 'size_bytes': 34010, 'created_at': '2026-03-29 22:51:58.183076', 'config_prefix': '{"feature_type": "mel_pcen", "n_mels": 40, "n_fft": 512, "hop_length": 160, "win_length": 400, "f_min": 60, "f_max": 7800, "sample_rate": 16000, "clip_samples":'}
JOB 16 traintest 2026-03-28T20:55:53.078831+00:00 2026-03-28T23:17:05.466411+00:00 ids [466, 467, 468, 469, 470, 471, 472, 473, 474, 475] matched 10
  REC {'id': 466, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/245/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.797470', 'deleted_at': None}
  REC {'id': 467, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/245/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.823339', 'deleted_at': None}
  REC {'id': 468, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/245/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.849063', 'deleted_at': None}
  REC {'id': 469, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/245/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.876446', 'deleted_at': None}
  REC {'id': 470, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/245/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.902634', 'deleted_at': None}
  REC {'id': 471, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/245/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.926398', 'deleted_at': None}
  REC {'id': 472, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/245/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.950495', 'deleted_at': None}
  REC {'id': 473, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/245/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:52.974578', 'deleted_at': None}
  REC {'id': 474, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/245/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:53.000399', 'deleted_at': None}
  REC {'id': 475, 'user_id': 245, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/245/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:55:53.026223', 'deleted_at': None}
JOB 17 statustest 2026-03-28T20:56:15.118412+00:00 2026-03-28T23:17:05.373959+00:00 ids [476, 477, 478, 479, 480, 481, 482, 483, 484, 485] matched 10
  REC {'id': 476, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/246/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.845822', 'deleted_at': None}
  REC {'id': 477, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/246/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.876364', 'deleted_at': None}
  REC {'id': 478, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/246/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.902091', 'deleted_at': None}
  REC {'id': 479, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/246/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.929347', 'deleted_at': None}
  REC {'id': 480, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/246/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.956190', 'deleted_at': None}
  REC {'id': 481, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/246/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:14.980555', 'deleted_at': None}
  REC {'id': 482, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/246/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.004732', 'deleted_at': None}
  REC {'id': 483, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/246/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.032111', 'deleted_at': None}
  REC {'id': 484, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/246/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.060074', 'deleted_at': None}
  REC {'id': 485, 'user_id': 246, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/246/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 20:56:15.086627', 'deleted_at': None}
JOB 19 traintest 2026-03-28T21:25:34.018595+00:00 2026-03-28T23:17:20.904154+00:00 ids [534, 535, 536, 537, 538, 539, 540, 541, 542, 543] matched 10
  REC {'id': 534, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/335/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.639113', 'deleted_at': None}
  REC {'id': 535, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/335/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.667768', 'deleted_at': None}
  REC {'id': 536, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/335/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.695655', 'deleted_at': None}
  REC {'id': 537, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/335/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.721415', 'deleted_at': None}
  REC {'id': 538, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/335/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.747816', 'deleted_at': None}
  REC {'id': 539, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/335/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.777732', 'deleted_at': None}
  REC {'id': 540, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/335/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.805359', 'deleted_at': None}
  REC {'id': 541, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/335/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.829691', 'deleted_at': None}
  REC {'id': 542, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/335/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.856759', 'deleted_at': None}
  REC {'id': 543, 'user_id': 335, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/335/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:33.885433', 'deleted_at': None}
JOB 20 statustest 2026-03-28T21:26:00.088880+00:00 2026-03-28T23:17:20.821948+00:00 ids [544, 545, 546, 547, 548, 549, 550, 551, 552, 553] matched 10
  REC {'id': 544, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/336/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.736125', 'deleted_at': None}
  REC {'id': 545, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/336/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.772409', 'deleted_at': None}
  REC {'id': 546, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/336/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.806277', 'deleted_at': None}
  REC {'id': 547, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/336/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.837637', 'deleted_at': None}
  REC {'id': 548, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/336/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.880393', 'deleted_at': None}
  REC {'id': 549, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/336/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.912634', 'deleted_at': None}
  REC {'id': 550, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/336/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.947969', 'deleted_at': None}
  REC {'id': 551, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/336/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:25:59.981684', 'deleted_at': None}
  REC {'id': 552, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/336/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:00.014529', 'deleted_at': None}
  REC {'id': 553, 'user_id': 336, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/336/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:00.047898', 'deleted_at': None}
JOB 21 statustest 2026-03-28T21:26:03.771233+00:00 2026-03-28T23:17:21.136832+00:00 ids [560, 561, 562, 563, 564, 566, 568, 570, 572, 574] matched 10
  REC {'id': 560, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/346/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.406974', 'deleted_at': None}
  REC {'id': 561, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/346/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.437382', 'deleted_at': None}
  REC {'id': 562, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/346/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.468255', 'deleted_at': None}
  REC {'id': 563, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/346/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.503496', 'deleted_at': None}
  REC {'id': 564, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/346/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.551288', 'deleted_at': None}
  REC {'id': 566, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/346/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.584847', 'deleted_at': None}
  REC {'id': 568, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/346/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.641319', 'deleted_at': None}
  REC {'id': 570, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/346/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.674097', 'deleted_at': None}
  REC {'id': 572, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/346/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.705254', 'deleted_at': None}
  REC {'id': 574, 'user_id': 346, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/346/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:26:03.738250', 'deleted_at': None}
JOB 22 traintest 2026-03-28T21:28:33.083002+00:00 2026-03-28T23:17:20.934164+00:00 ids [610, 611, 612, 613, 614, 615, 616, 617, 618, 619] matched 10
  REC {'id': 610, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/379/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.531173', 'deleted_at': None}
  REC {'id': 611, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/379/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.568464', 'deleted_at': None}
  REC {'id': 612, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/379/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.607202', 'deleted_at': None}
  REC {'id': 613, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/379/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.647272', 'deleted_at': None}
  REC {'id': 614, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/379/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.683288', 'deleted_at': None}
  REC {'id': 615, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/379/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.736111', 'deleted_at': None}
  REC {'id': 616, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/379/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.798344', 'deleted_at': None}
  REC {'id': 617, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/379/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.846096', 'deleted_at': None}
  REC {'id': 618, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/379/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.884564', 'deleted_at': None}
  REC {'id': 619, 'user_id': 379, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/379/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:28:32.928164', 'deleted_at': None}
JOB 23 statustest 2026-03-28T21:29:06.687568+00:00 2026-03-28T23:17:36.976447+00:00 ids [620, 621, 622, 623, 624, 625, 626, 627, 628, 629] matched 10
  REC {'id': 620, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/380/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.396466', 'deleted_at': None}
  REC {'id': 621, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/380/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.425841', 'deleted_at': None}
  REC {'id': 622, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/380/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.458857', 'deleted_at': None}
  REC {'id': 623, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/380/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.486050', 'deleted_at': None}
  REC {'id': 624, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/380/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.515442', 'deleted_at': None}
  REC {'id': 625, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/380/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.544238', 'deleted_at': None}
  REC {'id': 626, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/380/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.572549', 'deleted_at': None}
  REC {'id': 627, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/380/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.602042', 'deleted_at': None}
  REC {'id': 628, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/380/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.628885', 'deleted_at': None}
  REC {'id': 629, 'user_id': 380, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/380/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:29:06.655861', 'deleted_at': None}
JOB 24 traintest 2026-03-28T21:31:38.974285+00:00 2026-03-28T23:17:36.786008+00:00 ids [660, 661, 662, 663, 664, 665, 666, 667, 668, 669] matched 10
  REC {'id': 660, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/408/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.526593', 'deleted_at': None}
  REC {'id': 661, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/408/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.569001', 'deleted_at': None}
  REC {'id': 662, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/408/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.618570', 'deleted_at': None}
  REC {'id': 663, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/408/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.653363', 'deleted_at': None}
  REC {'id': 664, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/408/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.687026', 'deleted_at': None}
  REC {'id': 665, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/408/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.720200', 'deleted_at': None}
  REC {'id': 666, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/408/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.753926', 'deleted_at': None}
  REC {'id': 667, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/408/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.788552', 'deleted_at': None}
  REC {'id': 668, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/408/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.823655', 'deleted_at': None}
  REC {'id': 669, 'user_id': 408, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/408/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:31:38.857718', 'deleted_at': None}
JOB 25 statustest 2026-03-28T21:32:06.428065+00:00 2026-03-28T23:17:37.240602+00:00 ids [670, 671, 672, 673, 674, 675, 676, 677, 678, 679] matched 10
  REC {'id': 670, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/409/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.092501', 'deleted_at': None}
  REC {'id': 671, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/409/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.126853', 'deleted_at': None}
  REC {'id': 672, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/409/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.166885', 'deleted_at': None}
  REC {'id': 673, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/409/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.197438', 'deleted_at': None}
  REC {'id': 674, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/409/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.229112', 'deleted_at': None}
  REC {'id': 675, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/409/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.258832', 'deleted_at': None}
  REC {'id': 676, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/409/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.291385', 'deleted_at': None}
  REC {'id': 677, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/409/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.323763', 'deleted_at': None}
  REC {'id': 678, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/409/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.354202', 'deleted_at': None}
  REC {'id': 679, 'user_id': 409, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/409/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:32:06.386686', 'deleted_at': None}
JOB 26 traintest 2026-03-28T21:36:28.711133+00:00 2026-03-28T23:17:37.594875+00:00 ids [710, 711, 712, 713, 714, 715, 716, 717, 718, 719] matched 10
  REC {'id': 710, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/437/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.321214', 'deleted_at': None}
  REC {'id': 711, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/437/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.351340', 'deleted_at': None}
  REC {'id': 712, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/437/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.385835', 'deleted_at': None}
  REC {'id': 713, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/437/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.417078', 'deleted_at': None}
  REC {'id': 714, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/437/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.449274', 'deleted_at': None}
  REC {'id': 715, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/437/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.482263', 'deleted_at': None}
  REC {'id': 716, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/437/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.512991', 'deleted_at': None}
  REC {'id': 717, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/437/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.546203', 'deleted_at': None}
  REC {'id': 718, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/437/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.578531', 'deleted_at': None}
  REC {'id': 719, 'user_id': 437, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/437/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:28.611172', 'deleted_at': None}
JOB 27 statustest 2026-03-28T21:36:57.619347+00:00 2026-03-28T23:17:53.117919+00:00 ids [720, 721, 722, 723, 724, 725, 726, 727, 728, 729] matched 10
  REC {'id': 720, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/438/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.264977', 'deleted_at': None}
  REC {'id': 721, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/438/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.302132', 'deleted_at': None}
  REC {'id': 722, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/438/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.342180', 'deleted_at': None}
  REC {'id': 723, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/438/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.376233', 'deleted_at': None}
  REC {'id': 724, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/438/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.408574', 'deleted_at': None}
  REC {'id': 725, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/438/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.440908', 'deleted_at': None}
  REC {'id': 726, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/438/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.474261', 'deleted_at': None}
  REC {'id': 727, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/438/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.509016', 'deleted_at': None}
  REC {'id': 728, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/438/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.542614', 'deleted_at': None}
  REC {'id': 729, 'user_id': 438, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/438/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:36:57.577981', 'deleted_at': None}
JOB 28 traintest 2026-03-28T21:37:55.244961+00:00 2026-03-28T23:17:52.692051+00:00 ids [760, 761, 762, 763, 764, 765, 766, 767, 768, 769] matched 10
  REC {'id': 760, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/466/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.842747', 'deleted_at': None}
  REC {'id': 761, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/466/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.878713', 'deleted_at': None}
  REC {'id': 762, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/466/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.912315', 'deleted_at': None}
  REC {'id': 763, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/466/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.945021', 'deleted_at': None}
  REC {'id': 764, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/466/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:54.979288', 'deleted_at': None}
  REC {'id': 765, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/466/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.016044', 'deleted_at': None}
  REC {'id': 766, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/466/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.047234', 'deleted_at': None}
  REC {'id': 767, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/466/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.076638', 'deleted_at': None}
  REC {'id': 768, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/466/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.105925', 'deleted_at': None}
  REC {'id': 769, 'user_id': 466, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/466/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:37:55.136038', 'deleted_at': None}
JOB 29 statustest 2026-03-28T21:38:32.366321+00:00 2026-03-28T23:17:53.181430+00:00 ids [770, 771, 772, 773, 774, 775, 776, 777, 778, 779] matched 10
  REC {'id': 770, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/467/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:31.977563', 'deleted_at': None}
  REC {'id': 771, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/467/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.015773', 'deleted_at': None}
  REC {'id': 772, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/467/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.052129', 'deleted_at': None}
  REC {'id': 773, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/467/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.088997', 'deleted_at': None}
  REC {'id': 774, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/467/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.124790', 'deleted_at': None}
  REC {'id': 775, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/467/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.168443', 'deleted_at': None}
  REC {'id': 776, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/467/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.215751', 'deleted_at': None}
  REC {'id': 777, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/467/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.250696', 'deleted_at': None}
  REC {'id': 778, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/467/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.285803', 'deleted_at': None}
  REC {'id': 779, 'user_id': 467, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/467/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:38:32.320436', 'deleted_at': None}
JOB 30 traintest 2026-03-28T21:55:41.693683+00:00 2026-03-28T23:17:53.502608+00:00 ids [810, 811, 812, 813, 814, 815, 816, 817, 818, 819] matched 10
  REC {'id': 810, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0001.wav', 'file_path': 'recordings/518/traintest/traintest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.339140', 'deleted_at': None}
  REC {'id': 811, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0002.wav', 'file_path': 'recordings/518/traintest/traintest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.362584', 'deleted_at': None}
  REC {'id': 812, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0003.wav', 'file_path': 'recordings/518/traintest/traintest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.388288', 'deleted_at': None}
  REC {'id': 813, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0004.wav', 'file_path': 'recordings/518/traintest/traintest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.413598', 'deleted_at': None}
  REC {'id': 814, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0005.wav', 'file_path': 'recordings/518/traintest/traintest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.443160', 'deleted_at': None}
  REC {'id': 815, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0006.wav', 'file_path': 'recordings/518/traintest/traintest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.472038', 'deleted_at': None}
  REC {'id': 816, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0007.wav', 'file_path': 'recordings/518/traintest/traintest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.496988', 'deleted_at': None}
  REC {'id': 817, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0008.wav', 'file_path': 'recordings/518/traintest/traintest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.526004', 'deleted_at': None}
  REC {'id': 818, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0009.wav', 'file_path': 'recordings/518/traintest/traintest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.551239', 'deleted_at': None}
  REC {'id': 819, 'user_id': 518, 'wake_word': 'traintest', 'filename': 'traintest_0010.wav', 'file_path': 'recordings/518/traintest/traintest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:55:41.575199', 'deleted_at': None}
JOB 31 statustest 2026-03-28T21:56:04.099932+00:00 2026-03-28T23:18:06.770173+00:00 ids [820, 821, 822, 823, 824, 825, 826, 827, 828, 829] matched 10
  REC {'id': 820, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0001.wav', 'file_path': 'recordings/519/statustest/statustest_0001.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.850067', 'deleted_at': None}
  REC {'id': 821, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0002.wav', 'file_path': 'recordings/519/statustest/statustest_0002.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.873352', 'deleted_at': None}
  REC {'id': 822, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0003.wav', 'file_path': 'recordings/519/statustest/statustest_0003.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.897915', 'deleted_at': None}
  REC {'id': 823, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0004.wav', 'file_path': 'recordings/519/statustest/statustest_0004.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.922095', 'deleted_at': None}
  REC {'id': 824, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0005.wav', 'file_path': 'recordings/519/statustest/statustest_0005.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.946361', 'deleted_at': None}
  REC {'id': 825, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0006.wav', 'file_path': 'recordings/519/statustest/statustest_0006.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.971633', 'deleted_at': None}
  REC {'id': 826, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0007.wav', 'file_path': 'recordings/519/statustest/statustest_0007.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:03.997829', 'deleted_at': None}
  REC {'id': 827, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0008.wav', 'file_path': 'recordings/519/statustest/statustest_0008.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.021235', 'deleted_at': None}
  REC {'id': 828, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0009.wav', 'file_path': 'recordings/519/statustest/statustest_0009.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.046222', 'deleted_at': None}
  REC {'id': 829, 'user_id': 519, 'wake_word': 'statustest', 'filename': 'statustest_0010.wav', 'file_path': 'recordings/519/statustest/statustest_0010.wav', 'duration_s': 1.5, 'sample_rate': 16000, 'created_at': '2026-03-28 21:56:04.069060', 'deleted_at': None}
JOB 32 big chungus 2026-03-29T00:03:12.563620+00:00 2026-03-29T00:03:28.603074+00:00 ids [876, 877, 878, 879, 880, 881, 882, 883, 884, 885] matched 10
  REC {'id': 876, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0001.wav', 'file_path': 'recordings/563/big chungus/big chungus_0001.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.392839', 'deleted_at': None}
  REC {'id': 877, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0002.wav', 'file_path': 'recordings/563/big chungus/big chungus_0002.wav', 'duration_s': 2.136, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.410968', 'deleted_at': None}
  REC {'id': 878, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0003.wav', 'file_path': 'recordings/563/big chungus/big chungus_0003.wav', 'duration_s': 2.136, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.427677', 'deleted_at': None}
  REC {'id': 879, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0004.wav', 'file_path': 'recordings/563/big chungus/big chungus_0004.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.443882', 'deleted_at': None}
  REC {'id': 880, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0005.wav', 'file_path': 'recordings/563/big chungus/big chungus_0005.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.460212', 'deleted_at': None}
  REC {'id': 881, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0006.wav', 'file_path': 'recordings/563/big chungus/big chungus_0006.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.476978', 'deleted_at': None}
  REC {'id': 882, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0007.wav', 'file_path': 'recordings/563/big chungus/big chungus_0007.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.492473', 'deleted_at': None}
  REC {'id': 883, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0008.wav', 'file_path': 'recordings/563/big chungus/big chungus_0008.wav', 'duration_s': 2.229, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.508683', 'deleted_at': None}
  REC {'id': 884, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0009.wav', 'file_path': 'recordings/563/big chungus/big chungus_0009.wav', 'duration_s': 2.229, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.525665', 'deleted_at': None}
  REC {'id': 885, 'user_id': 563, 'wake_word': 'big chungus', 'filename': 'big chungus_0010.wav', 'file_path': 'recordings/563/big chungus/big chungus_0010.wav', 'duration_s': 2.322, 'sample_rate': 16000, 'created_at': '2026-03-29 00:03:12.542630', 'deleted_at': None}
JOB 34 big chungus 2026-03-29T22:51:43.678962+00:00 2026-03-29T22:51:58.191290+00:00 ids [896, 897, 898, 899, 900, 901, 902, 903, 904, 905] matched 10
  REC {'id': 896, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0011.wav', 'file_path': 'recordings/564/big chungus/big chungus_0011.wav', 'duration_s': 2.879, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.475158', 'deleted_at': None}
  REC {'id': 897, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0012.wav', 'file_path': 'recordings/564/big chungus/big chungus_0012.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.504205', 'deleted_at': None}
  REC {'id': 898, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0013.wav', 'file_path': 'recordings/564/big chungus/big chungus_0013.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.526637', 'deleted_at': None}
  REC {'id': 899, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0014.wav', 'file_path': 'recordings/564/big chungus/big chungus_0014.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.544434', 'deleted_at': None}
  REC {'id': 900, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0015.wav', 'file_path': 'recordings/564/big chungus/big chungus_0015.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.562605', 'deleted_at': None}
  REC {'id': 901, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0016.wav', 'file_path': 'recordings/564/big chungus/big chungus_0016.wav', 'duration_s': 2.879, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.581728', 'deleted_at': None}
  REC {'id': 902, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0017.wav', 'file_path': 'recordings/564/big chungus/big chungus_0017.wav', 'duration_s': 2.972, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.599226', 'deleted_at': None}
  REC {'id': 903, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0018.wav', 'file_path': 'recordings/564/big chungus/big chungus_0018.wav', 'duration_s': 2.508, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.616679', 'deleted_at': None}
  REC {'id': 904, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0019.wav', 'file_path': 'recordings/564/big chungus/big chungus_0019.wav', 'duration_s': 2.415, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.635954', 'deleted_at': None}
  REC {'id': 905, 'user_id': 564, 'wake_word': 'big chungus', 'filename': 'big chungus_0020.wav', 'file_path': 'recordings/564/big chungus/big chungus_0020.wav', 'duration_s': 2.601, 'sample_rate': 16000, 'created_at': '2026-03-29 22:51:43.655265', 'deleted_at': None}

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json, statistics
for loc, prefix in [('container','/app/data'),('local',r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data')]:
    jq = 'file:' + (prefix + '/job_queue.db' if loc=='container' else prefix + r'\\job_queue.db') + '?mode=ro'
    main = 'file:' + (prefix + '/violawake.db' if loc=='container' else prefix + r'\\violawake.db') + '?mode=ro'
    q=sqlite3.connect(jq, uri=True); q.row_factory=sqlite3.Row
    m=sqlite3.connect(main, uri=True); m.row_factory=sqlite3.Row
    print('LOC', loc)
    for job in q.execute('select id,user_id,wake_word,created_at,completed_at,recording_ids from jobs where status=\"completed\" order by id'):
        ids=json.loads(job['recording_ids'])
        placeholders=','.join('?' for _ in ids)
        rows=list(m.execute(f'select id,filename,duration_s,created_at,file_path from recordings where id in ({placeholders}) order by id', ids))
        durations=[float(r['duration_s']) for r in rows]
        names=[r['filename'] for r in rows]
        created=[r['created_at'] for r in rows]
        print({'job': job['id'], 'wake_word': job['wake_word'], 'n': len(rows), 'first_name': names[0] if names else None, 'last_name': names[-1] if names else None, 'min_dur': min(durations) if durations else None, 'max_dur': max(durations) if durations else None, 'unique_durations': len(set(durations)), 'first_rec_created': created[0] if created else None, 'last_rec_created': created[-1] if created else None})
    q.close(); m.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json, os
base=r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data'
q=sqlite3.connect('file:'+base+r'\\job_queue.db?mode=ro', uri=True); q.row_factory=sqlite3.Row
m=sqlite3.connect('file:'+base+r'\\violawake.db?mode=ro', uri=True); m.row_factory=sqlite3.Row
print('LOCAL_AGG')
for job in q.execute('select id,user_id,wake_word,created_at,completed_at,recording_ids from jobs where status=\"completed\" order by id'):
    ids=json.loads(job['recording_ids'])
    placeholders=','.join('?' for _ in ids)
    rows=list(m.execute(f'select id,filename,duration_s,created_at,file_path from recordings where id in ({placeholders}) order by id', ids))
    durations=[float(r['duration_s']) for r in rows]
    names=[r['filename'] for r in rows]
    created=[r['created_at'] for r in rows]
    print({'job': job['id'], 'wake_word': job['wake_word'], 'n': len(rows), 'first_name': names[0] if names else None, 'last_name': names[-1] if names else None, 'min_dur': min(durations) if durations else None, 'max_dur': max(durations) if durations else None, 'unique_durations': len(set(durations)), 'first_rec_created': created[0] if created else None, 'last_rec_created': created[-1] if created else None})
q.close(); m.close()
'@ | python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path console/tests/**/*.py,console/backend/tests/*.py,tests/**/*.py -Pattern 'traintest|statustest|big chungus|goldentest|token-test|0001.wav|duration_s' -Context 2,3" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'rg "traintest|statustest|big chungus|goldentest|token-test|0001.wav|duration_s"' in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 542ms:
ADVERSARY_AUDIT.md:| 72 | `buffer_duration_s` property | VERIFIED | `stt.py:509-512` |
ACCURACY_MISSION.md:> 2. **8-phase training pipeline proven reproducible** — "big chungus" from 20 recordings → Grade A
benchmark_v2\build_corpus.py:    duration_s = 2.0
benchmark_v2\build_corpus.py:    n_samples = int(SAMPLE_RATE * duration_s)
docs\AUDIT_2026_03_28.md:**Root cause of "big chungus" model scoring silence at 0.80.**
console\backend\alembic\versions\20260326_0001_a1b2c3d4e5f6_initial_schema.py:        sa.Column("duration_s", sa.Float, nullable=False),
console\backend\app\schemas.py:    duration_s: float
console\backend\app\schemas.py:    duration_s: float
tools\benchmark.py:    duration_s: float = 5.0,
tools\benchmark.py:    t_end = t_start + duration_s
tools\benchmark.py:        "duration_s": elapsed,
tools\benchmark.py:        f"| Test duration | {throughput['duration_s']:.1f}s |",
tools\benchmark.py:    throughput = run_throughput_benchmark(duration_s=args.duration, model=args.model)
E2E_READINESS.md:**File serving:** Local files are served via GET `/api/files/{key}` (`routes/files.py`) with user ownership validation. The storage key encodes the user ID (e.g., `recordings/1/jarvis/jarvis_0001.wav`), and the file route checks `parts[1] == str(user_id)`.
console\backend\app\routes\recordings.py:    """Validate WAV file and return (sample_rate, channels, sample_width, duration_s).
console\backend\app\routes\recordings.py:    duration_s = n_frames / sample_rate if sample_rate > 0 else 0.0
console\backend\app\routes\recordings.py:    if duration_s < MIN_DURATION_S:
console\backend\app\routes\recordings.py:            detail=f"Recording too short ({duration_s:.2f}s). Minimum is {MIN_DURATION_S}s.",
console\backend\app\routes\recordings.py:    if duration_s > MAX_DURATION_S:
console\backend\app\routes\recordings.py:            detail=f"Recording too long ({duration_s:.2f}s). Maximum is {MAX_DURATION_S}s.",
console\backend\app\routes\recordings.py:    return sample_rate, channels, sample_width, duration_s
console\backend\app\routes\recordings.py:    """Convert WAV to mono 16kHz if needed. Returns (wav_bytes, duration_s)."""
console\backend\app\routes\recordings.py:    duration_s = len(samples) / TARGET_SAMPLE_RATE
console\backend\app\routes\recordings.py:    return out_buf.getvalue(), duration_s
console\backend\app\routes\recordings.py:    sample_rate, channels, sample_width, duration_s = _validate_wav(content)
console\backend\app\routes\recordings.py:        content, duration_s = _ensure_mono_16k(content, sample_rate, channels)
console\backend\app\routes\recordings.py:    # The "big chungus" incident: all-zero positives taught the model silence = wake word.
console\backend\app\routes\recordings.py:        duration_s=round(duration_s, 3),
console\backend\app\routes\recordings.py:        duration_s=round(duration_s, 3),
console\backend\app\routes\recordings.py:            duration_s=r.duration_s,
docs\SHOW_HN_DRAFT.md:The training pipeline is the real story. From just 10-20 voice recordings, it auto-generates a full training corpus: TTS positives across 20 diverse voices, two rounds of phonetically-confusable negatives, 100+ common speech phrases as negatives, plus LibriSpeech and MUSAN data if available. A post-training quality gate (A/B/C/F grading) blocks bad models from shipping. We proved this works by training a "big chungus" wake word from 20 recordings — Grade A, zero false positives on general speech.
console\backend\app\models.py:    duration_s: Mapped[float] = mapped_column(Float, nullable=False)
docs\ROADMAP_10_OF_10.md:**Status:** Complete. Trained "big chungus" model on 2026-04-05 with good results.
docs\api\violawake_sdk.html:                                <a class="variable" href="#StreamingSTTEngine.buffer_duration_s">buffer_duration_s</a>
docs\api\violawake_sdk.html:</span><span id="STTEngine-380"><a href="#STTEngine-380"><span class="linenos">380</span></a>            <span class="n">duration_s</span><span class="o">=</span><span class="n">info</span><span class="o">.</span><span class="n">duration</span><span class="p">,</span>
docs\api\violawake_sdk.html:</span><span id="STTEngine.transcribe_full-380"><a href="#STTEngine.transcribe_full-380"><span class="linenos">380</span></a>            <span class="n">duration_s</span><span class="o">=</span><span class="n">info</span><span class="o">.</span><span class="n">duration</span><span class="p">,</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine-511"><a href="#StreamingSTTEngine-511"><span class="linenos">511</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">buffer_duration_s</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine-549"><a href="#StreamingSTTEngine-549"><span class="linenos">549</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;StreamingSTTEngine.flush: </span><span class="si">%.2f</span><span class="s2"> s buffered&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_duration_s</span><span class="p">)</span>
docs\api\violawake_sdk.html:                            <div id="StreamingSTTEngine.buffer_duration_s" class="classattr">
docs\api\violawake_sdk.html:                                        <input id="StreamingSTTEngine.buffer_duration_s-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
docs\api\violawake_sdk.html:            <span class="name">buffer_duration_s</span><span class="annotation">: float</span>
docs\api\violawake_sdk.html:                <label class="view-source-button" for="StreamingSTTEngine.buffer_duration_s-view-source"><span>View Source</span></label>
docs\api\violawake_sdk.html:    <a class="headerlink" href="#StreamingSTTEngine.buffer_duration_s"></a>
docs\api\violawake_sdk.html:            <div class="pdoc-code codehilite"><pre><span></span><span id="StreamingSTTEngine.buffer_duration_s-510"><a href="#StreamingSTTEngine.buffer_duration_s-510"><span class="linenos">510</span></a>    <span class="nd">@property</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine.buffer_duration_s-511"><a href="#StreamingSTTEngine.buffer_duration_s-511"><span class="linenos">511</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">buffer_duration_s</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine.buffer_duration_s-512"><a href="#StreamingSTTEngine.buffer_duration_s-512"><span class="linenos">512</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Current accumulated audio duration in seconds.&quot;&quot;&quot;</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine.buffer_duration_s-513"><a href="#StreamingSTTEngine.buffer_duration_s-513"><span class="linenos">513</span></a>        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer_samples</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span>
docs\api\violawake_sdk.html:</span><span id="StreamingSTTEngine.flush-549"><a href="#StreamingSTTEngine.flush-549"><span class="linenos">549</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;StreamingSTTEngine.flush: </span><span class="si">%.2f</span><span class="s2"> s buffered&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_duration_s</span><span class="p">)</span>
console\tests\test_backend.py:        ids = self._upload_samples(client, auth_headers, "traintest")
console\tests\test_backend.py:                json={"wake_word": "traintest", "recording_ids": ids, "epochs": 5},
console\tests\test_backend.py:        ids = self._upload_samples(client, auth_headers, "statustest")
console\tests\test_backend.py:            wake_word="statustest",
console\tests\test_backend.py:                json={"wake_word": "statustest", "recording_ids": ids, "epochs": 5},
console\tests\test_backend.py:                    "token-test",
console\backend\scripts\train_full_pipeline.py:        --positives "data/recordings/563/big chungus" \
console\backend\scripts\train_full_pipeline.py:        --wake-word "big chungus" \
docs\api\search.js:    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"violawake": {"fullname": "violawake", "modulename": "violawake", "kind": "module", "doc": "<p>Compatibility shim: <code>import violawake</code> works as an alias for <code>violawake_sdk</code>.</p>\n"}, "violawake_sdk": {"fullname": "violawake_sdk", "modulename": "violawake_sdk", "kind": "module", "doc": "<p>ViolaWake SDK \u2014 Open-source wake word detection + voice pipeline.</p>\n\n<h6 id=\"public-api-surface\">Public API surface:</h6>\n\n<blockquote>\n  <p>WakeDetector      \u2014 detect a wake word in an audio stream\n  AsyncWakeDetector \u2014 async wrapper for asyncio-based applications\n  DetectorConfig    \u2014 advanced configuration (ensemble, adaptive, speaker, power)\n  VADEngine         \u2014 voice activity detection (WebRTC, Silero, RMS)\n  TTSEngine         \u2014 on-device text-to-speech (Kokoro-82M)\n  STTEngine         \u2014 speech-to-text (faster-whisper)\n  VoicePipeline     \u2014 bundled Wake\u2192VAD\u2192STT\u2192TTS orchestration\n  NoiseProfiler     \u2014 noise-adaptive threshold adjustment\n  PowerManager      \u2014 battery-aware power management\n  FusionStrategy    \u2014 multi-model ensemble scoring\n  list_models()     \u2014 discover available wake word models\n  list_voices()     \u2014 discover available TTS voices</p>\n</blockquote>\n\n<p>Quick start::</p>\n\n<pre><code>from violawake_sdk import WakeDetector\n\nwith WakeDetector(threshold=0.80) as detector:\n    for chunk in detector.stream_mic():\n        if detector.detect(chunk):\n            print(\"Wake word detected!\")\n            break\n</code></pre>\n\n<p>See README.md or <a href=\"https://github.com/GeeIHadAGoodTime/ViolaWake\">https://github.com/GeeIHadAGoodTime/ViolaWake</a> for full documentation.</p>\n"}, "violawake_sdk.DetectorConfig": {"fullname": "violawake_sdk.DetectorConfig", "modulename": "violawake_sdk", "qualname": "DetectorConfig", "kind": "class", "doc": "<p>Advanced configuration for WakeDetector.</p>\n\n<p>Basic usage needs no config -- just use <code>WakeDetector(threshold=0.80)</code>.\nUse <code>DetectorConfig</code> to opt-in to advanced features without cluttering\nthe constructor.</p>\n\n<p>Example::</p>\n\n<pre><code># Simple (80% of users):\ndet = WakeDetector(model=\"temporal_cnn\", threshold=0.80)\n\n# Advanced (multi-model ensemble + adaptive threshold):\ndet = WakeDetector(\n    model=\"temporal_cnn\",\n    config=DetectorConfig(\n        adaptive_threshold=True,\n        confirm_count=3,\n    ),\n)\n</code></pre>\n\n<h6 id=\"attributes\">Attributes:</h6>\n\n<ul>\n<li><strong>models:</strong>  Additional model paths for multi-model ensemble (K3).</li>\n<li><strong>fusion_strategy:</strong>  Score fusion strategy for ensemble (K3).</li>\n<li><strong>fusion_weights:</strong>  Per-model weights for weighted_average fusion (K3).</li>\n<li><strong>adaptive_threshold:</strong>  Enable dynamic threshold based on noise (K4).</li>\n<li><strong>noise_profiler:</strong>  Custom NoiseProfiler instance (K4).</li>\n<li><strong>speaker_verify_fn:</strong>  Post-detection speaker verification callback (K5).</li>\n<li><strong>power_manager:</strong>  Power management controller for duty cycling (K7).</li>\n<li><strong>confirm_count:</strong>  Consecutive above-threshold scores required (K2).</li>\n<li><strong>score_history_size:</strong>  Number of recent scores to retain (K2).</li>\n</ul>\n"}, "violawake_sdk.DetectorConfig.__init__": {"fullname": "violawake_sdk.DetectorConfig.__init__", "modulename": "violawake_sdk", "qualname": "DetectorConfig.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">models</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">fusion_strategy</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">ensemble</span><span class=\"o\">.</span><span class=\"n\">FusionStrategy</span> <span class=\"o\">|</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"n\">FusionStrategy</span><span class=\"o\">.</span><span class=\"n\">AVERAGE</span><span class=\"p\">:</span> <span class=\"s1\">&#39;average&#39;</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">fusion_weights</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">adaptive_threshold</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>,</span><span class=\"param\">\t<span class=\"n\">noise_profiler</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">noise_profiler</span><span class=\"o\">.</span><span class=\"n\">NoiseProfiler</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">speaker_verify_fn</span><span class=\"p\">:</span> <span class=\"n\">Callable</span><span class=\"p\">[</span><span class=\"o\">...</span><span class=\"p\">,</span> <span class=\"nb\">bool</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">power_manager</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">power_manager</span><span class=\"o\">.</span><span class=\"n\">PowerManager</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">confirm_count</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>,</span><span class=\"param\">\t<span class=\"n\">score_history_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">50</span></span>)</span>"}, "violawake_sdk.DetectorConfig.models": {"fullname": "violawake_sdk.DetectorConfig.models", "modulename": "violawake_sdk", "qualname": "DetectorConfig.models", "kind": "variable", "doc": "<p></p>\n", "annotation": ": list[str] | None", "default_value": "None"}, "violawake_sdk.DetectorConfig.fusion_strategy": {"fullname": "violawake_sdk.DetectorConfig.fusion_strategy", "modulename": "violawake_sdk", "qualname": "DetectorConfig.fusion_strategy", "kind": "variable", "doc": "<p></p>\n", "annotation": ": violawake_sdk.ensemble.FusionStrategy | str", "default_value": "&lt;FusionStrategy.AVERAGE: &#x27;average&#x27;&gt;"}, "violawake_sdk.DetectorConfig.fusion_weights": {"fullname": "violawake_sdk.DetectorConfig.fusion_weights", "modulename": "violawake_sdk", "qualname": "DetectorConfig.fusion_weights", "kind": "variable", "doc": "<p></p>\n", "annotation": ": list[float] | None", "default_value": "None"}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"fullname": "violawake_sdk.DetectorConfig.adaptive_threshold", "modulename": "violawake_sdk", "qualname": "DetectorConfig.adaptive_threshold", "kind": "variable", "doc": "<p></p>\n", "annotation": ": bool", "default_value": "False"}, "violawake_sdk.DetectorConfig.noise_profiler": {"fullname": "violawake_sdk.DetectorConfig.noise_profiler", "modulename": "violawake_sdk", "qualname": "DetectorConfig.noise_profiler", "kind": "variable", "doc": "<p></p>\n", "annotation": ": violawake_sdk.noise_profiler.NoiseProfiler | None", "default_value": "None"}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"fullname": "violawake_sdk.DetectorConfig.speaker_verify_fn", "modulename": "violawake_sdk", "qualname": "DetectorConfig.speaker_verify_fn", "kind": "variable", "doc": "<p></p>\n", "annotation": ": Callable[..., bool] | None", "default_value": "None"}, "violawake_sdk.DetectorConfig.power_manager": {"fullname": "violawake_sdk.DetectorConfig.power_manager", "modulename": "violawake_sdk", "qualname": "DetectorConfig.power_manager", "kind": "variable", "doc": "<p></p>\n", "annotation": ": violawake_sdk.power_manager.PowerManager | None", "default_value": "None"}, "violawake_sdk.DetectorConfig.confirm_count": {"fullname": "violawake_sdk.DetectorConfig.confirm_count", "modulename": "violawake_sdk", "qualname": "DetectorConfig.confirm_count", "kind": "variable", "doc": "<p></p>\n", "annotation": ": int", "default_value": "1"}, "violawake_sdk.DetectorConfig.score_history_size": {"fullname": "violawake_sdk.DetectorConfig.score_history_size", "modulename": "violawake_sdk", "qualname": "DetectorConfig.score_history_size", "kind": "variable", "doc": "<p></p>\n", "annotation": ": int", "default_value": "50"}, "violawake_sdk.DetectorConfig.build": {"fullname": "violawake_sdk.DetectorConfig.build", "modulename": "violawake_sdk", "qualname": "DetectorConfig.build", "kind": "function", "doc": "<p>Build a WakeDetector from this config.</p>\n\n<p>Convenience method that passes <code>self</code> as the <code>config=</code> argument.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>model:</strong>  Model name or path (default: <code>\"temporal_cnn\"</code>).</li>\n<li>**<strong>kwargs:</strong>  Additional WakeDetector constructor arguments\n(threshold, cooldown_s, etc.).</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Configured WakeDetector instance.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;temporal_cnn&#39;</span>,</span><span class=\"param\">\t<span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">:</span> <span class=\"n\">Any</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">wake_detector</span><span class=\"o\">.</span><span class=\"n\">WakeDetector</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector": {"fullname": "violawake_sdk.WakeDetector", "modulename": "violawake_sdk", "qualname": "WakeDetector", "kind": "class", "doc": "<p>Wake word detector using ViolaWake MLP on OpenWakeWord embeddings.</p>\n\n<p>Supports pluggable inference backends (ONNX Runtime, TFLite) via the\n<code>backend</code> parameter.  The default <code>\"auto\"</code> mode tries ONNX Runtime\nfirst, then falls back to TFLite, so users on edge devices can run\nwithout installing <code>onnxruntime</code>.</p>\n\n<p>Also supports optional competitive features (all opt-in, backward compatible):</p>\n\n<ul>\n<li><strong>K2 Confidence API</strong>: <code>get_confidence()</code> and <code>last_scores</code> property.</li>\n<li><strong>K3 Multi-model ensemble</strong>: <code>models</code> parameter with fusion strategies.</li>\n<li><strong>K4 Adaptive threshold</strong>: <code>adaptive_threshold</code> parameter with noise profiling.</li>\n<li><strong>K5 Speaker verification</strong>: <code>speaker_verify_fn</code> callback for post-detection.</li>\n<li><strong>K6 Audio source abstraction</strong>: <code>from_source()</code> class method factory.</li>\n<li><strong>K7 Power management</strong>: <code>power_manager</code> parameter for duty cycling.</li>\n</ul>\n\n<p><strong>Threshold tuning guide:</strong></p>\n\n<ul>\n<li>0.70 = sensitive (more detections, more false positives)</li>\n<li>0.80 = balanced (default, recommended starting point)</li>\n<li>0.85 = conservative (fewer false positives, may miss some)</li>\n<li>0.90+ = very conservative (for noisy environments)</li>\n</ul>\n\n<p>Start at 0.80 and adjust based on your false accept rate.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>model:</strong>  Model name from the registry, or a path to a model file.</li>\n<li><strong>threshold:</strong>  Detection confidence threshold in [0.0, 1.0].</li>\n<li><strong>cooldown_s:</strong>  Minimum seconds between consecutive detections.</li>\n<li><strong>providers:</strong>  ONNX Runtime execution providers (ignored for TFLite).</li>\n<li><strong>backend:</strong>  Inference backend selector (<code>\"onnx\"</code>, <code>\"tflite\"</code>, <code>\"auto\"</code>).</li>\n<li><strong>config:</strong>  A <code>DetectorConfig</code> instance bundling all advanced options.\nMutually exclusive with the individual advanced kwargs below.</li>\n<li><strong>models:</strong>  Additional model paths for ensemble scoring (K3).</li>\n<li><strong>fusion_strategy:</strong>  Score fusion strategy for ensemble (K3).</li>\n<li><strong>fusion_weights:</strong>  Per-model weights for weighted_average fusion (K3).</li>\n<li><strong>adaptive_threshold:</strong>  Enable dynamic threshold based on noise (K4).</li>\n<li><strong>noise_profiler:</strong>  Custom NoiseProfiler instance (K4).</li>\n<li><strong>speaker_verify_fn:</strong>  Post-detection speaker verification callback (K5).</li>\n<li><strong>power_manager:</strong>  Power management controller for duty cycling (K7).</li>\n<li><strong>confirm_count:</strong>  Consecutive above-threshold scores required for detection (K2).</li>\n<li><strong>score_history_size:</strong>  Number of recent scores to retain (K2).</li>\n</ul>\n"}, "violawake_sdk.WakeDetector.__init__": {"fullname": "violawake_sdk.WakeDetector.__init__", "modulename": "violawake_sdk", "qualname": "WakeDetector.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;temporal_cnn&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.8</span>,</span><span class=\"param\">\t<span class=\"n\">cooldown_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">2.0</span>,</span><span class=\"param\">\t<span class=\"n\">providers</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">backend</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;auto&#39;</span>,</span><span class=\"param\">\t<span class=\"o\">*</span>,</span><span class=\"param\">\t<span class=\"n\">config</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">wake_detector</span><span class=\"o\">.</span><span class=\"n\">DetectorConfig</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">models</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">fusion_strategy</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">ensemble</span><span class=\"o\">.</span><span class=\"n\">FusionStrategy</span> <span class=\"o\">|</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">fusion_weights</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">adaptive_threshold</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">noise_profiler</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">noise_profiler</span><span class=\"o\">.</span><span class=\"n\">NoiseProfiler</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">speaker_verify_fn</span><span class=\"p\">:</span> <span class=\"n\">Callable</span><span class=\"p\">[[</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">],</span> <span class=\"nb\">bool</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">power_manager</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">power_manager</span><span class=\"o\">.</span><span class=\"n\">PowerManager</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">confirm_count</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">score_history_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"nb\">object</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span></span>)</span>"}, "violawake_sdk.WakeDetector.threshold": {"fullname": "violawake_sdk.WakeDetector.threshold", "modulename": "violawake_sdk", "qualname": "WakeDetector.threshold", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.WakeDetector.close": {"fullname": "violawake_sdk.WakeDetector.close", "modulename": "violawake_sdk", "qualname": "WakeDetector.close", "kind": "function", "doc": "<p>Release inference sessions and reset internal state.</p>\n\n<p>After calling close(), the detector should not be used for inference.\nThis is called automatically when using WakeDetector as a context\nmanager.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.process": {"fullname": "violawake_sdk.WakeDetector.process", "modulename": "violawake_sdk", "qualname": "WakeDetector.process", "kind": "function", "doc": "<p>Process a 20ms audio frame and return the wake word detection score.</p>\n\n<p>If ensemble mode is active (K3), returns the fused score.\nThe score is recorded for confidence tracking (K2) and reported\nto the power manager (K7) if configured.</p>\n\n<p>Thread-safe: protects internal state mutation with a lock.</p>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>TypeError:</strong>  If audio_frame is not bytes or ndarray.</li>\n<li><strong>ValueError:</strong>  If audio_frame is empty, malformed, or drastically\nlarger than the supported streaming frame size.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">float</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.detect": {"fullname": "violawake_sdk.WakeDetector.detect", "modulename": "violawake_sdk", "qualname": "WakeDetector.detect", "kind": "function", "doc": "<p>Process a frame and apply the full decision policy.</p>\n\n<p>Integrates adaptive threshold (K4), multi-window confirmation (K2),\nspeaker verification (K5), and power management (K7) when configured.</p>\n\n<p>Thread-safe: protects internal state mutation with a lock.</p>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>TypeError:</strong>  If audio_frame is not bytes or ndarray.</li>\n<li><strong>ValueError:</strong>  If audio_frame is empty or has invalid format.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>,</span><span class=\"param\">\t<span class=\"n\">is_playing</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.reset_cooldown": {"fullname": "violawake_sdk.WakeDetector.reset_cooldown", "modulename": "violawake_sdk", "qualname": "WakeDetector.reset_cooldown", "kind": "function", "doc": "<p>Reset the cooldown window without clearing confirmation state or buffers.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.reset": {"fullname": "violawake_sdk.WakeDetector.reset", "modulename": "violawake_sdk", "qualname": "WakeDetector.reset", "kind": "function", "doc": "<p>Reset cooldown, confirmation state, score history, and temporal buffers.</p>\n\n<p>Lock ordering: _backbone_lock then _lock, matching _process_core\nto prevent ABBA deadlock.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.get_confidence": {"fullname": "violawake_sdk.WakeDetector.get_confidence", "modulename": "violawake_sdk", "qualname": "WakeDetector.get_confidence", "kind": "function", "doc": "<p>Return a confidence assessment of the current detection state.</p>\n\n<p>Includes the raw MLP score, multi-window confirmation count,\nand a classified confidence level (LOW/MEDIUM/HIGH/CERTAIN).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">confidence</span><span class=\"o\">.</span><span class=\"n\">ConfidenceResult</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.last_scores": {"fullname": "violawake_sdk.WakeDetector.last_scores", "modulename": "violawake_sdk", "qualname": "WakeDetector.last_scores", "kind": "variable", "doc": "<p>Return the recent score history (most recent last).</p>\n", "annotation": ": tuple[float, ...]"}, "violawake_sdk.WakeDetector.enroll_speaker": {"fullname": "violawake_sdk.WakeDetector.enroll_speaker", "modulename": "violawake_sdk", "qualname": "WakeDetector.enroll_speaker", "kind": "function", "doc": "<p>Enroll a speaker by extracting embeddings from audio frames.</p>\n\n<p>Requires a <code>SpeakerVerificationHook</code> as the <code>speaker_verify_fn</code>.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>speaker_id:</strong>  Unique identifier for the speaker.</li>\n<li><strong>audio_frames:</strong>  Audio frames to extract embeddings from.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Total enrollment count for this speaker.</p>\n</blockquote>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>RuntimeError:</strong>  If no SpeakerVerificationHook is configured.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">speaker_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">audio_frames</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">]</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">int</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.verify_speaker": {"fullname": "violawake_sdk.WakeDetector.verify_speaker", "modulename": "violawake_sdk", "qualname": "WakeDetector.verify_speaker", "kind": "function", "doc": "<p>Verify the speaker in an audio frame against enrolled profiles.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio_frame:</strong>  Audio frame to verify.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>SpeakerVerifyResult with match details.</p>\n</blockquote>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>RuntimeError:</strong>  If no SpeakerVerificationHook is configured.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">speaker</span><span class=\"o\">.</span><span class=\"n\">SpeakerVerifyResult</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.from_source": {"fullname": "violawake_sdk.WakeDetector.from_source", "modulename": "violawake_sdk", "qualname": "WakeDetector.from_source", "kind": "function", "doc": "<p>Create a WakeDetector bound to an AudioSource.</p>\n\n<p>The returned object wraps a WakeDetector and provides a <code>run()</code>\nmethod that reads frames from the source and runs detection.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>source:</strong>  Any object implementing the AudioSource protocol.</li>\n<li><strong>model:</strong>  Model name or path.</li>\n<li><strong>threshold:</strong>  Detection threshold.</li>\n<li><strong>cooldown_s:</strong>  Cooldown between detections.</li>\n<li>**<strong>kwargs:</strong>  Additional WakeDetector keyword arguments.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>A _SourceDetector wrapping both the source and detector.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">cls</span>,</span><span class=\"param\">\t<span class=\"n\">source</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">audio_source</span><span class=\"o\">.</span><span class=\"n\">AudioSource</span>,</span><span class=\"param\">\t<span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;temporal_cnn&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.8</span>,</span><span class=\"param\">\t<span class=\"n\">cooldown_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">2.0</span>,</span><span class=\"param\">\t<span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">:</span> <span class=\"n\">Any</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">wake_detector</span><span class=\"o\">.</span><span class=\"n\">_SourceDetector</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDetector.stream_mic": {"fullname": "violawake_sdk.WakeDetector.stream_mic", "modulename": "violawake_sdk", "qualname": "WakeDetector.stream_mic", "kind": "function", "doc": "<p>Generator that yields 20ms audio frames from the default microphone.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">device_index</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Generator</span><span class=\"p\">[</span><span class=\"nb\">bytes</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.AsyncWakeDetector": {"fullname": "violawake_sdk.AsyncWakeDetector", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector", "kind": "class", "doc": "<p>Async wrapper around <code>WakeDetector</code> for asyncio-based applications.</p>\n\n<p>All CPU-bound inference is dispatched to a background thread via\n<code>loop.run_in_executor</code>. The wrapper is fully transparent -- it\naccepts the same constructor arguments and exposes the same methods\nas <code>WakeDetector</code>, but with <code>async</code> signatures.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li>**<strong>kwargs:</strong>  Forwarded to <code>WakeDetector.__init__</code>.</li>\n</ul>\n"}, "violawake_sdk.AsyncWakeDetector.__init__": {"fullname": "violawake_sdk.AsyncWakeDetector.__init__", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">:</span> <span class=\"n\">Any</span></span>)</span>"}, "violawake_sdk.AsyncWakeDetector.detect": {"fullname": "violawake_sdk.AsyncWakeDetector.detect", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.detect", "kind": "function", "doc": "<p>Async version of <code>WakeDetector.detect</code>.</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>,</span><span class=\"param\">\t<span class=\"n\">is_playing</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "async def"}, "violawake_sdk.AsyncWakeDetector.process": {"fullname": "violawake_sdk.AsyncWakeDetector.process", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.process", "kind": "function", "doc": "<p>Async version of <code>WakeDetector.process</code>.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">float</span>:</span></span>", "funcdef": "async def"}, "violawake_sdk.AsyncWakeDetector.stream": {"fullname": "violawake_sdk.AsyncWakeDetector.stream", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.stream", "kind": "function", "doc": "<p>Async generator that yields detection results from an async audio source.</p>\n\n<p>Usage::</p>\n\n<pre><code>async for detected in detector.stream(audio_source):\n    if detected:\n        print(\"Wake word!\")\n</code></pre>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>source:</strong>  An async iterator yielding audio frames.</li>\n</ul>\n\n<h6 id=\"yields\">Yields:</h6>\n\n<blockquote>\n  <p>Boolean detection result for each frame.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">source</span><span class=\"p\">:</span> <span class=\"n\">AsyncIterator</span><span class=\"p\">[</span><span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">]</span></span><span class=\"return-annotation\">) -> <span class=\"n\">AsyncIterator</span><span class=\"p\">[</span><span class=\"nb\">bool</span><span class=\"p\">]</span>:</span></span>", "funcdef": "async def"}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"fullname": "violawake_sdk.AsyncWakeDetector.reset_cooldown", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.reset_cooldown", "kind": "function", "doc": "<p>Reset the cooldown window (delegates to WakeDetector public API).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.AsyncWakeDetector.threshold": {"fullname": "violawake_sdk.AsyncWakeDetector.threshold", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.threshold", "kind": "variable", "doc": "<p>Current detection threshold.</p>\n", "annotation": ": float"}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"fullname": "violawake_sdk.AsyncWakeDetector.get_confidence", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.get_confidence", "kind": "function", "doc": "<p>Return confidence assessment of the current detection state (K2).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">confidence</span><span class=\"o\">.</span><span class=\"n\">ConfidenceResult</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.AsyncWakeDetector.last_scores": {"fullname": "violawake_sdk.AsyncWakeDetector.last_scores", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.last_scores", "kind": "variable", "doc": "<p>Return the recent score history (most recent last).</p>\n", "annotation": ": tuple[float, ...]"}, "violawake_sdk.AsyncWakeDetector.close": {"fullname": "violawake_sdk.AsyncWakeDetector.close", "modulename": "violawake_sdk", "qualname": "AsyncWakeDetector.close", "kind": "function", "doc": "<p>Shut down the background executor and release detector resources.</p>\n\n<p>Safe to call multiple times.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDecisionPolicy": {"fullname": "violawake_sdk.WakeDecisionPolicy", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy", "kind": "class", "doc": "<p>4-gate core decision pipeline (RMS floor, threshold, cooldown, playback suppression).</p>\n\n<p>Extended by WakeDetector with optional confirmation (K2), adaptive\nthreshold (K4), and speaker verification (K5).</p>\n\n<p>Gate 1: Zero-input guard -- skip if RMS &lt; 1.0 (silence / DC offset artifact)\nGate 2: Score threshold -- skip if model score &lt; threshold\nGate 3: Cooldown -- ignore events within cooldown_s of last detection\nGate 4: Listening gate -- suppress during active playback (optional)</p>\n"}, "violawake_sdk.WakeDecisionPolicy.__init__": {"fullname": "violawake_sdk.WakeDecisionPolicy.__init__", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.8</span>,</span><span class=\"param\">\t<span class=\"n\">cooldown_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">2.0</span>,</span><span class=\"param\">\t<span class=\"n\">rms_floor</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span></span>)</span>"}, "violawake_sdk.WakeDecisionPolicy.threshold": {"fullname": "violawake_sdk.WakeDecisionPolicy.threshold", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.threshold", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"fullname": "violawake_sdk.WakeDecisionPolicy.cooldown_s", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.cooldown_s", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"fullname": "violawake_sdk.WakeDecisionPolicy.rms_floor", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.rms_floor", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"fullname": "violawake_sdk.WakeDecisionPolicy.evaluate", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.evaluate", "kind": "function", "doc": "<p>Evaluate whether a wake word event should be triggered.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">score</span><span class=\"p\">:</span> <span class=\"nb\">float</span>, </span><span class=\"param\"><span class=\"n\">rms</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span>, </span><span class=\"param\"><span class=\"n\">is_playing</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"fullname": "violawake_sdk.WakeDecisionPolicy.reset_cooldown", "modulename": "violawake_sdk", "qualname": "WakeDecisionPolicy.reset_cooldown", "kind": "function", "doc": "<p>Reset the cooldown window (useful for testing).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.validate_audio_chunk": {"fullname": "violawake_sdk.validate_audio_chunk", "modulename": "violawake_sdk", "qualname": "validate_audio_chunk", "kind": "function", "doc": "<p>Validate and normalize an audio chunk for use with WakeDetector.</p>\n\n<p>Accepts bytes (int16 PCM) or numpy arrays (int16, float32, float64).\nReturns a float32 numpy array suitable for processing.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>data:</strong>  Audio chunk as bytes (int16 little-endian PCM) or numpy array.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Validated float32 numpy array.</p>\n</blockquote>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>TypeError:</strong>  If data is not bytes or ndarray.</li>\n<li><strong>ValueError:</strong>  If data is empty, has invalid dtype, contains only\nnon-finite values, or exceeds the maximum chunk size.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">data</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.ConfidenceResult": {"fullname": "violawake_sdk.ConfidenceResult", "modulename": "violawake_sdk", "qualname": "ConfidenceResult", "kind": "class", "doc": "<p>Result from get_confidence() with full detection context.</p>\n\n<h6 id=\"attributes\">Attributes:</h6>\n\n<ul>\n<li><strong>raw_score:</strong>  The most recent MLP/CNN output score in [0.0, 1.0].</li>\n<li><strong>confirm_count:</strong>  Number of consecutive above-threshold scores in the\ncurrent multi-window confirmation sequence.</li>\n<li><strong>confirm_required:</strong>  Total consecutive scores required for detection.</li>\n<li><strong>confidence:</strong>  Classified confidence level.</li>\n<li><strong>score_history:</strong>  Recent score history (most recent last).</li>\n</ul>\n"}, "violawake_sdk.ConfidenceResult.__init__": {"fullname": "violawake_sdk.ConfidenceResult.__init__", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">raw_score</span><span class=\"p\">:</span> <span class=\"nb\">float</span>,</span><span class=\"param\">\t<span class=\"n\">confirm_count</span><span class=\"p\">:</span> <span class=\"nb\">int</span>,</span><span class=\"param\">\t<span class=\"n\">confirm_required</span><span class=\"p\">:</span> <span class=\"nb\">int</span>,</span><span class=\"param\">\t<span class=\"n\">confidence</span><span class=\"p\">:</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">confidence</span><span class=\"o\">.</span><span class=\"n\">ConfidenceLevel</span>,</span><span class=\"param\">\t<span class=\"n\">score_history</span><span class=\"p\">:</span> <span class=\"nb\">tuple</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">]</span></span>)</span>"}, "violawake_sdk.ConfidenceResult.raw_score": {"fullname": "violawake_sdk.ConfidenceResult.raw_score", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.raw_score", "kind": "variable", "doc": "<p></p>\n", "annotation": ": float"}, "violawake_sdk.ConfidenceResult.confirm_count": {"fullname": "violawake_sdk.ConfidenceResult.confirm_count", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.confirm_count", "kind": "variable", "doc": "<p></p>\n", "annotation": ": int"}, "violawake_sdk.ConfidenceResult.confirm_required": {"fullname": "violawake_sdk.ConfidenceResult.confirm_required", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.confirm_required", "kind": "variable", "doc": "<p></p>\n", "annotation": ": int"}, "violawake_sdk.ConfidenceResult.confidence": {"fullname": "violawake_sdk.ConfidenceResult.confidence", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.confidence", "kind": "variable", "doc": "<p></p>\n", "annotation": ": violawake_sdk.confidence.ConfidenceLevel"}, "violawake_sdk.ConfidenceResult.score_history": {"fullname": "violawake_sdk.ConfidenceResult.score_history", "modulename": "violawake_sdk", "qualname": "ConfidenceResult.score_history", "kind": "variable", "doc": "<p></p>\n", "annotation": ": tuple[float, ...]"}, "violawake_sdk.ConfidenceLevel": {"fullname": "violawake_sdk.ConfidenceLevel", "modulename": "violawake_sdk", "qualname": "ConfidenceLevel", "kind": "class", "doc": "<p>Confidence classification for wake word detection.</p>\n", "bases": "builtins.str, enum.Enum"}, "violawake_sdk.ConfidenceLevel.LOW": {"fullname": "violawake_sdk.ConfidenceLevel.LOW", "modulename": "violawake_sdk", "qualname": "ConfidenceLevel.LOW", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;ConfidenceLevel.LOW: &#x27;LOW&#x27;&gt;"}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"fullname": "violawake_sdk.ConfidenceLevel.MEDIUM", "modulename": "violawake_sdk", "qualname": "ConfidenceLevel.MEDIUM", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;ConfidenceLevel.MEDIUM: &#x27;MEDIUM&#x27;&gt;"}, "violawake_sdk.ConfidenceLevel.HIGH": {"fullname": "violawake_sdk.ConfidenceLevel.HIGH", "modulename": "violawake_sdk", "qualname": "ConfidenceLevel.HIGH", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;ConfidenceLevel.HIGH: &#x27;HIGH&#x27;&gt;"}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"fullname": "violawake_sdk.ConfidenceLevel.CERTAIN", "modulename": "violawake_sdk", "qualname": "ConfidenceLevel.CERTAIN", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;ConfidenceLevel.CERTAIN: &#x27;CERTAIN&#x27;&gt;"}, "violawake_sdk.FusionStrategy": {"fullname": "violawake_sdk.FusionStrategy", "modulename": "violawake_sdk", "qualname": "FusionStrategy", "kind": "class", "doc": "<p>Score fusion strategy for multi-model ensemble.</p>\n", "bases": "builtins.str, enum.Enum"}, "violawake_sdk.FusionStrategy.AVERAGE": {"fullname": "violawake_sdk.FusionStrategy.AVERAGE", "modulename": "violawake_sdk", "qualname": "FusionStrategy.AVERAGE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;FusionStrategy.AVERAGE: &#x27;average&#x27;&gt;"}, "violawake_sdk.FusionStrategy.MAX": {"fullname": "violawake_sdk.FusionStrategy.MAX", "modulename": "violawake_sdk", "qualname": "FusionStrategy.MAX", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;FusionStrategy.MAX: &#x27;max&#x27;&gt;"}, "violawake_sdk.FusionStrategy.VOTING": {"fullname": "violawake_sdk.FusionStrategy.VOTING", "modulename": "violawake_sdk", "qualname": "FusionStrategy.VOTING", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;FusionStrategy.VOTING: &#x27;voting&#x27;&gt;"}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"fullname": "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE", "modulename": "violawake_sdk", "qualname": "FusionStrategy.WEIGHTED_AVERAGE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;FusionStrategy.WEIGHTED_AVERAGE: &#x27;weighted_average&#x27;&gt;"}, "violawake_sdk.NoiseProfiler": {"fullname": "violawake_sdk.NoiseProfiler", "modulename": "violawake_sdk", "qualname": "NoiseProfiler", "kind": "class", "doc": "<p>Estimates ambient noise and adjusts detection threshold.</p>\n\n<p>The profiler maintains a rolling window of RMS energy measurements.\nThe noise floor is estimated as the 10th percentile of recent RMS values\n(capturing the quietest frames, which are likely ambient noise).</p>\n\n<p>Threshold adjustment logic:</p>\n\n<ul>\n<li>High SNR (signal clearly above noise): lower threshold slightly to\nimprove sensitivity.</li>\n<li>Low SNR (signal barely above noise): raise threshold to reduce\nfalse alarms from noise bursts.</li>\n<li>The adjusted threshold is always clamped to\n<code>[min_threshold, max_threshold]</code>.</li>\n</ul>\n\n<p>Adaptive threshold bounds:</p>\n\n<ul>\n<li><code>min_threshold</code> defaults to <code>0.60</code>. In very quiet environments, or\nwhen the current frame is far above the estimated noise floor, the\nthreshold may be lowered to improve sensitivity, but it will never be\nreduced below this floor.</li>\n<li><code>max_threshold</code> defaults to <code>0.95</code>. In very noisy environments, or\nwhen the current frame is close to the estimated noise floor, the\nthreshold may be raised to suppress false accepts, but it will never be\nincreased above this ceiling.</li>\n<li>Before enough history is collected (fewer than 10 RMS frames), the\nprofiler returns <code>base_threshold</code> with no adaptation.</li>\n</ul>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>base_threshold:</strong>  The default detection threshold (e.g. 0.80).</li>\n<li><strong>noise_window_s:</strong>  Seconds of audio history for noise estimation.</li>\n<li><strong>min_threshold:</strong>  Floor for adaptive threshold. Default 0.60.</li>\n<li><strong>max_threshold:</strong>  Ceiling for adaptive threshold. Default 0.95.</li>\n<li><strong>snr_boost_db:</strong>  SNR above this value enables threshold lowering.</li>\n<li><strong>snr_penalty_db:</strong>  SNR below this value enables threshold raising.</li>\n<li><strong>frames_per_second:</strong>  Expected audio frames per second (default 50 for 20ms).</li>\n</ul>\n"}, "violawake_sdk.NoiseProfiler.__init__": {"fullname": "violawake_sdk.NoiseProfiler.__init__", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">base_threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.8</span>,</span><span class=\"param\">\t<span class=\"n\">noise_window_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">5.0</span>,</span><span class=\"param\">\t<span class=\"n\">min_threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.6</span>,</span><span class=\"param\">\t<span class=\"n\">max_threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.95</span>,</span><span class=\"param\">\t<span class=\"n\">snr_boost_db</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">6.0</span>,</span><span class=\"param\">\t<span class=\"n\">snr_penalty_db</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">3.0</span>,</span><span class=\"param\">\t<span class=\"n\">frames_per_second</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">50.0</span></span>)</span>"}, "violawake_sdk.NoiseProfiler.base_threshold": {"fullname": "violawake_sdk.NoiseProfiler.base_threshold", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.base_threshold", "kind": "variable", "doc": "<p>The unadjusted detection threshold.</p>\n", "annotation": ": float"}, "violawake_sdk.NoiseProfiler.noise_floor": {"fullname": "violawake_sdk.NoiseProfiler.noise_floor", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.noise_floor", "kind": "variable", "doc": "<p>Current estimated noise floor RMS.</p>\n", "annotation": ": float"}, "violawake_sdk.NoiseProfiler.update": {"fullname": "violawake_sdk.NoiseProfiler.update", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.update", "kind": "function", "doc": "<p>Update noise estimate with a new audio frame and return adjusted threshold.</p>\n\n<p>The audio should be float32 values. Both normalized [-1,1] and int16-range\nfloat32 are accepted; the profiler works on relative ratios so absolute\nscale doesn't matter.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio_frame:</strong>  1-D float32 audio samples (any length).</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>The adaptively adjusted detection threshold.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">float</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.NoiseProfiler.get_profile": {"fullname": "violawake_sdk.NoiseProfiler.get_profile", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.get_profile", "kind": "function", "doc": "<p>Return a snapshot of the current noise state.</p>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>NoiseProfile with noise floor, signal RMS, SNR, and adjusted threshold.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">noise_profiler</span><span class=\"o\">.</span><span class=\"n\">NoiseProfile</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.NoiseProfiler.reset": {"fullname": "violawake_sdk.NoiseProfiler.reset", "modulename": "violawake_sdk", "qualname": "NoiseProfiler.reset", "kind": "function", "doc": "<p>Clear noise history and reset estimates.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.PowerManager": {"fullname": "violawake_sdk.PowerManager", "modulename": "violawake_sdk", "qualname": "PowerManager", "kind": "class", "doc": "<p>Energy-aware inference controller.</p>\n\n<p>Reduces inference frequency based on battery level, silence detection,\nand explicit duty cycling configuration.</p>\n\n<p>Modes of power saving:</p>\n\n<ol>\n<li><strong>Duty cycling</strong>: Process every Nth frame when idle (no recent detections).\nWhen a score above <code>activity_threshold</code> is detected, switches to\nfull-rate processing for <code>active_window_s</code> seconds.</li>\n<li><strong>Silence skipping</strong>: Skip inference when audio RMS is below\n<code>silence_rms</code> (no speech possible).</li>\n<li><strong>Battery-aware</strong>: When on battery and below <code>battery_low_pct</code>,\nincrease the duty cycle factor by <code>battery_multiplier</code>.</li>\n</ol>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>duty_cycle_n:</strong>  Base duty cycle (process every Nth frame). Default 1 (no skipping).</li>\n<li><strong>silence_rms:</strong>  RMS threshold in int16 scale (typical range 0-32768) below which\nframes are skipped. Default 10.0 filters near-silence.</li>\n<li><strong>activity_threshold:</strong>  Score above which the system enters \"active\" mode. Default 0.3.</li>\n<li><strong>active_window_s:</strong>  Seconds to stay in full-rate mode after activity. Default 3.0.</li>\n<li><strong>battery_low_pct:</strong>  Battery percent below which power saving kicks in. Default 20.</li>\n<li><strong>battery_multiplier:</strong>  Multiply duty_cycle_n by this when on low battery. Default 3.</li>\n<li><strong>check_battery_interval_s:</strong>  How often to re-check battery. Default 60.</li>\n</ul>\n"}, "violawake_sdk.PowerManager.__init__": {"fullname": "violawake_sdk.PowerManager.__init__", "modulename": "violawake_sdk", "qualname": "PowerManager.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">duty_cycle_n</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>,</span><span class=\"param\">\t<span class=\"n\">silence_rms</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">10.0</span>,</span><span class=\"param\">\t<span class=\"n\">activity_threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.3</span>,</span><span class=\"param\">\t<span class=\"n\">active_window_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">3.0</span>,</span><span class=\"param\">\t<span class=\"n\">battery_low_pct</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">20</span>,</span><span class=\"param\">\t<span class=\"n\">battery_multiplier</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>,</span><span class=\"param\">\t<span class=\"n\">check_battery_interval_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">60.0</span></span>)</span>"}, "violawake_sdk.PowerManager.effective_duty_cycle": {"fullname": "violawake_sdk.PowerManager.effective_duty_cycle", "modulename": "violawake_sdk", "qualname": "PowerManager.effective_duty_cycle", "kind": "variable", "doc": "<p>Current effective duty cycle considering battery and activity state.</p>\n", "annotation": ": int"}, "violawake_sdk.PowerManager.should_process": {"fullname": "violawake_sdk.PowerManager.should_process", "modulename": "violawake_sdk", "qualname": "PowerManager.should_process", "kind": "function", "doc": "<p>Decide whether this frame should be processed or skipped.</p>\n\n<p>Call this before running inference. If it returns False, skip the\nframe to save CPU/power.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio_frame:</strong>  1-D audio samples (int16-range float32 or actual int16).</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>True if inference should run on this frame.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio_frame</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.PowerManager.report_score": {"fullname": "violawake_sdk.PowerManager.report_score", "modulename": "violawake_sdk", "qualname": "PowerManager.report_score", "kind": "function", "doc": "<p>Report a detection score to the power manager.</p>\n\n<p>If the score is above the activity threshold, the manager switches\nto full-rate processing mode for <code>active_window_s</code> seconds.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>score:</strong>  Detection score from the model.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">score</span><span class=\"p\">:</span> <span class=\"nb\">float</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.PowerManager.get_state": {"fullname": "violawake_sdk.PowerManager.get_state", "modulename": "violawake_sdk", "qualname": "PowerManager.get_state", "kind": "function", "doc": "<p>Return current power management state snapshot.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">power_manager</span><span class=\"o\">.</span><span class=\"n\">PowerState</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.PowerManager.reset": {"fullname": "violawake_sdk.PowerManager.reset", "modulename": "violawake_sdk", "qualname": "PowerManager.reset", "kind": "function", "doc": "<p>Reset all counters and state.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VADEngine": {"fullname": "violawake_sdk.VADEngine", "modulename": "violawake_sdk", "qualname": "VADEngine", "kind": "class", "doc": "<p>Voice Activity Detection engine.</p>\n\n<p>Auto-selects the best available backend unless explicitly specified.</p>\n\n<p>Example::</p>\n\n<pre><code>vad = VADEngine(backend=\"webrtc\")  # or \"silero\", \"rms\", \"auto\"\nprob = vad.process_frame(audio_20ms_bytes)\nis_speech = prob &gt; 0.5\n</code></pre>\n"}, "violawake_sdk.VADEngine.__init__": {"fullname": "violawake_sdk.VADEngine.__init__", "modulename": "violawake_sdk", "qualname": "VADEngine.__init__", "kind": "function", "doc": "<p>Initialize the VAD engine.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>backend:</strong>  One of \"auto\", \"webrtc\", \"silero\", \"rms\".\n\"auto\" selects the best available backend.</li>\n<li>**<strong>backend_kwargs:</strong>  Backend-specific arguments.\nFor \"webrtc\": aggressiveness (0\u20133, default 2)\nFor \"rms\": speech_threshold, silence_threshold</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">backend</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">|</span> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">vad</span><span class=\"o\">.</span><span class=\"n\">VADBackend</span> <span class=\"o\">=</span> <span class=\"o\">&lt;</span><span class=\"n\">VADBackend</span><span class=\"o\">.</span><span class=\"n\">AUTO</span><span class=\"p\">:</span> <span class=\"s1\">&#39;auto&#39;</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"o\">**</span><span class=\"n\">backend_kwargs</span><span class=\"p\">:</span> <span class=\"nb\">object</span></span>)</span>"}, "violawake_sdk.VADEngine.backend_name": {"fullname": "violawake_sdk.VADEngine.backend_name", "modulename": "violawake_sdk", "qualname": "VADEngine.backend_name", "kind": "variable", "doc": "<p>Name of the active backend.</p>\n", "annotation": ": str"}, "violawake_sdk.VADEngine.process_frame": {"fullname": "violawake_sdk.VADEngine.process_frame", "modulename": "violawake_sdk", "qualname": "VADEngine.process_frame", "kind": "function", "doc": "<p>Process a 20ms audio frame.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio:</strong>  320 samples of 16kHz mono audio. Accepted formats:\n<ul>\n<li>bytes/bytearray: int16 PCM (640 bytes for 20ms)</li>\n<li>np.ndarray float32/float64: assumed normalized to [-1.0, 1.0],\nscaled by 32768 to int16. Use int16 dtype for int16-range data.</li>\n<li>np.ndarray int16: converted to bytes directly</li>\n</ul></li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Speech probability in [0.0, 1.0].\n  1.0 = definitely speech, 0.0 = definitely silence.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">float</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VADEngine.is_speech": {"fullname": "violawake_sdk.VADEngine.is_speech", "modulename": "violawake_sdk", "qualname": "VADEngine.is_speech", "kind": "function", "doc": "<p>Convenience method: returns True if speech probability exceeds threshold.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"nb\">bytes</span> <span class=\"o\">|</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>, </span><span class=\"param\"><span class=\"n\">threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VADEngine.reset": {"fullname": "violawake_sdk.VADEngine.reset", "modulename": "violawake_sdk", "qualname": "VADEngine.reset", "kind": "function", "doc": "<p>Reset internal state (useful between utterances).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VADEngine.close": {"fullname": "violawake_sdk.VADEngine.close", "modulename": "violawake_sdk", "qualname": "VADEngine.close", "kind": "function", "doc": "<p>Release backend resources.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.TTSEngine": {"fullname": "violawake_sdk.TTSEngine", "modulename": "violawake_sdk", "qualname": "TTSEngine", "kind": "class", "doc": "<p>On-device TTS using Kokoro-82M (Apache 2.0 model).</p>\n\n<p>Thread-safe: multiple threads can call <code>synthesize()</code> concurrently.\nCalls are serialized via <code>_synthesis_lock</code> since kokoro-onnx is not\nguaranteed to be thread-safe. Model initialization is separately guarded\nby <code>_lock</code> (lazy load on first use).</p>\n\n<p>Model files required (auto-downloaded on first use):\n    - <code>kokoro_v1_0.onnx</code> \u2014 Kokoro-82M model (~326MB)\n    - <code>kokoro_voices_v1_0.bin</code> \u2014 Voice embeddings (~28MB)</p>\n\n<p>Example::</p>\n\n<pre><code>tts = TTSEngine(voice=\"af_heart\")\naudio = tts.synthesize(\"Hello, world!\")  # returns np.ndarray\ntts.play(audio)  # blocking by default\ntts.play_async(audio)  # optional non-blocking playback\n</code></pre>\n"}, "violawake_sdk.TTSEngine.__init__": {"fullname": "violawake_sdk.TTSEngine.__init__", "modulename": "violawake_sdk", "qualname": "TTSEngine.__init__", "kind": "function", "doc": "<p>Initialize the TTS engine.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>voice:</strong>  Kokoro voice name. Default \"af_heart\".\nSee <code>AVAILABLE_VOICES</code> for full list.</li>\n<li><strong>speed:</strong>  Speech speed multiplier. 1.0 = normal, 1.2 = 20% faster.</li>\n<li><strong>sample_rate:</strong>  Output sample rate. Default 16kHz (pipeline standard).\nKokoro outputs 24kHz; resampled if different.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">voice</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;af_heart&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">speed</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span>,</span><span class=\"param\">\t<span class=\"n\">sample_rate</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">16000</span></span>)</span>"}, "violawake_sdk.TTSEngine.voice": {"fullname": "violawake_sdk.TTSEngine.voice", "modulename": "violawake_sdk", "qualname": "TTSEngine.voice", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.TTSEngine.speed": {"fullname": "violawake_sdk.TTSEngine.speed", "modulename": "violawake_sdk", "qualname": "TTSEngine.speed", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.TTSEngine.sample_rate": {"fullname": "violawake_sdk.TTSEngine.sample_rate", "modulename": "violawake_sdk", "qualname": "TTSEngine.sample_rate", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.TTSEngine.synthesize": {"fullname": "violawake_sdk.TTSEngine.synthesize", "modulename": "violawake_sdk", "qualname": "TTSEngine.synthesize", "kind": "function", "doc": "<p>Synthesize text to audio.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>text:</strong>  Text to synthesize. May be multi-sentence.\nLong text is processed as a single batch call.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Audio samples as float32 numpy array at <code>self.sample_rate</code>.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">text</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.TTSEngine.synthesize_chunked": {"fullname": "violawake_sdk.TTSEngine.synthesize_chunked", "modulename": "violawake_sdk", "qualname": "TTSEngine.synthesize_chunked", "kind": "function", "doc": "<p>Synthesize text sentence-by-sentence for lower latency.</p>\n\n<p>Splits text at sentence boundaries and yields audio for each sentence\nas soon as it's synthesized. This allows playback to begin before\nthe full text is processed \u2014 matching the pattern from production Viola.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>text:</strong>  Text to synthesize. May be multi-sentence.</li>\n</ul>\n\n<h6 id=\"yields\">Yields:</h6>\n\n<blockquote>\n  <p>Audio chunks (one per sentence) as float32 numpy arrays.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">text</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Generator</span><span class=\"p\">[</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.TTSEngine.play": {"fullname": "violawake_sdk.TTSEngine.play", "modulename": "violawake_sdk", "qualname": "TTSEngine.play", "kind": "function", "doc": "<p>Play audio through the default output device.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio:</strong>  Float32 numpy array of audio samples.</li>\n<li><strong>blocking:</strong>  If True, wait for playback to finish. If False, return\nimmediately after starting playback.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>, </span><span class=\"param\"><span class=\"o\">*</span>, </span><span class=\"param\"><span class=\"n\">blocking</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.TTSEngine.play_async": {"fullname": "violawake_sdk.TTSEngine.play_async", "modulename": "violawake_sdk", "qualname": "TTSEngine.play_async", "kind": "function", "doc": "<p>Play audio without blocking the calling thread.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.TTSEngine.close": {"fullname": "violawake_sdk.TTSEngine.close", "modulename": "violawake_sdk", "qualname": "TTSEngine.close", "kind": "function", "doc": "<p>Release model resources.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.STTEngine": {"fullname": "violawake_sdk.STTEngine", "modulename": "violawake_sdk", "qualname": "STTEngine", "kind": "class", "doc": "<p>Speech-to-text transcription via faster-whisper.</p>\n\n<p>Thread-safe: <code>WhisperModel</code> is thread-safe for concurrent <code>transcribe()</code> calls.</p>\n\n<p>Model is loaded once and reused. First call includes model load time\n(~1-3s). Subsequent calls are ~380ms (base model, CPU, 3s audio).</p>\n\n<p>Example::</p>\n\n<pre><code>stt = STTEngine(model=\"base\")\ntext = stt.transcribe(audio_np_float32)\nprint(text)  # \"what's the weather today\"\n</code></pre>\n"}, "violawake_sdk.STTEngine.__init__": {"fullname": "violawake_sdk.STTEngine.__init__", "modulename": "violawake_sdk", "qualname": "STTEngine.__init__", "kind": "function", "doc": "<p>Initialize the STT engine.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>model:</strong>  Whisper model size. One of: tiny, base, small, medium, large-v3.\nDefault \"base\" \u2014 good accuracy/speed balance (WER ~9%).</li>\n<li><strong>device:</strong>  \"cpu\" or \"cuda\". Default \"cpu\".</li>\n<li><strong>compute_type:</strong>  CTranslate2 compute type. \"int8\" (default), \"float16\", \"float32\".\n\"int8\" is fastest on CPU with minimal accuracy loss.</li>\n<li><strong>language:</strong>  Force a specific language (e.g., \"en\"). None = auto-detect.</li>\n<li><strong>language_cache_ttl_s:</strong>  Cache detected language for N seconds to avoid\nper-call language detection overhead.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;base&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">device</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;cpu&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">compute_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;int8&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">language</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">language_cache_ttl_s</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">60.0</span></span>)</span>"}, "violawake_sdk.STTEngine.model_name": {"fullname": "violawake_sdk.STTEngine.model_name", "modulename": "violawake_sdk", "qualname": "STTEngine.model_name", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.STTEngine.device": {"fullname": "violawake_sdk.STTEngine.device", "modulename": "violawake_sdk", "qualname": "STTEngine.device", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.STTEngine.compute_type": {"fullname": "violawake_sdk.STTEngine.compute_type", "modulename": "violawake_sdk", "qualname": "STTEngine.compute_type", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.STTEngine.forced_language": {"fullname": "violawake_sdk.STTEngine.forced_language", "modulename": "violawake_sdk", "qualname": "STTEngine.forced_language", "kind": "variable", "doc": "<p></p>\n"}, "violawake_sdk.STTEngine.transcribe": {"fullname": "violawake_sdk.STTEngine.transcribe", "modulename": "violawake_sdk", "qualname": "STTEngine.transcribe", "kind": "function", "doc": "<p>Transcribe audio to text.</p>\n\n<h6 id=\"note\">Note:</h6>\n\n<blockquote>\n  <p>This engine uses a progressive temperature fallback of\n  <code>[0.0, 0.2, 0.4, 0.6, 0.8, 1.0]</code> during decoding, which can\n  trigger up to 6 decoding passes and increase latency. For\n  low-latency use cases, prefer a single-pass configuration such as\n  <code>temperature_fallback=[0.0]</code>.</p>\n</blockquote>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio:</strong>  Float32 numpy array at 16kHz mono. Values should be in [-1.0, 1.0].</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Transcribed text as string. Empty string if no speech detected.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.STTEngine.transcribe_streaming": {"fullname": "violawake_sdk.STTEngine.transcribe_streaming", "modulename": "violawake_sdk", "qualname": "STTEngine.transcribe_streaming", "kind": "function", "doc": "<p>Stream transcription segments as they become available.</p>\n\n<p>Uses faster-whisper's generator mode: <code>model.transcribe()</code> returns a\n<code>(segments_iterator, info)</code> tuple.  This method yields each\n<code>TranscriptSegment</code> one at a time as faster-whisper decodes it,\ninstead of collecting all segments first.</p>\n\n<p>This is useful when:</p>\n\n<ul>\n<li>You want to display partial results before full transcription completes.</li>\n<li>You need to pipe segments to a downstream consumer (TTS, logging, etc.)\nwithout waiting for the full buffer to finish.</li>\n</ul>\n\n<h6 id=\"note\">Note:</h6>\n\n<blockquote>\n  <p>Segments with <code>no_speech_prob</code> above <code>NO_SPEECH_THRESHOLD</code> are\n  silently skipped (not yielded).</p>\n</blockquote>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio:</strong>  Float32 numpy array at 16kHz mono, or 2-D stereo.</li>\n<li><strong>channels_first:</strong>  Layout hint for 2-D stereo audio (same semantics as\n<code>transcribe_full</code>).</li>\n<li><strong>beam_size:</strong>  Beam search width. Default 5.</li>\n<li><strong>best_of:</strong>  Number of candidates when sampling. Default 5.</li>\n<li><strong>temperature:</strong>  Temperature schedule. Default <code>[0.0, 0.2, 0.4, 0.6, 0.8, 1.0]</code>.</li>\n</ul>\n\n<h6 id=\"yields\">Yields:</h6>\n\n<blockquote>\n  <p>TranscriptSegment \u2014 one per decoded segment, in time order.</p>\n</blockquote>\n\n<p>Example::</p>\n\n<pre><code>stt = STTEngine(model=\"base\")\nfor seg in stt.transcribe_streaming(audio_np):\n    print(f\"[{seg.start:.1f}s] {seg.text}\")\n</code></pre>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>,</span><span class=\"param\">\t<span class=\"n\">channels_first</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">beam_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">5</span>,</span><span class=\"param\">\t<span class=\"n\">best_of</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">5</span>,</span><span class=\"param\">\t<span class=\"n\">temperature</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Iterator</span><span class=\"p\">[</span><span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">stt</span><span class=\"o\">.</span><span class=\"n\">TranscriptSegment</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.STTEngine.transcribe_full": {"fullname": "violawake_sdk.STTEngine.transcribe_full", "modulename": "violawake_sdk", "qualname": "STTEngine.transcribe_full", "kind": "function", "doc": "<p>Transcribe audio and return full result with segments, timing, and metadata.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>audio:</strong>  Float32 numpy array at 16kHz mono, or 2-D stereo.</li>\n<li><strong>channels_first:</strong>  Layout hint for 2-D stereo audio.\n<code>True</code>  = (channels, samples)  e.g. shape (2, 48000).\n<code>False</code> = (samples, channels)  e.g. shape (48000, 2) \u2014 the\nstandard layout.\n<code>None</code> (default) = fall back to a shape heuristic (smaller\ndimension is assumed to be channels).  Prefer passing an\nexplicit value to avoid ambiguity with short audio clips.</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>TranscriptResult with text, segments, language, and no_speech_prob.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">audio</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span>,</span><span class=\"param\">\t<span class=\"n\">channels_first</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span><span class=\"return-annotation\">) -> <span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">stt</span><span class=\"o\">.</span><span class=\"n\">TranscriptResult</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.STTEngine.prewarm": {"fullname": "violawake_sdk.STTEngine.prewarm", "modulename": "violawake_sdk", "qualname": "STTEngine.prewarm", "kind": "function", "doc": "<p>Load the model eagerly (avoids cold-start latency on first transcription).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.STTEngine.close": {"fullname": "violawake_sdk.STTEngine.close", "modulename": "violawake_sdk", "qualname": "STTEngine.close", "kind": "function", "doc": "<p>Release model resources.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.StreamingSTTEngine": {"fullname": "violawake_sdk.StreamingSTTEngine", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine", "kind": "class", "doc": "<p>Incremental streaming STT: accepts audio chunks, yields segments.</p>\n\n<p>Audio chunks are pushed one at a time via <code>push_chunk()</code>.  When the\naccumulated buffer reaches <code>min_buffer_seconds</code>, <code>push_chunk()</code>\ntransparently transcribes the buffer and yields any new segments.  You can\nalso force a transcription at any time with <code>flush()</code>.</p>\n\n<p>A sliding-window approach is supported via <code>stride_seconds</code>: after each\ntranscription pass the engine retains the last <code>stride_seconds</code> of audio\nso that words near the boundary are not lost on the next pass.  Set\n<code>stride_seconds=0.0</code> (default) to discard all audio after each pass.</p>\n\n<p>Thread safety: <strong>not</strong> thread-safe.  Call from a single thread or protect\nexternally with a lock.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>model:</strong>  Whisper model size. One of <code>tiny</code>, <code>base</code>, <code>small</code>,\n<code>medium</code>, <code>large-v3</code>. Default <code>\"base\"</code>.</li>\n<li><strong>device:</strong>  <code>\"cpu\"</code> or <code>\"cuda\"</code>. Default <code>\"cpu\"</code>.</li>\n<li><strong>compute_type:</strong>  CTranslate2 compute type. Default <code>\"int8\"</code>.</li>\n<li><strong>language:</strong>  Force a specific language code (e.g. <code>\"en\"</code>). <code>None</code>\nfor auto-detect.</li>\n<li><strong>min_buffer_seconds:</strong>  Minimum seconds of audio to accumulate before\nattempting a transcription pass.  Shorter values\nmean lower latency but more frequent (and\npotentially noisier) passes.  Default <code>2.0</code>.</li>\n<li><strong>stride_seconds:</strong>  Seconds of audio overlap to retain between passes\n(sliding-window).  Default <code>0.0</code> (no overlap).</li>\n<li><strong>sample_rate:</strong>  Sample rate of incoming audio chunks. Default <code>16000</code>.</li>\n</ul>\n\n<p>Example::</p>\n\n<pre><code>streaming = StreamingSTTEngine(model=\"base\", min_buffer_seconds=2.0)\nfor chunk in mic_chunks:\n    for segment in streaming.push_chunk(chunk):\n        print(f\"[{segment.start:.1f}s] {segment.text}\")\n\n# Force final transcription when done\nfor segment in streaming.flush():\n    print(f\"[{segment.start:.1f}s] {segment.text}\")\n</code></pre>\n"}, "violawake_sdk.StreamingSTTEngine.__init__": {"fullname": "violawake_sdk.StreamingSTTEngine.__init__", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;base&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">device</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;cpu&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">compute_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;int8&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">language</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">min_buffer_seconds</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">2.0</span>,</span><span class=\"param\">\t<span class=\"n\">stride_seconds</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span>,</span><span class=\"param\">\t<span class=\"n\">sample_rate</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">16000</span></span>)</span>"}, "violawake_sdk.StreamingSTTEngine.model": {"fullname": "violawake_sdk.StreamingSTTEngine.model", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.model", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str", "default_value": "&#x27;base&#x27;"}, "violawake_sdk.StreamingSTTEngine.device": {"fullname": "violawake_sdk.StreamingSTTEngine.device", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.device", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str", "default_value": "&#x27;cpu&#x27;"}, "violawake_sdk.StreamingSTTEngine.compute_type": {"fullname": "violawake_sdk.StreamingSTTEngine.compute_type", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.compute_type", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str", "default_value": "&#x27;int8&#x27;"}, "violawake_sdk.StreamingSTTEngine.language": {"fullname": "violawake_sdk.StreamingSTTEngine.language", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.language", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str | None", "default_value": "None"}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"fullname": "violawake_sdk.StreamingSTTEngine.min_buffer_seconds", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.min_buffer_seconds", "kind": "variable", "doc": "<p></p>\n", "annotation": ": float", "default_value": "2.0"}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"fullname": "violawake_sdk.StreamingSTTEngine.stride_seconds", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.stride_seconds", "kind": "variable", "doc": "<p></p>\n", "annotation": ": float", "default_value": "0.0"}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"fullname": "violawake_sdk.StreamingSTTEngine.sample_rate", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.sample_rate", "kind": "variable", "doc": "<p></p>\n", "annotation": ": int", "default_value": "16000"}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"fullname": "violawake_sdk.StreamingSTTEngine.buffer_duration_s", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.buffer_duration_s", "kind": "variable", "doc": "<p>Current accumulated audio duration in seconds.</p>\n", "annotation": ": float"}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"fullname": "violawake_sdk.StreamingSTTEngine.push_chunk", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.push_chunk", "kind": "function", "doc": "<p>Push an audio chunk into the buffer.</p>\n\n<p>If the buffer has accumulated at least <code>min_buffer_seconds</code> of audio,\na transcription pass is run and any yielded segments are returned.\nOtherwise, no segments are yielded and the chunk is silently buffered.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>chunk:</strong>  Float32 numpy array (16kHz mono) <strong>or</strong> raw <code>int16</code> PCM\nbytes.  Bytes are automatically converted to float32.</li>\n</ul>\n\n<h6 id=\"yields\">Yields:</h6>\n\n<blockquote>\n  <p>TranscriptSegment \u2014 segments decoded in this pass (may be empty).</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">chunk</span><span class=\"p\">:</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span> <span class=\"o\">|</span> <span class=\"nb\">bytes</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Iterator</span><span class=\"p\">[</span><span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">stt</span><span class=\"o\">.</span><span class=\"n\">TranscriptSegment</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.StreamingSTTEngine.flush": {"fullname": "violawake_sdk.StreamingSTTEngine.flush", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.flush", "kind": "function", "doc": "<p>Transcribe whatever remains in the buffer and clear it.</p>\n\n<p>Call this when the audio stream ends to ensure trailing audio is\ntranscribed.</p>\n\n<h6 id=\"yields\">Yields:</h6>\n\n<blockquote>\n  <p>TranscriptSegment \u2014 segments from the remaining buffer.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Iterator</span><span class=\"p\">[</span><span class=\"n\">violawake_sdk</span><span class=\"o\">.</span><span class=\"n\">stt</span><span class=\"o\">.</span><span class=\"n\">TranscriptSegment</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.StreamingSTTEngine.reset": {"fullname": "violawake_sdk.StreamingSTTEngine.reset", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.reset", "kind": "function", "doc": "<p>Discard the current buffer without transcribing.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.StreamingSTTEngine.prewarm": {"fullname": "violawake_sdk.StreamingSTTEngine.prewarm", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.prewarm", "kind": "function", "doc": "<p>Eagerly load the underlying Whisper model.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.StreamingSTTEngine.close": {"fullname": "violawake_sdk.StreamingSTTEngine.close", "modulename": "violawake_sdk", "qualname": "StreamingSTTEngine.close", "kind": "function", "doc": "<p>Release model resources and discard the buffer.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VoicePipeline": {"fullname": "violawake_sdk.VoicePipeline", "modulename": "violawake_sdk", "qualname": "VoicePipeline", "kind": "class", "doc": "<p>Orchestrated Wake\u2192VAD\u2192STT\u2192TTS voice pipeline.</p>\n\n<h1 id=\"state-machine\">State Machine</h1>\n\n<p>Four states with the following transitions::</p>\n\n<pre><code>IDLE \u2500\u2500(wake detected)\u2500\u2500\u2192 LISTENING\nLISTENING \u2500\u2500(silence/timeout)\u2500\u2500\u2192 TRANSCRIBING\nTRANSCRIBING \u2500\u2500(text ready)\u2500\u2500\u2192 RESPONDING\nRESPONDING \u2500\u2500(handlers done)\u2500\u2500\u2192 IDLE\n</code></pre>\n\n<h6 id=\"thread-ownership-of-transitions\">Thread ownership of transitions:</h6>\n\n<blockquote>\n  <ul>\n  <li><strong>Main thread</strong> (<code>_run_loop</code>): IDLE\u2192LISTENING, LISTENING\u2192TRANSCRIBING.\n  Owns the mic capture loop and wake/VAD detection.</li>\n  <li><strong>Worker thread</strong> (<code>_transcribe_and_respond</code>): TRANSCRIBING\u2192RESPONDING\u2192IDLE.\n  Spawned by <code>_start_worker()</code> as a daemon thread. Runs STT, dispatches\n  command handlers, and triggers TTS playback. Only one worker thread is\n  active at a time (guarded by <code>_worker_lock</code>).</li>\n  </ul>\n</blockquote>\n\n<h1 id=\"threading-model\">Threading Model</h1>\n\n<ul>\n<li>The main loop runs in the calling thread via <code>run()</code> (blocking).</li>\n<li>When a command recording ends, <code>_start_worker()</code> spawns a single daemon\nthread for STT transcription + handler dispatch + TTS playback.</li>\n<li><code>_state_lock</code> guards all reads/writes of <code>_state</code>.</li>\n<li><code>_worker_lock</code> guards <code>_worker_thread</code> reference management.</li>\n</ul>\n\n<h1 id=\"known-limitation\">Known Limitation</h1>\n\n<p>There is a brief window between the worker thread completing (setting state\nback to IDLE) and the next wake detection where the pipeline is technically\nidle but the worker thread reference may not yet be cleared. During this\nwindow, a new wake detection will proceed normally since the state is IDLE.</p>\n\n<p>Usage::</p>\n\n<pre><code>pipeline = VoicePipeline()\n\n@pipeline.on_command\ndef handle(text: str) -&gt; str | None:\n    return f\"You said: {text}\"\n\npipeline.run()\n</code></pre>\n"}, "violawake_sdk.VoicePipeline.__init__": {"fullname": "violawake_sdk.VoicePipeline.__init__", "modulename": "violawake_sdk", "qualname": "VoicePipeline.__init__", "kind": "function", "doc": "<p>Initialize the voice pipeline.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>wake_word:</strong>  Wake word model name. Default \"viola\".</li>\n<li><strong>stt_model:</strong>  Whisper model size. Default \"base\".</li>\n<li><strong>tts_voice:</strong>  TTS voice name. Default \"af_heart\".</li>\n<li><strong>threshold:</strong>  Wake word detection threshold. Default 0.80.</li>\n<li><strong>vad_backend:</strong>  VAD backend. Default \"auto\".</li>\n<li><strong>vad_threshold:</strong>  VAD speech detection threshold. Default 0.4.</li>\n<li><strong>enable_tts:</strong>  If True, speak responses via TTS. If False, skip TTS.</li>\n<li><strong>device_index:</strong>  Microphone device index. None = system default.</li>\n<li><strong>on_wake:</strong>  Optional callback fired after wake-word detection and\nbefore command transcription begins.</li>\n<li><strong>streaming_stt:</strong>  If True, use <code>STTEngine.transcribe_streaming()</code>\nto yield segments incrementally instead of waiting\nfor the full transcription.  The command text passed\nto handlers is the concatenation of all yielded\nsegment texts (identical to non-streaming behaviour),\nbut each segment is logged as it arrives.\nDefault False.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">wake_word</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;viola&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">stt_model</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;base&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">tts_voice</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;af_heart&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.8</span>,</span><span class=\"param\">\t<span class=\"n\">vad_backend</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;auto&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">vad_threshold</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.4</span>,</span><span class=\"param\">\t<span class=\"n\">enable_tts</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>,</span><span class=\"param\">\t<span class=\"n\">device_index</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">on_wake</span><span class=\"p\">:</span> <span class=\"n\">Callable</span><span class=\"p\">[[],</span> <span class=\"kc\">None</span><span class=\"p\">]</span> <span class=\"o\">|</span> <span class=\"kc\">None</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">streaming_stt</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span>)</span>"}, "violawake_sdk.VoicePipeline.on_command": {"fullname": "violawake_sdk.VoicePipeline.on_command", "modulename": "violawake_sdk", "qualname": "VoicePipeline.on_command", "kind": "function", "doc": "<p>Decorator to register a command handler.</p>\n\n<p>The handler receives the transcribed text and may return a string\nresponse (which is spoken via TTS) or None (no TTS response).</p>\n\n<p>Example::</p>\n\n<pre><code>@pipeline.on_command\ndef handle(text: str) -&gt; str | None:\n    if \"weather\" in text:\n        return \"It's sunny!\"\n    return None\n</code></pre>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">handler</span><span class=\"p\">:</span> <span class=\"n\">Callable</span><span class=\"p\">[[</span><span class=\"nb\">str</span><span class=\"p\">],</span> <span class=\"nb\">str</span> <span class=\"o\">|</span> <span class=\"kc\">None</span><span class=\"p\">]</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Callable</span><span class=\"p\">[[</span><span class=\"nb\">str</span><span class=\"p\">],</span> <span class=\"nb\">str</span> <span class=\"o\">|</span> <span class=\"kc\">None</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VoicePipeline.run": {"fullname": "violawake_sdk.VoicePipeline.run", "modulename": "violawake_sdk", "qualname": "VoicePipeline.run", "kind": "function", "doc": "<p>Run the pipeline. Blocks until <code>stop()</code> is called or Ctrl+C.</p>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>PipelineError:</strong>  If the pipeline encounters an unrecoverable error.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VoicePipeline.stop": {"fullname": "violawake_sdk.VoicePipeline.stop", "modulename": "violawake_sdk", "qualname": "VoicePipeline.stop", "kind": "function", "doc": "<p>Signal the pipeline to stop and wait briefly for worker cleanup.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">timeout</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">5.0</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VoicePipeline.close": {"fullname": "violawake_sdk.VoicePipeline.close", "modulename": "violawake_sdk", "qualname": "VoicePipeline.close", "kind": "function", "doc": "<p>Stop the pipeline and release all engine resources.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.VoicePipeline.speak": {"fullname": "violawake_sdk.VoicePipeline.speak", "modulename": "violawake_sdk", "qualname": "VoicePipeline.speak", "kind": "function", "doc": "<p>Synthesize and play text via TTS (called from within command handlers).</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">text</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.ViolaWakeError": {"fullname": "violawake_sdk.ViolaWakeError", "modulename": "violawake_sdk", "qualname": "ViolaWakeError", "kind": "class", "doc": "<p>Base exception for all ViolaWake SDK errors.</p>\n", "bases": "builtins.Exception"}, "violawake_sdk.ModelNotFoundError": {"fullname": "violawake_sdk.ModelNotFoundError", "modulename": "violawake_sdk", "qualname": "ModelNotFoundError", "kind": "class", "doc": "<p>Raised when a model file is not found in the cache or at the given path.</p>\n\n<p>Resolution: run <code>violawake-download --model &lt;model_name&gt;</code> to download.</p>\n", "bases": "violawake_sdk._exceptions.ViolaWakeError"}, "violawake_sdk.AudioCaptureError": {"fullname": "violawake_sdk.AudioCaptureError", "modulename": "violawake_sdk", "qualname": "AudioCaptureError", "kind": "class", "doc": "<p>Raised when microphone capture fails to initialize or read frames.</p>\n\n<p>Common causes: no audio input device, device already in use,\nPortAudio not installed.</p>\n", "bases": "violawake_sdk._exceptions.ViolaWakeError"}, "violawake_sdk.ModelLoadError": {"fullname": "violawake_sdk.ModelLoadError", "modulename": "violawake_sdk", "qualname": "ModelLoadError", "kind": "class", "doc": "<p>Raised when a model file exists but cannot be loaded by ONNX Runtime.</p>\n\n<p>Possible causes: corrupted file, ONNX opset version mismatch.</p>\n", "bases": "violawake_sdk._exceptions.ViolaWakeError"}, "violawake_sdk.PipelineError": {"fullname": "violawake_sdk.PipelineError", "modulename": "violawake_sdk", "qualname": "PipelineError", "kind": "class", "doc": "<p>Raised when the VoicePipeline encounters an unrecoverable error.</p>\n", "bases": "violawake_sdk._exceptions.ViolaWakeError"}, "violawake_sdk.VADBackendError": {"fullname": "violawake_sdk.VADBackendError", "modulename": "violawake_sdk", "qualname": "VADBackendError", "kind": "class", "doc": "<p>Raised when the requested VAD backend is unavailable.</p>\n\n<p>Falls back to RMS heuristic if webrtcvad/silero not installed.</p>\n", "bases": "violawake_sdk._exceptions.ViolaWakeError"}, "violawake_sdk.list_models": {"fullname": "violawake_sdk.list_models", "modulename": "violawake_sdk", "qualname": "list_models", "kind": "function", "doc": "<p>Return available wake word models with their descriptions.</p>\n\n<p>Each entry is a dict with keys: <code>name</code>, <code>description</code>, <code>version</code>.</p>\n\n<p>Example::</p>\n\n<pre><code>&gt;&gt;&gt; from violawake_sdk import list_models\n&gt;&gt;&gt; for m in list_models():\n...     print(f\"{m['name']:20s} {m['description']}\")\n</code></pre>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">) -> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">]]</span>:</span></span>", "funcdef": "def"}, "violawake_sdk.list_voices": {"fullname": "violawake_sdk.list_voices", "modulename": "violawake_sdk", "qualname": "list_voices", "kind": "function", "doc": "<p>Return available TTS voice names for use with <code>TTSEngine</code>.</p>\n\n<p>Requires the <code>[tts]</code> extra to be installed for actual synthesis,\nbut this function always works for discovery.</p>\n\n<p>Example::</p>\n\n<pre><code>&gt;&gt;&gt; from violawake_sdk import list_voices\n&gt;&gt;&gt; list_voices()\n['af_heart', 'af_bella', 'af_sarah', ...]\n</code></pre>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">) -> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}}, "docInfo": {"violawake": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "violawake_sdk": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 165}, "violawake_sdk.DetectorConfig": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 212}, "violawake_sdk.DetectorConfig.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 294, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.models": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.fusion_strategy": {"qualname": 3, "fullname": 5, "annotation": 7, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.fusion_weights": {"qualname": 3, "fullname": 5, "annotation": 4, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.noise_profiler": {"qualname": 3, "fullname": 5, "annotation": 8, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"qualname": 4, "fullname": 6, "annotation": 5, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.power_manager": {"qualname": 3, "fullname": 5, "annotation": 8, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.confirm_count": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.score_history_size": {"qualname": 4, "fullname": 6, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.DetectorConfig.build": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 63, "bases": 0, "doc": 77}, "violawake_sdk.WakeDetector": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 479}, "violawake_sdk.WakeDetector.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 531, "bases": 0, "doc": 3}, "violawake_sdk.WakeDetector.threshold": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.WakeDetector.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 35}, "violawake_sdk.WakeDetector.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 99}, "violawake_sdk.WakeDetector.detect": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 57, "bases": 0, "doc": 80}, "violawake_sdk.WakeDetector.reset_cooldown": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 13}, "violawake_sdk.WakeDetector.reset": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 28}, "violawake_sdk.WakeDetector.get_confidence": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 30}, "violawake_sdk.WakeDetector.last_scores": {"qualname": 3, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "violawake_sdk.WakeDetector.enroll_speaker": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 53, "bases": 0, "doc": 93}, "violawake_sdk.WakeDetector.verify_speaker": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 63}, "violawake_sdk.WakeDetector.from_source": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 126, "bases": 0, "doc": 111}, "violawake_sdk.WakeDetector.stream_mic": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 56, "bases": 0, "doc": 13}, "violawake_sdk.AsyncWakeDetector": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 79}, "violawake_sdk.AsyncWakeDetector.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 3}, "violawake_sdk.AsyncWakeDetector.detect": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 57, "bases": 0, "doc": 10}, "violawake_sdk.AsyncWakeDetector.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 10}, "violawake_sdk.AsyncWakeDetector.stream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 71}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 12}, "violawake_sdk.AsyncWakeDetector.threshold": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 6}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 12}, "violawake_sdk.AsyncWakeDetector.last_scores": {"qualname": 3, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "violawake_sdk.AsyncWakeDetector.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 20}, "violawake_sdk.WakeDecisionPolicy": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 80}, "violawake_sdk.WakeDecisionPolicy.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 63, "bases": 0, "doc": 3}, "violawake_sdk.WakeDecisionPolicy.threshold": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 60, "bases": 0, "doc": 12}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 10}, "violawake_sdk.validate_audio_chunk": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 116}, "violawake_sdk.ConfidenceResult": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 91}, "violawake_sdk.ConfidenceResult.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 87, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceResult.raw_score": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceResult.confirm_count": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceResult.confirm_required": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceResult.confidence": {"qualname": 2, "fullname": 4, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceResult.score_history": {"qualname": 3, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceLevel": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 9}, "violawake_sdk.ConfidenceLevel.LOW": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceLevel.HIGH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.FusionStrategy": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 10}, "violawake_sdk.FusionStrategy.AVERAGE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.FusionStrategy.MAX": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.FusionStrategy.VOTING": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 11, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.NoiseProfiler": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 342}, "violawake_sdk.NoiseProfiler.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 148, "bases": 0, "doc": 3}, "violawake_sdk.NoiseProfiler.base_threshold": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 7}, "violawake_sdk.NoiseProfiler.noise_floor": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "violawake_sdk.NoiseProfiler.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 83}, "violawake_sdk.NoiseProfiler.get_profile": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 31}, "violawake_sdk.NoiseProfiler.reset": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 9}, "violawake_sdk.PowerManager": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 265}, "violawake_sdk.PowerManager.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 146, "bases": 0, "doc": 3}, "violawake_sdk.PowerManager.effective_duty_cycle": {"qualname": 4, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "violawake_sdk.PowerManager.should_process": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 72}, "violawake_sdk.PowerManager.report_score": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 55}, "violawake_sdk.PowerManager.get_state": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 9}, "violawake_sdk.PowerManager.reset": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 8}, "violawake_sdk.VADEngine": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 49}, "violawake_sdk.VADEngine.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 75, "bases": 0, "doc": 55}, "violawake_sdk.VADEngine.backend_name": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "violawake_sdk.VADEngine.process_frame": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 102}, "violawake_sdk.VADEngine.is_speech": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 53, "bases": 0, "doc": 12}, "violawake_sdk.VADEngine.reset": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 9}, "violawake_sdk.VADEngine.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 6}, "violawake_sdk.TTSEngine": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 133}, "violawake_sdk.TTSEngine.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 65, "bases": 0, "doc": 70}, "violawake_sdk.TTSEngine.voice": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.TTSEngine.speed": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.TTSEngine.sample_rate": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.TTSEngine.synthesize": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 58}, "violawake_sdk.TTSEngine.synthesize_chunked": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 47, "bases": 0, "doc": 88}, "violawake_sdk.TTSEngine.play": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 49}, "violawake_sdk.TTSEngine.play_async": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 10}, "violawake_sdk.TTSEngine.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 6}, "violawake_sdk.STTEngine": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 80}, "violawake_sdk.STTEngine.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 117, "bases": 0, "doc": 111}, "violawake_sdk.STTEngine.model_name": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.STTEngine.device": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.STTEngine.compute_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.STTEngine.forced_language": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.STTEngine.transcribe": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 118}, "violawake_sdk.STTEngine.transcribe_streaming": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 141, "bases": 0, "doc": 270}, "violawake_sdk.STTEngine.transcribe_full": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 67, "bases": 0, "doc": 123}, "violawake_sdk.STTEngine.prewarm": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 14}, "violawake_sdk.STTEngine.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 6}, "violawake_sdk.StreamingSTTEngine": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 380}, "violawake_sdk.StreamingSTTEngine.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 155, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.model": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.device": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.compute_type": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.language": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"qualname": 4, "fullname": 6, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"qualname": 4, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 9}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 54, "bases": 0, "doc": 102}, "violawake_sdk.StreamingSTTEngine.flush": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 45}, "violawake_sdk.StreamingSTTEngine.reset": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 9}, "violawake_sdk.StreamingSTTEngine.prewarm": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 9}, "violawake_sdk.StreamingSTTEngine.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 10}, "violawake_sdk.VoicePipeline": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 307}, "violawake_sdk.VoicePipeline.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 232, "bases": 0, "doc": 195}, "violawake_sdk.VoicePipeline.on_command": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 63}, "violawake_sdk.VoicePipeline.run": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 36}, "violawake_sdk.VoicePipeline.stop": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 32, "bases": 0, "doc": 14}, "violawake_sdk.VoicePipeline.close": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 11}, "violawake_sdk.VoicePipeline.speak": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 14}, "violawake_sdk.ViolaWakeError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 10}, "violawake_sdk.ModelNotFoundError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 36}, "violawake_sdk.AudioCaptureError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 29}, "violawake_sdk.ModelLoadError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 27}, "violawake_sdk.PipelineError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 11}, "violawake_sdk.VADBackendError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 23}, "violawake_sdk.list_models": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 65}, "violawake_sdk.list_voices": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 67}}, "length": 135, "save": true}, "index": {"qualname": {"root": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 12, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 12}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 12}}}, "s": {"docs": {"violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 1}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}}, "df": 2, "s": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {"violawake_sdk.FusionStrategy.MAX": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}}, "df": 1}, "n": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 5}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}, "n": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.forced_language": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 2, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}}, "df": 15}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}}, "df": 11}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 1}}, "d": {"docs": {"violawake_sdk.TTSEngine.speed": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 4, "s": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 2}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}}, "df": 2}}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}}, "df": 14}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 7}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.TTSEngine.play_async": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 10}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 2}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}}, "df": 5}}}}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.voice": {"tf": 1}, "violawake_sdk.TTSEngine.speed": {"tf": 1}, "violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}}, "df": 10}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 3}}}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}}, "df": 2, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}}, "df": 7}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 1, "r": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 4}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}}, "df": 7}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PipelineError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}}, "df": 7}}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VADBackendError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.FusionStrategy.VOTING": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.voice": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 7}}}}}}}}, "s": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}}, "df": 3}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 3, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}}, "df": 7}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}}, "df": 5}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 4}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 7}}}}, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.backend_name": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}}, "df": 8}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 4}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}, "fullname": {"root": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 12, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.voice": {"tf": 1}, "violawake_sdk.TTSEngine.speed": {"tf": 1}, "violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 135, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}}, "df": 7}}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VADBackendError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.FusionStrategy.VOTING": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.voice": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 7}}}}}}}}, "s": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 2, "d": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.voice": {"tf": 1}, "violawake_sdk.TTSEngine.speed": {"tf": 1}, "violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 134}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}}, "df": 15}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}}, "df": 11}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 1}}, "d": {"docs": {"violawake_sdk.TTSEngine.speed": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 4, "s": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 2}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}}, "df": 2}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 12}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 12}}}, "s": {"docs": {"violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 1}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.model_name": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}}, "df": 2, "s": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {"violawake_sdk.FusionStrategy.MAX": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}}, "df": 1}, "n": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 5}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}, "n": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.forced_language": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}}, "df": 14}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 7}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.TTSEngine.play_async": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 10}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 2}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.WakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}}, "df": 5}}}}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.voice": {"tf": 1}, "violawake_sdk.TTSEngine.speed": {"tf": 1}, "violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}}, "df": 10}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 3}}}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}}, "df": 2, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}}, "df": 7}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.STTEngine.model_name": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 1, "r": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 4}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}}, "df": 7}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PipelineError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}}, "df": 3}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 3, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}}, "df": 7}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}}, "df": 5}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 4}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 7}}}}, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.backend_name": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}}, "df": 8}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 4}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.forced_language": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}, "annotation": {"root": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 29, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}}, "df": 1}}}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}}, "df": 6}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 4}}}}}}}}}, "s": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 4}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 7}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.ConfidenceResult.confidence": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.power_manager": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 6}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1}}, "df": 3}}}}}}}}}}}}}, "default_value": {"root": {"0": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1.4142135623730951}}, "df": 2}, "1": {"6": {"0": {"0": {"0": {"docs": {"violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.DetectorConfig.confirm_count": {"tf": 1}}, "df": 1}, "2": {"docs": {"violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1}}, "df": 1}, "5": {"0": {"docs": {"violawake_sdk.DetectorConfig.score_history_size": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1.4142135623730951}}, "df": 12, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.models": {"tf": 1}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1}}, "df": 6}}}}, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 9}, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceLevel.LOW": {"tf": 1.4142135623730951}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 5}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}, "x": {"2": {"7": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1.4142135623730951}}, "df": 12}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "g": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1}}, "df": 9}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.ConfidenceLevel.LOW": {"tf": 1}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1}}, "df": 4}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {"violawake_sdk.StreamingSTTEngine.device": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "x": {"docs": {"violawake_sdk.FusionStrategy.MAX": {"tf": 1.4142135623730951}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.FusionStrategy.VOTING": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.model": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"8": {"docs": {"violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}}, "signature": {"root": {"0": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 2.6457513110645907}, "violawake_sdk.PowerManager.__init__": {"tf": 2}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 12}, "1": {"0": {"0": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1}, "docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}, "6": {"0": {"0": {"0": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 4}, "2": {"0": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}, "docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 4}, "3": {"9": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.build": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 2}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 2.449489742783178}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 2.449489742783178}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2.8284271247461903}}, "df": 9}, "docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1.7320508075688772}}, "df": 2}, "4": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}, "5": {"0": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 2}, "docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 4}, "6": {"0": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 2}, "docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1.4142135623730951}}, "df": 1}, "8": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 5}, "9": {"5": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 15.198684153570664}, "violawake_sdk.DetectorConfig.build": {"tf": 7}, "violawake_sdk.WakeDetector.__init__": {"tf": 20.29778313018444}, "violawake_sdk.WakeDetector.close": {"tf": 3.4641016151377544}, "violawake_sdk.WakeDetector.process": {"tf": 5.385164807134504}, "violawake_sdk.WakeDetector.detect": {"tf": 6.782329983125268}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 3.4641016151377544}, "violawake_sdk.WakeDetector.reset": {"tf": 3.4641016151377544}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 4.47213595499958}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 6.48074069840786}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 6.244997998398398}, "violawake_sdk.WakeDetector.from_source": {"tf": 9.848857801796104}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 6.782329983125268}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 3.7416573867739413}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 6.782329983125268}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 5.385164807134504}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 6.4031242374328485}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 3.4641016151377544}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 4.47213595499958}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 3.4641016151377544}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 7}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 6.928203230275509}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 3.4641016151377544}, "violawake_sdk.validate_audio_chunk": {"tf": 5.385164807134504}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 8.306623862918075}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 10.44030650891055}, "violawake_sdk.NoiseProfiler.update": {"tf": 4.898979485566356}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 4.47213595499958}, "violawake_sdk.NoiseProfiler.reset": {"tf": 3.4641016151377544}, "violawake_sdk.PowerManager.__init__": {"tf": 10.44030650891055}, "violawake_sdk.PowerManager.should_process": {"tf": 4.898979485566356}, "violawake_sdk.PowerManager.report_score": {"tf": 4.47213595499958}, "violawake_sdk.PowerManager.get_state": {"tf": 4.47213595499958}, "violawake_sdk.PowerManager.reset": {"tf": 3.4641016151377544}, "violawake_sdk.VADEngine.__init__": {"tf": 7.681145747868608}, "violawake_sdk.VADEngine.process_frame": {"tf": 5.385164807134504}, "violawake_sdk.VADEngine.is_speech": {"tf": 6.557438524302}, "violawake_sdk.VADEngine.reset": {"tf": 3.4641016151377544}, "violawake_sdk.VADEngine.close": {"tf": 3.4641016151377544}, "violawake_sdk.TTSEngine.__init__": {"tf": 7.14142842854285}, "violawake_sdk.TTSEngine.synthesize": {"tf": 4.898979485566356}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 6.244997998398398}, "violawake_sdk.TTSEngine.play": {"tf": 6.557438524302}, "violawake_sdk.TTSEngine.play_async": {"tf": 4.898979485566356}, "violawake_sdk.TTSEngine.close": {"tf": 3.4641016151377544}, "violawake_sdk.STTEngine.__init__": {"tf": 9.486832980505138}, "violawake_sdk.STTEngine.transcribe": {"tf": 4.898979485566356}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 10.677078252031311}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 7.3484692283495345}, "violawake_sdk.STTEngine.prewarm": {"tf": 3.4641016151377544}, "violawake_sdk.STTEngine.close": {"tf": 3.4641016151377544}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 10.954451150103322}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 6.6332495807108}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 5}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 3.4641016151377544}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 3.4641016151377544}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 3.4641016151377544}, "violawake_sdk.VoicePipeline.__init__": {"tf": 13.379088160259652}, "violawake_sdk.VoicePipeline.on_command": {"tf": 7.211102550927978}, "violawake_sdk.VoicePipeline.run": {"tf": 3.4641016151377544}, "violawake_sdk.VoicePipeline.stop": {"tf": 5.0990195135927845}, "violawake_sdk.VoicePipeline.close": {"tf": 3.4641016151377544}, "violawake_sdk.VoicePipeline.speak": {"tf": 4.47213595499958}, "violawake_sdk.list_models": {"tf": 4.69041575982343}, "violawake_sdk.list_voices": {"tf": 3.7416573867739413}}, "df": 65, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 6, "s": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 3}}}}}, "x": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 6}}}, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 3}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 3}, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}}}}}}, "s": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 2.23606797749979}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 2}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 2}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2}, "violawake_sdk.VoicePipeline.on_command": {"tf": 2}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1.4142135623730951}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 17, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 5}}, "d": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 2}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 15}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 4, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 5}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 3}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 49}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}}, "df": 2, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1.4142135623730951}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 3.1622776601683795}, "violawake_sdk.WakeDetector.__init__": {"tf": 3}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 2}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 2}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2.23606797749979}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 33}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 4, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 1, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 21}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 21}}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 2.6457513110645907}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 2}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 20}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 5}}}}, "n": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 7, "s": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 2}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 15}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 2, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 16, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 3}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 2}}}}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 4, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 1}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.__init__": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 8}}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 3}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}, "t": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 1}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 12}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 12}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 3}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 3, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 2}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}}, "df": 4}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.4142135623730951}}, "df": 3}}, "g": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 1}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.4142135623730951}}, "df": 3, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}}, "df": 2}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}}, "df": 3}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 3}}, "l": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"8": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}, "docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 3}, "d": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 3}}}}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}}}, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 4}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.__init__": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 3, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}, "b": {"docs": {"violawake_sdk.NoiseProfiler.__init__": {"tf": 1.4142135623730951}}, "df": 1}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.__init__": {"tf": 4.242640687119285}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}, "n": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.PowerManager.__init__": {"tf": 1}}, "df": 3}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ConfidenceResult.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 3}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy": {"tf": 1.4142135623730951}}, "df": 2}}}, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 5}}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}}}, "doc": {"root": {"0": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 2.8284271247461903}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler": {"tf": 2.23606797749979}, "violawake_sdk.PowerManager": {"tf": 2}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 2.8284271247461903}, "violawake_sdk.TTSEngine": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 3.3166247903554}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 2.6457513110645907}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.449489742783178}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 15, "\u2013": {"3": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}, "1": {"0": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 2, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}, "6": {"0": {"0": {"0": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "z": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 6}}}}, "docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 2}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 11, "f": {"docs": {}, "df": 0, "}": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 2}}}}, "2": {"0": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 2, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}}, "df": 5}}, "s": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}, "4": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "z": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1}}}}, "8": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}, "docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 2}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 8}, "3": {"2": {"0": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}, "6": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}, "7": {"6": {"8": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "8": {"0": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}}, "df": 3, "s": {"docs": {"violawake_sdk.STTEngine": {"tf": 1.4142135623730951}}, "df": 1}}, "4": {"8": {"0": {"0": {"0": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4}, "5": {"0": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}, "docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}}, "df": 2}, "6": {"0": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 2}, "4": {"0": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}, "7": {"0": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "8": {"0": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 5}, "2": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}}, "df": 2}}, "5": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}, "9": {"0": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "5": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}, "docs": {"violawake": {"tf": 2.6457513110645907}, "violawake_sdk": {"tf": 6.244997998398398}, "violawake_sdk.DetectorConfig": {"tf": 8.602325267042627}, "violawake_sdk.DetectorConfig.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.models": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.fusion_strategy": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.fusion_weights": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.adaptive_threshold": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.noise_profiler": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.speaker_verify_fn": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.power_manager": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.confirm_count": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.score_history_size": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig.build": {"tf": 6.324555320336759}, "violawake_sdk.WakeDetector": {"tf": 13.601470508735444}, "violawake_sdk.WakeDetector.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.threshold": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.close": {"tf": 2.449489742783178}, "violawake_sdk.WakeDetector.process": {"tf": 5}, "violawake_sdk.WakeDetector.detect": {"tf": 5}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.reset": {"tf": 2.449489742783178}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 2.449489742783178}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 6.782329983125268}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 5.830951894845301}, "violawake_sdk.WakeDetector.from_source": {"tf": 7}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector": {"tf": 5.291502622129181}, "violawake_sdk.AsyncWakeDetector.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 2.23606797749979}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 2.23606797749979}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 5.5677643628300215}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 2.449489742783178}, "violawake_sdk.WakeDecisionPolicy": {"tf": 3.1622776601683795}, "violawake_sdk.WakeDecisionPolicy.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.threshold": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.cooldown_s": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.rms_floor": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1.7320508075688772}, "violawake_sdk.validate_audio_chunk": {"tf": 6.48074069840786}, "violawake_sdk.ConfidenceResult": {"tf": 5.830951894845301}, "violawake_sdk.ConfidenceResult.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult.raw_score": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult.confirm_count": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult.confirm_required": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult.confidence": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult.score_history": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel.LOW": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel.MEDIUM": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel.HIGH": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel.CERTAIN": {"tf": 1.7320508075688772}, "violawake_sdk.FusionStrategy": {"tf": 1.7320508075688772}, "violawake_sdk.FusionStrategy.AVERAGE": {"tf": 1.7320508075688772}, "violawake_sdk.FusionStrategy.MAX": {"tf": 1.7320508075688772}, "violawake_sdk.FusionStrategy.VOTING": {"tf": 1.7320508075688772}, "violawake_sdk.FusionStrategy.WEIGHTED_AVERAGE": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler": {"tf": 9.539392014169456}, "violawake_sdk.NoiseProfiler.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.update": {"tf": 5.196152422706632}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 3.4641016151377544}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager": {"tf": 8.831760866327848}, "violawake_sdk.PowerManager.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.should_process": {"tf": 5.0990195135927845}, "violawake_sdk.PowerManager.report_score": {"tf": 4.358898943540674}, "violawake_sdk.PowerManager.get_state": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.reset": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine": {"tf": 3.7416573867739413}, "violawake_sdk.VADEngine.__init__": {"tf": 4.47213595499958}, "violawake_sdk.VADEngine.backend_name": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine.process_frame": {"tf": 5.916079783099616}, "violawake_sdk.VADEngine.is_speech": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine.reset": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine.close": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine": {"tf": 5.916079783099616}, "violawake_sdk.TTSEngine.__init__": {"tf": 5.0990195135927845}, "violawake_sdk.TTSEngine.voice": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.speed": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.sample_rate": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.synthesize": {"tf": 5}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 5.196152422706632}, "violawake_sdk.TTSEngine.play": {"tf": 4.358898943540674}, "violawake_sdk.TTSEngine.play_async": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.close": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine": {"tf": 4.69041575982343}, "violawake_sdk.STTEngine.__init__": {"tf": 5.916079783099616}, "violawake_sdk.STTEngine.model_name": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.device": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.compute_type": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.forced_language": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 6.082762530298219}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 9.643650760992955}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 5.916079783099616}, "violawake_sdk.STTEngine.prewarm": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.close": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 11.135528725660043}, "violawake_sdk.StreamingSTTEngine.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.model": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.device": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.compute_type": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.language": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.min_buffer_seconds": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.stride_seconds": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.sample_rate": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 5.744562646538029}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 4}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline": {"tf": 10.344080432788601}, "violawake_sdk.VoicePipeline.__init__": {"tf": 7.874007874011811}, "violawake_sdk.VoicePipeline.on_command": {"tf": 3.7416573867739413}, "violawake_sdk.VoicePipeline.run": {"tf": 4.123105625617661}, "violawake_sdk.VoicePipeline.stop": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.close": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.speak": {"tf": 1.7320508075688772}, "violawake_sdk.ViolaWakeError": {"tf": 1.7320508075688772}, "violawake_sdk.ModelNotFoundError": {"tf": 3}, "violawake_sdk.AudioCaptureError": {"tf": 2.449489742783178}, "violawake_sdk.ModelLoadError": {"tf": 2.449489742783178}, "violawake_sdk.PipelineError": {"tf": 1.7320508075688772}, "violawake_sdk.VADBackendError": {"tf": 2.449489742783178}, "violawake_sdk.list_models": {"tf": 4.69041575982343}, "violawake_sdk.list_voices": {"tf": 4.47213595499958}}, "df": 135, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.build": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 4}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 5}}}}}, "r": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}}, "df": 3, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 6}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceLevel": {"tf": 1}}, "df": 6}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": null}, "violawake_sdk.DetectorConfig.build": {"tf": null}, "violawake_sdk.AsyncWakeDetector": {"tf": null}}, "df": 3}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.PowerManager.reset": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 8}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 2}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {"violawake_sdk.STTEngine.prewarm": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.23606797749979}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.7320508075688772}}, "df": 4, "s": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 2}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ConfidenceLevel": {"tf": 1}}, "df": 1}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 2}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}}, "df": 11}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 8, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 3}}, "s": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}}, "df": 2}}}, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 3}}}, "e": {"docs": {"violawake_sdk.PowerManager": {"tf": 2}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 4, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"2": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}}}}}}, "l": {"docs": {}, "df": 0, "+": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 12, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {"violawake": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 5}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1.7320508075688772}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "k": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.ViolaWakeError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 5}}, "o": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.7320508075688772}}, "df": 4, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}}, "df": 2, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}}, "df": 4, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.FusionStrategy": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 2}}, "df": 1}}}}, "t": {"docs": {"violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 6, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 6, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2.23606797749979}}, "df": 13, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 3}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 2.23606797749979}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 7, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 2}}}}}}}}}}}, "y": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 12}}, "d": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}}, "df": 1}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}}, "df": 1}}, "c": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 3}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 3}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 2.23606797749979}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 4, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}}, "df": 1}}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 8}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 3}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 4}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.process": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult": {"tf": 2}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 2}}, "df": 12, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 2, "d": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 2}, "l": {"docs": {}, "df": 0, "f": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}, "s": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 2.449489742783178}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 3}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 8}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}}}, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}}, "df": 1, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.449489742783178}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 2.23606797749979}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 6}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}}, "df": 6}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 3}}}}}}, "n": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 2.449489742783178}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 2}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 2}}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 4, "d": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 4}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}}, "df": 1}}}}}}}}}}, "n": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 21, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 3}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.close": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}}, "df": 5}}}}}}, "o": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "t": {"1": {"6": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 2.23606797749979}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 6}, "docs": {}, "df": 0}, "8": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}}, "df": 4}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 2, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 5}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 2}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 19}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 2}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 2.23606797749979}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 28}, "d": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2.23606797749979}}, "df": 2, "\u2192": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "t": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 8, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}}}}}}}, "v": {"1": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}}, "df": 1}, "3": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake": {"tf": 1.4142135623730951}, "violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 7}}}}}}}, "a": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 9}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 7, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}}, "df": 3}}}}}}}}, "s": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1.4142135623730951}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 3}}}}}, "s": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 5}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1.4142135623730951}}, "df": 4}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 4}}}}}}}}}, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 2}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 4}}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"violawake": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 3}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 2}}}, "d": {"docs": {"violawake_sdk": {"tf": 2}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2}, "violawake_sdk.list_models": {"tf": 1}}, "df": 8, "s": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 2}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2.23606797749979}, "violawake_sdk.list_models": {"tf": 1}}, "df": 9, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig": {"tf": 2}, "violawake_sdk.DetectorConfig.build": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 11}}}}}}}}, "\u2192": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "\u2192": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "\u2192": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}}, "df": 3, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.VADBackendError": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 7, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 2.23606797749979}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 13}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1.4142135623730951}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 19, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}}, "df": 6}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 11}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 2}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.6457513110645907}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2.449489742783178}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 30, "s": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 14, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 2}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 6, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}}, "df": 10, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 32}, "y": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 4}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"violawake": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}, "l": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 9, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "i": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}}, "df": 3}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 2}}}}}}}}, "y": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.7320508075688772}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.update": {"tf": 2}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 2}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.6457513110645907}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1.4142135623730951}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 29, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 7, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}}, "df": 6, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}}, "j": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 3}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 4}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}}, "df": 5}}}, "e": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 6}}}, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 3}}}}}}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 7}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2, "s": {"docs": {"violawake_sdk.STTEngine.prewarm": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 10, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 2}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2.23606797749979}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 7}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 26}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 7, "s": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.7320508075688772}}, "df": 8}}, "f": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1.7320508075688772}}, "df": 4, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 5}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 4, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake": {"tf": 1}, "violawake_sdk": {"tf": 1.7320508075688772}, "violawake_sdk.DetectorConfig": {"tf": 2.23606797749979}, "violawake_sdk.WakeDetector": {"tf": 3}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1.7320508075688772}}, "df": 34, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}}, "df": 4}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 2}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 6}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 2}, "violawake_sdk.WakeDetector": {"tf": 2.23606797749979}, "violawake_sdk.FusionStrategy": {"tf": 1}}, "df": 3, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 10, "y": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 16}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 2}, "violawake_sdk.WakeDetector.detect": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 2}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 10, "s": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 7}}}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}, "t": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}}, "df": 6}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2.23606797749979}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "t": {"1": {"6": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "3": {"2": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}}, "df": 12, "/": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"6": {"4": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}, "docs": {}, "df": 0}, "6": {"4": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 4}}, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 13, "n": {"docs": {}, "df": 0, "x": {"docs": {"violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.ModelLoadError": {"tf": 1.4142135623730951}}, "df": 3, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}, "e": {"docs": {"violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 6}, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 2}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 20, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.23606797749979}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 22, "f": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}}, "df": 3, "s": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}}}}}}, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}}, "df": 4, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.detect": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceLevel": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}}, "df": 21, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 6, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 3}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 6}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.AudioCaptureError": {"tf": 1.4142135623730951}}, "df": 7, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2}, "violawake_sdk.PowerManager": {"tf": 2.6457513110645907}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.6457513110645907}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2.8284271247461903}}, "df": 14, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 2}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}, "d": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.list_models": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}}, "df": 1, "y": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}}, "df": 3}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}}, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 2.449489742783178}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 4}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.StreamingSTTEngine.buffer_duration_s": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}}}}}}}}, "c": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 2}}}}, "b": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 2.23606797749979}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 9, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}}, "df": 8, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 2}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.list_models": {"tf": 1}}, "df": 6}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 4}, "s": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}}, "df": 1}}, "s": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.process": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 7, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {"violawake_sdk.VADEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 3, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 2}}}}}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 4, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}}, "df": 3, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 3}, "d": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 2}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 6, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 4, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}, "c": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 3}, "t": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 8, "d": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 5}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 3.3166247903554}, "violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.__init__": {"tf": 2}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 7, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 2}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.23606797749979}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}}, "df": 6, "s": {"docs": {"violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 7}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VoicePipeline.stop": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 14, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 5}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager": {"tf": 2}}, "df": 3}}, "l": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 6}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 3}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}}, "df": 1}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 8, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}}, "df": 6, "/": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 2, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 4}}}, "s": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4, "n": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}}, "df": 5}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 7}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}}, "df": 2}}}}}}}}}, "x": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 9}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}}, "df": 2}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 3}}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 5}}}}, "d": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1}}, "df": 6}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}}, "df": 2}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}}, "df": 2}, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.PowerManager.effective_duty_cycle": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}}, "df": 2, "s": {"docs": {"violawake_sdk.ViolaWakeError": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 2}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 9}}, "e": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}, "s": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 4}, "s": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VADBackendError": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1.4142135623730951}, "violawake_sdk.ConfidenceResult": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 7}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 3, "s": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.7320508075688772}, "violawake_sdk.list_models": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 14, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 17}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 2}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 7}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}, "violawake_sdk.PowerManager.reset": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}}, "df": 8}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 3, "s": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.VADEngine.close": {"tf": 1}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.PowerManager.report_score": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 8, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 2}}}}}}}}}, "s": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 2}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.PowerManager.should_process": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 6}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 6}, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 6}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 4}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 2.23606797749979}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2.23606797749979}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1.4142135623730951}}, "df": 9, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 2}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 2.23606797749979}, "violawake_sdk.STTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 12, "s": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2.8284271247461903}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 2}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 36, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 2}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 2.6457513110645907}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 2.8284271247461903}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.AsyncWakeDetector.threshold": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 2}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 4.58257569495584}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2}}, "df": 19}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.VoicePipeline": {"tf": 3.1622776601683795}}, "df": 8, "s": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.TTSEngine.play": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 2.23606797749979}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 2}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.AsyncWakeDetector.reset_cooldown": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 3.605551275463989}, "violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 2.23606797749979}, "violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.TTSEngine.play_async": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2.449489742783178}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 3}, "violawake_sdk.VoicePipeline.__init__": {"tf": 2}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.run": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.stop": {"tf": 1}, "violawake_sdk.VoicePipeline.close": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1.4142135623730951}, "violawake_sdk.PipelineError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 56, "n": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}}, "df": 2}, "y": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 2}, "violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 13}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 5}, "n": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.PowerManager.should_process": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 6}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDecisionPolicy.evaluate": {"tf": 1}}, "df": 1}}, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 2}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}}, "df": 7}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 3}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 7, "d": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 3}, "s": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine.reset": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 2, "\u2192": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "\u2192": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 2}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 3}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 4, "s": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}}}, "k": {"2": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 6}, "3": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector": {"tf": 2}, "violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 3}, "4": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 4}, "5": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 4}, "6": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "7": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 4}, "docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 2.23606797749979}, "violawake_sdk.TTSEngine.__init__": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.VADEngine.__init__": {"tf": 1}}, "df": 5}}}}}, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.from_source": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"violawake_sdk.list_models": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 2, "o": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}, "violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 12, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1.7320508075688772}, "violawake_sdk.NoiseProfiler": {"tf": 3.1622776601683795}, "violawake_sdk.NoiseProfiler.noise_floor": {"tf": 1}, "violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.NoiseProfiler.get_profile": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}}, "df": 8, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.get_profile": {"tf": 1}}, "df": 1, "r": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 3}}}}}}}}}, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 11, "e": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1, "d": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.7320508075688772}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}}, "df": 1}}}, "w": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3}, "a": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 4}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 2}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.TTSEngine.play": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 8}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VADEngine.backend_name": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1.4142135623730951}}, "df": 8, "s": {"docs": {"violawake_sdk.list_voices": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 5}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}}, "df": 1}}, "p": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 4}}, "m": {"docs": {"violawake_sdk.list_models": {"tf": 1.7320508075688772}}, "df": 1, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.PowerManager.get_state": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 6}}}}, "r": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1.4142135623730951}}, "df": 5}}}}}, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 7}, "l": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.WakeDetector.verify_speaker": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}, "x": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}}, "df": 1, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}}, "df": 9, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.AsyncWakeDetector.close": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}}, "df": 2}}}, "y": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.4142135623730951}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 5, "l": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.DetectorConfig": {"tf": 2.449489742783178}, "violawake_sdk.DetectorConfig.build": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDetector": {"tf": 2.449489742783178}, "violawake_sdk.WakeDetector.from_source": {"tf": 1.4142135623730951}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.FusionStrategy": {"tf": 1}, "violawake_sdk.PowerManager.report_score": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 2}, "violawake_sdk.TTSEngine.close": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 2}, "violawake_sdk.STTEngine.__init__": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.STTEngine.close": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.close": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1.7320508075688772}, "violawake_sdk.ModelNotFoundError": {"tf": 1.7320508075688772}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 22, "s": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.list_models": {"tf": 1.7320508075688772}}, "df": 4}}, "s": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}}, "df": 3}}, "n": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 5}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}}, "df": 3}}}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.7320508075688772}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 3, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.DetectorConfig.build": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.from_source": {"tf": 1}, "violawake_sdk.VADEngine.is_speech": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 5, "s": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}}}, "n": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.get_confidence": {"tf": 1}}, "df": 2, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.list_models": {"tf": 1.4142135623730951}, "violawake_sdk.list_voices": {"tf": 1.4142135623730951}}, "df": 4, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 2, "\u2192": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.validate_audio_chunk": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.WakeDecisionPolicy": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 6}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 2, "r": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}}, "df": 1}}}}, "z": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.STTEngine.transcribe": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4}}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 2.23606797749979}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk.WakeDetector.process": {"tf": 1}, "violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1.7320508075688772}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}}, "df": 6}}, "w": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1.7320508075688772}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 3, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"violawake_sdk.AsyncWakeDetector": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1.7320508075688772}}, "df": 2}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.STTEngine.prewarm": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine": {"tf": 1}, "violawake_sdk.ModelLoadError": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.TTSEngine.synthesize": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}, "t": {"docs": {"violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDetector.get_confidence": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}, "violawake_sdk.PowerManager": {"tf": 1}}, "df": 3}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1.4142135623730951}, "violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 2}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"violawake_sdk": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.reset": {"tf": 1}, "violawake_sdk.WakeDetector.last_scores": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.last_scores": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler": {"tf": 1.4142135623730951}, "violawake_sdk.NoiseProfiler.reset": {"tf": 1}}, "df": 8}}}}}, "g": {"docs": {}, "df": 0, "h": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.WakeDetector.detect": {"tf": 1}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}}, "df": 2, "r": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.speak": {"tf": 1}}, "df": 3}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"violawake_sdk.PowerManager": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.TTSEngine.__init__": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 4}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"violawake_sdk.STTEngine.transcribe_full": {"tf": 1}, "violawake_sdk.VADBackendError": {"tf": 1}}, "df": 2}}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3}}}, "e": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1.4142135623730951}, "violawake_sdk.validate_audio_chunk": {"tf": 1}, "violawake_sdk.VADEngine.process_frame": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}, "violawake_sdk.AudioCaptureError": {"tf": 1}, "violawake_sdk.list_voices": {"tf": 1}}, "df": 8, "r": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}, "violawake_sdk.WakeDetector": {"tf": 1}}, "df": 2}}, "d": {"docs": {"violawake_sdk.WakeDetector.close": {"tf": 1}}, "df": 1}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.WakeDecisionPolicy.reset_cooldown": {"tf": 1}, "violawake_sdk.VADEngine.reset": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 3}}}, "s": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.WakeDetector.close": {"tf": 1}, "violawake_sdk.TTSEngine": {"tf": 1}}, "df": 3}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector.enroll_speaker": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.NoiseProfiler.base_threshold": {"tf": 1}}, "df": 1}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VADBackendError": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.StreamingSTTEngine.prewarm": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.VoicePipeline.run": {"tf": 1}, "violawake_sdk.PipelineError": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "p": {"docs": {"violawake_sdk.STTEngine.transcribe": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.NoiseProfiler.update": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"violawake_sdk.VADEngine.reset": {"tf": 1}}, "df": 1}}}}}}}}}}, "j": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.DetectorConfig": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {"violawake_sdk.NoiseProfiler": {"tf": 1}, "violawake_sdk.STTEngine.__init__": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_full": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}, "violawake_sdk.ConfidenceResult": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}}, "df": 3}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 2}}, "s": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1.4142135623730951}}, "df": 1}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.TTSEngine": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 2.449489742783178}}, "df": 1}}}, "t": {"docs": {"violawake_sdk.VADEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}, "violawake_sdk.VoicePipeline.on_command": {"tf": 1}, "violawake_sdk.ModelNotFoundError": {"tf": 1}, "violawake_sdk.list_models": {"tf": 2.449489742783178}, "violawake_sdk.list_voices": {"tf": 2.449489742783178}}, "df": 6}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.__init__": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"violawake_sdk.ModelNotFoundError": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1}, "violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 3, "r": {"docs": {"violawake_sdk.WakeDetector": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"violawake_sdk.WakeDetector.stream_mic": {"tf": 1}, "violawake_sdk.AsyncWakeDetector.stream": {"tf": 1.4142135623730951}, "violawake_sdk.TTSEngine.synthesize_chunked": {"tf": 1.4142135623730951}, "violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine": {"tf": 1.4142135623730951}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.flush": {"tf": 1}}, "df": 7}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"violawake_sdk.AsyncWakeDetector.stream": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"violawake_sdk.STTEngine.transcribe_streaming": {"tf": 1}, "violawake_sdk.StreamingSTTEngine.push_chunk": {"tf": 1.4142135623730951}, "violawake_sdk.VoicePipeline.__init__": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"violawake_sdk.VoicePipeline": {"tf": 1}}, "df": 1}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"violawake_sdk.WakeDecisionPolicy": {"tf": 1}}, "df": 1}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
tests\unit\test_stt_tts_engines.py:            duration_s=1.5,
tests\unit\test_stt_tts_engines.py:        assert result.duration_s == 1.5
console\tests\e2e\test_api_flow.py:                    data={"wake_word": "goldentest"},
console\tests\e2e\test_api_flow.py:                "wake_word": "goldentest",
console\tests\e2e\test_api_flow.py:            m.get("wake_word") == "goldentest" or m.get("id") == model_id
tests\unit\test_stt_engine_wav.py:    duration_samples = sample_rate  # 1 second
tests\unit\test_stt_engine_wav.py:    audio = np.zeros(duration_samples, dtype=np.int16)
tests\unit\test_stt_engine.py:    assert result.duration_s == 1.0
experiments\exp_a_perframe.py:    neg_duration_sec: float = 1.5,
experiments\exp_a_perframe.py:    total_neg_hours = len(neg) * neg_duration_sec / 3600.0
experiments\exp_f_policy_on_d.py:    neg_duration_sec: float = 1.5,
experiments\exp_f_policy_on_d.py:    total_neg_hours = len(neg) * neg_duration_sec / 3600.0
experiments\faph_temporal_cnn_testclean.py:        duration_s = len(audio) / SAMPLE_RATE
experiments\faph_temporal_cnn_testclean.py:        total_seconds += duration_s
experiments\faph_temporal_cnn_testclean.py:                            triggers[key].append(total_seconds - duration_s + idx * 0.16)
tests\unit\test_benchmark.py:            "duration_s": 5.0,
tests\unit\test_benchmark.py:            "duration_s": 5.0, "frames_processed": 10000,
tests\unit\test_benchmark.py:            "duration_s": 5.0, "frames_processed": 200,
tests\unit\test_benchmark.py:            "duration_s": 5.0, "frames_processed": 800,
README.md:- `StreamingSTTEngine` -- `.push_chunk()`, `.flush()`, `.reset()`, `.prewarm()`, `.buffer_duration_s`
experiments\real_speech_eval.json:        "file": "viola_00001.wav",
experiments\real_speech_eval.json:        "file": "viola_0001.wav",
experiments\real_speech_eval.json:          "file": "adv_violet_00001.wav",
scripts\verify_models.py:        "duration_s": 0.0,
scripts\verify_models.py:        result["duration_s"] = round(time.monotonic() - started, 2)
scripts\verify_models.py:        result["duration_s"] = round(time.monotonic() - started, 2)
scripts\verify_models.py:            result["duration_s"] = round(time.monotonic() - started, 2)
scripts\verify_models.py:    result["duration_s"] = round(time.monotonic() - started, 2)
console\frontend\src\types.ts:  duration_s: number;
console\frontend\src\types.ts:  duration_s: number;
src\violawake_sdk\pipeline.py:            duration_s = total_frames * FRAME_SAMPLES / SAMPLE_RATE
src\violawake_sdk\pipeline.py:            self._emit("listen_end", duration_s=duration_s, frame_count=total_frames)
src\violawake_sdk\pipeline.py:            self._emit("transcribe_start", duration_s=duration_s, frame_count=total_frames)
src\violawake_sdk\stt.py:    duration_s: float
src\violawake_sdk\stt.py:            duration_s=info.duration,
src\violawake_sdk\stt.py:    def buffer_duration_s(self) -> float:
src\violawake_sdk\stt.py:        logger.debug("StreamingSTTEngine.flush: %.2f s buffered", self.buffer_duration_s)
tests\live\conftest.py:    duration_s: float = 0.75,
tests\live\conftest.py:    sample_count = int(duration_s * sample_rate)
tests\live\conftest.py:        t = np.linspace(0, duration_s, sample_count, endpoint=False)
tests\live\test_live_api.py:    wav_bytes = make_wav_bytes(duration_s=0.75, frequency_hz=440.0)
tests\integration\test_streaming_stt.py:        assert engine.buffer_duration_s == pytest.approx(0.0)
tests\integration\test_streaming_stt.py:        assert engine.buffer_duration_s == pytest.approx(0.25, abs=0.01)
tests\integration\test_streaming_stt.py:        assert engine.buffer_duration_s == pytest.approx(0.0)
tests\integration\test_streaming_stt.py:    # --- buffer_duration_s property ---
tests\integration\test_streaming_stt.py:        assert engine.buffer_duration_s == pytest.approx(1.0, abs=0.01)
tests\integration\test_full_pipeline.py:def make_tone_bytes(freq: float = 440.0, duration_s: float = 0.02, amplitude: int = 10000) -> bytes:
tests\integration\test_full_pipeline.py:    n_samples = int(SAMPLE_RATE * duration_s)
tests\integration\test_full_pipeline.py:    t = np.linspace(0, duration_s, n_samples, endpoint=False)
tests\integration\test_full_pipeline.py:def make_noise_bytes(duration_s: float = 0.02, rms: int = 5000, seed: int = 42) -> bytes:
tests\integration\test_full_pipeline.py:    n_samples = int(SAMPLE_RATE * duration_s)
tests\integration\test_full_pipeline.py:def make_silence_bytes(duration_s: float = 0.02) -> bytes:
tests\integration\test_full_pipeline.py:    n_samples = int(SAMPLE_RATE * duration_s)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:        silence = make_silence_bytes(duration_s=0.02)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:            frame = make_noise_bytes(duration_s=0.02, rms=5000, seed=99)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:        noise2 = make_noise_bytes(duration_s=0.02, rms=5000, seed=123)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:            frame = make_noise_bytes(duration_s=0.02, rms=3000)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:        bytes_frame = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
tests\integration\test_full_pipeline.py:        noise2 = make_noise_bytes(duration_s=0.02, rms=5000, seed=99)
tests\integration\test_feature_completeness.py:def _make_silence_wav(path: Path, duration_s: float = 0.5, sr: int = 16000) -> Path:
tests\integration\test_feature_completeness.py:    n_samples = int(sr * duration_s)
tests\integration\test_feature_completeness.py:        wav_path = _make_silence_wav(tmp_path / "test.wav", duration_s=0.1)
tests\integration\test_feature_completeness.py:        wav_path = _make_silence_wav(tmp_path / "short.wav", duration_s=0.01)
tests\integration\test_feature_completeness.py:        assert "duration_s" in fields
tests\integration\test_feature_completeness.py:        """StreamingSTTEngine.buffer_duration_s property exists."""
tests\integration\test_feature_completeness.py:        assert "buffer_duration_s" in dir(StreamingSTTEngine)
tests\golden_path_test.py:WAKE_WORD = "big chungus"
src\violawake_sdk\tools\train.py:            "training_duration_s": round(training_duration, 2),
src\violawake_sdk\tools\train.py:            "training_duration_s": round(training_duration, 2),

 succeeded in 658ms:
LOCAL_AGG
{'job': 16, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:55:52.797470', 'last_rec_created': '2026-03-28 20:55:53.026223'}
{'job': 17, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:56:14.845822', 'last_rec_created': '2026-03-28 20:56:15.086627'}
{'job': 19, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:33.639113', 'last_rec_created': '2026-03-28 21:25:33.885433'}
{'job': 20, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:59.736125', 'last_rec_created': '2026-03-28 21:26:00.047898'}
{'job': 21, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:26:03.406974', 'last_rec_created': '2026-03-28 21:26:03.738250'}
{'job': 22, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:28:32.531173', 'last_rec_created': '2026-03-28 21:28:32.928164'}
{'job': 23, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:29:06.396466', 'last_rec_created': '2026-03-28 21:29:06.655861'}
{'job': 24, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:31:38.526593', 'last_rec_created': '2026-03-28 21:31:38.857718'}
{'job': 25, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:32:06.092501', 'last_rec_created': '2026-03-28 21:32:06.386686'}
{'job': 26, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:28.321214', 'last_rec_created': '2026-03-28 21:36:28.611172'}
{'job': 27, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:57.264977', 'last_rec_created': '2026-03-28 21:36:57.577981'}
{'job': 28, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:37:54.842747', 'last_rec_created': '2026-03-28 21:37:55.136038'}
{'job': 29, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:38:31.977563', 'last_rec_created': '2026-03-28 21:38:32.320436'}
{'job': 30, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:55:41.339140', 'last_rec_created': '2026-03-28 21:55:41.575199'}
{'job': 31, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:56:03.850067', 'last_rec_created': '2026-03-28 21:56:04.069060'}
{'job': 32, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0001.wav', 'last_name': 'big chungus_0010.wav', 'min_dur': 2.136, 'max_dur': 2.415, 'unique_durations': 4, 'first_rec_created': '2026-03-29 00:03:12.392839', 'last_rec_created': '2026-03-29 00:03:12.542630'}
{'job': 34, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0011.wav', 'last_name': 'big chungus_0020.wav', 'min_dur': 2.415, 'max_dur': 2.972, 'unique_durations': 5, 'first_rec_created': '2026-03-29 22:51:43.475158', 'last_rec_created': '2026-03-29 22:51:43.655265'}

2026-05-07T16:09:20.242307Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.8 seconds
Output:
LOC container
{'job': 16, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:55:52.797470', 'last_rec_created': '2026-03-28 20:55:53.026223'}
{'job': 17, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:56:14.845822', 'last_rec_created': '2026-03-28 20:56:15.086627'}
{'job': 19, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:33.639113', 'last_rec_created': '2026-03-28 21:25:33.885433'}
{'job': 20, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:59.736125', 'last_rec_created': '2026-03-28 21:26:00.047898'}
{'job': 21, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:26:03.406974', 'last_rec_created': '2026-03-28 21:26:03.738250'}
{'job': 22, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:28:32.531173', 'last_rec_created': '2026-03-28 21:28:32.928164'}
{'job': 23, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:29:06.396466', 'last_rec_created': '2026-03-28 21:29:06.655861'}
{'job': 24, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:31:38.526593', 'last_rec_created': '2026-03-28 21:31:38.857718'}
{'job': 25, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:32:06.092501', 'last_rec_created': '2026-03-28 21:32:06.386686'}
{'job': 26, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:28.321214', 'last_rec_created': '2026-03-28 21:36:28.611172'}
{'job': 27, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:57.264977', 'last_rec_created': '2026-03-28 21:36:57.577981'}
{'job': 28, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:37:54.842747', 'last_rec_created': '2026-03-28 21:37:55.136038'}
{'job': 29, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:38:31.977563', 'last_rec_created': '2026-03-28 21:38:32.320436'}
{'job': 30, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:55:41.339140', 'last_rec_created': '2026-03-28 21:55:41.575199'}
{'job': 31, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:56:03.850067', 'last_rec_created': '2026-03-28 21:56:04.069060'}
{'job': 32, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0001.wav', 'last_name': 'big chungus_0010.wav', 'min_dur': 2.136, 'max_dur': 2.415, 'unique_durations': 4, 'first_rec_created': '2026-03-29 00:03:12.392839', 'last_rec_created': '2026-03-29 00:03:12.542630'}
{'job': 34, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0011.wav', 'last_name': 'big chungus_0020.wav', 'min_dur': 2.415, 'max_dur': 2.972, 'unique_durations': 5, 'first_rec_created': '2026-03-29 22:51:43.475158', 'last_rec_created': '2026-03-29 22:51:43.655265'}
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
sqlite3.OperationalError: unable to open database file

 exited 1 in 758ms:
LOC container
{'job': 16, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:55:52.797470', 'last_rec_created': '2026-03-28 20:55:53.026223'}
{'job': 17, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 20:56:14.845822', 'last_rec_created': '2026-03-28 20:56:15.086627'}
{'job': 19, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:33.639113', 'last_rec_created': '2026-03-28 21:25:33.885433'}
{'job': 20, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:25:59.736125', 'last_rec_created': '2026-03-28 21:26:00.047898'}
{'job': 21, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:26:03.406974', 'last_rec_created': '2026-03-28 21:26:03.738250'}
{'job': 22, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:28:32.531173', 'last_rec_created': '2026-03-28 21:28:32.928164'}
{'job': 23, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:29:06.396466', 'last_rec_created': '2026-03-28 21:29:06.655861'}
{'job': 24, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:31:38.526593', 'last_rec_created': '2026-03-28 21:31:38.857718'}
{'job': 25, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:32:06.092501', 'last_rec_created': '2026-03-28 21:32:06.386686'}
{'job': 26, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:28.321214', 'last_rec_created': '2026-03-28 21:36:28.611172'}
{'job': 27, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:36:57.264977', 'last_rec_created': '2026-03-28 21:36:57.577981'}
{'job': 28, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:37:54.842747', 'last_rec_created': '2026-03-28 21:37:55.136038'}
{'job': 29, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:38:31.977563', 'last_rec_created': '2026-03-28 21:38:32.320436'}
{'job': 30, 'wake_word': 'traintest', 'n': 10, 'first_name': 'traintest_0001.wav', 'last_name': 'traintest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:55:41.339140', 'last_rec_created': '2026-03-28 21:55:41.575199'}
{'job': 31, 'wake_word': 'statustest', 'n': 10, 'first_name': 'statustest_0001.wav', 'last_name': 'statustest_0010.wav', 'min_dur': 1.5, 'max_dur': 1.5, 'unique_durations': 1, 'first_rec_created': '2026-03-28 21:56:03.850067', 'last_rec_created': '2026-03-28 21:56:04.069060'}
{'job': 32, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0001.wav', 'last_name': 'big chungus_0010.wav', 'min_dur': 2.136, 'max_dur': 2.415, 'unique_durations': 4, 'first_rec_created': '2026-03-29 00:03:12.392839', 'last_rec_created': '2026-03-29 00:03:12.542630'}
{'job': 34, 'wake_word': 'big chungus', 'n': 10, 'first_name': 'big chungus_0011.wav', 'last_name': 'big chungus_0020.wav', 'min_dur': 2.415, 'max_dur': 2.972, 'unique_durations': 5, 'first_rec_created': '2026-03-29 22:51:43.475158', 'last_rec_created': '2026-03-29 22:51:43.655265'}
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
sqlite3.OperationalError: unable to open database file

 succeeded in 789ms:

  console\tests\e2e\test_api_flow.py:231:                    headers={"Authorization": f"Bearer {auth_token}"},
  console\tests\e2e\test_api_flow.py:232:                    files={"file": (wav_path.name, f, "audio/wav")},
> console\tests\e2e\test_api_flow.py:233:                    data={"wake_word": "goldentest"},
  console\tests\e2e\test_api_flow.py:234:                    timeout=10,
  console\tests\e2e\test_api_flow.py:235:                )
  console\tests\e2e\test_api_flow.py:236:            assert resp.status_code == 200
  console\tests\e2e\test_api_flow.py:245:            headers={"Authorization": f"Bearer {auth_token}"},
  console\tests\e2e\test_api_flow.py:246:            json={
> console\tests\e2e\test_api_flow.py:247:                "wake_word": "goldentest",
  console\tests\e2e\test_api_flow.py:248:                "recording_ids": recording_ids,
  console\tests\e2e\test_api_flow.py:249:                "epochs": 5,  # Few epochs for fast test
  console\tests\e2e\test_api_flow.py:250:            },
  console\tests\e2e\test_api_flow.py:305:        models = resp.json()
  console\tests\e2e\test_api_flow.py:306:        assert any(
> console\tests\e2e\test_api_flow.py:307:            m.get("wake_word") == "goldentest" or m.get("id") == model_id
  console\tests\e2e\test_api_flow.py:308:            for m in models
  console\tests\e2e\test_api_flow.py:309:        )
  tests\integration\test_feature_completeness.py:67:
  tests\integration\test_feature_completeness.py:68:
> tests\integration\test_feature_completeness.py:69:def _make_silence_wav(path: Path, duration_s: float = 0.5, sr: int 
= 16000) -> Path:
  tests\integration\test_feature_completeness.py:70:    """Create a silent 16-bit mono WAV file for testing."""
> tests\integration\test_feature_completeness.py:71:    n_samples = int(sr * duration_s)
  tests\integration\test_feature_completeness.py:72:    with wave.open(str(path), "wb") as wf:
  tests\integration\test_feature_completeness.py:73:        wf.setnchannels(1)
  tests\integration\test_feature_completeness.py:74:        wf.setsampwidth(2)
  tests\integration\test_feature_completeness.py:332:        from violawake_sdk.audio_source import FileSource
  tests\integration\test_feature_completeness.py:333:
> tests\integration\test_feature_completeness.py:334:        wav_path = _make_silence_wav(tmp_path / "test.wav", 
duration_s=0.1)
  tests\integration\test_feature_completeness.py:335:        source = FileSource(wav_path)
  tests\integration\test_feature_completeness.py:336:        source.start()
  tests\integration\test_feature_completeness.py:337:        frame = source.read_frame()
  tests\integration\test_feature_completeness.py:346:        from violawake_sdk.audio_source import FileSource
  tests\integration\test_feature_completeness.py:347:
> tests\integration\test_feature_completeness.py:348:        wav_path = _make_silence_wav(tmp_path / "short.wav", 
duration_s=0.01)
  tests\integration\test_feature_completeness.py:349:        source = FileSource(wav_path)
  tests\integration\test_feature_completeness.py:350:        source.start()
  tests\integration\test_feature_completeness.py:351:        frames = []
  tests\integration\test_feature_completeness.py:848:        assert "language" in fields
  tests\integration\test_feature_completeness.py:849:        assert "language_prob" in fields
> tests\integration\test_feature_completeness.py:850:        assert "duration_s" in fields
  tests\integration\test_feature_completeness.py:851:        assert "no_speech_prob" in fields
  tests\integration\test_feature_completeness.py:852:
  tests\integration\test_feature_completeness.py:853:    def test_invalid_model_raises(self):
  tests\integration\test_feature_completeness.py:890:
  tests\integration\test_feature_completeness.py:891:    def test_has_buffer_duration(self):
> tests\integration\test_feature_completeness.py:892:        """StreamingSTTEngine.buffer_duration_s property 
exists."""
  tests\integration\test_feature_completeness.py:893:        from violawake_sdk.stt import StreamingSTTEngine
  tests\integration\test_feature_completeness.py:894:
> tests\integration\test_feature_completeness.py:895:        assert "buffer_duration_s" in dir(StreamingSTTEngine)
  tests\integration\test_feature_completeness.py:896:
  tests\integration\test_feature_completeness.py:897:    def test_context_manager_protocol(self):
  tests\integration\test_feature_completeness.py:898:        """StreamingSTTEngine supports context manager 
protocol."""
  tests\integration\test_full_pipeline.py:27:# 
---------------------------------------------------------------------------
  tests\integration\test_full_pipeline.py:28:
> tests\integration\test_full_pipeline.py:29:def make_tone_bytes(freq: float = 440.0, duration_s: float = 0.02, 
amplitude: int = 10000) -> bytes:
  tests\integration\test_full_pipeline.py:30:    """Generate a sine wave as int16 PCM bytes."""
> tests\integration\test_full_pipeline.py:31:    n_samples = int(SAMPLE_RATE * duration_s)
> tests\integration\test_full_pipeline.py:32:    t = np.linspace(0, duration_s, n_samples, endpoint=False)
  tests\integration\test_full_pipeline.py:33:    signal = (np.sin(2 * math.pi * freq * t) * amplitude).astype(np.int16)
  tests\integration\test_full_pipeline.py:34:    return signal.tobytes()
  tests\integration\test_full_pipeline.py:35:
  tests\integration\test_full_pipeline.py:36:
> tests\integration\test_full_pipeline.py:37:def make_noise_bytes(duration_s: float = 0.02, rms: int = 5000, seed: int 
= 42) -> bytes:
  tests\integration\test_full_pipeline.py:38:    """Generate white noise as int16 PCM bytes."""
  tests\integration\test_full_pipeline.py:39:    rng = np.random.default_rng(seed)
> tests\integration\test_full_pipeline.py:40:    n_samples = int(SAMPLE_RATE * duration_s)
  tests\integration\test_full_pipeline.py:41:    samples = (rng.standard_normal(n_samples) * rms).clip(-32768, 
32767).astype(np.int16)
  tests\integration\test_full_pipeline.py:42:    return samples.tobytes()
  tests\integration\test_full_pipeline.py:43:
  tests\integration\test_full_pipeline.py:44:
> tests\integration\test_full_pipeline.py:45:def make_silence_bytes(duration_s: float = 0.02) -> bytes:
  tests\integration\test_full_pipeline.py:46:    """Generate silence as int16 PCM bytes."""
> tests\integration\test_full_pipeline.py:47:    n_samples = int(SAMPLE_RATE * duration_s)
  tests\integration\test_full_pipeline.py:48:    return np.zeros(n_samples, dtype=np.int16).tobytes()
  tests\integration\test_full_pipeline.py:49:
  tests\integration\test_full_pipeline.py:50:
  tests\integration\test_full_pipeline.py:97:        """Noisy audio + high model score should trigger detection."""
  tests\integration\test_full_pipeline.py:98:        detector = _create_detector_with_mocks(score=0.95, cooldown_s=0.0)
> tests\integration\test_full_pipeline.py:99:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:100:        result = detector.detect(noise)
  tests\integration\test_full_pipeline.py:101:        assert isinstance(result, bool)
  tests\integration\test_full_pipeline.py:102:
  tests\integration\test_full_pipeline.py:104:        """Silent audio should be rejected by the zero-input guard (Gate 
1)."""
  tests\integration\test_full_pipeline.py:105:        detector = _create_detector_with_mocks(score=0.95, 
cooldown_s=0.0)
> tests\integration\test_full_pipeline.py:106:        silence = make_silence_bytes(duration_s=0.02)
  tests\integration\test_full_pipeline.py:107:        result = detector.detect(silence)
  tests\integration\test_full_pipeline.py:108:        assert result is False
  tests\integration\test_full_pipeline.py:109:
  tests\integration\test_full_pipeline.py:111:        """Low model score should not trigger detection."""
  tests\integration\test_full_pipeline.py:112:        detector = _create_detector_with_mocks(score=0.30, 
cooldown_s=0.0)
> tests\integration\test_full_pipeline.py:113:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:114:        result = detector.detect(noise)
  tests\integration\test_full_pipeline.py:115:        assert result is False
  tests\integration\test_full_pipeline.py:116:
  tests\integration\test_full_pipeline.py:123:        results = []
  tests\integration\test_full_pipeline.py:124:        for _ in range(10):
> tests\integration\test_full_pipeline.py:125:            frame = make_noise_bytes(duration_s=0.02, rms=5000, seed=99)
  tests\integration\test_full_pipeline.py:126:            results.append(detector.detect(frame))
  tests\integration\test_full_pipeline.py:127:
  tests\integration\test_full_pipeline.py:128:        assert isinstance(results, list)
  tests\integration\test_full_pipeline.py:134:            score=0.95, cooldown_s=10.0,
  tests\integration\test_full_pipeline.py:135:        )
> tests\integration\test_full_pipeline.py:136:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:137:        first = detector.detect(noise)
  tests\integration\test_full_pipeline.py:138:
  tests\integration\test_full_pipeline.py:139:        # Second detect immediately -- should be suppressed by cooldown
> tests\integration\test_full_pipeline.py:140:        noise2 = make_noise_bytes(duration_s=0.02, rms=5000, seed=123)
  tests\integration\test_full_pipeline.py:141:        second = detector.detect(noise2)
  tests\integration\test_full_pipeline.py:142:        # If first triggered, second must be False (cooldown).
  tests\integration\test_full_pipeline.py:143:        if first:
  tests\integration\test_full_pipeline.py:147:        """Detection should be suppressed when is_playing=True."""
  tests\integration\test_full_pipeline.py:148:        detector = _create_detector_with_mocks(score=0.95, 
cooldown_s=0.0)
> tests\integration\test_full_pipeline.py:149:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:150:        result = detector.detect(noise, is_playing=True)
  tests\integration\test_full_pipeline.py:151:        assert result is False
  tests\integration\test_full_pipeline.py:152:
  tests\integration\test_full_pipeline.py:159:        detector = _create_detector_with_mocks(score=0.50, 
cooldown_s=0.0)
  tests\integration\test_full_pipeline.py:160:        for _ in range(100):
> tests\integration\test_full_pipeline.py:161:            frame = make_noise_bytes(duration_s=0.02, rms=3000)
  tests\integration\test_full_pipeline.py:162:            detector.detect(frame)
  tests\integration\test_full_pipeline.py:163:
  tests\integration\test_full_pipeline.py:164:    def test_process_returns_score(self) -> None:
  tests\integration\test_full_pipeline.py:165:        """process() should return a float score."""
  tests\integration\test_full_pipeline.py:166:        detector = _create_detector_with_mocks(score=0.85, 
cooldown_s=0.0)
> tests\integration\test_full_pipeline.py:167:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:168:        score = detector.process(noise)
  tests\integration\test_full_pipeline.py:169:        assert isinstance(score, float)
  tests\integration\test_full_pipeline.py:170:
  tests\integration\test_full_pipeline.py:174:
  tests\integration\test_full_pipeline.py:175:        # bytes input
> tests\integration\test_full_pipeline.py:176:        bytes_frame = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:177:        r1 = detector.detect(bytes_frame)
  tests\integration\test_full_pipeline.py:178:        assert isinstance(r1, bool)
  tests\integration\test_full_pipeline.py:179:
  tests\integration\test_full_pipeline.py:192:        """reset_cooldown() should allow immediate re-detection."""
  tests\integration\test_full_pipeline.py:193:        detector = _create_detector_with_mocks(score=0.95, 
cooldown_s=10.0)
> tests\integration\test_full_pipeline.py:194:        noise = make_noise_bytes(duration_s=0.02, rms=5000)
  tests\integration\test_full_pipeline.py:195:        first = detector.detect(noise)
  tests\integration\test_full_pipeline.py:196:
  tests\integration\test_full_pipeline.py:197:        detector._policy.reset_cooldown()
  tests\integration\test_full_pipeline.py:198:
> tests\integration\test_full_pipeline.py:199:        noise2 = make_noise_bytes(duration_s=0.02, rms=5000, seed=99)
  tests\integration\test_full_pipeline.py:200:        second = detector.detect(noise2)
  tests\integration\test_full_pipeline.py:201:        # After reset, should be able to detect again
  tests\integration\test_full_pipeline.py:202:        assert isinstance(second, bool)
  tests\integration\test_streaming_stt.py:300:        list(engine.push_chunk(_silence_audio(0.6)))
  tests\integration\test_streaming_stt.py:301:
> tests\integration\test_streaming_stt.py:302:        assert engine.buffer_duration_s == pytest.approx(0.0)
  tests\integration\test_streaming_stt.py:303:        assert engine._buffer_samples == 0
  tests\integration\test_streaming_stt.py:304:
  tests\integration\test_streaming_stt.py:305:    # --- sliding window (stride_seconds) ---
  tests\integration\test_streaming_stt.py:317:
  tests\integration\test_streaming_stt.py:318:        # After the pass, buffer should retain ~0.25 s of audio
> tests\integration\test_streaming_stt.py:319:        assert engine.buffer_duration_s == pytest.approx(0.25, abs=0.01)
  tests\integration\test_streaming_stt.py:320:
  tests\integration\test_streaming_stt.py:321:    # --- flush ---
  tests\integration\test_streaming_stt.py:322:
  tests\integration\test_streaming_stt.py:346:        list(engine.flush())
  tests\integration\test_streaming_stt.py:347:
> tests\integration\test_streaming_stt.py:348:        assert engine.buffer_duration_s == pytest.approx(0.0)
  tests\integration\test_streaming_stt.py:349:
  tests\integration\test_streaming_stt.py:350:    # --- reset ---
  tests\integration\test_streaming_stt.py:351:
  tests\integration\test_streaming_stt.py:373:        assert engine._buffer_samples == 0
  tests\integration\test_streaming_stt.py:374:
> tests\integration\test_streaming_stt.py:375:    # --- buffer_duration_s property ---
  tests\integration\test_streaming_stt.py:376:
  tests\integration\test_streaming_stt.py:377:    def test_buffer_duration_reflects_pushed_audio(self) -> None:
  tests\integration\test_streaming_stt.py:378:        engine, _ = self._make_engine(min_buffer_seconds=10.0)
  tests\integration\test_streaming_stt.py:382:        list(engine.push_chunk(chunk))
  tests\integration\test_streaming_stt.py:383:
> tests\integration\test_streaming_stt.py:384:        assert engine.buffer_duration_s == pytest.approx(1.0, abs=0.01)
  tests\integration\test_streaming_stt.py:385:
  tests\integration\test_streaming_stt.py:386:    # --- prewarm ---
  tests\integration\test_streaming_stt.py:387:
  tests\live\conftest.py:265:def make_wav_bytes(
  tests\live\conftest.py:266:    *,
> tests\live\conftest.py:267:    duration_s: float = 0.75,
  tests\live\conftest.py:268:    sample_rate: int = 16_000,
  tests\live\conftest.py:269:    frequency_hz: float | None = 440.0,
  tests\live\conftest.py:270:    amplitude: float = 0.4,
  tests\live\conftest.py:271:    channels: int = 1,
  tests\live\conftest.py:272:) -> bytes:
> tests\live\conftest.py:273:    sample_count = int(duration_s * sample_rate)
  tests\live\conftest.py:274:    if frequency_hz is None:
  tests\live\conftest.py:275:        mono = np.zeros(sample_count, dtype=np.float32)
  tests\live\conftest.py:276:    else:
> tests\live\conftest.py:277:        t = np.linspace(0, duration_s, sample_count, endpoint=False)
  tests\live\conftest.py:278:        mono = (np.sin(2 * np.pi * frequency_hz * t) * amplitude).astype(np.float32)
  tests\live\conftest.py:279:
  tests\live\conftest.py:280:    if channels == 2:
  tests\live\test_live_api.py:217:    uploaded_ids: list[int] = []
  tests\live\test_live_api.py:218:    rejection: httpx.Response | None = None
> tests\live\test_live_api.py:219:    wav_bytes = make_wav_bytes(duration_s=0.75, frequency_hz=440.0)
  tests\live\test_live_api.py:220:    try:
  tests\live\test_live_api.py:221:        for idx in range(51):
  tests\live\test_live_api.py:222:            response = await http_session.post(
  tests\unit\test_benchmark.py:95:        }
  tests\unit\test_benchmark.py:96:        throughput = {
> tests\unit\test_benchmark.py:97:            "duration_s": 5.0,
  tests\unit\test_benchmark.py:98:            "frames_processed": 10000,
  tests\unit\test_benchmark.py:99:            "throughput_fps": 2000.0,
  tests\unit\test_benchmark.py:100:            "realtime_multiple": 40.0,
  tests\unit\test_benchmark.py:129:        }
  tests\unit\test_benchmark.py:130:        throughput = {
> tests\unit\test_benchmark.py:131:            "duration_s": 5.0, "frames_processed": 10000,
  tests\unit\test_benchmark.py:132:            "throughput_fps": 2000.0, "realtime_multiple": 40.0,
  tests\unit\test_benchmark.py:133:        }
  tests\unit\test_benchmark.py:134:
  tests\unit\test_benchmark.py:153:        }
  tests\unit\test_benchmark.py:154:        throughput = {
> tests\unit\test_benchmark.py:155:            "duration_s": 5.0, "frames_processed": 200,
  tests\unit\test_benchmark.py:156:            "throughput_fps": 40.0, "realtime_multiple": 0.8,
  tests\unit\test_benchmark.py:157:        }
  tests\unit\test_benchmark.py:158:
  tests\unit\test_benchmark.py:177:        }
  tests\unit\test_benchmark.py:178:        throughput = {
> tests\unit\test_benchmark.py:179:            "duration_s": 5.0, "frames_processed": 800,
  tests\unit\test_benchmark.py:180:            "throughput_fps": 160.0, "realtime_multiple": 3.2,
  tests\unit\test_benchmark.py:181:        }
  tests\unit\test_benchmark.py:182:
  tests\unit\test_stt_engine.py:121:    assert result.language == "en"
  tests\unit\test_stt_engine.py:122:    assert result.language_prob == 0.9
> tests\unit\test_stt_engine.py:123:    assert result.duration_s == 1.0
  tests\unit\test_stt_engine.py:124:    assert len(result.segments) == 2
  tests\unit\test_stt_engine.py:125:
  tests\unit\test_stt_engine.py:126:
  tests\unit\test_stt_engine_wav.py:65:    """Write a 1-second silence WAV at 16 kHz to a temp file."""
  tests\unit\test_stt_engine_wav.py:66:    sample_rate = 16_000
> tests\unit\test_stt_engine_wav.py:67:    duration_samples = sample_rate  # 1 second
> tests\unit\test_stt_engine_wav.py:68:    audio = np.zeros(duration_samples, dtype=np.int16)
  tests\unit\test_stt_engine_wav.py:69:    wav_path = tmp_path / "silence.wav"
  tests\unit\test_stt_engine_wav.py:70:    scipy.io.wavfile.write(str(wav_path), sample_rate, audio)
  tests\unit\test_stt_engine_wav.py:71:    return wav_path
  tests\unit\test_stt_tts_engines.py:479:            language="en",
  tests\unit\test_stt_tts_engines.py:480:            language_prob=0.95,
> tests\unit\test_stt_tts_engines.py:481:            duration_s=1.5,
  tests\unit\test_stt_tts_engines.py:482:            no_speech_prob=0.0,
  tests\unit\test_stt_tts_engines.py:483:        )
  tests\unit\test_stt_tts_engines.py:484:        assert result.text == "hello world"
  tests\unit\test_stt_tts_engines.py:485:        assert result.language == "en"
  tests\unit\test_stt_tts_engines.py:486:        assert result.language_prob == 0.95
> tests\unit\test_stt_tts_engines.py:487:        assert result.duration_s == 1.5
  tests\unit\test_voice_pipeline.py:829:
  tests\unit\test_voice_pipeline.py:830:    def test_max_duration_triggers_transcription(self) -> None:
> tests\unit\test_voice_pipeline.py:831:        """Recording stops after MAX_COMMAND_DURATION_S worth of frames."""
> tests\unit\test_voice_pipeline.py:832:        from violawake_sdk.pipeline import FRAME_SAMPLES, 
MAX_COMMAND_DURATION_S, SAMPLE_RATE
  tests\unit\test_voice_pipeline.py:833:
> tests\unit\test_voice_pipeline.py:834:        max_frames = int(MAX_COMMAND_DURATION_S / (FRAME_SAMPLES / 
SAMPLE_RATE))
  tests\unit\test_voice_pipeline.py:835:        total_frames_needed = max_frames + 2  # +1 for wake, +1 to hit max
  tests\unit\test_voice_pipeline.py:836:
  tests\unit\test_voice_pipeline.py:837:        pipeline = _build_pipeline()



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path console/backend/app/job_queue.py,console/backend/app/config.py -Pattern 'run_training_job_sync|NEGATIVES|negatives_dir|VIOLAWAKE_NEGATIVES_CORPUS_DIR|negatives' -Context 3,5" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show b45e03c''^:console/backend/app/services/training_service.py | Select-String -Pattern '"'_CORPUS_SEARCH_PATHS|VIOLAWAKE_NEGATIVES|negatives_dir|No speech|Only|speech' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show b45e03c:console/backend/app/services/training_service.py | Select-String -Pattern '_CORPUS_SEARCH_PATHS|VIOLAWAKE_NEGATIVES|negatives_dir|No speech|Only|speech' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Get-ChildItem -Path corpus,violawake_data\\negatives -Recurse -File -ErrorAction SilentlyContinue | Group-Object { "'$_.DirectoryName -replace [regex]::Escape((Get-Location).Path),'"'' } | Select-Object Count,Name | Sort-Object Name" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc \"find /app/corpus /app/negatives -maxdepth 3 -type f 2>/dev/null | sed 's#"'^#/##'"' | head -80; echo counts; find /app/corpus -type f 2>/dev/null | wc -l; find /app/negatives -type f 2>/dev/null | wc -l\"" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 535ms:

  console\backend\app\job_queue.py:23:from app.database import async_session_factory
  console\backend\app\job_queue.py:24:from app.models import Recording, TrainedModel, User
  console\backend\app\job_queue.py:25:from app.monitoring import log_exception
> console\backend\app\job_queue.py:26:from app.services.training_service import TrainingCancelledError, 
run_training_job_sync
  console\backend\app\job_queue.py:27:from app.storage import build_companion_config_identifier, build_model_key, 
get_storage
  console\backend\app\job_queue.py:28:
  console\backend\app\job_queue.py:29:logger = logging.getLogger("violawake.jobs")
  console\backend\app\job_queue.py:30:
  console\backend\app\job_queue.py:31:QUEUE_MAX_SIZE = 50
  console\backend\app\job_queue.py:701:            if len(recording_paths) < 5:
  console\backend\app\job_queue.py:702:                raise RuntimeError(f"No valid recordings found for training job 
{job_id}")
  console\backend\app\job_queue.py:703:
> console\backend\app\job_queue.py:704:            # Resolve negatives corpus for paid tiers
> console\backend\app\job_queue.py:705:            negatives_dir = await self._resolve_negatives_dir(job.user_id)
  console\backend\app\job_queue.py:706:
  console\backend\app\job_queue.py:707:            output_dir = 
Path(tempfile.mkdtemp(prefix=f"violawake_job_{job.id}_", dir=str(settings.tmp_dir)))
  console\backend\app\job_queue.py:708:            output_path = output_dir / 
f"{job.wake_word}_{job.id}_{int(now.timestamp())}.onnx"
  console\backend\app\job_queue.py:709:
  console\backend\app\job_queue.py:710:            loop = asyncio.get_running_loop()
  console\backend\app\job_queue.py:717:                future.result(timeout=10)
  console\backend\app\job_queue.py:718:
  console\backend\app\job_queue.py:719:            artifact = await asyncio.to_thread(
> console\backend\app\job_queue.py:720:                run_training_job_sync,
  console\backend\app\job_queue.py:721:                job_id=job.id,
  console\backend\app\job_queue.py:722:                wake_word=job.wake_word,
  console\backend\app\job_queue.py:723:                recording_identifiers=recording_paths,
  console\backend\app\job_queue.py:724:                output_path=output_path,
  console\backend\app\job_queue.py:725:                epochs=job.epochs,
  console\backend\app\job_queue.py:726:                timeout_seconds=settings.training_timeout,
  console\backend\app\job_queue.py:727:                progress_callback=_on_progress,
  console\backend\app\job_queue.py:728:                is_cancelled=cancel_event.is_set,
> console\backend\app\job_queue.py:729:                negatives_dir=negatives_dir,
  console\backend\app\job_queue.py:730:            )
  console\backend\app\job_queue.py:731:
  console\backend\app\job_queue.py:732:            storage = get_storage()
  console\backend\app\job_queue.py:733:            model_key = build_model_key(job.user_id, artifact.local_path.name)
  console\backend\app\job_queue.py:734:            storage.upload(
  console\backend\app\job_queue.py:1155:            name=f"user-{user_id}-queue-retry",
  console\backend\app\job_queue.py:1156:        )
  console\backend\app\job_queue.py:1157:
> console\backend\app\job_queue.py:1158:    async def _resolve_negatives_dir(self, user_id: int) -> Path | None:
> console\backend\app\job_queue.py:1159:        """Return curated negatives corpus path for paid-tier users, None for 
free."""
> console\backend\app\job_queue.py:1160:        corpus_path = settings.negatives_corpus_dir
  console\backend\app\job_queue.py:1161:        if not corpus_path:
  console\backend\app\job_queue.py:1162:            return None
  console\backend\app\job_queue.py:1163:
  console\backend\app\job_queue.py:1164:        corpus = Path(corpus_path)
  console\backend\app\job_queue.py:1165:        if not corpus.is_dir():
> console\backend\app\job_queue.py:1166:            logger.warning("Negatives corpus dir configured but missing: %s", 
corpus_path)
  console\backend\app\job_queue.py:1167:            return None
  console\backend\app\job_queue.py:1168:
  console\backend\app\job_queue.py:1169:        # Check user's subscription tier
  console\backend\app\job_queue.py:1170:        from app.models import Subscription
  console\backend\app\job_queue.py:1171:
  console\backend\app\job_queue.py:1179:        if tier == "free":
  console\backend\app\job_queue.py:1180:            return None
  console\backend\app\job_queue.py:1181:
> console\backend\app\job_queue.py:1182:        logger.info("Using curated negatives corpus for user %s (tier=%s)", 
user_id, tier)
  console\backend\app\job_queue.py:1183:        return corpus
  console\backend\app\job_queue.py:1184:
  console\backend\app\job_queue.py:1185:    async def _schedule_recording_cleanup(self, recording_ids: list[int]) -> 
None:
  console\backend\app\job_queue.py:1186:        """Soft-delete recordings after training completes.
  console\backend\app\job_queue.py:1187:
  console\backend\app\config.py:55:    # Training
  console\backend\app\config.py:56:    training_timeout: int = 1800  # seconds (30 minutes)
  console\backend\app\config.py:57:    max_concurrent_jobs: int = 2
> console\backend\app\config.py:58:    negatives_corpus_dir: str = ""  # Path to curated negative audio corpus (paid 
tier)
  console\backend\app\config.py:59:
  console\backend\app\config.py:60:    # Retention cleanup (0 = disabled)
  console\backend\app\config.py:61:    recording_retention_days: int = 90  # Days to keep recordings; 0 disables 
automatic cleanup
  console\backend\app\config.py:62:    model_retention_days: int = 365  # Days to keep trained models; 0 disables 
automatic cleanup
  console\backend\app\config.py:63:    post_training_retention_hours: int = 24  # Hours to keep recordings after 
training completes; 0 disables



 succeeded in 679ms:

      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
>     negatives_dir: Path | None = None,
  ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      neg_temp_dir: Path | None = None
          wav_count = len(list(positives_dir.glob("*.wav")))
          if wav_count < 5:
>             raise RuntimeError("Only %s valid WAV files found. Need at least 5." % wav_count)
  
          pos_files = sorted(positives_dir.glob("*.wav"))
  
          progress_callback({
          from violawake_sdk.tools.train import (
              _generate_confusable_negatives,
>             _generate_speech_negatives,
              _generate_tts_positives,
              _train_temporal_cnn,
          )
  
  
          # Auto-generate TTS positives when user has <100 samples (production behavior)
>         # Keep track of user-provided files so augmentation targets only real recordings
          user_pos_files = list(pos_files)
          if len(pos_files) < 100:
              tts_pos_dir = neg_temp_dir / "tts_positives"
              try:
  
          # Source 1: User/paid-tier corpus negatives
>         if negatives_dir and negatives_dir.exists():
              user_neg = sorted(
>                 list(negatives_dir.rglob("*.wav")) + list(negatives_dir.rglob("*.flac"))
              )
              if user_neg:
                  neg_tag_map["neg_user"] = user_neg
                  logger.info("Loaded %s corpus negatives for job %s", len(user_neg), job_id)
              "train_loss": 0.0,
              "val_loss": 0.0,
>             "message": "Generated confusables. Generating speech negatives...",
              "error": None,
          })
  
>         # Source 3: Auto-generated speech negatives (common phrases)
          # 5 voices matching CLI production pipeline (was 3)
>         speech_dir = neg_temp_dir / "speech"
          try:
>             speech_files = _generate_speech_negatives(
>                 speech_dir,
                  n_voices=5,
                  verbose=False,
              )
>             if speech_files:
>                 neg_tag_map["neg_speech"] = speech_files
          except Exception as exc:
              logger.error(
>                 "Speech neg generation FAILED for job %s: %s — "
>                 "model will have higher false positive rate on general speech",
                  job_id, exc,
              )
  
          _ensure_not_cancelled()
  
>         # Source 4: Universal corpus (LibriSpeech, MUSAN) if available
>         _CORPUS_SEARCH_PATHS = [
              Path(__file__).resolve().parent.parent.parent.parent / "corpus",  # repo root
              Path.home() / ".violawake" / "corpus",
              Path("corpus"),
          ]
          _CORPUS_SUBDIRS: dict[str, tuple[str, ...]] = {
>             "neg_librispeech": ("librispeech",),
>             "neg_musan_speech": ("musan/musan/speech", "musan/speech"),
              "neg_musan_music": ("musan/musan/music", "musan/music"),
              "neg_musan_noise": ("musan/musan/noise", "musan/noise"),
          }
          _rng = random.Random(42)
          for tag, subdirs in _CORPUS_SUBDIRS.items():
>             for corpus_root in _CORPUS_SEARCH_PATHS:
                  if not corpus_root.exists():
                      continue
                  for subdir in subdirs:
                      candidate = corpus_root / subdir
          if total_neg < 5:
              raise RuntimeError(
>                 "Only %s negative files generated. "
                  "edge-tts may not be installed or network unavailable." % total_neg
              )
  
          progress_callback({



 succeeded in 682ms:

      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
>     negatives_dir: Path | None = None,
  ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      neg_temp_dir: Path | None = None
          wav_count = len(list(positives_dir.glob("*.wav")))
          if wav_count < 5:
>             raise RuntimeError("Only %s valid WAV files found. Need at least 5." % wav_count)
  
          pos_files = sorted(positives_dir.glob("*.wav"))
  
          progress_callback({
  
          # Auto-generate TTS positives when user has <100 samples (production behavior)
>         # Keep track of user-provided files so augmentation targets only real recordings
          user_pos_files = list(pos_files)
          if len(pos_files) < 100:
              tts_pos_dir = neg_temp_dir / "tts_positives"
              try:
  
          # Source 1: User/paid-tier corpus negatives
>         if negatives_dir and negatives_dir.exists():
              user_neg = sorted(
>                 list(negatives_dir.rglob("*.wav")) + list(negatives_dir.rglob("*.flac"))
              )
              if user_neg:
                  neg_tag_map["neg_user"] = user_neg
                  logger.info("Loaded %s corpus negatives for job %s", len(user_neg), job_id)
              "train_loss": 0.0,
              "val_loss": 0.0,
>             "message": "Generated confusables. Loading corpus speech negatives...",
              "error": None,
          })
  
          _ensure_not_cancelled()
  
>         # Source 4: Universal corpus (LibriSpeech, MUSAN) if available
          service_file = Path(__file__).resolve()
>         _CORPUS_SEARCH_PATHS = [
              Path("/app/corpus"),
              *([service_file.parents[4] / "corpus"] if len(service_file.parents) > 4 else []),
              Path.home() / ".violawake" / "corpus",
              Path("corpus"),
          ]
          _CORPUS_SUBDIRS: dict[str, tuple[str, ...]] = {
>             "neg_librispeech": ("librispeech",),
>             "neg_musan_speech": ("musan/musan/speech", "musan/speech"),
              "neg_musan_music": ("musan/musan/music", "musan/music"),
              "neg_musan_noise": ("musan/musan/noise", "musan/noise"),
          }
          _rng = random.Random(42)
          for tag, subdirs in _CORPUS_SUBDIRS.items():
>             for corpus_root in _CORPUS_SEARCH_PATHS:
                  if not corpus_root.exists():
                      continue
                  for subdir in subdirs:
                      candidate = corpus_root / subdir
  
          total_neg = len(all_neg_files)
>         speech_neg_tags = {
              "neg_user",
>             "neg_librispeech",
>             "neg_musan_speech",
              "neg_musan_music",
              "neg_musan_noise",
          }
>         total_speech_neg = sum(
>             len(files) for tag, files in neg_tag_map.items() if tag in speech_neg_tags
          )
>         if total_speech_neg < 5 or total_neg < 5:
              raise RuntimeError(
>                 "No speech negatives available. Mount LibriSpeech + MUSAN corpus at "
                  "/app/corpus or run `violawake download-corpus`."
              )
  
          progress_callback({



 succeeded in 1608ms:
//app/corpus/.cache/huggingface/.gitignore
//app/corpus/acav100m_embeddings.npz
//app/corpus/librispeech/dev-clean.tar.gz
//app/corpus/librispeech/LibriSpeech/BOOKS.TXT
//app/corpus/librispeech/LibriSpeech/CHAPTERS.TXT
//app/corpus/librispeech/LibriSpeech/LICENSE.TXT
//app/corpus/librispeech/LibriSpeech/README.TXT
//app/corpus/librispeech/LibriSpeech/SPEAKERS.TXT
//app/corpus/librispeech/test-clean.tar.gz
//app/corpus/musan/musan/README
//app/corpus/openwakeword_features_ACAV100M_2000_hrs_16bit.npy
//app/corpus/validation_set_features.npy
counts
7557
0

 succeeded in 1796ms:

Count Name                                                  
----- ----                                                  
    3 \corpus                                               
    1 \corpus\.cache\huggingface                            
    2 \corpus\.cache\huggingface\download                   
    2 \corpus\librispeech                                   
    5 \corpus\librispeech\LibriSpeech                       
   16 \corpus\librispeech\LibriSpeech\dev-clean\1272\128104 
   26 \corpus\librispeech\LibriSpeech\dev-clean\1272\135031 
   34 \corpus\librispeech\LibriSpeech\dev-clean\1272\141231 
   29 \corpus\librispeech\LibriSpeech\dev-clean\1462\170138 
   44 \corpus\librispeech\LibriSpeech\dev-clean\1462\170142 
   24 \corpus\librispeech\LibriSpeech\dev-clean\1462\170145 
   22 \corpus\librispeech\LibriSpeech\dev-clean\1673\143396 
   22 \corpus\librispeech\LibriSpeech\dev-clean\1673\143397 
   24 \corpus\librispeech\LibriSpeech\dev-clean\174\168635  
   21 \corpus\librispeech\LibriSpeech\dev-clean\174\50561   
   17 \corpus\librispeech\LibriSpeech\dev-clean\174\84280   
   65 \corpus\librispeech\LibriSpeech\dev-clean\1919\142785 
   31 \corpus\librispeech\LibriSpeech\dev-clean\1988\147956 
   17 \corpus\librispeech\LibriSpeech\dev-clean\1988\148538 
   30 \corpus\librispeech\LibriSpeech\dev-clean\1988\24833  
   32 \corpus\librispeech\LibriSpeech\dev-clean\1993\147149 
   12 \corpus\librispeech\LibriSpeech\dev-clean\1993\147964 
   10 \corpus\librispeech\LibriSpeech\dev-clean\1993\147965 
    8 \corpus\librispeech\LibriSpeech\dev-clean\1993\147966 
   18 \corpus\librispeech\LibriSpeech\dev-clean\2035\147960 
   42 \corpus\librispeech\LibriSpeech\dev-clean\2035\147961 
   20 \corpus\librispeech\LibriSpeech\dev-clean\2035\152373 
   53 \corpus\librispeech\LibriSpeech\dev-clean\2078\142845 
    6 \corpus\librispeech\LibriSpeech\dev-clean\2086\149214 
   51 \corpus\librispeech\LibriSpeech\dev-clean\2086\149220 
   23 \corpus\librispeech\LibriSpeech\dev-clean\2277\149874 
   36 \corpus\librispeech\LibriSpeech\dev-clean\2277\149896 
   39 \corpus\librispeech\LibriSpeech\dev-clean\2277\149897 
   18 \corpus\librispeech\LibriSpeech\dev-clean\2412\153947 
   17 \corpus\librispeech\LibriSpeech\dev-clean\2412\153948 
   26 \corpus\librispeech\LibriSpeech\dev-clean\2412\153954 
   44 \corpus\librispeech\LibriSpeech\dev-clean\2428\83699  
   45 \corpus\librispeech\LibriSpeech\dev-clean\2428\83705  
   25 \corpus\librispeech\LibriSpeech\dev-clean\251\118436  
   25 \corpus\librispeech\LibriSpeech\dev-clean\251\136532  
   28 \corpus\librispeech\LibriSpeech\dev-clean\251\137823  
   16 \corpus\librispeech\LibriSpeech\dev-clean\2803\154320 
   25 \corpus\librispeech\LibriSpeech\dev-clean\2803\154328 
   19 \corpus\librispeech\LibriSpeech\dev-clean\2803\161169 
   22 \corpus\librispeech\LibriSpeech\dev-clean\2902\9006   
   18 \corpus\librispeech\LibriSpeech\dev-clean\2902\9008   
   48 \corpus\librispeech\LibriSpeech\dev-clean\3000\15664  
   91 \corpus\librispeech\LibriSpeech\dev-clean\3081\166546 
   50 \corpus\librispeech\LibriSpeech\dev-clean\3170\137482 
   32 \corpus\librispeech\LibriSpeech\dev-clean\3536\23268  
   34 \corpus\librispeech\LibriSpeech\dev-clean\3536\8226   
   42 \corpus\librispeech\LibriSpeech\dev-clean\3576\138058 
   32 \corpus\librispeech\LibriSpeech\dev-clean\3752\4943   
   71 \corpus\librispeech\LibriSpeech\dev-clean\3752\4944   
   58 \corpus\librispeech\LibriSpeech\dev-clean\3853\163249 
   37 \corpus\librispeech\LibriSpeech\dev-clean\422\122949  
   16 \corpus\librispeech\LibriSpeech\dev-clean\5338\24615  
   11 \corpus\librispeech\LibriSpeech\dev-clean\5338\24640  
   35 \corpus\librispeech\LibriSpeech\dev-clean\5338\284437 
   21 \corpus\librispeech\LibriSpeech\dev-clean\5536\43358  
   20 \corpus\librispeech\LibriSpeech\dev-clean\5536\43359  
   21 \corpus\librispeech\LibriSpeech\dev-clean\5536\43363  
   25 \corpus\librispeech\LibriSpeech\dev-clean\5694\64025  
   34 \corpus\librispeech\LibriSpeech\dev-clean\5694\64029  
   27 \corpus\librispeech\LibriSpeech\dev-clean\5694\64038  
   23 \corpus\librispeech\LibriSpeech\dev-clean\5895\34615  
   25 \corpus\librispeech\LibriSpeech\dev-clean\5895\34622  
   35 \corpus\librispeech\LibriSpeech\dev-clean\5895\34629  
   29 \corpus\librispeech\LibriSpeech\dev-clean\6241\61943  
   25 \corpus\librispeech\LibriSpeech\dev-clean\6241\61946  
   27 \corpus\librispeech\LibriSpeech\dev-clean\6241\66616  
   42 \corpus\librispeech\LibriSpeech\dev-clean\6295\244435 
   34 \corpus\librispeech\LibriSpeech\dev-clean\6295\64301  
   29 \corpus\librispeech\LibriSpeech\dev-clean\6313\66125  
   37 \corpus\librispeech\LibriSpeech\dev-clean\6313\66129  
   33 \corpus\librispeech\LibriSpeech\dev-clean\6313\76958  
   22 \corpus\librispeech\LibriSpeech\dev-clean\6319\275224 
   14 \corpus\librispeech\LibriSpeech\dev-clean\6319\57405  
   22 \corpus\librispeech\LibriSpeech\dev-clean\6319\64726  
   22 \corpus\librispeech\LibriSpeech\dev-clean\6345\64257  
   31 \corpus\librispeech\LibriSpeech\dev-clean\6345\93302  
   27 \corpus\librispeech\LibriSpeech\dev-clean\6345\93306  
   22 \corpus\librispeech\LibriSpeech\dev-clean\652\129742  
   37 \corpus\librispeech\LibriSpeech\dev-clean\652\130726  
   15 \corpus\librispeech\LibriSpeech\dev-clean\652\130737  
   83 \corpus\librispeech\LibriSpeech\dev-clean\777\126732  
   11 \corpus\librispeech\LibriSpeech\dev-clean\7850\111771 
   25 \corpus\librispeech\LibriSpeech\dev-clean\7850\281318 
   19 \corpus\librispeech\LibriSpeech\dev-clean\7850\286674 
   21 \corpus\librispeech\LibriSpeech\dev-clean\7850\73752  
   31 \corpus\librispeech\LibriSpeech\dev-clean\7976\105575 
   27 \corpus\librispeech\LibriSpeech\dev-clean\7976\110124 
   23 \corpus\librispeech\LibriSpeech\dev-clean\7976\110523 
   29 \corpus\librispeech\LibriSpeech\dev-clean\8297\275154 
   34 \corpus\librispeech\LibriSpeech\dev-clean\8297\275155 
   15 \corpus\librispeech\LibriSpeech\dev-clean\8297\275156 
   30 \corpus\librispeech\LibriSpeech\dev-clean\84\121123   
   37 \corpus\librispeech\LibriSpeech\dev-clean\84\121550   
   14 \corpus\librispeech\LibriSpeech\dev-clean\8842\302196 
   17 \corpus\librispeech\LibriSpeech\dev-clean\8842\302201 
   13 \corpus\librispeech\LibriSpeech\dev-clean\8842\302203 
   15 \corpus\librispeech\LibriSpeech\dev-clean\8842\304647 
   39 \corpus\librispeech\LibriSpeech\test-clean\1089\134686
   27 \corpus\librispeech\LibriSpeech\test-clean\1089\134691
   46 \corpus\librispeech\LibriSpeech\test-clean\1188\133604
   16 \corpus\librispeech\LibriSpeech\test-clean\121\121726 
    6 \corpus\librispeech\LibriSpeech\test-clean\121\123852 
    6 \corpus\librispeech\LibriSpeech\test-clean\121\123859 
   38 \corpus\librispeech\LibriSpeech\test-clean\121\127105 
   17 \corpus\librispeech\LibriSpeech\test-clean\1221\135766
   26 \corpus\librispeech\LibriSpeech\test-clean\1221\135767
   34 \corpus\librispeech\LibriSpeech\test-clean\1284\1180  
   23 \corpus\librispeech\LibriSpeech\test-clean\1284\1181  
    9 \corpus\librispeech\LibriSpeech\test-clean\1284\134647
   18 \corpus\librispeech\LibriSpeech\test-clean\1320\122612
   43 \corpus\librispeech\LibriSpeech\test-clean\1320\122617
   55 \corpus\librispeech\LibriSpeech\test-clean\1580\141083
   52 \corpus\librispeech\LibriSpeech\test-clean\1580\141084
   28 \corpus\librispeech\LibriSpeech\test-clean\1995\1826  
   16 \corpus\librispeech\LibriSpeech\test-clean\1995\1836  
   31 \corpus\librispeech\LibriSpeech\test-clean\1995\1837  
   62 \corpus\librispeech\LibriSpeech\test-clean\2094\142345
   43 \corpus\librispeech\LibriSpeech\test-clean\2300\131720
   27 \corpus\librispeech\LibriSpeech\test-clean\237\126133 
   20 \corpus\librispeech\LibriSpeech\test-clean\237\134493 
   44 \corpus\librispeech\LibriSpeech\test-clean\237\134500 
   33 \corpus\librispeech\LibriSpeech\test-clean\260\123286 
   30 \corpus\librispeech\LibriSpeech\test-clean\260\123288 
   22 \corpus\librispeech\LibriSpeech\test-clean\260\123440 
   14 \corpus\librispeech\LibriSpeech\test-clean\2830\3979  
   78 \corpus\librispeech\LibriSpeech\test-clean\2830\3980  
   24 \corpus\librispeech\LibriSpeech\test-clean\2961\960   
   24 \corpus\librispeech\LibriSpeech\test-clean\2961\961   
   24 \corpus\librispeech\LibriSpeech\test-clean\3570\5694  
   17 \corpus\librispeech\LibriSpeech\test-clean\3570\5695  
   12 \corpus\librispeech\LibriSpeech\test-clean\3570\5696  
   58 \corpus\librispeech\LibriSpeech\test-clean\3575\170457
   48 \corpus\librispeech\LibriSpeech\test-clean\3729\6852  
   23 \corpus\librispeech\LibriSpeech\test-clean\4077\13751 
   18 \corpus\librispeech\LibriSpeech\test-clean\4077\13754 
   26 \corpus\librispeech\LibriSpeech\test-clean\4446\2271  
   38 \corpus\librispeech\LibriSpeech\test-clean\4446\2273  
   47 \corpus\librispeech\LibriSpeech\test-clean\4446\2275  
   61 \corpus\librispeech\LibriSpeech\test-clean\4507\16021 
   25 \corpus\librispeech\LibriSpeech\test-clean\4970\29093 
   40 \corpus\librispeech\LibriSpeech\test-clean\4970\29095 
   22 \corpus\librispeech\LibriSpeech\test-clean\4992\23283 
   24 \corpus\librispeech\LibriSpeech\test-clean\4992\41797 
   19 \corpus\librispeech\LibriSpeech\test-clean\4992\41806 
   12 \corpus\librispeech\LibriSpeech\test-clean\5105\28233 
   26 \corpus\librispeech\LibriSpeech\test-clean\5105\28240 
   21 \corpus\librispeech\LibriSpeech\test-clean\5105\28241 
   70 \corpus\librispeech\LibriSpeech\test-clean\5142\33396 
   27 \corpus\librispeech\LibriSpeech\test-clean\5142\36377 
    6 \corpus\librispeech\LibriSpeech\test-clean\5142\36586 
    3 \corpus\librispeech\LibriSpeech\test-clean\5142\36600 
   43 \corpus\librispeech\LibriSpeech\test-clean\5639\40744 
   19 \corpus\librispeech\LibriSpeech\test-clean\5683\32865 
   32 \corpus\librispeech\LibriSpeech\test-clean\5683\32866 
   27 \corpus\librispeech\LibriSpeech\test-clean\5683\32879 
   64 \corpus\librispeech\LibriSpeech\test-clean\61\70968   
   42 \corpus\librispeech\LibriSpeech\test-clean\61\70970   
   76 \corpus\librispeech\LibriSpeech\test-clean\672\122797 
   55 \corpus\librispeech\LibriSpeech\test-clean\6829\68769 
   38 \corpus\librispeech\LibriSpeech\test-clean\6829\68771 
   22 \corpus\librispeech\LibriSpeech\test-clean\6930\75918 
   30 \corpus\librispeech\LibriSpeech\test-clean\6930\76324 
   29 \corpus\librispeech\LibriSpeech\test-clean\6930\81414 
   11 \corpus\librispeech\LibriSpeech\test-clean\7021\79730 
   16 \corpus\librispeech\LibriSpeech\test-clean\7021\79740 
    7 \corpus\librispeech\LibriSpeech\test-clean\7021\79759 
   29 \corpus\librispeech\LibriSpeech\test-clean\7021\85628 
   31 \corpus\librispeech\LibriSpeech\test-clean\7127\75946 
   42 \corpus\librispeech\LibriSpeech\test-clean\7127\75947 
   29 \corpus\librispeech\LibriSpeech\test-clean\7176\88083 
   47 \corpus\librispeech\LibriSpeech\test-clean\7176\92135 
   48 \corpus\librispeech\LibriSpeech\test-clean\7729\102255
   19 \corpus\librispeech\LibriSpeech\test-clean\8224\274381
   15 \corpus\librispeech\LibriSpeech\test-clean\8224\274384
   45 \corpus\librispeech\LibriSpeech\test-clean\8230\279154
   72 \corpus\librispeech\LibriSpeech\test-clean\8455\210777
   16 \corpus\librispeech\LibriSpeech\test-clean\8463\287645
   21 \corpus\librispeech\LibriSpeech\test-clean\8463\294825
   40 \corpus\librispeech\LibriSpeech\test-clean\8463\294828
   26 \corpus\librispeech\LibriSpeech\test-clean\8555\284447
   22 \corpus\librispeech\LibriSpeech\test-clean\8555\284449
   17 \corpus\librispeech\LibriSpeech\test-clean\8555\292519
   32 \corpus\librispeech\LibriSpeech\test-clean\908\157963 
   27 \corpus\librispeech\LibriSpeech\test-clean\908\31957  
    1 \corpus\musan\musan                                   
    1 \corpus\musan\musan\music                             
  130 \corpus\musan\musan\music\fma                         
   95 \corpus\musan\musan\music\fma-western-art             
   77 \corpus\musan\musan\music\hd-classical                
  219 \corpus\musan\musan\music\jamendo                     
  150 \corpus\musan\musan\music\rfm                         
    1 \corpus\musan\musan\noise                             
  845 \corpus\musan\musan\noise\free-sound                  
   88 \corpus\musan\musan\noise\sound-bible                 
    1 \corpus\musan\musan\speech                            
  175 \corpus\musan\musan\speech\librivox                   
  254 \corpus\musan\musan\speech\us-gov                     



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'Get-Content console/Dockerfile.backend' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'docker exec wakeword-backend-1 pwd' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 python -c \"from pathlib import Path; p=Path('/app/console/backend/app/services/training_service.py').resolve(); print('p', p); print('old', p.parent.parent.parent.parent/'corpus'); print('parents4', p.parents[4]/'corpus'); print('cwd', Path.cwd()/'corpus'); print('home', Path.home() / '.violawake' / 'corpus')\"" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc \"for d in /app/corpus /app/console/corpus /home/app/.violawake/corpus /root/.violawake/corpus corpus /app/negatives; do if [ -e \\\""'$d'"\\\" ]; then echo EXISTS:"'$d; find '"\\\""'$d'"\\\" -maxdepth 2 -type f | head -5; else echo MISSING:"'$d; fi; done"' in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 333ms:
FROM python:3.11-slim

WORKDIR /app

# Install system deps for audio processing + gosu for entrypoint
RUN apt-get update && apt-get install -y --no-install-recommends \
    portaudio19-dev curl gosu \
    && rm -rf /var/lib/apt/lists/*

# Install Python deps + upgrade build tools
COPY console/backend/requirements.txt .
RUN pip install --no-cache-dir --upgrade pip hatchling && \
    pip install --no-cache-dir -r requirements.txt

# Install ViolaWake SDK
COPY pyproject.toml /sdk/
COPY README.md /sdk/
COPY LICENSE /sdk/
COPY src/ /sdk/src/
RUN pip install --no-cache-dir "/sdk[training]"

# Copy backend code
COPY console/backend/ .

# Create data directory and non-root user
RUN mkdir -p /app/data
RUN addgroup --system app && adduser --system --ingroup app app
RUN chown -R app:app /app /app/data
COPY console/backend/entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh

EXPOSE 8000

ENTRYPOINT ["/app/entrypoint.sh"]

 succeeded in 407ms:
/app

 succeeded in 448ms:
p /app/console/backend/app/services/training_service.py
old /app/console/corpus
parents4 /app/corpus
cwd /app/corpus
home /root/.violawake/corpus

2026-05-07T16:09:54.495458Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.5 seconds
Output:
];: 1: Syntax error: Unterminated quoted string

 exited 1 in 468ms:
];: 1: Syntax error: Unterminated quoted string

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'for d in /app/corpus /app/console/corpus /home/app/.violawake/corpus /root/.violawake/corpus /app/negatives; do if [ -e \""'$d" ]; then echo EXISTS:$d; find "$d" -maxdepth 2 -type f | head -5; else echo MISSING:$d; fi; done'"'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'ls -ld /home/app /home/app/.violawake /home/app/.violawake/corpus 2>/dev/null || true; ls -ld /root/.violawake /root/.violawake/corpus 2>/dev/null || true'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'find /app/negatives -type f 2>/dev/null | wc -l; find /app/corpus -type f \\( -name \"*.wav\" -o -name \"*.flac\" -o -name \"*.mp3\" \\) 2>/dev/null | wc -l'" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 4633ms:
 succeeded in 5006ms:
EXISTS:/app/corpus
/app/corpus/acav100m_embeddings.npz
/app/corpus/librispeech/dev-clean.tar.gz
/app/corpus/librispeech/test-clean.tar.gz
/app/corpus/openwakeword_features_ACAV100M_2000_hrs_16bit.npy
/app/corpus/validation_set_features.npy
MISSING:/app/console/corpus
MISSING:/home/app/.violawake/corpus
MISSING:/root/.violawake/corpus
EXISTS:/app/negatives

 succeeded in 6598ms:
0
7339

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -S "_generate_speech_negatives" -- src/violawake_sdk/tools/train.py console/backend/app/services/training_service.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -S "SPEECH_NEGATIVE_PHRASES" -- src/violawake_sdk/tools/train.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path src/violawake_sdk/tools/train.py -Pattern 'def _generate_speech_negatives|SPEECH_NEGATIVE_PHRASES|_edge_tts_synthesize|kokoro|n_voices|voice' -Context 2,8" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 13c5a59:src/violawake_sdk/tools/train.py | Select-String -Pattern 'def _generate_speech_negatives|SPEECH_NEGATIVE_PHRASES|_edge_tts_synthesize|kokoro|edge_tts|n_voices' -Context 2,8" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 13c5a59:console/backend/app/services/training_service.py | Select-String -Pattern '_generate_speech_negatives|speech negatives|negative' -Context 2,5" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 622ms:
 succeeded in 667ms:

      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
>     negatives_dir: Path | None = None,
  ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      storage = get_storage()
  
              augment=True,
              eval_dir=None,
>             negatives_dir=negatives_dir,
              verbose=True,
              progress_callback=_on_epoch,
          )
  
          _ensure_not_cancelled()
          output_path = output_dir / output_filename
  
>         # Resolve negatives corpus for paid-tier users
          neg_dir: Path | None = None
>         corpus_path = settings.negatives_corpus_dir
          if corpus_path:
              neg_candidate = Path(corpus_path)
              if neg_candidate.is_dir():
                  try:
                      from app.models import Subscription
                      if tier != "free":
                          neg_dir = neg_candidate
>                         logger.info("Using curated negatives for user %s (tier=%s)", user_id, tier)
                  except Exception:
>                     logger.exception("Failed to resolve negatives corpus tier")
  
          artifact = run_training_job_sync(
              job_id=job_id,
              wake_word=wake_word,
              recording_identifiers=recording_identifiers,
              progress_callback=_emit,
              is_cancelled=lambda: False,
>             negatives_dir=neg_dir,
          )
  
          storage = get_storage()
          model_key = build_model_key(user_id, output_filename)
          storage.upload(model_key, artifact.local_path.read_bytes(), "application/octet-stream")



 succeeded in 697ms:

  src\violawake_sdk\tools\train.py:19:
  src\violawake_sdk\tools\train.py:20:Data pipeline (matches production golden path):
> src\violawake_sdk\tools\train.py:21:  A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 
conditions)
> src\violawake_sdk\tools\train.py:22:  B. Confusable negatives round 1: 30 phonetically similar words x 10 voices
> src\violawake_sdk\tools\train.py:23:  C. Confusable negatives round 2: 16 tighter variants x 10 voices
> src\violawake_sdk\tools\train.py:24:  D. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
  src\violawake_sdk\tools\train.py:25:  E. Shared universal corpus: LibriSpeech, MUSAN speech/music/noise 
(auto-discovered)
  src\violawake_sdk\tools\train.py:26:  F. User-provided negatives via --negatives directory (if any)
  src\violawake_sdk\tools\train.py:27:
  src\violawake_sdk\tools\train.py:28:Usage::
  src\violawake_sdk\tools\train.py:29:
  src\violawake_sdk\tools\train.py:30:    violawake-train \\
  src\violawake_sdk\tools\train.py:31:      --word "jarvis" \\
  src\violawake_sdk\tools\train.py:32:      --positives data/jarvis/positives/ \\
  src\violawake_sdk\tools\train.py:83:
  src\violawake_sdk\tools\train.py:84:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:85:# Edge-TTS voice pool for diverse positive and negative generation
  src\violawake_sdk\tools\train.py:86:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:87:
> src\violawake_sdk\tools\train.py:88:EDGE_TTS_VOICES = [
  src\violawake_sdk\tools\train.py:89:    "en-US-GuyNeural",
  src\violawake_sdk\tools\train.py:90:    "en-US-JennyNeural",
  src\violawake_sdk\tools\train.py:91:    "en-US-AriaNeural",
  src\violawake_sdk\tools\train.py:92:    "en-US-DavisNeural",
  src\violawake_sdk\tools\train.py:93:    "en-US-AmberNeural",
  src\violawake_sdk\tools\train.py:94:    "en-US-AnaNeural",
  src\violawake_sdk\tools\train.py:95:    "en-US-AndrewNeural",
  src\violawake_sdk\tools\train.py:96:    "en-US-BrandonNeural",
  src\violawake_sdk\tools\train.py:110:
  src\violawake_sdk\tools\train.py:111:# Common phrases for speech negative generation
> src\violawake_sdk\tools\train.py:112:SPEECH_NEGATIVE_PHRASES = [
  src\violawake_sdk\tools\train.py:113:    "what time is it",
  src\violawake_sdk\tools\train.py:114:    "play some music",
  src\violawake_sdk\tools\train.py:115:    "turn off the lights",
  src\violawake_sdk\tools\train.py:116:    "set an alarm for seven",
  src\violawake_sdk\tools\train.py:117:    "how is the weather today",
  src\violawake_sdk\tools\train.py:118:    "call mom",
  src\violawake_sdk\tools\train.py:119:    "send a message",
  src\violawake_sdk\tools\train.py:120:    "open the door",
  src\violawake_sdk\tools\train.py:269:
  src\violawake_sdk\tools\train.py:270:
> src\violawake_sdk\tools\train.py:271:def _edge_tts_fail(text: str, voice: str, detail: str | BaseException) -> bool:
  src\violawake_sdk\tools\train.py:272:    """Record and log an edge-tts failure while preserving the bool API."""
  src\violawake_sdk\tools\train.py:273:    global _LAST_EDGE_TTS_ERROR
  src\violawake_sdk\tools\train.py:274:
  src\violawake_sdk\tools\train.py:275:    summary = f"{type(detail).__name__}: {detail}" if isinstance(detail, 
BaseException) else detail
  src\violawake_sdk\tools\train.py:276:    _LAST_EDGE_TTS_ERROR = summary
  src\violawake_sdk\tools\train.py:277:
  src\violawake_sdk\tools\train.py:278:    # A missing decoder causes hundreds of identical per-sample failures. Log
  src\violawake_sdk\tools\train.py:279:    # the actual exception once, then the generator summary logs the zero count.
  src\violawake_sdk\tools\train.py:281:        _REPORTED_EDGE_TTS_ERRORS.add(summary)
  src\violawake_sdk\tools\train.py:282:        logger.error(
> src\violawake_sdk\tools\train.py:283:            "edge-tts synthesis failed for voice %s text %.80r: %s",
> src\violawake_sdk\tools\train.py:284:            voice,
  src\violawake_sdk\tools\train.py:285:            text,
  src\violawake_sdk\tools\train.py:286:            summary,
  src\violawake_sdk\tools\train.py:287:        )
  src\violawake_sdk\tools\train.py:288:    return False
  src\violawake_sdk\tools\train.py:289:
  src\violawake_sdk\tools\train.py:290:
> src\violawake_sdk\tools\train.py:291:def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
  src\violawake_sdk\tools\train.py:292:    """Synthesize a single phrase with edge-tts and save as WAV at 16kHz.
  src\violawake_sdk\tools\train.py:293:
  src\violawake_sdk\tools\train.py:294:    Returns True on success, False on failure.
  src\violawake_sdk\tools\train.py:295:    """
  src\violawake_sdk\tools\train.py:296:    import asyncio
  src\violawake_sdk\tools\train.py:297:    import io
  src\violawake_sdk\tools\train.py:298:    import tempfile
  src\violawake_sdk\tools\train.py:299:
  src\violawake_sdk\tools\train.py:309:        return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:310:            text,
> src\violawake_sdk\tools\train.py:311:            voice,
  src\violawake_sdk\tools\train.py:312:            message,
  src\violawake_sdk\tools\train.py:313:        )
  src\violawake_sdk\tools\train.py:314:
  src\violawake_sdk\tools\train.py:315:    async def _synth():
> src\violawake_sdk\tools\train.py:316:        communicate = edge_tts.Communicate(text, voice)
  src\violawake_sdk\tools\train.py:317:        mp3_buf = io.BytesIO()
  src\violawake_sdk\tools\train.py:318:        async for chunk in communicate.stream():
  src\violawake_sdk\tools\train.py:319:            if chunk["type"] == "audio":
  src\violawake_sdk\tools\train.py:320:                mp3_buf.write(chunk["data"])
  src\violawake_sdk\tools\train.py:321:        return mp3_buf.getvalue()
  src\violawake_sdk\tools\train.py:322:
  src\violawake_sdk\tools\train.py:323:    def _run_synth() -> bytes:
  src\violawake_sdk\tools\train.py:324:        try:
  src\violawake_sdk\tools\train.py:344:                return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:345:                    text,
> src\violawake_sdk\tools\train.py:346:                    voice,
  src\violawake_sdk\tools\train.py:347:                    f"edge-tts failed after {attempt} attempts: 
{type(exc).__name__}: {exc}",
  src\violawake_sdk\tools\train.py:348:                )
  src\violawake_sdk\tools\train.py:349:            delay = min(
  src\violawake_sdk\tools\train.py:350:                _EDGE_TTS_RETRY_MAX_SECONDS,
  src\violawake_sdk\tools\train.py:351:                _EDGE_TTS_RETRY_BASE_SECONDS * (2 ** (attempt - 1)),
  src\violawake_sdk\tools\train.py:352:            )
  src\violawake_sdk\tools\train.py:353:            delay += _EDGE_TTS_RETRY_RNG.uniform(0.0, 
_EDGE_TTS_RETRY_BASE_SECONDS)
  src\violawake_sdk\tools\train.py:354:            logger.warning(
> src\violawake_sdk\tools\train.py:355:                "edge-tts synthesis attempt %s/%s failed for voice %s text 
%.80r: "
  src\violawake_sdk\tools\train.py:356:                "%s: %s; retrying in %.2fs",
  src\violawake_sdk\tools\train.py:357:                attempt,
  src\violawake_sdk\tools\train.py:358:                max_attempts,
> src\violawake_sdk\tools\train.py:359:                voice,
  src\violawake_sdk\tools\train.py:360:                text,
  src\violawake_sdk\tools\train.py:361:                type(exc).__name__,
  src\violawake_sdk\tools\train.py:362:                exc,
  src\violawake_sdk\tools\train.py:363:                delay,
  src\violawake_sdk\tools\train.py:364:            )
  src\violawake_sdk\tools\train.py:365:            time.sleep(delay)
  src\violawake_sdk\tools\train.py:366:
  src\violawake_sdk\tools\train.py:367:    if not mp3_data or len(mp3_data) < 100:
  src\violawake_sdk\tools\train.py:368:        return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:369:            text,
> src\violawake_sdk\tools\train.py:370:            voice,
  src\violawake_sdk\tools\train.py:371:            f"edge-tts returned too little audio data ({len(mp3_data) if 
mp3_data else 0} bytes)",
  src\violawake_sdk\tools\train.py:372:        )
  src\violawake_sdk\tools\train.py:373:
  src\violawake_sdk\tools\train.py:374:    conversion_errors: list[str] = []
  src\violawake_sdk\tools\train.py:375:
  src\violawake_sdk\tools\train.py:376:    # First try libsndfile via soundfile. The backend image already gets this
  src\violawake_sdk\tools\train.py:377:    # through the training stack, and it avoids a hard ffmpeg dependency.
  src\violawake_sdk\tools\train.py:378:    try:
  src\violawake_sdk\tools\train.py:435:    return _edge_tts_fail(
  src\violawake_sdk\tools\train.py:436:        text,
> src\violawake_sdk\tools\train.py:437:        voice,
  src\violawake_sdk\tools\train.py:438:        "MP3-to-WAV conversion failed; " + "; ".join(conversion_errors),
  src\violawake_sdk\tools\train.py:439:    )
  src\violawake_sdk\tools\train.py:440:
  src\violawake_sdk\tools\train.py:441:
  src\violawake_sdk\tools\train.py:442:def _resample_audio(audio: np.ndarray, source_rate: int, target_rate: int) -> 
np.ndarray:
  src\violawake_sdk\tools\train.py:443:    """Resample mono audio while keeping float32 output."""
  src\violawake_sdk\tools\train.py:444:    import numpy as np
  src\violawake_sdk\tools\train.py:445:    from scipy.signal import resample_poly
  src\violawake_sdk\tools\train.py:454:
  src\violawake_sdk\tools\train.py:455:
> src\violawake_sdk\tools\train.py:456:def _kokoro_tts_synthesize(
  src\violawake_sdk\tools\train.py:457:    text: str,
> src\violawake_sdk\tools\train.py:458:    voice: str,
  src\violawake_sdk\tools\train.py:459:    output_path: Path,
  src\violawake_sdk\tools\train.py:460:    *,
  src\violawake_sdk\tools\train.py:461:    engine: Any | None = None,
  src\violawake_sdk\tools\train.py:462:) -> bool:
> src\violawake_sdk\tools\train.py:463:    """Synthesize a single phrase with Kokoro and save as WAV at 16kHz."""
  src\violawake_sdk\tools\train.py:464:    import numpy as np
  src\violawake_sdk\tools\train.py:465:
  src\violawake_sdk\tools\train.py:466:    try:
  src\violawake_sdk\tools\train.py:467:        from violawake_sdk.tts import TTS_SAMPLE_RATE, TTSEngine
  src\violawake_sdk\tools\train.py:468:    except ImportError:
  src\violawake_sdk\tools\train.py:469:        return False
  src\violawake_sdk\tools\train.py:470:
  src\violawake_sdk\tools\train.py:471:    try:
> src\violawake_sdk\tools\train.py:472:        kokoro_engine = engine
> src\violawake_sdk\tools\train.py:473:        if kokoro_engine is None:
> src\violawake_sdk\tools\train.py:474:            kokoro_engine = TTSEngine(voice=voice, sample_rate=TTS_SAMPLE_RATE)
  src\violawake_sdk\tools\train.py:475:        else:
> src\violawake_sdk\tools\train.py:476:            kokoro_engine.voice = voice
  src\violawake_sdk\tools\train.py:477:
> src\violawake_sdk\tools\train.py:478:        audio = np.asarray(kokoro_engine.synthesize(text), dtype=np.float32)
  src\violawake_sdk\tools\train.py:479:        if audio.size == 0:
  src\violawake_sdk\tools\train.py:480:            return False
> src\violawake_sdk\tools\train.py:481:        if int(kokoro_engine.sample_rate) != 16000:
> src\violawake_sdk\tools\train.py:482:            audio = _resample_audio(audio, int(kokoro_engine.sample_rate), 
16000)
  src\violawake_sdk\tools\train.py:483:        _save_wav(audio, output_path, sample_rate=16000)
  src\violawake_sdk\tools\train.py:484:        return True
  src\violawake_sdk\tools\train.py:485:    except Exception:
  src\violawake_sdk\tools\train.py:486:        return False
  src\violawake_sdk\tools\train.py:487:
  src\violawake_sdk\tools\train.py:488:
  src\violawake_sdk\tools\train.py:489:def _generate_tts_positives(
  src\violawake_sdk\tools\train.py:490:    wake_word: str,
  src\violawake_sdk\tools\train.py:492:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:493:) -> list[Path]:
> src\violawake_sdk\tools\train.py:494:    """Generate diverse TTS positive samples using Edge TTS with Kokoro 
fallback.
  src\violawake_sdk\tools\train.py:495:
> src\violawake_sdk\tools\train.py:496:    Produces: 20 voices x 3 phrases (WORD, hey WORD, ok WORD) = 60 clean files.
  src\violawake_sdk\tools\train.py:497:    Then augmentation (noisy + reverb) multiplies to ~180 total.
  src\violawake_sdk\tools\train.py:498:
  src\violawake_sdk\tools\train.py:499:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:500:    """
  src\violawake_sdk\tools\train.py:501:    import numpy as np
  src\violawake_sdk\tools\train.py:502:
  src\violawake_sdk\tools\train.py:503:    from violawake_sdk.training.augment import (
  src\violawake_sdk\tools\train.py:504:        rir_augment,
  src\violawake_sdk\tools\train.py:508:    phrases = [wake_word, f"hey {wake_word}", f"ok {wake_word}"]
  src\violawake_sdk\tools\train.py:509:    generated: list[Path] = []
> src\violawake_sdk\tools\train.py:510:    kokoro_fallback = False
> src\violawake_sdk\tools\train.py:511:    kokoro_engine: Any | None = None
> src\violawake_sdk\tools\train.py:512:    kokoro_voices: list[str] = []
  src\violawake_sdk\tools\train.py:513:
> src\violawake_sdk\tools\train.py:514:    def _ensure_kokoro_ready() -> bool:
> src\violawake_sdk\tools\train.py:515:        nonlocal kokoro_fallback, kokoro_engine, kokoro_voices
> src\violawake_sdk\tools\train.py:516:        if kokoro_fallback:
> src\violawake_sdk\tools\train.py:517:            return kokoro_engine is not None and len(kokoro_voices) > 0
  src\violawake_sdk\tools\train.py:518:        try:
> src\violawake_sdk\tools\train.py:519:            from violawake_sdk.tts import AVAILABLE_VOICES, TTS_SAMPLE_RATE, 
TTSEngine
  src\violawake_sdk\tools\train.py:520:        except ImportError:
  src\violawake_sdk\tools\train.py:521:            return False
  src\violawake_sdk\tools\train.py:522:
> src\violawake_sdk\tools\train.py:523:        print("Using Kokoro TTS for sample generation (Edge TTS unavailable)")
> src\violawake_sdk\tools\train.py:524:        kokoro_fallback = True
> src\violawake_sdk\tools\train.py:525:        kokoro_voices = list(AVAILABLE_VOICES)
> src\violawake_sdk\tools\train.py:526:        if not kokoro_voices:
  src\violawake_sdk\tools\train.py:527:            return False
  src\violawake_sdk\tools\train.py:528:        try:
> src\violawake_sdk\tools\train.py:529:            kokoro_engine = TTSEngine(
> src\violawake_sdk\tools\train.py:530:                voice=kokoro_voices[0],
  src\violawake_sdk\tools\train.py:531:                sample_rate=TTS_SAMPLE_RATE,
  src\violawake_sdk\tools\train.py:532:            )
  src\violawake_sdk\tools\train.py:533:        except Exception:
> src\violawake_sdk\tools\train.py:534:            kokoro_engine = None
> src\violawake_sdk\tools\train.py:535:        return kokoro_engine is not None
  src\violawake_sdk\tools\train.py:536:
  src\violawake_sdk\tools\train.py:537:    if verbose:
> src\violawake_sdk\tools\train.py:538:        total = len(EDGE_TTS_VOICES) * len(phrases)
  src\violawake_sdk\tools\train.py:539:        print(
> src\violawake_sdk\tools\train.py:540:            f"  Generating TTS positives: {len(EDGE_TTS_VOICES)} voices x 
{len(phrases)} phrases = {total} clean samples..."
  src\violawake_sdk\tools\train.py:541:        )
  src\violawake_sdk\tools\train.py:542:
> src\violawake_sdk\tools\train.py:543:    for voice_idx, voice in enumerate(EDGE_TTS_VOICES):
  src\violawake_sdk\tools\train.py:544:        for phrase_idx, phrase in enumerate(phrases):
> src\violawake_sdk\tools\train.py:545:            clean_path = output_dir / 
f"tts_pos_{voice_idx:02d}_{phrase_idx}_{voice}.wav"
  src\violawake_sdk\tools\train.py:546:            if clean_path.exists():
  src\violawake_sdk\tools\train.py:547:                generated.append(clean_path)
  src\violawake_sdk\tools\train.py:548:                continue
  src\violawake_sdk\tools\train.py:549:
> src\violawake_sdk\tools\train.py:550:            if kokoro_fallback:
> src\violawake_sdk\tools\train.py:551:                kokoro_voice = kokoro_voices[voice_idx % len(kokoro_voices)]
> src\violawake_sdk\tools\train.py:552:                ok = _kokoro_tts_synthesize(
  src\violawake_sdk\tools\train.py:553:                    phrase,
> src\violawake_sdk\tools\train.py:554:                    kokoro_voice,
  src\violawake_sdk\tools\train.py:555:                    clean_path,
> src\violawake_sdk\tools\train.py:556:                    engine=kokoro_engine,
  src\violawake_sdk\tools\train.py:557:                )
  src\violawake_sdk\tools\train.py:558:            else:
> src\violawake_sdk\tools\train.py:559:                ok = _edge_tts_synthesize(phrase, voice, clean_path)
> src\violawake_sdk\tools\train.py:560:                if not ok and _ensure_kokoro_ready():
> src\violawake_sdk\tools\train.py:561:                    kokoro_voice = kokoro_voices[voice_idx % len(kokoro_voices)]
> src\violawake_sdk\tools\train.py:562:                    ok = _kokoro_tts_synthesize(
  src\violawake_sdk\tools\train.py:563:                        phrase,
> src\violawake_sdk\tools\train.py:564:                        kokoro_voice,
  src\violawake_sdk\tools\train.py:565:                        clean_path,
> src\violawake_sdk\tools\train.py:566:                        engine=kokoro_engine,
  src\violawake_sdk\tools\train.py:567:                    )
  src\violawake_sdk\tools\train.py:568:            if ok and clean_path.exists():
  src\violawake_sdk\tools\train.py:569:                generated.append(clean_path)
  src\violawake_sdk\tools\train.py:570:
  src\violawake_sdk\tools\train.py:571:                # Generate noisy variant
  src\violawake_sdk\tools\train.py:572:                try:
  src\violawake_sdk\tools\train.py:573:                    from violawake_sdk.audio import load_audio
  src\violawake_sdk\tools\train.py:574:                    from violawake_sdk.training.augment import 
apply_additive_noise
  src\violawake_sdk\tools\train.py:576:                    audio = load_audio(clean_path)
  src\violawake_sdk\tools\train.py:577:                    if audio is not None and len(audio) > 0:
> src\violawake_sdk\tools\train.py:578:                        rng = np.random.default_rng(voice_idx * 100 + 
phrase_idx)
  src\violawake_sdk\tools\train.py:579:
  src\violawake_sdk\tools\train.py:580:                        # Noisy variant (SNR 10-15 dB)
  src\violawake_sdk\tools\train.py:581:                        noisy = apply_additive_noise(audio, snr_db=12.0, 
rng=rng)
  src\violawake_sdk\tools\train.py:582:                        noisy_path = (
> src\violawake_sdk\tools\train.py:583:                            output_dir / 
f"tts_pos_{voice_idx:02d}_{phrase_idx}_{voice}_noisy.wav"
  src\violawake_sdk\tools\train.py:584:                        )
  src\violawake_sdk\tools\train.py:585:                        _save_wav(noisy, noisy_path)
  src\violawake_sdk\tools\train.py:586:                        generated.append(noisy_path)
  src\violawake_sdk\tools\train.py:587:
  src\violawake_sdk\tools\train.py:588:                        # Reverb variant
  src\violawake_sdk\tools\train.py:589:                        reverbed = rir_augment(audio, rng=rng)
  src\violawake_sdk\tools\train.py:590:                        reverb_path = (
> src\violawake_sdk\tools\train.py:591:                            output_dir / 
f"tts_pos_{voice_idx:02d}_{phrase_idx}_{voice}_reverb.wav"
  src\violawake_sdk\tools\train.py:592:                        )
  src\violawake_sdk\tools\train.py:593:                        _save_wav(reverbed, reverb_path)
  src\violawake_sdk\tools\train.py:594:                        generated.append(reverb_path)
  src\violawake_sdk\tools\train.py:595:                except Exception:
  src\violawake_sdk\tools\train.py:596:                    pass  # Augmented variants are best-effort
  src\violawake_sdk\tools\train.py:597:
> src\violawake_sdk\tools\train.py:598:        if verbose and (voice_idx + 1) % 5 == 0:
  src\violawake_sdk\tools\train.py:599:            print(
> src\violawake_sdk\tools\train.py:600:                f"    {voice_idx + 1}/{len(EDGE_TTS_VOICES)} voices done 
({len(generated)} files)"
  src\violawake_sdk\tools\train.py:601:            )
  src\violawake_sdk\tools\train.py:602:
  src\violawake_sdk\tools\train.py:603:    if verbose:
  src\violawake_sdk\tools\train.py:604:        print(f"  TTS positives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:605:
  src\violawake_sdk\tools\train.py:606:    return generated
  src\violawake_sdk\tools\train.py:607:
  src\violawake_sdk\tools\train.py:608:
  src\violawake_sdk\tools\train.py:611:    output_dir: Path,
  src\violawake_sdk\tools\train.py:612:    n_confusables: int = 30,
> src\violawake_sdk\tools\train.py:613:    voices_per_word: int = 10,
  src\violawake_sdk\tools\train.py:614:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:615:) -> list[Path]:
  src\violawake_sdk\tools\train.py:616:    """Generate confusable negative samples via TTS.
  src\violawake_sdk\tools\train.py:617:
  src\violawake_sdk\tools\train.py:618:    Uses the confusables generator to find phonetically similar words,
> src\violawake_sdk\tools\train.py:619:    then synthesizes each with multiple TTS voices.
  src\violawake_sdk\tools\train.py:620:
  src\violawake_sdk\tools\train.py:621:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:622:    """
  src\violawake_sdk\tools\train.py:623:    from violawake_sdk.tools.confusables import generate_confusables
  src\violawake_sdk\tools\train.py:624:
  src\violawake_sdk\tools\train.py:625:    output_dir.mkdir(parents=True, exist_ok=True)
  src\violawake_sdk\tools\train.py:626:    confusable_words = generate_confusables(wake_word, count=n_confusables)
  src\violawake_sdk\tools\train.py:627:
  src\violawake_sdk\tools\train.py:630:        if confusable_words[:5]:
  src\violawake_sdk\tools\train.py:631:            print(f"    Top 5: {', '.join(confusable_words[:5])}")
> src\violawake_sdk\tools\train.py:632:        total = len(confusable_words) * voices_per_word
  src\violawake_sdk\tools\train.py:633:        print(
> src\violawake_sdk\tools\train.py:634:            f"  Synthesizing: {len(confusable_words)} words x {voices_per_word} 
voices = {total} samples..."
  src\violawake_sdk\tools\train.py:635:        )
  src\violawake_sdk\tools\train.py:636:
> src\violawake_sdk\tools\train.py:637:    voices_subset = EDGE_TTS_VOICES[:voices_per_word]
  src\violawake_sdk\tools\train.py:638:    generated: list[Path] = []
  src\violawake_sdk\tools\train.py:639:
  src\violawake_sdk\tools\train.py:640:    for word_idx, word in enumerate(confusable_words):
> src\violawake_sdk\tools\train.py:641:        for voice_idx, voice in enumerate(voices_subset):
  src\violawake_sdk\tools\train.py:642:            safe_word = word.replace(" ", "_")[:30]
> src\violawake_sdk\tools\train.py:643:            out_path = output_dir / 
f"confusable_{word_idx:03d}_{voice_idx}_{safe_word}.wav"
  src\violawake_sdk\tools\train.py:644:            if out_path.exists():
  src\violawake_sdk\tools\train.py:645:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:646:                continue
  src\violawake_sdk\tools\train.py:647:
> src\violawake_sdk\tools\train.py:648:            ok = _edge_tts_synthesize(word, voice, out_path)
  src\violawake_sdk\tools\train.py:649:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:650:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:651:
  src\violawake_sdk\tools\train.py:652:        if verbose and (word_idx + 1) % 10 == 0:
  src\violawake_sdk\tools\train.py:653:            print(f"    {word_idx + 1}/{len(confusable_words)} words done 
({len(generated)} files)")
  src\violawake_sdk\tools\train.py:654:
> src\violawake_sdk\tools\train.py:655:    if not generated and confusable_words and voices_subset:
  src\violawake_sdk\tools\train.py:656:        logger.error(
  src\violawake_sdk\tools\train.py:657:            "edge-tts confusable negative generation produced 0 files for wake 
word %.80r "
  src\violawake_sdk\tools\train.py:658:            "after %s attempts; last error: %s",
  src\violawake_sdk\tools\train.py:659:            wake_word,
> src\violawake_sdk\tools\train.py:660:            len(confusable_words) * len(voices_subset),
  src\violawake_sdk\tools\train.py:661:            _LAST_EDGE_TTS_ERROR or "unknown",
  src\violawake_sdk\tools\train.py:662:        )
  src\violawake_sdk\tools\train.py:663:
  src\violawake_sdk\tools\train.py:664:    if verbose:
  src\violawake_sdk\tools\train.py:665:        print(f"  Confusable negatives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:666:
  src\violawake_sdk\tools\train.py:667:    return generated
  src\violawake_sdk\tools\train.py:668:
  src\violawake_sdk\tools\train.py:669:
> src\violawake_sdk\tools\train.py:670:def _generate_speech_negatives(
  src\violawake_sdk\tools\train.py:671:    output_dir: Path,
> src\violawake_sdk\tools\train.py:672:    n_voices: int = 5,
  src\violawake_sdk\tools\train.py:673:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:674:) -> list[Path]:
  src\violawake_sdk\tools\train.py:675:    """Deprecated for production training: generate speech negatives via TTS.
  src\violawake_sdk\tools\train.py:676:
  src\violawake_sdk\tools\train.py:677:    Production training should use the shared LibriSpeech/MUSAN corpus for
  src\violawake_sdk\tools\train.py:678:    generic speech negatives. This helper remains for legacy CLI experiments.
  src\violawake_sdk\tools\train.py:679:
  src\violawake_sdk\tools\train.py:680:    Returns list of generated WAV file paths.
  src\violawake_sdk\tools\train.py:681:    """
  src\violawake_sdk\tools\train.py:682:    output_dir.mkdir(parents=True, exist_ok=True)
> src\violawake_sdk\tools\train.py:683:    voices_subset = EDGE_TTS_VOICES[:n_voices]
  src\violawake_sdk\tools\train.py:684:    generated: list[Path] = []
  src\violawake_sdk\tools\train.py:685:
> src\violawake_sdk\tools\train.py:686:    total = len(SPEECH_NEGATIVE_PHRASES) * n_voices
  src\violawake_sdk\tools\train.py:687:    if verbose:
  src\violawake_sdk\tools\train.py:688:        print(
> src\violawake_sdk\tools\train.py:689:            f"  Generating speech negatives: {len(SPEECH_NEGATIVE_PHRASES)} 
phrases x {n_voices} voices = {total} samples..."
  src\violawake_sdk\tools\train.py:690:        )
  src\violawake_sdk\tools\train.py:691:
> src\violawake_sdk\tools\train.py:692:    for phrase_idx, phrase in enumerate(SPEECH_NEGATIVE_PHRASES):
> src\violawake_sdk\tools\train.py:693:        for voice_idx, voice in enumerate(voices_subset):
  src\violawake_sdk\tools\train.py:694:            safe_phrase = phrase.replace(" ", "_")[:40]
> src\violawake_sdk\tools\train.py:695:            out_path = output_dir / 
f"speech_neg_{phrase_idx:03d}_{voice_idx}_{safe_phrase}.wav"
  src\violawake_sdk\tools\train.py:696:            if out_path.exists():
  src\violawake_sdk\tools\train.py:697:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:698:                continue
  src\violawake_sdk\tools\train.py:699:
> src\violawake_sdk\tools\train.py:700:            ok = _edge_tts_synthesize(phrase, voice, out_path)
  src\violawake_sdk\tools\train.py:701:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:702:                generated.append(out_path)
  src\violawake_sdk\tools\train.py:703:
  src\violawake_sdk\tools\train.py:704:        if verbose and (phrase_idx + 1) % 25 == 0:
  src\violawake_sdk\tools\train.py:705:            print(
> src\violawake_sdk\tools\train.py:706:                f"    {phrase_idx + 1}/{len(SPEECH_NEGATIVE_PHRASES)} phrases 
done ({len(generated)} files)"
  src\violawake_sdk\tools\train.py:707:            )
  src\violawake_sdk\tools\train.py:708:
> src\violawake_sdk\tools\train.py:709:    if not generated and SPEECH_NEGATIVE_PHRASES and voices_subset:
  src\violawake_sdk\tools\train.py:710:        logger.error(
  src\violawake_sdk\tools\train.py:711:            "edge-tts speech negative generation produced 0 files after %s 
attempts; "
  src\violawake_sdk\tools\train.py:712:            "last error: %s",
> src\violawake_sdk\tools\train.py:713:            len(SPEECH_NEGATIVE_PHRASES) * len(voices_subset),
  src\violawake_sdk\tools\train.py:714:            _LAST_EDGE_TTS_ERROR or "unknown",
  src\violawake_sdk\tools\train.py:715:        )
  src\violawake_sdk\tools\train.py:716:
  src\violawake_sdk\tools\train.py:717:    if verbose:
  src\violawake_sdk\tools\train.py:718:        print(f"  Speech negatives generated: {len(generated)} files")
  src\violawake_sdk\tools\train.py:719:
  src\violawake_sdk\tools\train.py:720:    return generated
  src\violawake_sdk\tools\train.py:721:
  src\violawake_sdk\tools\train.py:1733:    model = model.to(torch_device)
  src\violawake_sdk\tools\train.py:1734:
> src\violawake_sdk\tools\train.py:1735:    quality_phrases = SPEECH_NEGATIVE_PHRASES[:50]
> src\violawake_sdk\tools\train.py:1736:    voice = EDGE_TTS_VOICES[0]  # Single voice keeps the gate fast and 
deterministic.
  src\violawake_sdk\tools\train.py:1737:
  src\violawake_sdk\tools\train.py:1738:    with tempfile.TemporaryDirectory(prefix="violawake_qc_", dir=_TMP_DIR) as 
tmp_dir:
  src\violawake_sdk\tools\train.py:1739:        quality_dir = Path(tmp_dir)
  src\violawake_sdk\tools\train.py:1740:
  src\violawake_sdk\tools\train.py:1741:        speech_files: list[Path] = []
  src\violawake_sdk\tools\train.py:1742:        if verbose:
  src\violawake_sdk\tools\train.py:1743:            print(f"  Generating {len(quality_phrases)} speech phrases for 
quality check...")
  src\violawake_sdk\tools\train.py:1744:        for i, phrase in enumerate(quality_phrases):
  src\violawake_sdk\tools\train.py:1745:            out_path = quality_dir / f"qc_speech_{i:03d}.wav"
> src\violawake_sdk\tools\train.py:1746:            ok = _edge_tts_synthesize(phrase, voice, out_path)
  src\violawake_sdk\tools\train.py:1747:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:1748:                speech_files.append(out_path)
  src\violawake_sdk\tools\train.py:1749:
  src\violawake_sdk\tools\train.py:1750:        raw_confusables = generate_confusables(wake_word, count=40)
  src\violawake_sdk\tools\train.py:1751:        confusable_words: list[str] = []
  src\violawake_sdk\tools\train.py:1752:        seen_confusables: set[str] = set()
  src\violawake_sdk\tools\train.py:1753:        normalized_wake_word = " ".join(wake_word.lower().split())
  src\violawake_sdk\tools\train.py:1754:        for word in raw_confusables:
  src\violawake_sdk\tools\train.py:1769:            safe_word = word.replace(" ", "_")[:30]
  src\violawake_sdk\tools\train.py:1770:            out_path = quality_dir / f"qc_confusable_{i:03d}_{safe_word}.wav"
> src\violawake_sdk\tools\train.py:1771:            ok = _edge_tts_synthesize(word, voice, out_path)
  src\violawake_sdk\tools\train.py:1772:            if ok and out_path.exists():
  src\violawake_sdk\tools\train.py:1773:                confusable_files.append(out_path)
  src\violawake_sdk\tools\train.py:1774:
  src\violawake_sdk\tools\train.py:1775:        silence_audio = np.zeros(16000 * 10, dtype=np.float32)
  src\violawake_sdk\tools\train.py:1776:        silence_path = quality_dir / "qc_silence.wav"
  src\violawake_sdk\tools\train.py:1777:        _save_wav(silence_audio, silence_path)
  src\violawake_sdk\tools\train.py:1778:
  src\violawake_sdk\tools\train.py:1779:        speech_scores = _score_files(speech_files, "qc_speech")
  src\violawake_sdk\tools\train.py:2507:
  src\violawake_sdk\tools\train.py:2508:    # Source 2: Auto-generated confusable negatives (2 rounds, matching 
production)
> src\violawake_sdk\tools\train.py:2509:    # Round 1: 30 confusables x 10 voices (broad phonetic coverage)
> src\violawake_sdk\tools\train.py:2510:    # Round 2: 16 confusables x 10 voices (tighter variants for hard negatives)
  src\violawake_sdk\tools\train.py:2511:    confusable_files: list[Path] = []
  src\violawake_sdk\tools\train.py:2512:    if args.auto_corpus:
  src\violawake_sdk\tools\train.py:2513:        if verbose:
  src\violawake_sdk\tools\train.py:2514:            print("\nStep 1b: Auto-generating confusable negatives (round 1: 
broad)...")
  src\violawake_sdk\tools\train.py:2515:        confusable_dir_r1 = corpus_dir / "confusables_r1"
  src\violawake_sdk\tools\train.py:2516:        confusable_r1 = _generate_confusable_negatives(
  src\violawake_sdk\tools\train.py:2517:            args.word,
  src\violawake_sdk\tools\train.py:2518:            confusable_dir_r1,
  src\violawake_sdk\tools\train.py:2519:            n_confusables=30,
> src\violawake_sdk\tools\train.py:2520:            voices_per_word=10,
  src\violawake_sdk\tools\train.py:2521:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2522:        )
  src\violawake_sdk\tools\train.py:2523:        if confusable_r1:
  src\violawake_sdk\tools\train.py:2524:            neg_tag_map["neg_confusable_r1"] = confusable_r1
  src\violawake_sdk\tools\train.py:2525:            confusable_files.extend(confusable_r1)
  src\violawake_sdk\tools\train.py:2526:
  src\violawake_sdk\tools\train.py:2527:        if verbose:
  src\violawake_sdk\tools\train.py:2528:            print("\nStep 1b2: Auto-generating confusable negatives (round 2: 
tight variants)...")
  src\violawake_sdk\tools\train.py:2532:            confusable_dir_r2,
  src\violawake_sdk\tools\train.py:2533:            n_confusables=16,
> src\violawake_sdk\tools\train.py:2534:            voices_per_word=10,
  src\violawake_sdk\tools\train.py:2535:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2536:        )
  src\violawake_sdk\tools\train.py:2537:        if confusable_r2:
  src\violawake_sdk\tools\train.py:2538:            neg_tag_map["neg_confusable_r2"] = confusable_r2
  src\violawake_sdk\tools\train.py:2539:            confusable_files.extend(confusable_r2)
  src\violawake_sdk\tools\train.py:2540:
  src\violawake_sdk\tools\train.py:2541:    # Source 3: Auto-generated speech negatives
  src\violawake_sdk\tools\train.py:2542:    speech_neg_files: list[Path] = []
  src\violawake_sdk\tools\train.py:2547:        speech_neg_files = _generate_speech_negatives(
  src\violawake_sdk\tools\train.py:2548:            speech_neg_dir,
> src\violawake_sdk\tools\train.py:2549:            n_voices=5,
  src\violawake_sdk\tools\train.py:2550:            verbose=verbose,
  src\violawake_sdk\tools\train.py:2551:        )
  src\violawake_sdk\tools\train.py:2552:        if speech_neg_files:
  src\violawake_sdk\tools\train.py:2553:            neg_tag_map["neg_speech"] = speech_neg_files
  src\violawake_sdk\tools\train.py:2554:
  src\violawake_sdk\tools\train.py:2555:    # Source 4: Shared universal negative corpus (LibriSpeech, MUSAN, etc.)
  src\violawake_sdk\tools\train.py:2556:    # These are word-agnostic negatives that every wake word model needs.
  src\violawake_sdk\tools\train.py:2557:    # Without them, models only learn to distinguish the wake word from a



 succeeded in 943ms:
acdd18f Fix edge TTS negative generation
1a83620 fix: 5 round-4 adversary findings — security, API clarity, deprecation warnings

 succeeded in 944ms:
b45e03c Require corpus speech negatives in backend training
8161298 fix: 3-round adversarial audit — 8 P0s + 11 P1s across SDK, Console, docs
1a83620 fix: 5 round-4 adversary findings — security, API clarity, deprecation warnings

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 1a83620 -- src/violawake_sdk/tools/train.py console/backend/app/services/training_service.py | Select-String -Pattern '_generate_speech_negatives|SPEECH_NEGATIVE_PHRASES|edge_tts|speech negative' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 8161298 -- src/violawake_sdk/tools/train.py console/backend/app/services/training_service.py | Select-String -Pattern '_generate_speech_negatives|SPEECH_NEGATIVE_PHRASES|edge_tts|speech negative' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show acdd18f -- src/violawake_sdk/tools/train.py | Select-String -Pattern '_generate_speech_negatives|SPEECH_NEGATIVE_PHRASES|edge_tts|speech negative|MP3-to-WAV|soundfile|pydub' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 854acaf -- src/violawake_sdk/tools/train.py | Select-String -Pattern '_EDGE_TTS_MAX_ATTEMPTS|retry|edge-tts failed after|_edge_tts_synthesize' -Context 2,4" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 763ms:

  +        from violawake_sdk.tools.train import (
  +            _generate_confusable_negatives,
> +            _generate_speech_negatives,
  +            _generate_tts_positives,
  +            _train_temporal_cnn,
  +        )
  +
  +            "train_loss": 0.0,
  +            "val_loss": 0.0,
> +            "message": "Generated confusables. Generating speech negatives...",
  +            "error": None,
  +        })
  +
> +        # Source 3: Auto-generated speech negatives (common phrases)
  +        speech_dir = neg_temp_dir / "speech"
  +        try:
> +            speech_files = _generate_speech_negatives(
  +                speech_dir,
  +                n_voices=3,
  +                verbose=False,
  +            )



 succeeded in 719ms:

  Date:   Thu May 7 08:00:54 2026 -0500
  
>     Add Edge TTS retry backoff
  
  diff --git a/src/violawake_sdk/tools/train.py b/src/violawake_sdk/tools/train.py
  index 5db2a75..0c687cd 100644
  --- a/src/violawake_sdk/tools/train.py
   _LAST_EDGE_TTS_ERROR: str | None = None
   _REPORTED_EDGE_TTS_ERRORS: set[str] = set()
> +_EDGE_TTS_MAX_ATTEMPTS = 3
> +_EDGE_TTS_RETRY_BASE_SECONDS = 0.75
> +_EDGE_TTS_RETRY_MAX_SECONDS = 4.0
> +_EDGE_TTS_RETRY_RNG = Random()
   
   # ---------------------------------------------------------------------------
   # Edge-TTS voice pool for diverse positive and negative generation
> @@ -316,21 +320,49 @@ def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
                   mp3_buf.write(chunk["data"])
           return mp3_buf.getvalue()
   
  -    try:
  +
  +    mp3_data: bytes | None = None
> +    max_attempts = max(1, _EDGE_TTS_MAX_ATTEMPTS)
  +    for attempt in range(1, max_attempts + 1):
  +        try:
  +            mp3_data = _run_synth()
  +            break
  +                    text,
  +                    voice,
> +                    f"edge-tts failed after {attempt} attempts: {type(exc).__name__}: {exc}",
  +                )
  +            delay = min(
> +                _EDGE_TTS_RETRY_MAX_SECONDS,
> +                _EDGE_TTS_RETRY_BASE_SECONDS * (2 ** (attempt - 1)),
  +            )
> +            delay += _EDGE_TTS_RETRY_RNG.uniform(0.0, _EDGE_TTS_RETRY_BASE_SECONDS)
  +            logger.warning(
  +                "edge-tts synthesis attempt %s/%s failed for voice %s text %.80r: "
> +                "%s: %s; retrying in %.2fs",
  +                attempt,
  +                max_attempts,
  +                voice,
  +                text,



 succeeded in 763ms:

   # Set by _train_temporal_cnn() via its tmp_dir parameter.
   _TMP_DIR: str | None = None
> +_LAST_EDGE_TTS_ERROR: str | None = None
> +_REPORTED_EDGE_TTS_ERRORS: set[str] = set()
   
   # ---------------------------------------------------------------------------
   # Edge-TTS voice pool for diverse positive and negative generation
  @@ -259,6 +264,26 @@ def get_best_provider(device: str | None = None) -> str:
   
   
> +def _edge_tts_fail(text: str, voice: str, detail: str | BaseException) -> bool:
  +    """Record and log an edge-tts failure while preserving the bool API."""
> +    global _LAST_EDGE_TTS_ERROR
  +
  +    summary = f"{type(detail).__name__}: {detail}" if isinstance(detail, BaseException) else detail
> +    _LAST_EDGE_TTS_ERROR = summary
  +
  +    # A missing decoder causes hundreds of identical per-sample failures. Log
  +    # the actual exception once, then the generator summary logs the zero count.
> +    if summary not in _REPORTED_EDGE_TTS_ERRORS:
> +        _REPORTED_EDGE_TTS_ERRORS.add(summary)
  +        logger.error(
  +            "edge-tts synthesis failed for voice %s text %.80r: %s",
  +            voice,
  +            text,
  +
  +
>  def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
       """Synthesize a single phrase with edge-tts and save as WAV at 16kHz.
   
> @@ -268,11 +293,20 @@ def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
       import io
       import tempfile
   
> +    global _LAST_EDGE_TTS_ERROR
> +    _LAST_EDGE_TTS_ERROR = None
  +
       try:
>          import edge_tts
  -    except ImportError:
  -        print("WARNING: edge-tts not installed. pip install edge-tts", file=sys.stderr)
  -        return False
  +    except ImportError as exc:
  +        if exc:
  +            message = f"{message} ({type(exc).__name__}: {exc})"
> +        return _edge_tts_fail(
  +            text,
  +            voice,
  +            message,
  +        )
   
       async def _synth():
>          communicate = edge_tts.Communicate(text, voice)
> @@ -295,47 +329,82 @@ def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
                   mp3_data = loop.run_until_complete(_synth())
           except RuntimeError:
               mp3_data = asyncio.run(_synth())
  +    except Exception as exc:
> +        return _edge_tts_fail(text, voice, exc)
  +
  +    if not mp3_data or len(mp3_data) < 100:
> +        return _edge_tts_fail(
  +            text,
  +            voice,
  +            f"edge-tts returned too little audio data ({len(mp3_data) if mp3_data else 0} bytes)",
  +        )
  +    conversion_errors: list[str] = []
   
> -        # Convert MP3 to WAV at 16kHz using pydub or ffmpeg
  -        try:
> -            from pydub import AudioSegment
  -
  -            seg = AudioSegment.from_mp3(io.BytesIO(mp3_data))
  -            seg = seg.set_channels(1).set_frame_rate(16000).set_sample_width(2)
  -            seg.export(str(output_path), format="wav")
  -            os.close(tmp_fd)
  -        os.chmod(tmp_path, 0o600)
> +    # First try libsndfile via soundfile. The backend image already gets this
  +    # through the training stack, and it avoids a hard ffmpeg dependency.
  +    try:
  +        import numpy as np
> +        import soundfile as sf
   
  -        try:
  -            import torchaudio
  -
  +        return output_path.exists() and output_path.stat().st_size > 44
  +    except ImportError as exc:
> +        conversion_errors.append(f"soundfile unavailable: {type(exc).__name__}: {exc}")
  +    except Exception as exc:
> +        conversion_errors.append(f"soundfile decode failed: {type(exc).__name__}: {exc}")
  +
> +    # Fallback: pydub with ffmpeg/ffprobe when available.
  +    try:
> +        from pydub import AudioSegment
  +
  +        seg = AudioSegment.from_mp3(io.BytesIO(mp3_data))
  +        seg = seg.set_channels(1).set_frame_rate(16000).set_sample_width(2)
  +        seg.export(str(output_path), format="wav")
  +        return output_path.exists() and output_path.stat().st_size > 44
  +    except ImportError as exc:
> +        conversion_errors.append(f"pydub unavailable: {type(exc).__name__}: {exc}")
  +    except Exception as exc:
> +        conversion_errors.append(f"pydub decode failed: {type(exc).__name__}: {exc}")
  +
  +    # Fallback: write MP3 to temp, load with torchaudio.
  +    tmp_fd, tmp_path = tempfile.mkstemp(suffix=".mp3", dir=_TMP_DIR)
  +    try:
  +        Path(tmp_path).unlink(missing_ok=True)
  +
> +    return _edge_tts_fail(
  +        text,
  +        voice,
> +        "MP3-to-WAV conversion failed; " + "; ".join(conversion_errors),
  +    )
   
   
   def _resample_audio(audio: np.ndarray, source_rate: int, target_rate: int) -> np.ndarray:
  +            wake_word,
  +            len(confusable_words) * len(voices_subset),
> +            _LAST_EDGE_TTS_ERROR or "unknown",
  +        )
  +
       if verbose:
           print(f"  Confusable negatives generated: {len(generated)} files")
   
> @@ -593,6 +671,14 @@ def _generate_speech_negatives(
>                  f"    {phrase_idx + 1}/{len(SPEECH_NEGATIVE_PHRASES)} phrases done ({len(generated)} files)"
               )
   
> +    if not generated and SPEECH_NEGATIVE_PHRASES and voices_subset:
  +        logger.error(
> +            "edge-tts speech negative generation produced 0 files after %s attempts; "
  +            "last error: %s",
> +            len(SPEECH_NEGATIVE_PHRASES) * len(voices_subset),
> +            _LAST_EDGE_TTS_ERROR or "unknown",
  +        )
  +
       if verbose:
>          print(f"  Speech negatives generated: {len(generated)} files")
   
  @@ -1411,6 +1497,13 @@ def _train_temporal_cnn(
           verbose=verbose,
       )



 succeeded in 895ms:

  +  - Auto-generates TTS positives if user provides fewer than 100 samples
  +  - Auto-generates confusable negatives (phonetically similar words)
> +  - Auto-generates speech negatives (common phrases via TTS)
     - FocalLoss for class imbalance handling
     - AdamW optimizer with cosine annealing LR schedule
     - Exponential Moving Average (EMA) of model weights
  -  - 80/20 train/validation split with early stopping
  +  A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 conditions)
  +  B. Confusable negatives: phonetically similar words via TTS (30 words x 10 voices)
> +  C. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
  +  D. User-provided negatives via --negatives directory (if any)
   
   Usage::
   
  +# ---------------------------------------------------------------------------
  +
> +EDGE_TTS_VOICES = [
  +    "en-US-GuyNeural",
  +    "en-US-JennyNeural",
  +    "en-US-AriaNeural",
  +    "en-US-DavisNeural",
  +]
  +
> +# Common phrases for speech negative generation
> +SPEECH_NEGATIVE_PHRASES = [
  +    "what time is it",
  +    "play some music",
  +    "turn off the lights",
  +    "set an alarm for seven",
  +# ---------------------------------------------------------------------------
  +
> +def _edge_tts_synthesize(text: str, voice: str, output_path: Path) -> bool:
  +    """Synthesize a single phrase with edge-tts and save as WAV at 16kHz.
  +
  +    Returns True on success, False on failure.
  +    """
  +
  +    try:
> +        import edge_tts
  +    except ImportError:
  +        print("WARNING: edge-tts not installed. pip install edge-tts", file=sys.stderr)
  +        return False
  +
  +    async def _synth():
> +        communicate = edge_tts.Communicate(text, voice)
  +        mp3_buf = io.BytesIO()
  +        async for chunk in communicate.stream():
  +            if chunk["type"] == "audio":
  +                mp3_buf.write(chunk["data"])
  +
  +    if verbose:
> +        total = len(EDGE_TTS_VOICES) * len(phrases)
> +        print(f"  Generating TTS positives: {len(EDGE_TTS_VOICES)} voices x {len(phrases)} phrases = {total} clean 
samples...")
  +
> +    for voice_idx, voice in enumerate(EDGE_TTS_VOICES):
  +        for phrase_idx, phrase in enumerate(phrases):
  +            clean_path = output_dir / f"tts_pos_{voice_idx:02d}_{phrase_idx}_{voice}.wav"
  +            if clean_path.exists():
  +                generated.append(clean_path)
  +                continue
  +
> +            ok = _edge_tts_synthesize(phrase, voice, clean_path)
  +            if ok and clean_path.exists():
  +                generated.append(clean_path)
  +
  +                # Generate noisy variant
  +
  +        if verbose and (voice_idx + 1) % 5 == 0:
> +            print(f"    {voice_idx + 1}/{len(EDGE_TTS_VOICES)} voices done ({len(generated)} files)")
  +
  +    if verbose:
  +        print(f"  TTS positives generated: {len(generated)} files")
  +
  +        print(f"  Synthesizing: {len(confusable_words)} words x {voices_per_word} voices = {total} samples...")
  +
> +    voices_subset = EDGE_TTS_VOICES[:voices_per_word]
  +    generated: list[Path] = []
  +
  +    for word_idx, word in enumerate(confusable_words):
  +        for voice_idx, voice in enumerate(voices_subset):
  +                continue
  +
> +            ok = _edge_tts_synthesize(word, voice, out_path)
  +            if ok and out_path.exists():
  +                generated.append(out_path)
  +
  +        if verbose and (word_idx + 1) % 10 == 0:
  +
  +
> +def _generate_speech_negatives(
  +    output_dir: Path,
  +    n_voices: int = 5,
  +    verbose: bool = True,
  +) -> list[Path]:
> +    """Generate speech negative samples via TTS using common phrases.
  +
  +    Returns list of generated WAV file paths.
  +    """
  +    output_dir.mkdir(parents=True, exist_ok=True)
> +    voices_subset = EDGE_TTS_VOICES[:n_voices]
  +    generated: list[Path] = []
  +
> +    total = len(SPEECH_NEGATIVE_PHRASES) * n_voices
  +    if verbose:
> +        print(f"  Generating speech negatives: {len(SPEECH_NEGATIVE_PHRASES)} phrases x {n_voices} voices = {total} 
samples...")
  +
> +    for phrase_idx, phrase in enumerate(SPEECH_NEGATIVE_PHRASES):
  +        for voice_idx, voice in enumerate(voices_subset):
  +            safe_phrase = phrase.replace(" ", "_")[:40]
  +            out_path = output_dir / f"speech_neg_{phrase_idx:03d}_{voice_idx}_{safe_phrase}.wav"
  +            if out_path.exists():
  +                continue
  +
> +            ok = _edge_tts_synthesize(phrase, voice, out_path)
  +            if ok and out_path.exists():
  +                generated.append(out_path)
  +
  +        if verbose and (phrase_idx + 1) % 25 == 0:
> +            print(f"    {phrase_idx + 1}/{len(SPEECH_NEGATIVE_PHRASES)} phrases done ({len(generated)} files)")
  +
  +    if verbose:
> +        print(f"  Speech negatives generated: {len(generated)} files")
  +
  +    return generated
  +
  +
  +    import torch
  +
> +    quality_phrases = SPEECH_NEGATIVE_PHRASES[:50]
  +    quality_dir = Path(tempfile.mkdtemp(prefix="violawake_qc_"))
> +    voice = EDGE_TTS_VOICES[0]  # Use a single voice for speed
  +    quality_files: list[Path] = []
  +
  +    if verbose:
  +        print(f"  Generating {len(quality_phrases)} test phrases for quality check...")
  +    for i, phrase in enumerate(quality_phrases):
  +        out_path = quality_dir / f"qc_{i:03d}.wav"
> +        ok = _edge_tts_synthesize(phrase, voice, out_path)
  +        if ok and out_path.exists():
  +            quality_files.append(out_path)
  +
  +    if len(quality_files) < 10:
  +            f"  {fp_rate * 100:.1f}% of speech test phrases scored above 0.5.\n"
  +            "  This model may trigger on regular speech.\n"
> +            "  Recommendation: add more speech negatives via --negatives\n"
  +            "  or ensure --auto-corpus is enabled.\n"
  +        )
  +    elif fp_rate > 0.10:
  +        print(
  +            f"\n  CAUTION: {fp_rate * 100:.1f}% of speech test phrases scored >0.5.\n"
> +            "  Consider adding more diverse speech negatives.\n"
  +        )
  +    else:
  +        if verbose:
  +            print("  Quality gate PASSED: low speech FP rate.")
  +            "Train a custom wake word model.\n\n"
  +            "Default: TemporalCNN on 9-frame OWW embedding windows (production architecture).\n"
> +            "Auto-generates TTS positives, confusable negatives, and speech negatives."
  +        ),
           formatter_class=argparse.RawDescriptionHelpFormatter,
           epilog=__doc__,
       )
  +        default=True,
  +        dest="auto_corpus",
> +        help="Auto-generate TTS positives, confusables, and speech negatives (default: True)",
  +    )
  +    parser.add_argument(
  +        "--no-auto-corpus",
  +        action="store_false",
  +            neg_tag_map["neg_confusable"] = confusable_files
  +
> +    # Source 3: Auto-generated speech negatives
  +    speech_neg_files: list[Path] = []
  +    if args.auto_corpus:
  +        if verbose:
> +            print(f"\nStep 1c: Auto-generating speech negatives...")
  +        speech_neg_dir = corpus_dir / "speech_negatives"
> +        speech_neg_files = _generate_speech_negatives(
  +            speech_neg_dir, n_voices=5, verbose=verbose,
  +        )
  +        if speech_neg_files:
  +            neg_tag_map["neg_speech"] = speech_neg_files



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show -s --format="%h %ci %s" 1a83620 8161298 acdd18f 196bfdd b45e03c 854acaf 9545987' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git branch --contains 1a83620; git branch --contains 8161298' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show -s --format="%h %ci %s" 13c5a59 54f20b4 67b3beb' in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 2092ms:
* master
* master

 succeeded in 3087ms:
1a83620 2026-03-28 03:20:56 -0500 fix: 5 round-4 adversary findings — security, API clarity, deprecation warnings
8161298 2026-03-28 22:08:47 -0500 fix: 3-round adversarial audit — 8 P0s + 11 P1s across SDK, Console, docs
acdd18f 2026-05-07 06:50:25 -0500 Fix edge TTS negative generation
196bfdd 2026-05-07 06:28:41 -0500 fix(training): four runtime bugs blocking the actual product
b45e03c 2026-05-07 08:00:50 -0500 Require corpus speech negatives in backend training
854acaf 2026-05-07 08:00:54 -0500 Add Edge TTS retry backoff
9545987 2026-05-07 09:07:07 -0500 fix(audio): try soundfile before torchaudio in load_audio

 succeeded in 4186ms:
13c5a59 2026-03-26 11:59:16 -0500 feat: ViolaWake Console — full SaaS platform for custom wake word training
54f20b4 2026-04-05 05:27:19 -0500 launch: deployment helper, updated Show HN draft, fix stale test refs
67b3beb 2026-05-06 19:46:25 -0500 chore(deploy): production docker-compose

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 1a83620:console/backend/app/services/training_service.py | Select-String -Pattern 'from violawake_sdk.tools.train|_generate|_train_temporal|run_training_pipeline|subprocess|quality|dummy|TrainingArtifact' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 8161298''^:console/backend/app/services/training_service.py | Select-String -Pattern '"'from violawake_sdk.tools.train|_generate|_train_temporal|run_training_pipeline|subprocess|quality|dummy|TrainingArtifact' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 1a83620:console/backend/app/services/training_service.py | Select-Object -First 220' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 8161298:console/backend/app/services/training_service.py | Select-String -Pattern 'from violawake_sdk.tools.train|_generate|_train_temporal|run_training_pipeline|subprocess|quality|dummy|TrainingArtifact' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 854ms:

  
  
  @dataclass(slots=True)
> class TrainingArtifact:
      """Artifacts produced by a completed training run."""
  
      local_path: Path
      config_json: str | None
      config_bytes: bytes | None
      d_prime: float | None
      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
      negatives_dir: Path | None = None,
> ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      storage = get_storage()
  
      def _ensure_not_cancelled() -> None:
          if is_cancelled():
              "error": None,
          })
  
>         from violawake_sdk.tools.train import _train_mlp_on_oww
  
          started_at = time.monotonic()
  
          def _on_epoch(info: dict[str, Any]) -> None:
              _ensure_not_cancelled()
              elapsed = time.monotonic() - started_at
                  if isinstance(raw_d_prime, (int, float)):
                      d_prime_value = float(raw_d_prime)
  
>         return TrainingArtifact(
              local_path=output_path,
              config_json=config_json,
              config_bytes=config_bytes,
              d_prime=d_prime_value,
              size_bytes=output_path.stat().st_size,
          )



 exited 1 in 844ms:
"""Training pipeline helpers used by the async job queue."""

from __future__ import annotations

import asyncio
import json
import logging
import shutil
import tempfile
import threading
import time
from collections.abc import Callable, Coroutine
from dataclasses import dataclass
from datetime import datetime, timezone
from pathlib import Path
from typing import Any

from sqlalchemy import select, update

from app.config import settings
from app.database import async_session_factory
from app.models import Recording, TrainedModel, TrainingJob
from app.monitoring import log_exception
from app.storage import build_companion_config_identifier, build_model_key, get_storage

logger = logging.getLogger("violawake.training")

_training_semaphore = threading.Semaphore(settings.max_concurrent_jobs)
_event_queues: dict[int, list[asyncio.Queue[dict[str, Any]]]] = {}
_queue_lock = threading.Lock()
_active_job_ids: set[int] = set()
_active_jobs_lock = threading.Lock()


class TrainingCancelledError(RuntimeError):
    """Raised when a running training job is cancelled."""


@dataclass(slots=True)
class TrainingArtifact:
    """Artifacts produced by a completed training run."""

    local_path: Path
    config_json: str | None
    config_bytes: bytes | None
    d_prime: float | None
    size_bytes: int


def subscribe(job_id: int) -> asyncio.Queue[dict[str, Any]]:
    """Subscribe to training events for a job."""
    queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue()
    with _queue_lock:
        _event_queues.setdefault(job_id, []).append(queue)
    return queue


def unsubscribe(job_id: int, queue: asyncio.Queue[dict[str, Any]]) -> None:
    """Remove a training event subscriber."""
    with _queue_lock:
        queues = _event_queues.get(job_id)
        if queues is None:
            return
        try:
            queues.remove(queue)
        except ValueError:
            return
        if not queues:
            _event_queues.pop(job_id, None)


def get_training_worker_snapshot() -> dict[str, Any]:
    """Return a snapshot of current worker utilization."""
    with _active_jobs_lock:
        active_job_ids = sorted(_active_job_ids)

    active_workers = len(active_job_ids)
    max_workers = settings.max_concurrent_jobs
    return {
        "active_workers": active_workers,
        "max_workers": max_workers,
        "available_slots": max(max_workers - active_workers, 0),
        "active_job_ids": active_job_ids,
    }


def run_training_job_sync(
    *,
    job_id: int,
    wake_word: str,
    recording_identifiers: list[str],
    output_path: Path,
    epochs: int,
    timeout_seconds: int,
    progress_callback: Callable[[dict[str, Any]], None],
    is_cancelled: Callable[[], bool],
    negatives_dir: Path | None = None,
) -> TrainingArtifact:
    """Run the ViolaWake SDK training pipeline synchronously."""
    positives_dir: Path | None = None
    storage = get_storage()

    def _ensure_not_cancelled() -> None:
        if is_cancelled():
            raise TrainingCancelledError("Training cancelled by user")

    try:
        _ensure_not_cancelled()
        progress_callback({
            "status": "running",
            "progress": 0.0,
            "epoch": 0,
            "total_epochs": epochs,
            "train_loss": 0.0,
            "val_loss": 0.0,
            "message": "Preparing training data...",
            "error": None,
        })

        positives_dir = Path(tempfile.mkdtemp(prefix="violawake_train_"))
        for index, recording_identifier in enumerate(recording_identifiers):
            _ensure_not_cancelled()
            if not storage.exists(recording_identifier):
                logger.warning("Recording %s was missing for training job %s", recording_identifier, job_id)
                continue

            dst = positives_dir / f"sample_{index:04d}.wav"
            dst.write_bytes(storage.download(recording_identifier))

        wav_count = len(list(positives_dir.glob("*.wav")))
        if wav_count < 5:
            raise RuntimeError("Only %s valid WAV files found. Need at least 5." % wav_count)

        progress_callback({
            "status": "running",
            "progress": 5.0,
            "epoch": 0,
            "total_epochs": epochs,
            "train_loss": 0.0,
            "val_loss": 0.0,
            "message": "Loaded %s recordings. Starting training..." % wav_count,
            "error": None,
        })

        from violawake_sdk.tools.train import _train_mlp_on_oww

        started_at = time.monotonic()

        def _on_epoch(info: dict[str, Any]) -> None:
            _ensure_not_cancelled()
            elapsed = time.monotonic() - started_at
            if elapsed > timeout_seconds:
                raise RuntimeError(
                    "Training job timed out after %ss (%s minutes)"
                    % (timeout_seconds, timeout_seconds // 60)
                )

            epoch = int(info.get("epoch", 0))
            total_epochs = int(info.get("total_epochs", epochs)) or epochs
            train_loss = float(info.get("train_loss", 0.0))
            val_loss = float(info.get("val_loss", 0.0))
            progress = min(10.0 + 85.0 * (epoch / total_epochs), 95.0)

            progress_callback({
                "status": "running",
                "progress": round(progress, 2),
                "epoch": epoch,
                "total_epochs": total_epochs,
                "train_loss": round(train_loss, 6),
                "val_loss": round(val_loss, 6),
                "message": "Epoch %s/%s - loss: %.4f" % (epoch, total_epochs, train_loss),
                "error": None,
            })

        _train_mlp_on_oww(
            positives_dir=positives_dir,
            output_path=output_path,
            epochs=epochs,
            augment=True,
            eval_dir=None,
            negatives_dir=negatives_dir,
            verbose=True,
            progress_callback=_on_epoch,
        )

        _ensure_not_cancelled()
        if not output_path.exists():
            raise RuntimeError("Training completed but no model file was produced")

        config_path = output_path.with_suffix(".config.json")
        config_json: str | None = None
        config_bytes: bytes | None = None
        d_prime_value: float | None = None
        if config_path.exists():
            config_bytes = config_path.read_bytes()
            config_data = json.loads(config_bytes.decode("utf-8"))
            config_json = json.dumps(config_data)
            if isinstance(config_data, dict):
                raw_d_prime = config_data.get("d_prime")
                if isinstance(raw_d_prime, (int, float)):
                    d_prime_value = float(raw_d_prime)

        return TrainingArtifact(
            local_path=output_path,
            config_json=config_json,
            config_bytes=config_bytes,
            d_prime=d_prime_value,
            size_bytes=output_path.stat().st_size,
        )
    except TrainingCancelledError:
        logger.info("Training job %s cancelled", job_id)
        raise
    except Exception as exc:
        log_exception(
            logger,
            exc,
            message="Training job failed",
            source="training",
            extra={"job_id": job_id, "wake_word": wake_word},
        )

2026-05-07T16:11:04.843072Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.8 seconds
Output:
"""Training pipeline helpers used by the async job queue."""

from __future__ import annotations

import asyncio
import json
import logging
import shutil
import tempfile
import threading
import time
from collections.abc import Callable, Coroutine
from dataclasses import dataclass
from datetime import datetime, timezone
from pathlib import Path
from typing import Any

from sqlalchemy import select, update

from app.config import settings
from app.database import async_session_factory
from app.models import Recording, TrainedModel, TrainingJob
from app.monitoring import log_exception
from app.storage import build_companion_config_identifier, build_model_key, get_storage

logger = logging.getLogger("violawake.training")

_training_semaphore = threading.Semaphore(settings.max_concurrent_jobs)
_event_queues: dict[int, list[asyncio.Queue[dict[str, Any]]]] = {}
_queue_lock = threading.Lock()
_active_job_ids: set[int] = set()
_active_jobs_lock = threading.Lock()


class TrainingCancelledError(RuntimeError):
    """Raised when a running training job is cancelled."""


@dataclass(slots=True)
class TrainingArtifact:
    """Artifacts produced by a completed training run."""

    local_path: Path
    config_json: str | None
    config_bytes: bytes | None
    d_prime: float | None
    size_bytes: int


def subscribe(job_id: int) -> asyncio.Queue[dict[str, Any]]:
    """Subscribe to training events for a job."""
    queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue()
    with _queue_lock:
        _event_queues.setdefault(job_id, []).append(queue)
    return queue


def unsubscribe(job_id: int, queue: asyncio.Queue[dict[str, Any]]) -> None:
    """Remove a training event subscriber."""
    with _queue_lock:
        queues = _event_queues.get(job_id)
        if queues is None:
            return
        try:
            queues.remove(queue)
        except ValueError:
            return
        if not queues:
            _event_queues.pop(job_id, None)


def get_training_worker_snapshot() -> dict[str, Any]:
    """Return a snapshot of current worker utilization."""
    with _active_jobs_lock:
        active_job_ids = sorted(_active_job_ids)

    active_workers = len(active_job_ids)
    max_workers = settings.max_concurrent_jobs
    return {
        "active_workers": active_workers,
        "max_workers": max_workers,
        "available_slots": max(max_workers - active_workers, 0),
        "active_job_ids": active_job_ids,
    }


def run_training_job_sync(
    *,
    job_id: int,
    wake_word: str,
    recording_identifiers: list[str],
    output_path: Path,
    epochs: int,
    timeout_seconds: int,
    progress_callback: Callable[[dict[str, Any]], None],
    is_cancelled: Callable[[], bool],
    negatives_dir: Path | None = None,
) -> TrainingArtifact:
    """Run the ViolaWake SDK training pipeline synchronously."""
    positives_dir: Path | None = None
    storage = get_storage()

    def _ensure_not_cancelled() -> None:
        if is_cancelled():
            raise TrainingCancelledError("Training cancelled by user")

    try:
        _ensure_not_cancelled()
        progress_callback({
            "status": "running",
            "progress": 0.0,
            "epoch": 0,
            "total_epochs": epochs,
            "train_loss": 0.0,
            "val_loss": 0.0,
            "message": "Preparing training data...",
            "error": None,
        })

        positives_dir = Path(tempfile.mkdtemp(prefix="violawake_train_"))
        for index, recording_identifier in enumerate(recording_identifiers):
            _ensure_not_cancelled()
            if not storage.exists(recording_identifier):
                logger.warning("Recording %s was missing for training job %s", recording_identifier, job_id)
                continue

            dst = positives_dir / f"sample_{index:04d}.wav"
            dst.write_bytes(storage.download(recording_identifier))

        wav_count = len(list(positives_dir.glob("*.wav")))
        if wav_count < 5:
            raise RuntimeError("Only %s valid WAV files found. Need at least 5." % wav_count)

        progress_callback({
            "status": "running",
            "progress": 5.0,
            "epoch": 0,
            "total_epochs": epochs,
            "train_loss": 0.0,
            "val_loss": 0.0,
            "message": "Loaded %s recordings. Starting training..." % wav_count,
            "error": None,
        })

        from violawake_sdk.tools.train import _train_mlp_on_oww

        started_at = time.monotonic()

        def _on_epoch(info: dict[str, Any]) -> None:
            _ensure_not_cancelled()
            elapsed = time.monotonic() - started_at
            if elapsed > timeout_seconds:
                raise RuntimeError(
                    "Training job timed out after %ss (%s minutes)"
                    % (timeout_seconds, timeout_seconds // 60)
                )

            epoch = int(info.get("epoch", 0))
            total_epochs = int(info.get("total_epochs", epochs)) or epochs
            train_loss = float(info.get("train_loss", 0.0))
            val_loss = float(info.get("val_loss", 0.0))
            progress = min(10.0 + 85.0 * (epoch / total_epochs), 95.0)

            progress_callback({
                "status": "running",
                "progress": round(progress, 2),
                "epoch": epoch,
                "total_epochs": total_epochs,
                "train_loss": round(train_loss, 6),
                "val_loss": round(val_loss, 6),
                "message": "Epoch %s/%s - loss: %.4f" % (epoch, total_epochs, train_loss),
                "error": None,
            })

        _train_mlp_on_oww(
            positives_dir=positives_dir,
            output_path=output_path,
            epochs=epochs,
            augment=True,
            eval_dir=None,
            negatives_dir=negatives_dir,
            verbose=True,
            progress_callback=_on_epoch,
        )

        _ensure_not_cancelled()
        if not output_path.exists():
            raise RuntimeError("Training completed but no model file was produced")

        config_path = output_path.with_suffix(".config.json")
        config_json: str | None = None
        config_bytes: bytes | None = None
        d_prime_value: float | None = None
        if config_path.exists():
            config_bytes = config_path.read_bytes()
            config_data = json.loads(config_bytes.decode("utf-8"))
            config_json = json.dumps(config_data)
            if isinstance(config_data, dict):
                raw_d_prime = config_data.get("d_prime")
                if isinstance(raw_d_prime, (int, float)):
                    d_prime_value = float(raw_d_prime)

        return TrainingArtifact(
            local_path=output_path,
            config_json=config_json,
            config_bytes=config_bytes,
            d_prime=d_prime_value,
            size_bytes=output_path.stat().st_size,
        )
    except TrainingCancelledError:
        logger.info("Training job %s cancelled", job_id)
        raise
    except Exception as exc:
        log_exception(
            logger,
            exc,
            message="Training job failed",
            source="training",
            extra={"job_id": job_id, "wake_word": wake_word},
        )

 succeeded in 994ms:

  
  
  @dataclass(slots=True)
> class TrainingArtifact:
      """Artifacts produced by a completed training run."""
  
      local_path: Path
      config_json: str | None
      config_bytes: bytes | None
      d_prime: float | None
      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
      negatives_dir: Path | None = None,
> ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      storage = get_storage()
  
      def _ensure_not_cancelled() -> None:
          if is_cancelled():
              "error": None,
          })
  
>         from violawake_sdk.tools.train import _train_mlp_on_oww
  
          started_at = time.monotonic()
  
          def _on_epoch(info: dict[str, Any]) -> None:
              _ensure_not_cancelled()
              elapsed = time.monotonic() - started_at
                  if isinstance(raw_d_prime, (int, float)):
                      d_prime_value = float(raw_d_prime)
  
>         return TrainingArtifact(
              local_path=output_path,
              config_json=config_json,
              config_bytes=config_bytes,
              d_prime=d_prime_value,
              size_bytes=output_path.stat().st_size,
          )



 succeeded in 1015ms:

  
  
  @dataclass(slots=True)
> class TrainingArtifact:
      """Artifacts produced by a completed training run."""
  
      local_path: Path
      config_json: str | None
      config_bytes: bytes | None
      d_prime: float | None
      progress_callback: Callable[[dict[str, Any]], None],
      is_cancelled: Callable[[], bool],
      negatives_dir: Path | None = None,
> ) -> TrainingArtifact:
      """Run the ViolaWake SDK training pipeline synchronously."""
      positives_dir: Path | None = None
      neg_temp_dir: Path | None = None
      storage = get_storage()
  
      def _ensure_not_cancelled() -> None:
          })
  
          # -- Production pipeline: full auto-corpus (matching CLI train) --
>         from violawake_sdk.tools.train import (
>             _generate_confusable_negatives,
>             _generate_speech_negatives,
>             _generate_tts_positives,
>             _train_temporal_cnn,
          )
  
          neg_temp_dir = Path(tempfile.mkdtemp(prefix="violawake_neg_"))
  
          # Auto-generate TTS positives when user has <100 samples (production behavior)
          if len(pos_files) < 100:
              tts_pos_dir = neg_temp_dir / "tts_positives"
              try:
>                 tts_pos_files = _generate_tts_positives(
                      wake_word,
                      tts_pos_dir,
                      verbose=False,
                  )
                  if tts_pos_files:
                      pos_files = list(pos_files) + tts_pos_files
          # Source 2: Auto-generated confusable negatives (phonetically similar)
          confusable_dir = neg_temp_dir / "confusables"
          try:
>             confusable_files = _generate_confusable_negatives(
                  wake_word,
                  confusable_dir,
                  n_confusables=20,
                  voices_per_word=5,
                  verbose=False,
              )
          # Source 3: Auto-generated speech negatives (common phrases)
          speech_dir = neg_temp_dir / "speech"
          try:
>             speech_files = _generate_speech_negatives(
                  speech_dir,
                  n_voices=3,
                  verbose=False,
              )
              if speech_files:
                  neg_tag_map["neg_speech"] = speech_files
                  "error": None,
              })
  
>         _train_temporal_cnn(
              pos_files=pos_files,
              neg_files=all_neg_files,
              output_path=output_path,
              wake_word=wake_word,
              epochs=epochs,
              augment=True,
                  if isinstance(raw_d_prime, (int, float)):
                      d_prime_value = float(raw_d_prime)
  
>         return TrainingArtifact(
              local_path=output_path,
              config_json=config_json,
              config_bytes=config_bytes,
              d_prime=d_prime_value,
              size_bytes=output_path.stat().st_size,
          )



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker logs --since 12h wakeword-backend-1 2>&1 | Select-String -Pattern 'edge-tts|Speech neg|speech negative|generated 0|Only 0 negative|No speech negatives|corpus|quality gate|download_models|OpenWakeWord|tflite|torchcodec|torchaudio|soundfile|FLAC|Failed to convert|onnxscript' -Context 1,2" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker logs --since 72h wakeword-backend-1 2>&1 | Select-String -Pattern 'edge-tts speech negative generation produced|edge-tts synthesis failed|Only 0 negative|No speech negatives|Speech neg generation FAILED|Generated confusables|Loading corpus speech' -Context 1,2" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker logs --since 72h wakeword-backend-1 2>&1 | Select-String -Pattern '\\[entrypoint\\]|download_models|OpenWakeWord backbone files missing' -Context 0,2" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:11:22.972136Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 1.5 seconds
Output:

> [entrypoint] running alembic upgrade head
  INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
  INFO  [alembic.runtime.migration] Will assume transactional DDL.
> [entrypoint] ensuring openwakeword backbone models are downloaded
  System.Management.Automation.RemoteException
  embedding_model.tflite:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
> [entrypoint] running alembic upgrade head
  {"timestamp": "2026-05-07T14:01:57.886586+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "54f786c96a3e4578ac1581016cefa860", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 8.179}
  INFO:     Shutting down
> [entrypoint] ensuring openwakeword backbone models are downloaded
  {"timestamp": "2026-05-07T14:07:23.736719+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-38450917b4@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"8653477d001b4edbb7c41623efc32bc0", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T14:07:23.739495+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-38450917b4@violawake-test.example.com", "request_id": 
"8653477d001b4edbb7c41623efc32bc0"}
> [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
  {"timestamp": "2026-05-07T14:25:23.028355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:24.284081+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
  INFO  [alembic.runtime.migration] Will assume transactional DDL.
  INFO:     Started server process [1]



 exited 1 in 1487ms:

> [entrypoint] running alembic upgrade head
  INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
  INFO  [alembic.runtime.migration] Will assume transactional DDL.
> [entrypoint] ensuring openwakeword backbone models are downloaded
  System.Management.Automation.RemoteException
  embedding_model.tflite:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
> [entrypoint] running alembic upgrade head
  {"timestamp": "2026-05-07T14:01:57.886586+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "54f786c96a3e4578ac1581016cefa860", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 8.179}
  INFO:     Shutting down
> [entrypoint] ensuring openwakeword backbone models are downloaded
  {"timestamp": "2026-05-07T14:07:23.736719+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-38450917b4@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"8653477d001b4edbb7c41623efc32bc0", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T14:07:23.739495+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-38450917b4@violawake-test.example.com", "request_id": 
"8653477d001b4edbb7c41623efc32bc0"}
> [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
  {"timestamp": "2026-05-07T14:25:23.028355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:24.284081+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
  INFO  [alembic.runtime.migration] Will assume transactional DDL.
  INFO:     Started server process [1]



2026-05-07T16:11:23.014560Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 1.5 seconds
Output:

  {"timestamp": "2026-05-07T13:46:46.382942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.71s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:47.868750+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.868863+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.871219+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.092592+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c9faf0eaf6234d128aaa8231e757995e", "method": "POST", "path": "/api/auth/login", 
"route": "/api/auth/login", "status_code": 200, "duration_ms": 303.767}
> {"timestamp": "2026-05-07T14:07:24.121358+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.121467+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.124704+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:08.576769+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fcbdfb7f2bea47a8871b539a5fb0ace3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.809}
> {"timestamp": "2026-05-07T14:11:10.849970+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-CoraNeural text 'viola e eh': edge-tts failed after 3 attempts: 
WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/syn
thesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=5682afd6090a40e0b9a6f1703b59
a25c&Sec-MS-GEC=3B5A17FF26EE9F6F189C6C86036B5457CC4261B76B23DD576B42AA60F6B7CCA9&Sec-MS-GEC-Version=1-143.0.3650.75'", 
"request_id": "-"}
  {"timestamp": "2026-05-07T14:11:11.333196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:12.026945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:33.409263+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:24:35.871598+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.871723+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.874674+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 48 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:35.086059+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a70a3d4124744a23a81d2dd7b714feae", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.365}
> {"timestamp": "2026-05-07T14:27:35.297003+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-BrandonNeural text 'viola e he': edge-tts failed after 3 
attempts: WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/
speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=e2196ede7ced46cd89
4c091196432a96&Sec-MS-GEC=4F5CCAE953F4EC4E9A9E34A5EB5EA3647687FC10376FC8E9D65801CC2ADDB7BC&Sec-MS-GEC-Version=1-143.0.3
650.75'", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:35.913117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:37.239678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:51.695017+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.97s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:46:53.859248+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.859382+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.866448+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}



 exited 1 in 1532ms:

  {"timestamp": "2026-05-07T13:46:46.382942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.71s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:47.868750+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.868863+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.871219+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.092592+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c9faf0eaf6234d128aaa8231e757995e", "method": "POST", "path": "/api/auth/login", 
"route": "/api/auth/login", "status_code": 200, "duration_ms": 303.767}
> {"timestamp": "2026-05-07T14:07:24.121358+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.121467+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.124704+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:08.576769+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fcbdfb7f2bea47a8871b539a5fb0ace3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.809}
> {"timestamp": "2026-05-07T14:11:10.849970+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-CoraNeural text 'viola e eh': edge-tts failed after 3 attempts: 
WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/syn
thesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=5682afd6090a40e0b9a6f1703b59
a25c&Sec-MS-GEC=3B5A17FF26EE9F6F189C6C86036B5457CC4261B76B23DD576B42AA60F6B7CCA9&Sec-MS-GEC-Version=1-143.0.3650.75'", 
"request_id": "-"}
  {"timestamp": "2026-05-07T14:11:11.333196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:12.026945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:33.409263+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:24:35.871598+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.871723+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.874674+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 48 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:35.086059+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a70a3d4124744a23a81d2dd7b714feae", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.365}
> {"timestamp": "2026-05-07T14:27:35.297003+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-BrandonNeural text 'viola e he': edge-tts failed after 3 
attempts: WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/
speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=e2196ede7ced46cd89
4c091196432a96&Sec-MS-GEC=4F5CCAE953F4EC4E9A9E34A5EB5EA3647687FC10376FC8E9D65801CC2ADDB7BC&Sec-MS-GEC-Version=1-143.0.3
650.75'", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:35.913117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:37.239678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:51.695017+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.97s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:46:53.859248+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.859382+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.866448+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}



2026-05-07T16:11:31.822894Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 10.3 seconds
Total output lines: 9367
Output:

  INFO  [alembic.runtime.migration] Will assume transactional DDL.
> [entrypoint] ensuring openwakeword backbone models are downloaded
  System.Management.Automation.RemoteException
> embedding_model.tflite:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
> embedding_model.tflite:  70%|███████   | 934k/1.33M [00:00<00:00, 9.30MiB/s]
> embedding_model.tflite: 100%|██████████| 1.33M/1.33M [00:00<00:00, 10.1MiB/s]
  System.Management.Automation.RemoteException
  embedding_model.onnx:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> melspectrogram.tflite:   0%|          | 0.00/1.09M [00:00<?, ?iB/s]
> melspectrogram.tflite: 100%|██████████| 1.09M/1.09M [00:00<00:00, 11.8MiB/s]
  System.Management.Automation.RemoteException
  melspectrogram.onnx:   0%|          | 0.00/1.09M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> alexa_v0.1.tflite:   0%|          | 0.00/855k [00:00<?, ?iB/s]
> alexa_v0.1.tflite: 100%|██████████| 855k/855k [00:00<00:00, 11.9MiB/s]
  System.Management.Automation.RemoteException
  alexa_v0.1.onnx:   0%|          | 0.00/854k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_mycroft_v0.1.tflite:   0%|          | 0.00/860k [00:00<?, ?iB/s]
> hey_mycroft_v0.1.tflite: 100%|██████████| 860k/860k [00:00<00:00, 10.5MiB/s]
  System.Management.Automation.RemoteException
  hey_mycroft_v0.1.onnx:   0%|          | 0.00/858k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_jarvis_v0.1.tflite:   0%|          | 0.00/1.28M [00:00<?, ?iB/s]
> hey_jarvis_v0.1.tflite:  17%|█▋        | 213k/1.28M [00:00<00:00, 2.01MiB/s]
> hey_jarvis_v0.1.tflite:  46%|████▌     | 590k/1.28M [00:00<00:00, 2.98MiB/s]
> hey_jarvis_v0.1.tflite:  76%|███████▌  | 967k/1.28M [00:00<00:00, 3.26MiB/s]
> hey_jarvis_v0.1.tflite: 100%|██████████| 1.28M/1.28M [00:00<00:00, 3.33MiB/s]
  System.Management.Automation.RemoteException
  hey_jarvis_v0.1.onnx:   0%|          | 0.00/1.27M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_rhasspy_v0.1.tflite:   0%|          | 0.00/416k [00:00<?, ?iB/s]
> hey_rhasspy_v0.1.tflite: 100%|██████████| 416k/416k [00:00<00:00, 7.44MiB/s]
  System.Management.Automation.RemoteException
  hey_rhasspy_v0.1.onnx:   0%|          | 0.00/204k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> timer_v0.1.tflite:   0%|          | 0.00/1.74M [00:00<?, ?iB/s]
> timer_v0.1.tflite:  90%|█████████ | 1.57M/1.74M [00:00<00:00, 15.4MiB/s]
> timer_v0.1.tflite: 100%|██████████| 1.74M/1.74M [00:00<00:00, 15.1MiB/s]
  System.Management.Automation.RemoteException
  timer_v0.1.onnx:   0%|          | 0.00/1.74M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> weather_v0.1.tflite:   0%|          | 0.00/1.15M [00:00<?, ?iB/s]
> weather_v0.1.tflite: 100%|██████████| 1.15M/1.15M [00:00<00:00, 13.5MiB/s]
  System.Management.Automation.RemoteException
  weather_v0.1.onnx:   0%|          | 0.00/1.15M [00:00<?, ?iB/s]
  {"timestamp": "2026-05-07T13:46:38.868575+00:00", "level": "INFO", "logger": "violawake.retention", "message": 
"Model retention cleanup complete: deleted 0 model(s)", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:44.526927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.39s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:45.021084+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.15s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:46.107531+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.53s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:46.382942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.71s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:47.868750+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.868863+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.871219+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:48.308664+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 42 (total: 49)", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:49.381005+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:49.524674+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:50.478935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:50.605597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:52.585615+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:55.372117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:56.391347+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:56.621277+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:58.657937+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-90cb628245@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"dacfb53ba96d4039a5df42c128569b10", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T13:46:58.659976+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-90cb628245@violawake-test.example.com", "request_id": 
"dacfb53ba96d4039a5df42c128569b10"}
  {"timestamp": "2026-05-07T13:46:59.382647+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a4209469491d452fba25d1beae4e1dc7", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 8.066}
> {"timestamp": "2026-05-07T13:46:59.414776+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:59.445361+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8835075b462247da999b5bcaeae8e70b", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 11.997}
  {"timestamp": "2026-05-07T13:46:59.505493+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0ceb887e041e47cc8d977fa56d3f3d25", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 17.479}
  {"timestamp": "2026-05-07T13:46:59.679641+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "88457adee9ee4feea90e58e01fd650ec", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 10.5}
> {"timestamp": "2026-05-07T13:46:59.707894+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:59.743336+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "68169333134c437ab011a5771747ba33", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 5.82}
  {"timestamp": "2026-05-07T13:46:59.803851+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6d62f45f664040ebbfe4d656603f2c84", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 16.965}
  {"timestamp": "2026-05-07T13:47:00.475215+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "68a3c2359be848ea8be904eb3473dc1a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.478}
> {"timestamp": "2026-05-07T13:47:00.937349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:01.464333+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:04.336523+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:05.068837+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "86f9063fa14d42c09630bf57a498d0b1", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.608}
> {"timestamp": "2026-05-07T13:47:05.780813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:09.088225+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:09.611970+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "380665901b6b4411acf7521724bc41f3", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.612}
> {"timestamp": "2026-05-07T13:47:10.256102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:11.772045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:12.381812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:12.977591+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:13.478270+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:14.234717+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5e4b6c0aef364251a14337a92fa48324", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.569}
> {"timestamp": "2026-05-07T13:47:16.212687+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:16.947441+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:17.373425+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:17.916031+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:18.877596+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "55969b77b7f043df960cd1a01b211c48", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.812}
> {"timestamp": "2026-05-07T13:47:19.497170+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:20.514698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:20.935556…252144 tokens truncated…3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:33.927207+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:37.354584+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:38.409038+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:40.881660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:42.461403+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:45.128264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:46.763288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:52.442951+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:53.973813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:57.490664+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:58.611149+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:00.596537+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:02.156734+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:04.820706+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:05.767344+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:08.719917+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:10.229323+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:13.767646+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:15.243186+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:17.668912+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:18.712751+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:24.341878+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:25.927740+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:28.849428+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:29.952461+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:33.577234+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:35.108971+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:11.935049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:13.391847+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:16.553857+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:18.364461+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:21.260288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:22.364896+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:28.324033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:29.629766+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:32.252949+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:33.598434+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:36.320442+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:37.598347+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:40.616822+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:42.077189+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:45.728983+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:47.230246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:49.967730+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:51.263831+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:54.429191+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:55.510812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:01.186868+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:02.749051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:06.378935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:07.899341+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:10.255597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:11.594394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:14.482811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:16.065779+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:18.851585+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:19.970522+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:23.516564+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"times
 exited 1 in 10348ms:

  INFO  [alembic.runtime.migration] Will assume transactional DDL.
> [entrypoint] ensuring openwakeword backbone models are downloaded
  System.Management.Automation.RemoteException
> embedding_model.tflite:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
> embedding_model.tflite:  70%|███████   | 934k/1.33M [00:00<00:00, 9.30MiB/s]
> embedding_model.tflite: 100%|██████████| 1.33M/1.33M [00:00<00:00, 10.1MiB/s]
  System.Management.Automation.RemoteException
  embedding_model.onnx:   0%|          | 0.00/1.33M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> melspectrogram.tflite:   0%|          | 0.00/1.09M [00:00<?, ?iB/s]
> melspectrogram.tflite: 100%|██████████| 1.09M/1.09M [00:00<00:00, 11.8MiB/s]
  System.Management.Automation.RemoteException
  melspectrogram.onnx:   0%|          | 0.00/1.09M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> alexa_v0.1.tflite:   0%|          | 0.00/855k [00:00<?, ?iB/s]
> alexa_v0.1.tflite: 100%|██████████| 855k/855k [00:00<00:00, 11.9MiB/s]
  System.Management.Automation.RemoteException
  alexa_v0.1.onnx:   0%|          | 0.00/854k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_mycroft_v0.1.tflite:   0%|          | 0.00/860k [00:00<?, ?iB/s]
> hey_mycroft_v0.1.tflite: 100%|██████████| 860k/860k [00:00<00:00, 10.5MiB/s]
  System.Management.Automation.RemoteException
  hey_mycroft_v0.1.onnx:   0%|          | 0.00/858k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_jarvis_v0.1.tflite:   0%|          | 0.00/1.28M [00:00<?, ?iB/s]
> hey_jarvis_v0.1.tflite:  17%|█▋        | 213k/1.28M [00:00<00:00, 2.01MiB/s]
> hey_jarvis_v0.1.tflite:  46%|████▌     | 590k/1.28M [00:00<00:00, 2.98MiB/s]
> hey_jarvis_v0.1.tflite:  76%|███████▌  | 967k/1.28M [00:00<00:00, 3.26MiB/s]
> hey_jarvis_v0.1.tflite: 100%|██████████| 1.28M/1.28M [00:00<00:00, 3.33MiB/s]
  System.Management.Automation.RemoteException
  hey_jarvis_v0.1.onnx:   0%|          | 0.00/1.27M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> hey_rhasspy_v0.1.tflite:   0%|          | 0.00/416k [00:00<?, ?iB/s]
> hey_rhasspy_v0.1.tflite: 100%|██████████| 416k/416k [00:00<00:00, 7.44MiB/s]
  System.Management.Automation.RemoteException
  hey_rhasspy_v0.1.onnx:   0%|          | 0.00/204k [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> timer_v0.1.tflite:   0%|          | 0.00/1.74M [00:00<?, ?iB/s]
> timer_v0.1.tflite:  90%|█████████ | 1.57M/1.74M [00:00<00:00, 15.4MiB/s]
> timer_v0.1.tflite: 100%|██████████| 1.74M/1.74M [00:00<00:00, 15.1MiB/s]
  System.Management.Automation.RemoteException
  timer_v0.1.onnx:   0%|          | 0.00/1.74M [00:00<?, ?iB/s]
  System.Management.Automation.RemoteException
> weather_v0.1.tflite:   0%|          | 0.00/1.15M [00:00<?, ?iB/s]
> weather_v0.1.tflite: 100%|██████████| 1.15M/1.15M [00:00<00:00, 13.5MiB/s]
  System.Management.Automation.RemoteException
  weather_v0.1.onnx:   0%|          | 0.00/1.15M [00:00<?, ?iB/s]
  {"timestamp": "2026-05-07T13:46:38.868575+00:00", "level": "INFO", "logger": "violawake.retention", "message": 
"Model retention cleanup complete: deleted 0 model(s)", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:44.526927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.39s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:45.021084+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.15s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:46.107531+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.53s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:46.382942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.71s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T13:46:47.868750+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.868863+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:47.871219+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:48.308664+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 42 (total: 49)", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:49.381005+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:49.524674+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:50.478935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:50.605597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:52.585615+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:55.372117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:56.391347+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:46:56.621277+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:58.657937+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-90cb628245@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"dacfb53ba96d4039a5df42c128569b10", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T13:46:58.659976+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-90cb628245@violawake-test.example.com", "request_id": 
"dacfb53ba96d4039a5df42c128569b10"}
  {"timestamp": "2026-05-07T13:46:59.382647+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a4209469491d452fba25d1beae4e1dc7", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 8.066}
> {"timestamp": "2026-05-07T13:46:59.414776+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:59.445361+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8835075b462247da999b5bcaeae8e70b", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 11.997}
  {"timestamp": "2026-05-07T13:46:59.505493+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0ceb887e041e47cc8d977fa56d3f3d25", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 17.479}
  {"timestamp": "2026-05-07T13:46:59.679641+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "88457adee9ee4feea90e58e01fd650ec", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 10.5}
> {"timestamp": "2026-05-07T13:46:59.707894+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:46:59.743336+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "68169333134c437ab011a5771747ba33", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 5.82}
  {"timestamp": "2026-05-07T13:46:59.803851+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6d62f45f664040ebbfe4d656603f2c84", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 16.965}
  {"timestamp": "2026-05-07T13:47:00.475215+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "68a3c2359be848ea8be904eb3473dc1a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.478}
> {"timestamp": "2026-05-07T13:47:00.937349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:01.464333+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:04.336523+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:05.068837+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "86f9063fa14d42c09630bf57a498d0b1", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.608}
> {"timestamp": "2026-05-07T13:47:05.780813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:09.088225+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:09.611970+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "380665901b6b4411acf7521724bc41f3", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.612}
> {"timestamp": "2026-05-07T13:47:10.256102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:11.772045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:12.381812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:12.977591+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:13.478270+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:14.234717+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5e4b6c0aef364251a14337a92fa48324", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.569}
> {"timestamp": "2026-05-07T13:47:16.212687+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:16.947441+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:17.373425+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:17.916031+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:18.877596+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "55969b77b7f043df960cd1a01b211c48", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.812}
> {"timestamp": "2026-05-07T13:47:19.497170+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:20.514698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:20.935556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:21.622553+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:23.585703+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a260de48f7eb4cedba36b171201e8b33", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.948}
> {"timestamp": "2026-05-07T13:47:24.229355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:28.347185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:28.698953+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:29.542363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:30.921706+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a5adf82e60f943bab8eb6a7c61da6805", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.701}
> {"timestamp": "2026-05-07T13:47:31.644391+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:31.730906+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:33.136805+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:33.758742+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:35.663626+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "20c59556e9cc4a60b5ab8cf411dd6eee", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.019}
> {"timestamp": "2026-05-07T13:47:36.732512+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:37.153741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:38.182760+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:38.413206+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:40.241713+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6ff2714469fd4107b856ac12236ee5bb", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.294}
> {"timestamp": "2026-05-07T13:47:40.308441+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:41.409020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:42.027566+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:43.024822+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:44.777990+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "919f92762b8d42fe9968f68f574df9d9", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.023}
> {"timestamp": "2026-05-07T13:47:45.503020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:46.752388+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:46.773928+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:47.948818+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:49.322059+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "264be30222b74dcabc2dd19853512dce", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.154}
> {"timestamp": "2026-05-07T13:47:49.898945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:50.170952+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:51.275923+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:51.706685+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:47:53.968702+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e43b5d781933410cb628803ab3233766", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.737}
> {"timestamp": "2026-05-07T13:47:54.254687+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:54.345265+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:55.246715+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:55.607448+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:47:57.333650+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:01.160837+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:01.187768+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:01.342298+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f86135d130534b7292fe2296dc559f45", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.605}
> {"timestamp": "2026-05-07T13:48:02.513313+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:04.504480+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:05.971816+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:05.991600+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dfdf4897d5be4ad7a67420daeddec2a2", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.815}
> {"timestamp": "2026-05-07T13:48:06.012167+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:07.128757+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:08.867268+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:09.244741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:10.264811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:10.344209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:10.609836+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "24955eb2f993407f9c7fedee9dece793", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.395}
> {"timestamp": "2026-05-07T13:48:13.340754+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:14.076512+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:14.899642+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:15.225647+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c0c4fe24bdee47c48653b6594ef194b6", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.616}
> {"timestamp": "2026-05-07T13:48:15.479398+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:17.448731+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:17.989264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:18.929620+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:19.110883+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:19.877597+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f12418a2057f45d4aded8dcf857ad8ee", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.986}
> {"timestamp": "2026-05-07T13:48:21.877702+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:22.497747+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:22.895044+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:23.598930+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:24.538325+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b8c01e16f8e04bd899756fca49661962", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.12}
> {"timestamp": "2026-05-07T13:48:25.668020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:26.101862+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:27.031294+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:27.074245+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:29.195338+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "63cad8fec39544debc7ec49fdafe18a5", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.982}
> {"timestamp": "2026-05-07T13:48:30.207529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:33.430768+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:34.322563+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:34.925961+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:36.464632+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2523bda8983d469b910d3615afa4028b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.432}
> {"timestamp": "2026-05-07T13:48:37.075215+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:37.208692+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:38.521323+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:38.763694+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:41.130288+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e3d6a7a07678435c81500bc75e557bef", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.436}
> {"timestamp": "2026-05-07T13:48:41.409108+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:41.733417+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:42.501799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:42.740900+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:44.846816+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:45.259859+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:45.756709+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "825b205b41df41658ba181817aa5393b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.467}
> {"timestamp": "2026-05-07T13:48:46.640818+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:46.854413+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:49.880776+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:50.396838+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3da78555eda34b7fb9459e7f8abc4482", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.672}
> {"timestamp": "2026-05-07T13:48:50.718246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:51.407751+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:51.784465+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:54.013960+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:54.039554+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:55.040375+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cacf768f78dc4b1a843abbb879e5653c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.142}
> {"timestamp": "2026-05-07T13:48:55.338942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:55.739283+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:58.918944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:48:59.349804+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:48:59.712879+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "93cc5fb1e77c4d28838f033ed7fee70f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.415}
> {"timestamp": "2026-05-07T13:49:00.553827+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:00.867566+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:02.931356+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:06.238304+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:06.994353+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "02f0745309494b62ad2253bfbd2ed8fb", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 25.93}
> {"timestamp": "2026-05-07T13:49:07.168701+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:07.931102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:10.948122+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:11.581667+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:11.675676+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bebe7ff6664c4166a0a22399b322843c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.777}
> {"timestamp": "2026-05-07T13:49:12.515614+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:12.795480+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:14.877521+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:15.498172+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:16.091256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:16.236350+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "333a1ce1a8fd404b9c7f947eb38d3564", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.94}
> {"timestamp": "2026-05-07T13:49:16.819949+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:20.827022+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "408fe51cfc394cbfafe872b6bd28d3fd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.056}
> {"timestamp": "2026-05-07T13:49:22.818690+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:24.563356+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:25.493686+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "08b1c6ec1d8f462b9aab30a5535294e0", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.511}
> {"timestamp": "2026-05-07T13:49:27.199892+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:28.569616+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:28.765374+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:29.717596+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:30.158578+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "239bd64597bb4857a88091661b873f81", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.462}
> {"timestamp": "2026-05-07T13:49:32.184116+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:32.803080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:33.732153+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:33.852720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:34.825336+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3f476e1f480d4884a62528e747fd4bcd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.54}
> {"timestamp": "2026-05-07T13:49:38.926199+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:39.917834+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:40.072877+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:41.061875+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:42.179075+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1fa5fbc6da404e91979df836ad8467b3", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.066}
> {"timestamp": "2026-05-07T13:49:43.214602+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:43.303972+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:44.223891+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:44.575053+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:46.736724+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:46.916705+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2b0e67d64748418585f6bc351452d1c9", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.934}
> {"timestamp": "2026-05-07T13:49:47.130658+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:48.037490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:48.387102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:50.743587+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:51.084115+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:51.466038+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bef9b205fff14bfab4fa261552e45eab", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.144}
> {"timestamp": "2026-05-07T13:49:52.361811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:52.468038+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:55.050129+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:55.728264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:49:56.005577+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "40a68b6fabf54501aa2d526fad5721ee", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.156}
> {"timestamp": "2026-05-07T13:49:56.612743+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:57.023797+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:59.585442+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:49:59.647503+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:00.544393+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "79de247e88f54ddc9d30177999114aa3", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.87}
> {"timestamp": "2026-05-07T13:50:00.771324+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:01.289689+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:03.261517+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:04.370445+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:04.419576+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:05.302305+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5bf861cfa7b94eab961b11ea6666b10c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.839}
> {"timestamp": "2026-05-07T13:50:05.437414+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:07.182895+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:07.857302+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:11.049365+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:11.610498+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:12.591613+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fe10d99b084b4047a21cda6980abb69c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.323}
> {"timestamp": "2026-05-07T13:50:13.518169+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:15.021360+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:15.173180+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:16.478093+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:17.263334+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c91d4d5998c54102a34109223f87f882", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.648}
> {"timestamp": "2026-05-07T13:50:18.275992+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:18.455505+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:19.295030+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:19.586187+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:21.291222+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:21.868450+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "af561205c7af4967b4290a854f9cb876", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.167}
> {"timestamp": "2026-05-07T13:50:22.614830+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:22.885974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:24.690332+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:25.953346+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:26.495854+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d28573ba554e4b419a1ed70788961b34", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.017}
> {"timestamp": "2026-05-07T13:50:27.589372+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:27.636978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:28.630491+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:30.644808+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:31.149253+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "333a347fcff340bfb8eb9e70f7e58f6c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.905}
> {"timestamp": "2026-05-07T13:50:31.683554+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:31.976044+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:33.622225+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:35.331733+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:35.808403+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cd9d41a0b19741c781f410b444576231", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.591}
> {"timestamp": "2026-05-07T13:50:35.928013+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:36.671991+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:37.620352+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:38.724429+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:40.224690+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:40.465970+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bd48a8edd4814b578da063be06110457", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.293}
> {"timestamp": "2026-05-07T13:50:40.899383+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:45.051828+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:45.914067+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:47.067595+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:47.788295+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf0d8ebc990d481e8fc7cac8d3008363", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.66}
> {"timestamp": "2026-05-07T13:50:48.024708+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:49.168395+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:49.655517+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:50.940895+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:52.309606+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:52.484111+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b75d7604b8534d0e9a490c65d7a4c998", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.795}
> {"timestamp": "2026-05-07T13:50:53.938356+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:54.615358+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:56.208070+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:56.574559+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:50:57.113421+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4b869cb23cfc4da1aa006ff32b251693", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.557}
> {"timestamp": "2026-05-07T13:50:57.982532+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:58.627222+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:50:59.925603+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:00.991967+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:01.686128+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b3b351aedb9e4ed1ade1d878415cdcdb", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.165}
> {"timestamp": "2026-05-07T13:51:02.196026+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:03.064685+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:04.224688+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:04.915672+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:06.347130+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c22ab459c76541d7be4954258ec029c7", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.638}
> {"timestamp": "2026-05-07T13:51:06.496487+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:06.619295+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:07.893645+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:10.071118+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:10.746899+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:11.018099+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e92c086604c54f1ca93da382b7d2daf4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.747}
> {"timestamp": "2026-05-07T13:51:11.327860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:11.820761+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:16.423843+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:16.468850+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:17.756516+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:18.154336+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:18.284607+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dca484d684a049418214857e5b096d77", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.978}
> {"timestamp": "2026-05-07T13:51:20.417965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:21.405130+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:21.564663+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:22.662211+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:22.967964+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c5a18e2b76b24dc68504e79c79e3a5bd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.43}
> {"timestamp": "2026-05-07T13:51:23.977880+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:25.670444+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:25.778356+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:27.405404+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:27.520205+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e3ebfb1b404d41049a7525f34d592dfd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.857}
> {"timestamp": "2026-05-07T13:51:29.007140+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:30.501976+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:31.036673+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:32.106066+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "21d82f38d494457ea33d75953553f632", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.168}
> {"timestamp": "2026-05-07T13:51:32.604445+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:32.947126+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:33.925871+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:34.720214+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:35.837934+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:36.727341+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ff5cda7cee2b447290ed4a7aa6b5b058", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.843}
> {"timestamp": "2026-05-07T13:51:37.078225+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:38.314808+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:40.454759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:41.090820+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:41.408999+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bcddda2404d142c9b509a4e6c002e683", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.021}
> {"timestamp": "2026-05-07T13:51:41.524668+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:42.654954+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:44.817967+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:46.005686+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:46.087193+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:46.111181+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3c3ac74db4ed4945afb3fbab03ebbfc7", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.633}
> {"timestamp": "2026-05-07T13:51:49.722557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:52.004349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:52.523449+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:53.475669+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5f514b3236974c5590c66b6dd0e838fc", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.46}
> {"timestamp": "2026-05-07T13:51:53.635153+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:53.864481+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:56.482907+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:56.914255+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:57.672853+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:51:58.076546+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:51:58.184581+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "399b732b377f485ca6efb67614656a8d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.028}
> {"timestamp": "2026-05-07T13:52:00.639006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:01.473485+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:02.187059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:02.723851+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c0039145babf40759fdf62fc3b8593ed", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.813}
> {"timestamp": "2026-05-07T13:52:02.870367+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:05.089440+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:06.461560+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:06.674217+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:07.263731+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2156e1390ce946a7bf84778861ef9c4c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.826}
> {"timestamp": "2026-05-07T13:52:07.965283+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:10.103786+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:10.153601+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:11.327416+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:11.615947+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:11.809582+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "072fffdd079e4883a6b6776330f13a0a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.057}
> {"timestamp": "2026-05-07T13:52:13.813149+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:14.548045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:15.295294+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:16.034111+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:16.514073+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7055a6545b2e466d94f2d0b3782a05b5", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.666}
> {"timestamp": "2026-05-07T13:52:18.456548+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:21.611255+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:22.365754+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:22.659358+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:23.885592+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1b169ef3b99f48af91f71c65de47716a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.514}
> {"timestamp": "2026-05-07T13:52:24.854301+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:25.809827+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:25.925976+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:27.420709+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:28.536531+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "10bcb9707d2d43228d75dec614b35dd9", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.682}
> {"timestamp": "2026-05-07T13:52:29.468799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:29.655978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:30.542402+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:31.065549+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:32.670831+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:33.165824+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fa653218cf9a40cca0af663110617897", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.501}
> {"timestamp": "2026-05-07T13:52:33.763466+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:34.149823+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:35.219409+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:37.276412+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:37.710661+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c5b26c64d230498498eeb384b7039c42", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.643}
> {"timestamp": "2026-05-07T13:52:37.772148+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:38.449871+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:38.928586+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:41.302271+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:42.378440+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cb2c886be77d4366af1e3ac9ad8c44da", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.07}
> {"timestamp": "2026-05-07T13:52:42.468468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:42.660878+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:43.920531+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:45.968754+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:46.574170+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:47.013936+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "47c158fa0a364bbc9456a6010c4df817", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.778}
> {"timestamp": "2026-05-07T13:52:47.573282+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:48.068105+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:49.477401+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:51.186022+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:51.257047+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:54.311431+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ccd7ce1219b5499c889e3b37a3b912dd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.434}
> {"timestamp": "2026-05-07T13:52:55.339572+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:56.460490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:58.008524+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:52:58.335567+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:52:58.985889+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "768ea97bf2fd40928f851091f9162cd4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.798}
> {"timestamp": "2026-05-07T13:52:59.630508+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:00.342564+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:01.368894+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:02.855685+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:03.624550+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7ac667a1b64d49c8931859e080e92ff0", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.548}
> {"timestamp": "2026-05-07T13:53:04.061566+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:04.925084+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:06.095188+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:06.142333+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:07.393357+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:08.249592+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7c4b42edfa6c46e3bc377c819c7a3b84", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.869}
> {"timestamp": "2026-05-07T13:53:10.230404+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:10.279548+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': 
WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/syn
thesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=2feb6ced1585469f8af8d4329fb0
3414&Sec-MS-GEC=C8D4286544071B4B142FCE709A87A427720E9EBFE67412DAF64023D0CFF8C7BB&Sec-MS-GEC-Version=1-143.0.3650.75'; 
retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:11.396247+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:11.725944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:12.844966+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4d1ceca7903f45f39203f23562f87583", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.006}
> {"timestamp": "2026-05-07T13:53:13.714735+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:15.093465+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:17.492828+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "80116015c110433fa51485e0f4058362", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.738}
> {"timestamp": "2026-05-07T13:53:18.187838+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:19.626657+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:21.637881+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:22.175097+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "01dd5b6b97b54fd7935e8e866065e3cf", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.968}
  {"timestamp": "2026-05-07T13:53:29.425642+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "de9cfcf2ac704056afb0b7233b555f5f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.331}
> {"timestamp": "2026-05-07T13:53:31.184264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:31.808993+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:33.082005+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:33.828436+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:34.089070+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5f0b3bc24a004d24a9e7ddd92593fff5", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.537}
> {"timestamp": "2026-05-07T13:53:35.222642+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:35.498442+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:37.061679+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:37.449629+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:38.685783+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:38.714760+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1ab248688cae4c2a88fda2433267801c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.049}
> {"timestamp": "2026-05-07T13:53:40.174299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:41.185820+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:41.557350+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:42.553558+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:43.328795+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2c9f9085fa5f4c7085c87644d259f33f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.746}
> {"timestamp": "2026-05-07T13:53:44.790742+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:46.494812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:48.067452+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b03760486c2449378c2f16cb1fb8b028", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.757}
> {"timestamp": "2026-05-07T13:53:49.770946+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:50.863402+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:52.058471+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:53:52.732930+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d099c9965c914de08575318aa511ebbd", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.525}
> {"timestamp": "2026-05-07T13:53:53.645103+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:53.716901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:54.649039+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:53:59.568542+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:00.015231+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "61fcee4a5611454baf084982a0a9b349", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.218}
> {"timestamp": "2026-05-07T13:54:01.103102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:03.988288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:04.717440+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cd7a22097ca140bcb652fac75156e2fa", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.399}
> {"timestamp": "2026-05-07T13:54:05.550180+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:08.212008+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:08.662615+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:09.388885+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "78bea60acfb04c2badf7a83abfd5652f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.018}
> {"timestamp": "2026-05-07T13:54:09.727372+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:09.842769+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:12.229629+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:12.300974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:13.297924+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:13.779756+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:13.924075+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b936cf756f854f968def949ed8777bf9", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.071}
> {"timestamp": "2026-05-07T13:54:16.105012+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:17.252647+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:18.499556+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "90e2aa45c2dc4240ab285d80fec43aac", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.322}
> {"timestamp": "2026-05-07T13:54:19.677737+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:21.139106+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:23.121160+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "60251389effa4bcea579daca5b85dfaa", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.928}
> {"timestamp": "2026-05-07T13:54:23.459122+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:24.682197+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:24.858058+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:26.380444+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:27.758733+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:27.822515+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "308de32b171c439a8c92ce83e8431a78", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.373}
> {"timestamp": "2026-05-07T13:54:28.506834+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:28.898327+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:32.130870+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:34.652318+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:35.177289+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "33b1c34d81834befbb8ce6c12e0b1807", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.476}
> {"timestamp": "2026-05-07T13:54:35.186430+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:36.171406+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:36.714177+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:38.615053+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:39.290855+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:39.657929+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:39.812646+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "72884a376e304ed589eedbfb20bbfd7f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.416}
> {"timestamp": "2026-05-07T13:54:40.706140+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:42.730948+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:44.030885+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:44.460504+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3354f9bffb2d4a5c83bd3ecc83cf31a5", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.463}
> {"timestamp": "2026-05-07T13:54:44.623793+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:45.659750+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:46.917118+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:47.820319+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:48.641154+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:49.027888+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2bd71fa67b064ebe8f1c89d4fdb67e34", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.873}
> {"timestamp": "2026-05-07T13:54:49.118006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:52.050765+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:52.386201+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:53.516821+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:53.705268+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:53.712343+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fd9aabc09ae1494788aada4d03c4d268", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.426}
> {"timestamp": "2026-05-07T13:54:55.779698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:57.033446+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:54:57.567598+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:54:58.375815+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "203fa89f8133461fa1fab08445935279", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.741}
> {"timestamp": "2026-05-07T13:54:58.519376+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:00.821942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:01.819945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:04.656253+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:05.662903+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b0a53c32aa6745eca10ca9b42485cd01", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.315}
> {"timestamp": "2026-05-07T13:55:06.172940+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:07.471036+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:09.308752+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:09.422423+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:10.327287+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ea9984b022254ce58919a79f1c575205", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.782}
> {"timestamp": "2026-05-07T13:55:10.966449+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:12.878330+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:14.008315+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:14.342227+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:14.970083+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "37377f14672e460298049647976ed1fc", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.803}
> {"timestamp": "2026-05-07T13:55:15.449912+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:16.783415+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:18.114338+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:18.322046+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:19.582546+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:19.602377+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b8da09bbc921491b8b907f50a668dddc", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.673}
> {"timestamp": "2026-05-07T13:55:21.783175+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:23.002454+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:23.023150+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:24.218046+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4982830e90cd4b178cd027d919c6d6b0", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.116}
> {"timestamp": "2026-05-07T13:55:24.381796+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:25.347593+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:26.852025+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:27.843607+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:28.094369+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:28.896026+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1d1811329b1e4f55b5791a59a781724b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.593}
> {"timestamp": "2026-05-07T13:55:30.917134+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:31.466160+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:32.524978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:32.536784+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:33.571661+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5e7c7f33b2aa48da8ed82af351621a35", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.945}
> {"timestamp": "2026-05-07T13:55:37.635695+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:38.123862+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:38.888447+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:39.691113+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:40.794160+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9059480e542a4e2d92de5a1115adf771", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.155}
> {"timestamp": "2026-05-07T13:55:42.088854+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:42.920884+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:43.769898+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:44.214041+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:45.498777+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7a17183ee9a542489495c10b95583a53", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.894}
> {"timestamp": "2026-05-07T13:55:46.415287+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:46.743308+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:47.638733+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:48.581248+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:50.119709+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7e218170c7c44eea8510ed85eacfd03b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.227}
> {"timestamp": "2026-05-07T13:55:50.997525+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:51.839476+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:52.558735+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:53.595612+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:54.723799+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "970a758c0a21480eb9b4c9ace76cc62e", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.475}
> {"timestamp": "2026-05-07T13:55:55.320241+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:56.788901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:56.794641+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:55:57.870992+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:55:59.315758+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b6d01a90cf0c4e868d76049897b8004f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.243}
> {"timestamp": "2026-05-07T13:56:00.149897+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:01.258170+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:01.301763+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:02.418556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:03.950537+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:03.997838+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7bd808956cb0469f89522c7ebe28c2bf", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.609}
> {"timestamp": "2026-05-07T13:56:05.217299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:05.266406+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:06.638993+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:11.296898+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:11.388008+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d4a2817679ef4cc881a3d8cb28db6745", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.911}
> {"timestamp": "2026-05-07T13:56:12.604483+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:12.877582+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:14.117572+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:15.382627+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:16.097849+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b472a0f41b2d4c70b1ef65882c2b7d43", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.827}
> {"timestamp": "2026-05-07T13:56:16.819722+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:16.893152+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:18.408143+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:19.597644+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:20.735050+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8b147aea474a4325b0ff17cb5dc0025b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.637}
> {"timestamp": "2026-05-07T13:56:21.118398+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:21.582406+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:23.001158+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:24.578998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:25.272654+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7ef02095b46c4c6c9a4f0edfabe1b465", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.701}
> {"timestamp": "2026-05-07T13:56:25.586369+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:25.719837+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:27.207422+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:28.897343+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:29.849049+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9b19bdcb3ccc4dd480e985a47fcf7ec4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.505}
> {"timestamp": "2026-05-07T13:56:30.306704+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:30.340267+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:31.949255+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:32.882359+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:34.197055+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:34.449102+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2f586ad9caa746788995170d5b0f2fa2", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.737}
> {"timestamp": "2026-05-07T13:56:34.754426+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:36.230349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:37.843196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:38.939428+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:39.191175+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5fe419b6becd473cbca7ef4fe6e44038", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.634}
> {"timestamp": "2026-05-07T13:56:42.579378+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:44.015060+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:44.098538+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:45.658157+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:46.536516+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "680b45f3820e45b698534bc63e206a39", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.789}
> {"timestamp": "2026-05-07T13:56:46.736951+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:48.331720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:49.449847+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:50.953743+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:51.196111+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b0be61d1780c4e0e9f8868ce2a71c4e2", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.926}
> {"timestamp": "2026-05-07T13:56:51.270446+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:52.437861+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:53.062030+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:54.865104+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:54.934535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:56:55.792278+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "334d36d9d0dd4531b6ddd4335052d8cc", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.652}
> {"timestamp": "2026-05-07T13:56:56.012987+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:57.964077+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:59.455780+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:56:59.538276+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:00.337183+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "892f468c7ade479dad37e9847010b137", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.611}
> {"timestamp": "2026-05-07T13:57:00.462205+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:02.302797+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:02.479479+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:03.395673+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:03.515611+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:05.013231+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4159ef0524114beb940312bf15b18931", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.724}
> {"timestamp": "2026-05-07T13:57:06.542393+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:07.041854+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:08.505467+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:08.596134+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:09.666486+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5fb8f1a13adb46c89e2ce99e4c6832d9", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.848}
> {"timestamp": "2026-05-07T13:57:10.868940+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:11.370566+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:13.416037+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:13.431606+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:16.933982+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d7881c55259e4570a01bedcd53a0189a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.826}
> {"timestamp": "2026-05-07T13:57:18.057001+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:18.297636+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:19.265144+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:19.485073+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:21.601667+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dddc5e1e59274d67a7ad1351949ae5f4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.997}
> {"timestamp": "2026-05-07T13:57:21.950070+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:22.727510+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:24.000547+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:24.604006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:26.236434+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fcf5973586a64e02a35e32ea6f54ab37", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.518}
> {"timestamp": "2026-05-07T13:57:26.973073+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:28.636927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:28.833155+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:29.973649+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:30.853123+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "288cd005abee4391a016440dd4d6e870", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.228}
> {"timestamp": "2026-05-07T13:57:31.457304+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:32.075725+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:32.967160+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:33.772575+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:35.452627+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9a284fe79d2349ce82525aff27a7c742", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.931}
> {"timestamp": "2026-05-07T13:57:36.905422+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:37.338284+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:38.002070+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:39.232308+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:40.128382+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0c61a6a0ab6940d58f5c5fa39921473b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.62}
> {"timestamp": "2026-05-07T13:57:40.864901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:42.304034+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:42.797373+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:43.990317+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:44.810467+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "352c5372770d4dfbb7a5eb3469734855", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.379}
> {"timestamp": "2026-05-07T13:57:48.776526+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:49.858627+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:49.997327+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:51.541508+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:52.032816+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "133ce714102f48dbb702867c90b7366c", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.896}
> {"timestamp": "2026-05-07T13:57:52.576541+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:53.512315+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:53.577977+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:54.622056+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:57:56.674578+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1f34ac23c39b48e59289c18f436d553b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.628}
> {"timestamp": "2026-05-07T13:57:57.010444+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:58.042527+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:58.077232+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:57:59.611080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:00.477383+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:01.298578+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "31cf7f2e68da446cbf12b78133ba7e76", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.689}
> {"timestamp": "2026-05-07T13:58:01.556624+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:02.387525+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:03.700556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:04.458416+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:05.894718+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:05.902354+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c8fb77fd268243a696641553b81c334e", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.262}
> {"timestamp": "2026-05-07T13:58:06.694299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:07.777609+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:08.291998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:09.336110+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:10.059420+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:10.492868+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "61bb34781c874e2bae7e370ec60262d0", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.633}
> {"timestamp": "2026-05-07T13:58:11.251514+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:12.949916+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:14.116745+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:14.567185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:15.188235+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9f016e9c61ac4472a8f968883f95c165", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.003}
> {"timestamp": "2026-05-07T13:58:15.717625+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:16.793322+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:20.481660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:21.116994+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:22.495701+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8026cc45fddd4644b1b84b19e8210087", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.772}
> {"timestamp": "2026-05-07T13:58:22.671073+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:23.166416+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:24.696847+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:25.916799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:27.203920+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bd8de4300c39493ab4e6d635ad0ba523", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.829}
> {"timestamp": "2026-05-07T13:58:27.502590+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:27.647024+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:28.826156+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:29.909881+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:31.384470+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:31.824406+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b3531a13a5bc429f8b3756d646e0bbd4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.434}
> {"timestamp": "2026-05-07T13:58:32.437382+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:33.882057+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:34.359862+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:35.898255+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:36.176750+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:36.361137+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f0179b063dc248688ca34bb33c1e5ad1", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.104}
> {"timestamp": "2026-05-07T13:58:37.790506+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:38.632799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:40.159881+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:40.493131+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:40.955331+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f2f11cd695b644a1a3c246995091db51", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.803}
> {"timestamp": "2026-05-07T13:58:41.849849+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:43.234192+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:44.044718+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:44.447944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:45.199699+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:45.573182+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c0629a0cc3ca4c80823a15b9a88ca67d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.334}
> {"timestamp": "2026-05-07T13:58:46.585433+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:48.382791+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:49.013660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:52.928942+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8441cc36e0a4480ba6f4c63d394a9bbb", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.691}
> {"timestamp": "2026-05-07T13:58:53.226015+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:54.127053+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:55.350303+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:55.658860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:56.841171+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:58:57.634755+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dbc24891be57498b8c3b5fcfcfd56a5d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.518}
> {"timestamp": "2026-05-07T13:58:58.122424+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:59.609902+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:58:59.720884+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:00.785008+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:02.287118+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f696ff5c4f8a4eac80fcfb0ae1a5ec4d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.55}
> {"timestamp": "2026-05-07T13:59:03.137192+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:03.197936+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:04.600300+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:04.886331+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:06.867801+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:07.005790+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cd773788dbd1432db3d5a05f40ae6726", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.978}
> {"timestamp": "2026-05-07T13:59:07.930291+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:08.468099+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:09.825238+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:11.134176+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:11.592798+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c61434bcc33e44be9cde2508f8c7c108", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.76}
> {"timestamp": "2026-05-07T13:59:12.322020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:12.779104+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:13.761589+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:15.173072+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:16.246612+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f6320af012e04a6ead822a176a924b21", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.385}
> {"timestamp": "2026-05-07T13:59:16.533447+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:17.701362+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:19.701938+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:20.908353+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e742473be17f4e158103e123b451e219", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.775}
> {"timestamp": "2026-05-07T13:59:21.395139+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:22.147216+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:22.392646+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:26.276712+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:27.845453+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:28.190496+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "95fbdb5c64cd44fbb2cfc82fbc30d8f2", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.82}
> {"timestamp": "2026-05-07T13:59:29.379427+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:31.317174+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:32.644112+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:32.848317+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7737d6a5e47d424696b3f8fd16ada68e", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.02}
> {"timestamp": "2026-05-07T13:59:32.904227+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:34.283700+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:35.112766+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:36.799276+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:37.468853+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c7bc1aec1b804735bda120f675b441b3", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.521}
> {"timestamp": "2026-05-07T13:59:37.617121+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:39.020605+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:39.941381+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:40.973907+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:42.087325+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3fa6c7d5b1f64b8e85c6259fdb72ec73", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.9}
> {"timestamp": "2026-05-07T13:59:42.536363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:43.853619+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:43.951835+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:44.830604+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:46.570274+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:46.700712+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "abc9dde0e10f43cb9ff0b730a86d5336", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.747}
> {"timestamp": "2026-05-07T13:59:48.634212+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:48.751990+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:50.255405+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:51.376701+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "009a6867244041158f5476c493672710", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.942}
> {"timestamp": "2026-05-07T13:59:51.907605+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:52.303672+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:53.338860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:53.355656+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:58.442726+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
  {"timestamp": "2026-05-07T13:59:58.613796+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0c6ad42faec444f1ad65c9972956323b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.883}
> {"timestamp": "2026-05-07T13:59:59.577942+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T13:59:59.725502+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:01.067637+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:03.218761+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:03.279617+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "90faa4bc054043f899cdd8f7653a823a", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.124}
> {"timestamp": "2026-05-07T14:00:04.284418+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:04.695705+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:05.638261+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:07.573383+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:07.916149+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3d82fb52977340519b204f3d43bb0c6d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.767}
> {"timestamp": "2026-05-07T14:00:09.227542+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:09.753777+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:10.924825+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:12.533037+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "78ea34248eb64a9d809224a0792a4e84", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.051}
> {"timestamp": "2026-05-07T14:00:12.982037+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:13.150049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:14.011838+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:14.459864+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:17.146004+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9d9974aadcca4838bf6c30e69eadecc8", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.717}
> {"timestamp": "2026-05-07T14:00:17.247005+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:17.969726+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:18.588676+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:19.248821+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:21.796431+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "22afdd2634a540cdb7e34a37f286746d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.635}
> {"timestamp": "2026-05-07T14:00:21.811472+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:22.201506+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:23.474879+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:23.534659+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:26.492938+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bc42138ee220485180dfbb528c859598", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.173}
> {"timestamp": "2026-05-07T14:00:26.613567+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:27.708935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:30.928179+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:31.550111+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:33.499896+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:33.647045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:33.787392+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "68784e9008354cda8a8e8881422b0a4f", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.416}
> {"timestamp": "2026-05-07T14:00:35.061256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:35.245635+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:37.637703+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:37.985752+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:38.491055+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "88a35d8b81544aeaa639d6f9e4751dab", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.673}
> {"timestamp": "2026-05-07T14:00:39.106905+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:39.732135+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:42.148753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:42.225309+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:43.073182+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a11f3fca66474d6dae63157eda1db5e7", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.317}
> {"timestamp": "2026-05-07T14:00:43.218082+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:43.565588+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:45.633166+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:47.052326+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:47.310430+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:47.614190+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f5583c08174d4c28b28f9706bf59d333", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.099}
> {"timestamp": "2026-05-07T14:00:48.617655+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:50.074950+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:50.936156+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:51.301999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:52.215063+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f3528e10dbb5490bac6ec4eae00ebe64", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.379}
> {"timestamp": "2026-05-07T14:00:52.592031+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:54.170536+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:55.200173+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:55.817892+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:56.531800+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:00:56.870604+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fd5e13509fef474b834450a8fe6c8549", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.017}
> {"timestamp": "2026-05-07T14:00:58.733246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:00:59.125987+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:00.160095+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:00.346387+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:04.217380+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ddf93c1b59e742959f5fcdad81825757", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.733}
> {"timestamp": "2026-05-07T14:01:05.197527+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:06.414670+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:06.495779+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:07.937800+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:08.914872+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "476921575790402492e9f235f46afbd2", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.813}
> {"timestamp": "2026-05-07T14:01:09.240052+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:10.384325+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:10.626148+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:12.316087+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:12.957818+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:13.578106+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5be1bfef749841cd9b1b81978ffe1b44", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.929}
> {"timestamp": "2026-05-07T14:01:14.509875+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:15.212185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:16.254137+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:17.556183+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:18.139089+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "60c2e267a93e488a9a59bcff43e2121d", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.362}
> {"timestamp": "2026-05-07T14:01:18.525965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:18.883775+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:20.111115+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:20.626165+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:21.648995+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:22.738254+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "59aef3a4e6684086b84acb63a38e945b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.871}
> {"timestamp": "2026-05-07T14:01:23.696548+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:24.529218+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:24.895610+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:25.953924+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:26.880280+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:27.364810+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "77b96142f777435cb174caa7d3c27989", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.582}
> {"timestamp": "2026-05-07T14:01:28.524977+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:28.892369+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
  [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
> {"timestamp": "2026-05-07T14:01:29.964265+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:31.626184+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:32.028609+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0d7ac544cc3c44709184d78afd65b951", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.693}
> {"timestamp": "2026-05-07T14:01:34.140630+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:35.915319+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:36.681658+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:38.589526+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:38.710444+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:39.362180+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f1c2fb73b281409d914d5af145254224", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.205}
> {"timestamp": "2026-05-07T14:01:39.814850+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:39.903289+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:42.952059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:44.007213+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ea367461c04b4f1abcf1fca82c53615b", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.688}
> {"timestamp": "2026-05-07T14:01:44.579045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:01:47.531320+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:48.618632+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "53228424f057443a96d76481555ddb22", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.425}
> {"timestamp": "2026-05-07T14:01:49.108205+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:01:53.248998+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d56ebf2336f64ccd860f98af8f9052b4", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.036}
  {"timestamp": "2026-05-07T14:01:57.886586+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "54f786c96a3e4578ac1581016cefa860", "method": "GET", "path": 
"/api/training/status/47", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 8.179}
  {"timestamp": "2026-05-07T14:07:09.198719+00:00", "level": "INFO", "logger": "violawake.retention", "message": 
"Model retention cleanup complete: deleted 0 model(s)", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:20.486900+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 0.97s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:07:20.625144+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.20s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:07:21.661909+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 2.21s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:07:22.087192+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778155429': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 2.00s", 
"request_id": "-"}
  {"timestamp": "2026-05-07T14:07:23.736719+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-38450917b4@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"8653477d001b4edbb7c41623efc32bc0", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T14:07:23.739495+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-38450917b4@violawake-test.example.com", "request_id": 
"8653477d001b4edbb7c41623efc32bc0"}
  {"timestamp": "2026-05-07T14:07:24.092592+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c9faf0eaf6234d128aaa8231e757995e", "method": "POST", "path": "/api/auth/login", 
"route": "/api/auth/login", "status_code": 200, "duration_ms": 303.767}
> {"timestamp": "2026-05-07T14:07:24.121358+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778155991': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.121467+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:24.124704+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 43 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:25.712516+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "27f3351469c244358ed34a8149c7d4bf", "method": "POST", "path": "/api/training/start", 
"route": "/api/training/start", "status_code": 202, "duration_ms": 71.217}
> {"timestamp": "2026-05-07T14:07:25.743185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:25.750602+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e5bf6b29e3ef474eacc29c3741f607c7", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.085}
> {"timestamp": "2026-05-07T14:07:25.785500+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:27.112557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:27.349451+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:29.728555+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:29.751679+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:30.419704+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8f7784a1db63498fab93dffc73ee422e", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.87}
> {"timestamp": "2026-05-07T14:07:30.892253+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:31.119780+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:36.720982+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:37.034806+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:37.710690+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a45307b286c14c7d9533a290007d4afb", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.605}
> {"timestamp": "2026-05-07T14:07:37.906922+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:38.435536+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:40.863219+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:41.432717+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:42.342237+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:42.405275+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4b0b08cad3414cf1a1a1827f42c23fb4", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.308}
> {"timestamp": "2026-05-07T14:07:42.862252+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:46.256592+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:46.333965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:47.083770+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "67b87553925f431087c5c63f18579764", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.362}
> {"timestamp": "2026-05-07T14:07:47.469484+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:47.749044+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:49.790469+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:49.933211+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:51.376903+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:51.623271+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "87edf374ba964002873df23f8ccaa5c5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.952}
> {"timestamp": "2026-05-07T14:07:51.627957+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:54.474647+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:54.501509+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:55.595425+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:55.986318+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:07:56.193222+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c5668993a1a84a6caefd5e2eee1ebca6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.814}
> {"timestamp": "2026-05-07T14:07:58.013526+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:58.503394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:59.124285+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:07:59.601907+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:00.797907+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "db1acdd2b8334001ad8ffeb55d23b3a3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.72}
> {"timestamp": "2026-05-07T14:08:02.901719+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:03.010400+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:04.093993+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:04.224004+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:08.194849+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4abca1d9c9f64817a44134aa1ec58940", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.094}
> {"timestamp": "2026-05-07T14:08:09.205789+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:09.214964+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:10.826274+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:10.919243+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:12.944510+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "34b4120d209a4e69a583d644a7f6402d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.589}
> {"timestamp": "2026-05-07T14:08:14.020122+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:14.020583+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:15.601470+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:15.606895+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:17.590435+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9d657dadd15347d9a0adc31f96fc604b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.567}
> {"timestamp": "2026-05-07T14:08:18.125528+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:18.142528+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:19.716198+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:19.730064+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:22.269594+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "48565537a2264376a5e5937856d06289", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.338}
> {"timestamp": "2026-05-07T14:08:22.938800+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:23.281299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:23.991203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:24.370297+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:26.119209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:26.716824+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:26.864734+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9191919098ed4676a6fa5ab89dfd0832", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.991}
> {"timestamp": "2026-05-07T14:08:27.238131+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:27.743334+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:30.546343+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:30.604437+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:31.522361+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e1d05d40deb44bd686b73dc54167ac97", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.731}
> {"timestamp": "2026-05-07T14:08:31.991165+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:32.065453+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:34.375681+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:34.391872+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:36.064584+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:36.114500+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:36.222189+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "184ddd4b0d194eb3ab42df4b55b3ba42", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.294}
> {"timestamp": "2026-05-07T14:08:42.163247+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:43.033620+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:43.410634+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:43.411604+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f459c483aa4740eea3b3ca5ad3d1a6fc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.415}
> {"timestamp": "2026-05-07T14:08:44.604453+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:46.161500+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:47.020020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:47.698930+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:48.096251+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e9141d50285549c5becd5abc25b123b5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.401}
> {"timestamp": "2026-05-07T14:08:48.267903+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:51.060678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:51.624437+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:52.471142+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:52.669585+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dd0b20cc45734e928fa78fa547243217", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.862}
> {"timestamp": "2026-05-07T14:08:53.120203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:55.316190+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:55.868745+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:56.873676+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:08:57.128616+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:08:57.265921+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bcffcda9e2d244789442d60e0976bc70", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.115}
> {"timestamp": "2026-05-07T14:09:00.187948+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:00.325671+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:01.310427+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:01.829777+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:01.894019+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "631459381fb04ab48844c08336da9201", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.241}
> {"timestamp": "2026-05-07T14:09:03.984562+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:04.109533+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:05.389159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:05.544425+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:06.565629+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e1ceda77faa64409b314c11c33fa7174", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.239}
> {"timestamp": "2026-05-07T14:09:08.695162+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:08.901430+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:12.320390+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:13.201639+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:13.869053+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "97c4d1b58d0047d78333e9b3d1b7c49f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.131}
> {"timestamp": "2026-05-07T14:09:15.941388+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:16.223780+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:17.133494+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:17.491960+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:18.538923+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7270e3cee40248b189032aee7d7ff4dc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 9.537}
> {"timestamp": "2026-05-07T14:09:20.751301+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:21.701119+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:21.823493+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:22.958379+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:23.179095+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8ce97263379742308dd130b8160ab2de", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.521}
> {"timestamp": "2026-05-07T14:09:23.901840+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:25.542767+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:25.681315+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:27.112359+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:27.731004+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d13e37d8e04e402e9fb1e1657badcf97", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.438}
> {"timestamp": "2026-05-07T14:09:28.670072+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:30.135941+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:30.587979+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:32.014617+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:32.386016+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "35e55ae380a54a6b8fc646093e94361d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.084}
> {"timestamp": "2026-05-07T14:09:33.098835+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:34.215730+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:34.854985+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:36.084266+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:37.065076+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "66d60ff16d5644ef9e0e75df3f47db19", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.828}
> {"timestamp": "2026-05-07T14:09:37.958860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:39.410175+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:39.660653+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:41.162242+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:41.739717+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8dc1f83842f04dde9ade80df3b9dbcd4", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.055}
> {"timestamp": "2026-05-07T14:09:44.919148+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:46.266005+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:46.803798+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:47.952283+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:49.033171+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "808fe6e465e94deea338d9f594d48d30", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.262}
> {"timestamp": "2026-05-07T14:09:50.181775+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:50.755208+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:51.414631+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:52.093604+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:53.728948+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5cc3951b4e934a33adb2ee2a154419db", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.792}
> {"timestamp": "2026-05-07T14:09:55.088418+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:09:56.132364+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:09:58.404020+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1a37e6a543c747bba33309d788eda7d9", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 18.635}
> {"timestamp": "2026-05-07T14:09:59.783324+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:02.965412+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4b5ca1b445aa487c81f66ae330e2aa42", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.965}
  {"timestamp": "2026-05-07T14:10:07.553788+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2e40ec0e2c9c4f8a9554bcf205bdd8e7", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.443}
  {"timestamp": "2026-05-07T14:10:24.321313+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a2fee791e39243718672c52d48a8f428", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.475}
> {"timestamp": "2026-05-07T14:10:28.679943+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:29.048781+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "26dfda424f344d98938d1b6eaf1a9f25", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.307}
> {"timestamp": "2026-05-07T14:10:29.860159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:33.209341+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:33.659716+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "64dbee83a52f4ccebd3299be6ac0ecde", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.459}
> {"timestamp": "2026-05-07T14:10:34.154582+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:35.606855+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:36.510834+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:38.073073+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:38.228635+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ca9022a5f72f461ea3970d001653acac", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 15.543}
> {"timestamp": "2026-05-07T14:10:38.361600+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:40.088734+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:40.810184+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:42.197380+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:42.819825+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:42.925584+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5b60818fd6984ceabe93ab4f61ced5f2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.781}
> {"timestamp": "2026-05-07T14:10:44.251481+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:44.928671+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:46.249553+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:46.863889+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:50.077397+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ba1e0a2ee72246b2af73acec62f024d6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.863}
> {"timestamp": "2026-05-07T14:10:51.011055+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:52.342075+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:53.399980+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:54.147096+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:54.772632+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cb99db526f6440679848ca55b798a13d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.858}
> {"timestamp": "2026-05-07T14:10:55.531438+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:55.638845+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:56.922430+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:57.652688+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:10:58.754392+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:10:59.420806+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2bf35a7e33954b6ca5a0b15e6193e347", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.949}
> {"timestamp": "2026-05-07T14:10:59.937248+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:01.039042+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:01.347450+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:02.525998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:03.957073+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ec4672e4d29e41cd893ce5b38875ba48", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.6}
> {"timestamp": "2026-05-07T14:11:04.007254+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:04.868741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:06.145269+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:07.998157+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': 
WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/syn
thesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=f6f3e22521d241ec99513e895aaa
4e78&Sec-MS-GEC=3B5A17FF26EE9F6F189C6C86036B5457CC4261B76B23DD576B42AA60F6B7CCA9&Sec-MS-GEC-Version=1-143.0.3650.75'; 
retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:08.576769+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fcbdfb7f2bea47a8871b539a5fb0ace3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.809}
> {"timestamp": "2026-05-07T14:11:10.849970+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-CoraNeural text 'viola e eh': edge-tts failed after 3 attempts: 
WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/syn
thesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=5682afd6090a40e0b9a6f1703b59
a25c&Sec-MS-GEC=3B5A17FF26EE9F6F189C6C86036B5457CC4261B76B23DD576B42AA60F6B7CCA9&Sec-MS-GEC-Version=1-143.0.3650.75'", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:11:11.333196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:12.026945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:13.033749+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:13.224407+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ba7dd81b04c44edb95ef68a6e96f7b45", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.21}
> {"timestamp": "2026-05-07T14:11:13.679731+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:15.790653+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:16.276678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:16.889083+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:17.901946+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:17.909805+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5b2db518bb1f4f07a835f764ab260332", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.48}
> {"timestamp": "2026-05-07T14:11:19.829246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:23.584601+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:23.794564+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:25.184421+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8775517ed7764ce981ab5e6c6845ca39", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.01}
> {"timestamp": "2026-05-07T14:11:25.426628+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:26.479535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:27.833236+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:28.034665+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:29.314096+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:29.845798+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "859d069a54b84e748268d6fd28e815e6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.203}
> {"timestamp": "2026-05-07T14:11:31.395927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:32.476802+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:32.674472+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:33.677753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:34.459947+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7b3740d80c7242ad808cc3158f6a787b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.41}
> {"timestamp": "2026-05-07T14:11:35.024454+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:35.591909+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:36.299774+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:37.280795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:39.000693+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e4445e18747d44e3be26cb24cef93028", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.961}
> {"timestamp": "2026-05-07T14:11:39.498377+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:40.567609+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:40.875315+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:41.572993+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:43.673867+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "003feb9f5c4e4efe8d95f189fd554bd7", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.56}
> {"timestamp": "2026-05-07T14:11:43.727125+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:44.214635+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:45.344593+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:45.671432+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:48.341456+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d87c73ecb4f14f2381475a0fc63b5a36", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.097}
> {"timestamp": "2026-05-07T14:11:48.397119+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:49.546049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:50.181471+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:50.852978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:52.453249+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:11:55.625120+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c57b5445e1cf4d6597651e321dab29ba", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.329}
> {"timestamp": "2026-05-07T14:11:56.080720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:11:57.111184+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:00.121691+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:00.359836+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "41605ba8141d4477a2f0c5a699d73a35", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.111}
  {"timestamp": "2026-05-07T14:12:05.066210+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cbab7276d494465b9a3d761f4cad2bfa", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.7}
> {"timestamp": "2026-05-07T14:12:07.662546+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:07.715495+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:09.709328+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0ee02ae3451d4f3c8ce30e12b877b7b5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 15.156}
> {"timestamp": "2026-05-07T14:12:11.225069+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:12.609389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:14.282267+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1464139a63824e4cb0e8c6e936e4e6e2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.376}
> {"timestamp": "2026-05-07T14:12:15.345201+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:16.378714+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:16.646893+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:17.768360+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:18.878877+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9a3ebf2afa16440386817424cbb35128", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.558}
> {"timestamp": "2026-05-07T14:12:19.834762+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:20.964491+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:21.407972+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:22.253890+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:23.503772+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "993db974bb2e4fc8aa672fc9268c8f06", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.724}
> {"timestamp": "2026-05-07T14:12:23.776792+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:24.772378+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:26.257396+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:28.653463+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:30.910005+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e8406c10c58b4992b19b8264a7e25e56", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.643}
> {"timestamp": "2026-05-07T14:12:31.889872+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:32.867047+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:33.564607+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:34.253983+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:35.594780+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "670227a46ecf4087a03e3435db3f1fcd", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.389}
> {"timestamp": "2026-05-07T14:12:35.934674+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:36.960171+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:37.099317+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:38.577838+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:39.978947+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:40.192639+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4cdbad4f915b4ae9bdf28b386a293281", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.987}
> {"timestamp": "2026-05-07T14:12:41.724033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:41.826058+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:43.046224+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:44.474605+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:44.784835+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3b2d73b1c1bf4f438226f7f45b7eaf01", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.391}
> {"timestamp": "2026-05-07T14:12:45.495349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:46.206700+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:47.262521+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:49.143529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:49.511001+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c0a86d46f68343d8ae34ca9bd759bd8f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.439}
> {"timestamp": "2026-05-07T14:12:50.296447+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:50.881853+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:51.661165+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:53.589810+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:54.396337+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:12:54.447485+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b5d909814a28450a959a0c215eaf7376", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.749}
> {"timestamp": "2026-05-07T14:12:55.184438+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:12:55.598852+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:01.098578+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:01.714101+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2f65ce99f293434faeaf6de630c661ac", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.356}
> {"timestamp": "2026-05-07T14:13:01.929596+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:02.417795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:03.475848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:04.645909+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:05.888051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:06.432777+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1e82dc380abb40aa9143f41da04233d3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.419}
> {"timestamp": "2026-05-07T14:13:08.888314+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:09.971203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:11.048991+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f3d3eb672c0b40ab8a1803d1bb6195d0", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.475}
> {"timestamp": "2026-05-07T14:13:14.849749+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:15.172050+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:15.587324+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "78bf0e6a474b4ae796a1bf49fae916b5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.695}
> {"timestamp": "2026-05-07T14:13:16.126056+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:16.598162+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:19.264356+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:20.219365+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9155c8e7fc204d9a834c7b0c5f77f68f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.614}
> {"timestamp": "2026-05-07T14:13:20.225528+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:20.759528+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:21.695478+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:23.939012+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:24.071923+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:24.848365+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cab987a7339748b79e0de91de8ebc75b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.039}
> {"timestamp": "2026-05-07T14:13:25.400638+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:25.480863+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:28.806929+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:29.557266+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3c551f4910974ede82a370e9e43c4836", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.051}
> {"timestamp": "2026-05-07T14:13:29.715456+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:30.097997+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:33.914620+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:35.599687+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:36.776787+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:36.813648+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "73c68b17ce704f86b2297e4311522cf5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.316}
> {"timestamp": "2026-05-07T14:13:37.001795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:38.262556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:41.464232+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf0030793d3c46868e3927f971be3af4", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.933}
> {"timestamp": "2026-05-07T14:13:41.898115+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:42.101216+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:43.069329+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:43.294779+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:46.043896+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cd5396e8f9bd4027b10ebd584ec0bd8c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.393}
> {"timestamp": "2026-05-07T14:13:46.062116+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:46.124756+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:47.597354+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:47.719518+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:50.630682+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7c65cb8732ba4cd2bcce4a38f638ffe2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.979}
> {"timestamp": "2026-05-07T14:13:50.683125+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:51.290728+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:52.364250+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:52.389888+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:54.537691+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:55.267932+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:55.282327+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f5e94f8dc8394c1c8ffe35b4879a18cc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.696}
> {"timestamp": "2026-05-07T14:13:55.881794+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:56.355827+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:58.551557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:13:59.781761+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:13:59.931812+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "669e9142577240288f8c470696be50f8", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.322}
> {"timestamp": "2026-05-07T14:13:59.980899+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:01.605136+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:06.196743+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:06.982241+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:07.288172+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f8ebf15b04ff4a18a1b0770b8ce92969", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 17.998}
> {"timestamp": "2026-05-07T14:14:07.716685+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:08.426135+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:10.924105+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:11.962177+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:11.963985+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bf8761b3645b462293601355d58d7aa3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.267}
> {"timestamp": "2026-05-07T14:14:12.633381+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:13.667792+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:15.047573+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:16.234498+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:16.394315+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:16.606842+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bae08bec2d10462db340608a9da7cddd", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.26}
> {"timestamp": "2026-05-07T14:14:17.831206+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:19.610480+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:21.217630+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "954454fc959047ec887ccaae4d33ae77", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.372}
> {"timestamp": "2026-05-07T14:14:21.291892+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:21.463490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:23.090363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:23.631796+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:24.758535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:25.419692+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:25.823591+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4124d4f3706848adb59ab33a71420a90", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 16.446}
> {"timestamp": "2026-05-07T14:14:26.741846+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:28.166778+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:29.622898+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:29.938817+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:30.490305+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "118cf404d3c943f3aa4a59ab462f5397", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.379}
> {"timestamp": "2026-05-07T14:14:31.613002+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:31.905198+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:33.527070+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:34.481478+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:35.178307+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e2ce8ef5931241b1a0e6988e67a47e91", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.254}
> {"timestamp": "2026-05-07T14:14:38.781741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:39.417013+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:40.921165+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:42.520461+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4de820dc321d489e92635d0c1d523239", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.245}
> {"timestamp": "2026-05-07T14:14:43.170029+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:44.274487+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:44.378078+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:45.906256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:47.169225+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f8c13d26cf2a4ac0aedb9ad80911c564", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.154}
> {"timestamp": "2026-05-07T14:14:47.834694+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:47.930256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:49.458312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:49.666108+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:51.628527+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:51.775046+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf34910b434b43e5b82fe73c44ea5975", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.309}
> {"timestamp": "2026-05-07T14:14:52.949033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:53.277860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:54.285556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:56.082127+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:14:56.369995+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4b25041f36e64105b56cfac54840cf46", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.524}
> {"timestamp": "2026-05-07T14:14:56.964489+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:57.357686+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:58.472387+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:14:59.662810+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:00.991472+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8ec6a812f8c44bad94e40355909f9bfd", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.311}
> {"timestamp": "2026-05-07T14:15:01.284455+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:01.792388+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:03.408518+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:04.916411+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:05.517519+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:05.659792+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b297d342eb934364bbdbb1aff0232889", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.679}
> {"timestamp": "2026-05-07T14:15:06.275709+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:06.971369+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:09.223409+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:11.947170+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:12.754693+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:12.937617+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e76a705f130440fdb2ff8d4ab02c30fe", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.208}
> {"timestamp": "2026-05-07T14:15:14.167971+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:14.702108+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:16.369020+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:16.682628+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:17.669673+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e5532893714b4b3682cc7d1d8530fc9b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.791}
> {"timestamp": "2026-05-07T14:15:18.287638+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:19.413584+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:20.800620+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:21.488382+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:22.264532+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "99049b83a58d461c855e9da66537a7c0", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.687}
> {"timestamp": "2026-05-07T14:15:22.510096+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:24.177087+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:25.118305+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:25.197652+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:26.523268+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:26.811237+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8dda93d000fd47e5933a2c9ca78af396", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.074}
> {"timestamp": "2026-05-07T14:15:27.615097+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:29.205873+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:29.425193+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:31.019845+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:31.435483+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c105795fcf13429f87bad695a21288de", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.901}
> {"timestamp": "2026-05-07T14:15:32.171761+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:33.594530+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:33.885930+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:35.781635+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:36.078381+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d7174279e7414b79a7c1b841b4090a1b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.836}
> {"timestamp": "2026-05-07T14:15:36.362488+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:37.886864+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:39.490699+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:41.765881+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ae13ad30547640ff9e4fecc660527ae5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.955}
> {"timestamp": "2026-05-07T14:15:43.618292+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:44.508370+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:46.074123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:46.087080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:47.613094+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:48.030898+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "18f2645eb94042f5aa49aeffbb343004", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.788}
> {"timestamp": "2026-05-07T14:15:51.227269+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:52.446038+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:52.675290+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "53fb8876de6c4d8492984c420a5a68bc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.195}
> {"timestamp": "2026-05-07T14:15:55.401277+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:15:56.622873+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:15:57.231520+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e04c2467546f41c58791631bcc609530", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.806}
> {"timestamp": "2026-05-07T14:15:59.846454+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:01.568394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:01.820115+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "004795bca740432aa1a49254fc4657ff", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.694}
> {"timestamp": "2026-05-07T14:16:04.466043+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:05.926704+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:06.458064+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d7fb3641557c4e379e4c1d3044ce1a07", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.172}
> {"timestamp": "2026-05-07T14:16:09.144753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:10.278849+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:11.122576+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "20d85691c629428e979454b95567e4a1", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.498}
> {"timestamp": "2026-05-07T14:16:13.215389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:17.476686+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:18.488248+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "75038d49256c485c882f3d97f1c3cdc8", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.593}
> {"timestamp": "2026-05-07T14:16:20.829738+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:21.825367+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:23.151123+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cc482ce4b0684adf95c224d63691d378", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.51}
> {"timestamp": "2026-05-07T14:16:23.600542+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:24.555460+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:24.898840+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:26.129250+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:27.672759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:27.764590+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "824327c85ead4b0c9331875721bd913f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.703}
> {"timestamp": "2026-05-07T14:16:28.781049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:29.130327+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:30.635466+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:31.279034+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:32.322431+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "76e228f1ee1f447490b0b6345545d85e", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.119}
> {"timestamp": "2026-05-07T14:16:32.387698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:33.422209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:34.429829+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:35.457080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:36.868789+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:36.961090+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "384c0dfaa6f84be9a7f8097ef307590c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.005}
> {"timestamp": "2026-05-07T14:16:37.972276+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:39.181091+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:39.654536+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:40.822371+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:41.633388+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e7c5153c4a4c496ea0092c782bbd50d7", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.191}
> {"timestamp": "2026-05-07T14:16:41.716485+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:43.159795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:43.894519+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:45.515278+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:48.807561+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:48.926766+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "efe4c3f28e00435aacd258d1376ca1e8", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.414}
> {"timestamp": "2026-05-07T14:16:50.106902+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:50.666812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:52.012887+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:52.606273+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:53.643286+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2fd1cfb274bb4807896f1a6658e9d6e6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.093}
> {"timestamp": "2026-05-07T14:16:54.012200+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:55.366631+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:56.719774+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:57.649589+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:16:58.266008+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "648d597f88384b45a4d57eafc97a61b2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.688}
> {"timestamp": "2026-05-07T14:16:58.804863+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:16:58.814381+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:01.267698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:02.580226+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:02.853645+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c3255b04805c4c0586fbb037b430909b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.903}
> {"timestamp": "2026-05-07T14:17:05.595196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:07.199860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:07.441955+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "127d0297c506479f843e49505a22c43d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.914}
> {"timestamp": "2026-05-07T14:17:10.396526+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:10.972093+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:12.079099+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7e2e87d2d4dc41bfa2046f6c1b41632d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.096}
> {"timestamp": "2026-05-07T14:17:12.153446+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:14.523056+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:15.839329+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:16.036830+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:16.759109+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0aafa4e9bfdf4d0ab0d2c8aa65a35d8a", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 12.031}
> {"timestamp": "2026-05-07T14:17:17.564981+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:21.546952+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:22.234123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:23.295998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:23.337673+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:24.071828+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ec7862d168a44512b1f5d3e03bdfe3f3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.035}
> {"timestamp": "2026-05-07T14:17:26.426851+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:27.314143+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:27.778448+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:28.804179+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c70de568c0414869ad3a7e9e1e15d5f8", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.302}
> {"timestamp": "2026-05-07T14:17:28.832358+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:30.848169+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:31.127484+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:32.034748+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:32.220741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:33.378937+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c8baf71065354d518b8b60ee7fd2cbf7", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.639}
> {"timestamp": "2026-05-07T14:17:35.575714+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:35.589546+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:37.084043+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:37.117711+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:37.920191+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "24d17d22ad9d400aaaae49f51be408a9", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.523}
> {"timestamp": "2026-05-07T14:17:39.310606+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:39.654462+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:40.354910+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:40.987048+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:42.497960+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5b5b4219a9e94627b905501e1fa71975", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.292}
> {"timestamp": "2026-05-07T14:17:43.620745+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:43.802012+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:45.072302+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:45.201696+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:47.153394+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "52a4637f39254dca81f52c1f5a9aecc6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.248}
> {"timestamp": "2026-05-07T14:17:47.628386+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:47.723628+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:48.780378+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:48.869083+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:54.487590+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9645545cd68d4888bc4c87035b7ba764", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.789}
> {"timestamp": "2026-05-07T14:17:54.777677+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:55.042813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:55.894979+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:56.300512+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:58.415590+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:58.481724+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:17:59.162617+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2de47cdcfbe44282a398a1db5d6c1614", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.324}
> {"timestamp": "2026-05-07T14:17:59.934122+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:17:59.992418+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:02.780665+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:03.369694+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:03.839145+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ecbadf98e87b4ee9b1bdaf25662a5016", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.165}
> {"timestamp": "2026-05-07T14:18:04.110264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:04.518811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:06.513872+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:07.002303+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:07.612632+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:08.250152+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:08.388381+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d17011bfadcb49fcad846d7141b44c8c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.432}
> {"timestamp": "2026-05-07T14:18:11.071956+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:11.729915+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:12.598919+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:12.948940+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "16c4f82493784fe6b856d823ce8216b8", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.177}
> {"timestamp": "2026-05-07T14:18:13.356064+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:15.319359+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:15.370893+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:16.342521+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:16.415451+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:17.569333+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5b01734e6ec141c1b22ac092b311b55e", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.801}
> {"timestamp": "2026-05-07T14:18:19.628707+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:19.633001+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:20.685715+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:21.303753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:22.243311+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b550a6575966452a8dbfe5272ef3be9a", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.144}
> {"timestamp": "2026-05-07T14:18:23.357286+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:23.824382+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:27.187062+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:27.658823+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:29.644195+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "97bb9ad770984c61a247fb9266a2195e", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.964}
> {"timestamp": "2026-05-07T14:18:30.874440+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:31.017809+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:32.395922+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:34.273509+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "352dfd2d8ee0411e9634427dd5f27461", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.86}
> {"timestamp": "2026-05-07T14:18:34.964452+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:38.861988+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1d6b652acee5455f9a2ae0f3ef954946", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.952}
> {"timestamp": "2026-05-07T14:18:41.391931+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:41.447038+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:43.439179+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "361b08aa345642bc96776e89d1a8bd93", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.587}
> {"timestamp": "2026-05-07T14:18:44.410714+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:44.766610+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:45.942321+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:46.298952+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:48.091495+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a5319b7afe3b481facc7785dcc47b0f2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.927}
> {"timestamp": "2026-05-07T14:18:49.475098+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:49.606999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:50.556208+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:51.112027+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:18:52.756777+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d5b3680eadc74cb2ad05f8bb1dad551a", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.537}
> {"timestamp": "2026-05-07T14:18:53.806914+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:54.557746+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:55.593449+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:18:56.229355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:00.180838+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d8930087f5b440df9618c5461c6a83fc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.24}
> {"timestamp": "2026-05-07T14:19:01.149498+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:01.240883+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:02.376711+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:02.769755+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:04.902473+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b8705f5dc24f488eadb07a8737d4416a", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.647}
> {"timestamp": "2026-05-07T14:19:05.331801+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:06.230551+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:06.341490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:07.630540+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:09.503266+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0b8ffff81a334d63a1d5ef790b3c073c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 13.856}
> {"timestamp": "2026-05-07T14:19:10.798917+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:10.954465+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:11.986804+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:12.374545+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:14.165078+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a78a5a33a00848c08baca602cd44e501", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.567}
> {"timestamp": "2026-05-07T14:19:14.207051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:15.655503+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:15.774014+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:17.264642+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:18.738953+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1085fd078ab94b5b891efa5c934fee08", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.273}
> {"timestamp": "2026-05-07T14:19:19.260929+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:19.388860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:20.931221+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:21.057612+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:23.448974+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7f2eb8bd35bf4e2196b39d06fa067bb2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.433}
> {"timestamp": "2026-05-07T14:19:24.367823+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:24.502006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:25.528594+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:26.180758+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:28.131115+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0b4e9bb60b72452fae71dd77c0a4cbc3", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.821}
> {"timestamp": "2026-05-07T14:19:28.926123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:29.067966+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:33.249033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:33.295094+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:35.515626+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:35.625600+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cdd25f6f04a5418284fb0cf9214692fb", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.253}
> {"timestamp": "2026-05-07T14:19:36.509230+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:36.667848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:37.905292+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:39.401881+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:40.217056+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:40.375578+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "953e29bbe07a4e1c955626690f7ba9a2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.71}
> {"timestamp": "2026-05-07T14:19:41.009276+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:41.644731+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:43.662107+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:44.727279+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:44.799683+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:44.956031+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b7f9395a01314801bad068b60af840bc", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.533}
> {"timestamp": "2026-05-07T14:19:45.969683+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:47.865035+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:48.460849+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:49.374662+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:49.496186+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fa23f3fb090b439d9ef37402965253cb", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.314}
> {"timestamp": "2026-05-07T14:19:49.897493+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:51.373289+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:52.917251+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:53.434703+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:54.035583+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4f61a0b9907240c5bf53abc5d1c997cf", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.937}
> {"timestamp": "2026-05-07T14:19:55.035113+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:55.590639+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:57.386166+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:19:57.728249+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:19:58.728649+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0ab5b9334de14af2ab0a218dcbfcb049", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 17.157}
> {"timestamp": "2026-05-07T14:19:58.818349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:00.046239+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:01.643518+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:01.817213+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:05.989980+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:06.090101+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "56e00cc8d99241cd9a1ece58778bb3e1", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.269}
> {"timestamp": "2026-05-07T14:20:07.124590+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:08.377604+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:08.483448+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:10.069129+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:10.559964+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:10.701580+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d4a30dca015a4a34af32f49ef1cd09db", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.64}
> {"timestamp": "2026-05-07T14:20:11.997095+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:13.544927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:14.633052+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:14.894739+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:15.325290+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7bcd16ecdb394d52a5d711698f86d270", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.616}
> {"timestamp": "2026-05-07T14:20:15.960860+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:17.327921+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:18.539626+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:18.689852+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:19.934175+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a04088e912ca472ca2562b080b6fb0fe", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.895}
> {"timestamp": "2026-05-07T14:20:20.251710+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:21.857363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:22.964798+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:23.812660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:24.589873+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1582164001294987bcfd09b611d37451", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.438}
> {"timestamp": "2026-05-07T14:20:25.529944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:25.893214+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:27.204191+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:27.551634+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:28.717059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:29.212604+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e6060c6c568a4cf498478fc0f21f6252", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.242}
> {"timestamp": "2026-05-07T14:20:30.255677+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:31.717539+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:31.909933+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:33.121827+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:33.881346+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2d020655a9514994864bfd1b2e56919f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.054}
> {"timestamp": "2026-05-07T14:20:34.097289+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:37.749808+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:38.877232+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:40.304113+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:40.601561+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:41.202543+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6694737069fe4ad8967fb9c63cdd10a2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.509}
> {"timestamp": "2026-05-07T14:20:41.927690+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:43.175447+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:44.169303+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:44.543568+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:45.528744+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:45.818935+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fb425bf744f3478491be261f21d2cbc9", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.653}
> {"timestamp": "2026-05-07T14:20:46.267181+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:47.814096+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:48.631162+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:49.727999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:50.423835+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0f39b408d8404e9190567cf75985f491", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.774}
> {"timestamp": "2026-05-07T14:20:50.948116+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:51.800360+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:52.426998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:53.235939+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:55.013503+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1dd7a4e041e04664a368c69556eab211", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.377}
> {"timestamp": "2026-05-07T14:20:55.071995+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:56.191456+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:56.479386+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:57.807455+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:20:59.428714+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:20:59.679246+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9ac6dd66605548dd878a69cc1509b2c1", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.271}
> {"timestamp": "2026-05-07T14:21:00.408199+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:00.852972+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:02.423728+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:02.894566+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:04.327177+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1ec78b52deff42aeab10e7494396fc1b", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.592}
> {"timestamp": "2026-05-07T14:21:04.424959+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:05.828586+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:10.076650+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:10.300492+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:11.330901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:11.624014+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "054f861c12504ab6a330bdb7cb82594f", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.954}
> {"timestamp": "2026-05-07T14:21:12.019774+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:13.145754+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:14.429511+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:15.577795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:16.334819+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "349286b0266e4ee3873a5055e19b57a2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.032}
> {"timestamp": "2026-05-07T14:21:16.407059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:17.499546+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:19.197900+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:20.073078+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:20.206118+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:20.887382+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4a1a512433db44e68383179ccd74aee0", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.17}
> {"timestamp": "2026-05-07T14:21:21.239051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:22.403974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:24.120371+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:24.436411+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:25.489943+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "48e3c176189a4480ac351361016c402a", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.696}
> {"timestamp": "2026-05-07T14:21:25.704435+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:27.097148+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:28.461683+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:28.592756+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:29.826712+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:30.115071+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0163dbf7cc454fcab0618c3276ef1f97", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.229}
> {"timestamp": "2026-05-07T14:21:31.124849+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:32.556392+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:32.855391+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:34.011341+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:34.776847+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5310a632984646eda5068fc154137a83", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.308}
> {"timestamp": "2026-05-07T14:21:36.230318+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:36.806097+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:37.359091+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:37.901051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:39.461927+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "72e5d584e6704127b084da89765842c6", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.509}
> {"timestamp": "2026-05-07T14:21:42.494710+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:43.877299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:44.487520+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:45.543079+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:46.835646+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "32760dc8db034252ac448648d2482f23", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.647}
> {"timestamp": "2026-05-07T14:21:46.962644+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:47.901534+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:48.516945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:50.530270+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:51.547732+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "948882e734da4ea89060ae915d349e8e", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.371}
> {"timestamp": "2026-05-07T14:21:51.668204+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:53.171175+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:53.181290+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:54.328446+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:21:56.087461+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "235c9190428c41379afcf6d01d88de32", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.395}
> {"timestamp": "2026-05-07T14:21:56.709021+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:57.293880+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:57.937629+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:21:58.958304+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:00.336472+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:00.692186+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "efd74ead9138425aa3e8eb16474dc45c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.406}
> {"timestamp": "2026-05-07T14:22:01.670547+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:02.194643+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:03.547519+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:04.623201+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:05.233726+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e56de39fa482417f85069f669e38ab30", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.543}
> {"timestamp": "2026-05-07T14:22:05.965205+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:06.168314+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:07.188773+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:09.220837+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:09.928534+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "05f27e0780724b56803c204563d6c474", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.166}
> {"timestamp": "2026-05-07T14:22:10.386349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:11.691571+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:15.894864+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:16.657854+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:17.318933+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "25c296d855aa48b4a5a72ba0a8d9ed7c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.376}
> {"timestamp": "2026-05-07T14:22:18.222177+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:18.773460+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:20.122978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:20.476450+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:21.951737+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9d660adeddd24a88a012d89b39d6dc2d", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.493}
> {"timestamp": "2026-05-07T14:22:22.038103+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:23.842863+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:24.868202+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:25.262527+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:26.289974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:22:26.555126+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "17c19e6b31e1430e8470c9a7234bbaf2", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.898}
> {"timestamp": "2026-05-07T14:22:27.500195+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:28.944523+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:28.998186+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:30.157629+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:32.715410+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:33.395312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:34.200398+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:34.468786+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:36.750417+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:37.166500+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:37.884032+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:38.536411+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:41.134009+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:42.327759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:42.896367+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:43.515742+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:48.538882+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:48.821073+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:49.736426+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:50.234788+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:52.735554+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:53.221938+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:54.291916+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:54.757285+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:56.857141+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:57.102657+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:58.221161+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:22:58.503791+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:01.678529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:02.879676+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:06.814525+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:08.102868+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:11.768043+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:13.214056+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:15.363541+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:16.731558+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
  [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
> {"timestamp": "2026-05-07T14:23:22.528058+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:24.126681+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:26.717765+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:28.035172+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:31.469473+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:32.896095+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:35.098787+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:36.488283+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:39.497302+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:40.805311+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:43.227557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:23:44.846165+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  INFO:     Shutting down
  INFO:     Waiting for application shutdown.
  {"timestamp": "2026-05-07T14:24:18.567342+00:00", "level": "INFO", "logger": "violawake.retention", "message": 
"Model retention cleanup complete: deleted 0 model(s)", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:32.036049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.18s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:24:33.409263+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:24:35.871598+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778162842': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.871723+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:35.874674+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 48 (total: 49)", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:37.226753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:38.240980+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:40.142813+00:00", "level": "INFO", "logger": "violawake.console", "message": 
"Handled request exception", "request_id": "0752759145d645f59066587b4d66ec70", "source": "request", "error_kind": 
"expected", "error_reason": "user_input", "error_type": "HTTPException", "error_message": "401: Not authenticated", 
"method": "GET", "path": "/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401}
  {"timestamp": "2026-05-07T14:24:40.143065+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0752759145d645f59066587b4d66ec70", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401, "duration_ms": 1.152}
> {"timestamp": "2026-05-07T14:24:40.772155+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:42.448469+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:45.596185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:47.124367+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:24:49.636428+00:00", "level": "INFO", "logger": "violawake.console", "message": 
"Handled request exception", "request_id": "e71b9d278c514d788a2bb866e80267c4", "source": "request", "error_kind": 
"expected", "error_reason": "user_input", "error_type": "HTTPException", "error_message": "401: Not authenticated", 
"method": "GET", "path": "/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401}
  {"timestamp": "2026-05-07T14:24:49.636704+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e71b9d278c514d788a2bb866e80267c4", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401, "duration_ms": 0.614}
> {"timestamp": "2026-05-07T14:24:49.997695+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:51.318204+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:55.039417+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:24:57.338268+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:01.094205+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:02.131309+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:02.434436+00:00", "level": "INFO", "logger": "violawake.console", "message": 
"Handled request exception", "request_id": "f614d7637c0b42efb78dd1a11410e5f5", "source": "request", "error_kind": 
"expected", "error_reason": "user_input", "error_type": "HTTPException", "error_message": "401: Not authenticated", 
"method": "GET", "path": "/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401}
  {"timestamp": "2026-05-07T14:25:02.434762+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f614d7637c0b42efb78dd1a11410e5f5", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401, "duration_ms": 1.528}
> {"timestamp": "2026-05-07T14:25:05.684050+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:07.256969+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:10.308191+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:11.882298+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:12.265640+00:00", "level": "INFO", "logger": "violawake.console", "message": 
"Handled request exception", "request_id": "d58fdb57d8c643c58bb0050de8bd578c", "source": "request", "error_kind": 
"expected", "error_reason": "user_input", "error_type": "HTTPException", "error_message": "401: Not authenticated", 
"method": "GET", "path": "/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401}
  {"timestamp": "2026-05-07T14:25:12.265906+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d58fdb57d8c643c58bb0050de8bd578c", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401, "duration_ms": 0.531}
> {"timestamp": "2026-05-07T14:25:15.340196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:16.376468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:18.644363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:19.933720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:21.933075+00:00", "level": "INFO", "logger": "violawake.console", "message": 
"Handled request exception", "request_id": "4161659a56a44752b28b058bef529cd1", "source": "request", "error_kind": 
"expected", "error_reason": "user_input", "error_type": "HTTPException", "error_message": "401: Not authenticated", 
"method": "GET", "path": "/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401}
  {"timestamp": "2026-05-07T14:25:21.933448+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4161659a56a44752b28b058bef529cd1", "method": "GET", "path": 
"/api/training/status/48", "route": "/api/training/status/{job_id}", "status_code": 401, "duration_ms": 0.807}
> {"timestamp": "2026-05-07T14:25:23.028355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:24.284081+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:27.223159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:28.392965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:34.419468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:35.463182+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:37.830835+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:38.416446+00:00", "level": "ERROR", "logger": "violawake.email", "message": "Failed 
to send email to e2e-53efbc46e3@violawake-test.example.com for subject Verify your ViolaWake email", "request_id": 
"16cbc5d782d740138d4f34ebbefdf4c9", "exception": "Traceback (most recent call last):\n  File 
\"/app/app/email_service.py\", line 191, in _send_email\n    await asyncio.to_thread(resend.Emails.send, params)\n  
File \"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await 
loop.run_in_executor(None, func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/emails/_emails.py\", line 286, in send\n    
).perform_with_content()\n      ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 49, in perform_with_content\n    resp = 
self.perform()\n           ^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/resend/request.py\", line 
37, in perform\n    raise_for_code_and_type(\n  File \"/usr/local/lib/python3.11/site-packages/resend/exceptions.py\", 
line 270, in raise_for_code_and_type\n    raise ResendError(\nresend.exceptions.ResendError: The violawake.com domain 
is not verified. Please, add and verify your domain on https://resend.com/domains"}
  {"timestamp": "2026-05-07T14:25:38.417616+00:00", "level": "WARNING", "logger": "violawake.auth", "message": 
"Verification email failed \u2014 auto-verifying e2e-53efbc46e3@violawake-test.example.com", "request_id": 
"16cbc5d782d740138d4f34ebbefdf4c9"}
  {"timestamp": "2026-05-07T14:25:39.171824+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "de694a75e4c3463ca928a971e73f70e4", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 41.378}
> {"timestamp": "2026-05-07T14:25:39.247333+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:39.252164+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4d966da67af74dbeadf4ce3a961d8e45", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 18.939}
  {"timestamp": "2026-05-07T14:25:39.331293+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "27dbb0f0ecc64091b5626376d12dcf74", "method": "POST", "path": 
"/api/recordings/upload", "route": "/api/recordings/upload", "status_code": 200, "duration_ms": 22.685}
  {"timestamp": "2026-05-07T14:25:40.281611+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf1d7b892f5a4a4da684a5b205bcb671", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.965}
> {"timestamp": "2026-05-07T14:25:42.440901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:43.860723+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:44.906989+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6cba8543213344bc8df52bab8a9afda7", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.051}
> {"timestamp": "2026-05-07T14:25:46.235562+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:47.587223+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:49.520616+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "64044f9df2514ae684bbbde51ddab515", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.521}
> {"timestamp": "2026-05-07T14:25:50.866692+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.20s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:25:50.915881+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:52.082023+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:52.287554+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.61s", 
"request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.120582+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.123711+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.153852+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7c38b8b991d24d2da331e95e75c13e60", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 17.755}
> {"timestamp": "2026-05-07T14:25:54.631772+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:55.458312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:56.235152+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:56.521302+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:58.695117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:58.822096+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fde3f357ac41491cb23b6056027ec356", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.57}
> {"timestamp": "2026-05-07T14:25:59.305791+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:59.697322+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:00.601944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:05.264819+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:05.856468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:06.117557+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "20c6625aad3440ae9ea936c1b17f808c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.593}
> {"timestamp": "2026-05-07T14:26:06.832177+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:07.308930+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:10.246219+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:10.532013+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:10.802499+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "127740a3a4814f658d63240fd331c421", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.197}
> {"timestamp": "2026-05-07T14:26:11.789266+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:12.042872+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:14.625513+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:15.338301+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:15.468558+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2106b20422644eabae96c0005213436d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.337}
> {"timestamp": "2026-05-07T14:26:16.289596+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:16.478936+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:18.898910+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:19.383766+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:20.010913+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5f6d3f9ca7b7487a8ebe0eba0520c876", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.056}
> {"timestamp": "2026-05-07T14:26:20.041337+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:21.118439+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:23.098865+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:24.316421+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:24.642821+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fd2683fb18eb4e16a1dca7528c5686a9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.808}
> {"timestamp": "2026-05-07T14:26:24.885915+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:25.850759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:27.691121+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:28.804555+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:29.444209+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dee73b4729f34e14b6bc94925039af45", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.199}
> {"timestamp": "2026-05-07T14:26:30.036470+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:31.546738+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:32.328866+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:33.569819+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:33.905801+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:36.829737+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "71b8206e29184b55bdc2dd270e21f8e9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.575}
> {"timestamp": "2026-05-07T14:26:37.946108+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:38.779691+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:40.501490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:41.081284+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:41.485929+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "80cab17a0e304c0d91507e81dfb7d89f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.184}
> {"timestamp": "2026-05-07T14:26:42.456145+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:43.862326+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:44.909597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:45.285047+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:46.083144+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8084f594d08642a899871426dd8e88c4", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.868}
> {"timestamp": "2026-05-07T14:26:46.859632+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:47.580753+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:48.855507+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:50.234681+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:50.699953+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f6852ca9af8d41468da32cc4930a82f5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.226}
> {"timestamp": "2026-05-07T14:26:51.884291+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:51.955682+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:53.371046+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:53.914171+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:55.326990+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5f7ea8dcc9b34d9d84c40c7c108dc283", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.089}
> {"timestamp": "2026-05-07T14:26:55.456006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:55.604340+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:56.895813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:58.358704+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:59.822208+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:26:59.946767+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:26:59.970875+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b62b6164ea4d4622a33fb3f77d9a486b", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.751}
> {"timestamp": "2026-05-07T14:27:01.496293+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:02.970352+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:04.005467+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:04.128479+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:04.621424+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "756dd602f9544b24a2a020adad38f03c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.826}
> {"timestamp": "2026-05-07T14:27:05.736619+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:10.264739+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:11.561876+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:11.931507+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b0d7a3d33c1b490d8880a51ac7086435", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.042}
> {"timestamp": "2026-05-07T14:27:12.029163+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:13.496442+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:16.202554+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:16.601631+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "12acdf3fefc34a3496c71bd06f46f9a8", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.721}
> {"timestamp": "2026-05-07T14:27:17.338256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:20.735970+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:21.237492+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "468e2b1408924dc596b92df5d37e9949", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.774}
> {"timestamp": "2026-05-07T14:27:22.243129+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:24.947621+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:25.541405+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:25.816506+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8e68bf297aaa44aabccd95f611668554", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.374}
> {"timestamp": "2026-05-07T14:27:26.251577+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:26.928894+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:29.637007+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:29.711978+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:30.423372+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "04005bd96b4a4f37b45eb7426d734ded", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.805}
> {"timestamp": "2026-05-07T14:27:31.179348+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:31.243516+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:33.564099+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:34.673492+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:35.086059+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a70a3d4124744a23a81d2dd7b714feae", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.365}
> {"timestamp": "2026-05-07T14:27:35.297003+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-BrandonNeural text 'viola e he': edge-tts failed after 3 
attempts: WSServerHandshakeError: 503, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/
speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=e2196ede7ced46cd89
4c091196432a96&Sec-MS-GEC=4F5CCAE953F4EC4E9A9E34A5EB5EA3647687FC10376FC8E9D65801CC2ADDB7BC&Sec-MS-GEC-Version=1-143.0.3
650.75'", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:35.913117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:37.239678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:37.948359+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:40.459352+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:42.388612+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "61a04def670e4d49a74f5692159b2eab", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.316}
> {"timestamp": "2026-05-07T14:27:43.803132+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:44.938724+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:45.285228+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:46.056345+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:47.060395+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fb4e87aa6f434a88ba8d8087ff5f67f9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.101}
> {"timestamp": "2026-05-07T14:27:47.739594+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:49.059163+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:49.364066+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:50.397676+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:51.667932+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "957925777b26488db351784a22ac3db4", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.96}
> {"timestamp": "2026-05-07T14:27:52.103543+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:52.640864+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:53.722698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:54.123700+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:27:56.221649+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6099fbc7c36f46a3ac0e0ab525078cc6", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.256}
> {"timestamp": "2026-05-07T14:27:56.577529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:57.111037+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:58.089529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:27:58.166060+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:00.841422+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "18370eb11d1b4633b1d1da5ce94eb386", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.197}
> {"timestamp": "2026-05-07T14:28:01.145917+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:02.040962+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:02.364885+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:03.186016+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:05.470900+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "df6a5762d69d4c9ab72ecc1e4ef1b9fd", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.737}
> {"timestamp": "2026-05-07T14:28:05.629564+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:05.743108+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:07.200023+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:07.250581+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:09.747010+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:10.022006+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:10.192662+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "133b5eb0a9d44e718f2fd12534464740", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.998}
> {"timestamp": "2026-05-07T14:28:11.141794+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:11.637943+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:16.947190+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:17.111816+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:17.645790+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "94d5e0340c414c0e83150504fbcbfe3b", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.991}
> {"timestamp": "2026-05-07T14:28:18.391756+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:18.822988+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:21.273923+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:22.374557+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7f9c6b6831f94073ad82bceb053f62a9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.011}
> {"timestamp": "2026-05-07T14:28:22.630151+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:22.877729+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:24.018850+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:26.249072+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:26.570048+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:26.960328+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "29b18e389b6e444499f369b8c5a6d890", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.12}
> {"timestamp": "2026-05-07T14:28:27.531752+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:27.997117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:30.301952+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:30.845979+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:31.349988+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:31.500525+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "54457c0807694c60b4e38f7829c6315f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.682}
> {"timestamp": "2026-05-07T14:28:31.972082+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:34.290555+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:34.678524+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:35.810413+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:36.037202+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "952b8155068a4847b52ef7d7d8ad7f66", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.063}
> {"timestamp": "2026-05-07T14:28:36.302175+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:39.215361+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:39.323361+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:40.224944+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:40.384974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:40.647856+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3903a10bd155487197b5f2fc3fa2c7d0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.871}
> {"timestamp": "2026-05-07T14:28:42.589497+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:43.495858+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:43.957024+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:47.910275+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:48.115288+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "145865fca5eb47d29f75179904d5daf9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.106}
> {"timestamp": "2026-05-07T14:28:49.948775+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:50.435641+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:51.007214+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:51.488812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:52.745520+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1ae89938be594eeab5d1ec0882ec472b", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.215}
> {"timestamp": "2026-05-07T14:28:53.646504+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:54.633510+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:55.234962+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:56.345245+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:28:57.288494+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6da70ecf58bf4c168ef4f467af261a67", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.157}
> {"timestamp": "2026-05-07T14:28:59.061507+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:28:59.293248+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:00.656317+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:00.732976+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:01.911004+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "df02e021db2e4da6a8da2b931fed21a8", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.656}
> {"timestamp": "2026-05-07T14:29:03.793856+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:04.711918+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:04.874845+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:05.699407+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:06.533989+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1d005de5502648db947667f37fdbd2f2", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.986}
> {"timestamp": "2026-05-07T14:29:08.159376+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:08.205559+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:09.551279+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:09.708017+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:11.160502+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9a09abc99ba24833a41a0534e4c5e3ce", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.899}
> {"timestamp": "2026-05-07T14:29:12.631342+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:12.739975+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:14.025618+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:14.447757+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:15.837650+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "86afdd14638044d58442083f2207653a", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.547}
> {"timestamp": "2026-05-07T14:29:17.043211+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:17.388288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:20.863298+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:21.288833+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:23.306396+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8779042ce0344a4a87909cc6e4d8f2ca", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.197}
> {"timestamp": "2026-05-07T14:29:23.788435+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:23.978612+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:25.183885+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:25.271827+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:27.899069+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:28.041785+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b71ec19fefc849e7a34eb31e4a113bd3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.294}
> {"timestamp": "2026-05-07T14:29:28.058127+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:29.142877+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:29.300884+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:31.321719+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:31.942361+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:32.579068+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:32.700474+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1455e702052e4196ad4932a2f646e247", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.558}
> {"timestamp": "2026-05-07T14:29:33.232507+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:36.059157+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:36.398776+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:37.285431+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "84121ae801cc454eade96e60813c40f5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.081}
> {"timestamp": "2026-05-07T14:29:37.441873+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:38.129540+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:39.481167+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:40.521486+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:41.041211+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:41.918196+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "214a4ec9cbce4dab8b64d76a9bb024fd", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.947}
> {"timestamp": "2026-05-07T14:29:42.173602+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:43.650509+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:44.851591+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:45.326079+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:46.067699+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:46.593002+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d987038eee844e778d3450f47d0ce023", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.009}
> {"timestamp": "2026-05-07T14:29:48.401883+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:49.268194+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:49.827947+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:52.770256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:53.747302+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3533556416a74ca080285a6f23ac8493", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.033}
> {"timestamp": "2026-05-07T14:29:55.691291+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:29:56.733439+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:29:58.397460+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "838a84dc4cdf4dfab5e12afe1c63a22e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.352}
> {"timestamp": "2026-05-07T14:29:59.014811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:00.029464+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:00.479943+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:01.049638+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:02.971158+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:03.060135+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6e8e5e1cc99d40ae9c7a299366914c9d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.289}
> {"timestamp": "2026-05-07T14:30:03.414007+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:04.015634+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:04.456206+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:07.344535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:07.664010+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:07.683473+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3b591258b5bd45f9af3e470247ff3ebc", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.488}
> {"timestamp": "2026-05-07T14:30:08.937674+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:08.986923+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:11.742095+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:11.759033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:12.280133+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ffb09b3b73004c68a82cb9aa6c6a6e5a", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.187}
> {"timestamp": "2026-05-07T14:30:12.767815+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:13.353301+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:16.229026+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:16.755115+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:16.915585+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f3daac339c6a40a4aeaa8d893fc87179", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.036}
> {"timestamp": "2026-05-07T14:30:17.550945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:17.962466+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:20.229510+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:20.592210+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:21.587172+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0983b6063fad493ab932edb4e1297ed5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.526}
> {"timestamp": "2026-05-07T14:30:21.624299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:21.879571+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:26.950414+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:27.231334+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:28.000904+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:28.367478+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:28.881208+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5bf61561c29448c8a72212745f80c1e7", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.275}
> {"timestamp": "2026-05-07T14:30:30.958806+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:32.091009+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:33.553777+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "712d5820278a47caad60430672eca1e2", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.82}
> {"timestamp": "2026-05-07T14:30:34.882240+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:36.267658+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:38.119985+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "adc395d45b5d4c46b5f0bc611b361727", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.177}
> {"timestamp": "2026-05-07T14:30:39.598809+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:42.246533+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:42.690848+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "599d9dc39d8b4293a1b90fa35e9d1806", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.329}
> {"timestamp": "2026-05-07T14:30:44.620784+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:45.614572+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:45.761159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:47.007254+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:47.337743+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "33650cc4dfcb44a48f460dfad54acdb6", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.498}
> {"timestamp": "2026-05-07T14:30:48.824763+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:49.273234+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:50.106193+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:50.637196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:51.994314+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "49539b0acb364c379f6c9096282c3487", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.321}
> {"timestamp": "2026-05-07T14:30:52.986661+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:53.913126+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:54.214122+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:30:55.070768+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:30:59.326213+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ac7115f7b82643b18f64a9f639282259", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.296}
> {"timestamp": "2026-05-07T14:31:00.203535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:00.724270+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:01.579647+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:02.236177+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:03.981204+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d4ee181e5aa34e099cc081cb4471e3f9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.704}
> {"timestamp": "2026-05-07T14:31:04.173161+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:05.761590+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:05.858597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:07.354709+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:08.615460+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4cff519d242d49fba1ea6628fc8c7d42", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.805}
> {"timestamp": "2026-05-07T14:31:09.289965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:09.924222+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:10.788832+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:11.258149+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:13.096366+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:13.193255+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a3550d4d3ff1410b9e8a14539228b007", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.829}
> {"timestamp": "2026-05-07T14:31:14.049460+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:14.154710+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:15.271389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:17.331280+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:17.982511+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e77df705c7414b68bb60cafb1542d17e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 10.739}
> {"timestamp": "2026-05-07T14:31:18.309803+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:18.778654+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:19.570567+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:21.481491+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:22.643340+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0eead31e69ff45c6a52df0ab7e1fc3d6", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.844}
> {"timestamp": "2026-05-07T14:31:22.787631+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:23.092886+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:24.531450+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:25.912209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:26.684307+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:27.211104+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:27.297489+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f6fbfec5c66144718a9d21541fa530d0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.164}
> {"timestamp": "2026-05-07T14:31:30.727236+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:32.912920+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:33.638363+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:34.281299+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:34.572316+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "483992c23b3349f2b19d71156aa59dc0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.993}
> {"timestamp": "2026-05-07T14:31:34.919499+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:37.222434+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:37.914980+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:38.726869+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:39.198264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:39.240848+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c0e2b15cbd274df3b090388d154825de", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.93}
> {"timestamp": "2026-05-07T14:31:41.285209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:42.337722+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:42.850140+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:43.905316+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:43.914601+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fd3df044821b4849a868396e82e3c0d0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.129}
> {"timestamp": "2026-05-07T14:31:45.759282+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:46.050495+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:46.810979+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:47.762049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:48.452072+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2efafbdf5b3d464f8757a3a6c9310ba1", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.785}
> {"timestamp": "2026-05-07T14:31:49.203127+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:50.261334+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:50.793587+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:52.471426+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:53.080187+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ac92c648f2244a31b249b2eb5af986a3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.613}
> {"timestamp": "2026-05-07T14:31:53.766951+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:54.745948+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:55.159670+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:56.334079+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:31:57.380291+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:31:57.762549+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "79b173a6e991426bba54f33ccbd16f87", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.38}
> {"timestamp": "2026-05-07T14:31:58.898941+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:00.062000+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:03.715468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:04.380981+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:05.075346+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3e232c1550da43dea087f2e696bbb284", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.203}
> {"timestamp": "2026-05-07T14:32:05.949292+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:06.368744+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:07.770903+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:08.624419+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:09.976348+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "762211425d2949d79e95521f38bb911c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.832}
> {"timestamp": "2026-05-07T14:32:10.078286+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:10.375233+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:11.343341+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:13.331293+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:13.873859+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:14.353348+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:14.548232+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ffed88d74d3141cbb53156850db0fc79", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.65}
> {"timestamp": "2026-05-07T14:32:15.453432+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:17.019246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:18.139035+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:18.826294+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:19.114323+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "3bacf2b0f1b643f28f56477b138e45ec", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.653}
> {"timestamp": "2026-05-07T14:32:20.388482+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:21.798724+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:22.727188+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:22.809274+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:23.737058+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e4101af877d74c7fb13fa9f38e0ac67b", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.233}
> {"timestamp": "2026-05-07T14:32:24.400399+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:25.476637+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:26.949701+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:27.929606+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:28.382908+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c16ea6d6ef114da98969e2f96c3a99d1", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.229}
> {"timestamp": "2026-05-07T14:32:29.283436+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:30.342213+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:31.992371+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:32.040744+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:33.065110+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7151277190e9455f990adb07f98c167e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.645}
> {"timestamp": "2026-05-07T14:32:36.193271+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:37.110758+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:38.647625+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:39.899393+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:40.426506+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cdf13206429042378e16133e88e126bb", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.48}
> {"timestamp": "2026-05-07T14:32:41.267928+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.48s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:41.374039+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:42.977417+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:44.059120+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:45.172529+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "92b34842c93a46d8a74d53b6ccbc920f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.05}
> {"timestamp": "2026-05-07T14:32:45.478383+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:45.682898+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:47.538046+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:49.030835+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:49.716822+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "369d19f6f7ea411ca1dfef514498be8a", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.178}
> {"timestamp": "2026-05-07T14:32:50.805171+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:51.327078+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:52.388008+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:53.827136+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:54.251695+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b7cd038e009b4787979460f004b1bde5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.831}
> {"timestamp": "2026-05-07T14:32:54.869590+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:54.958313+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:56.741506+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:58.298214+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:32:58.788641+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1254f91aff414ebe967fafd83f4b5724", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.66}
> {"timestamp": "2026-05-07T14:32:59.406402+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:32:59.614722+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:00.925389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:01.955820+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:03.291929+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:03.472685+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e28a48256cf14de99426ba4dd8bdb3cd", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.188}
> {"timestamp": "2026-05-07T14:33:03.999370+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:05.399967+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:09.892754+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:10.883087+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e0c3b1a10c9f4e4983a3bd7e47db5ff7", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.25}
> {"timestamp": "2026-05-07T14:33:11.387389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:11.760468+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:13.110818+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:14.317901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:15.338514+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:15.529962+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "32aa009b664748e2a24012c9cb0a0835", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.589}
> {"timestamp": "2026-05-07T14:33:15.957950+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:17.049873+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:19.200484+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:19.955763+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:20.155567+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ae9509a8da3f42c9b1074e0c1f1b699d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.656}
> {"timestamp": "2026-05-07T14:33:20.823552+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:21.030707+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:23.535107+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:23.684200+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:24.706286+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0fe79348ec18478ebd736fe4ec2416f3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.881}
> {"timestamp": "2026-05-07T14:33:24.712521+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:24.790693+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:28.229848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:28.446931+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:29.338995+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:29.363130+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8d69236310e54254a26581825479c1af", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.928}
> {"timestamp": "2026-05-07T14:33:30.066959+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:31.947865+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:32.860687+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:33.513394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:34.010791+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "2f0e2aefc3a04c8e9935bfd1b1c6c2ef", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.212}
> {"timestamp": "2026-05-07T14:33:34.203898+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:36.251194+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:37.477875+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:37.777557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:41.356966+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "705883ae39f1426c947829379f7ba568", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.252}
> {"timestamp": "2026-05-07T14:33:42.022381+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:44.106400+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:44.533185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:45.332868+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:45.520783+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:46.053940+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c028a08897394f6786db93dd093fcc56", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.843}
> {"timestamp": "2026-05-07T14:33:48.163780+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:48.770973+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:49.422884+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:50.125627+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:50.672774+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b942dfea1e4a4b1993262794dbc53eaa", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.762}
> {"timestamp": "2026-05-07T14:33:52.393706+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:52.442971+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:53.485496+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:53.782806+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:55.269231+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0c043caa6df44ea19dccc4f511906b1b", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.699}
> {"timestamp": "2026-05-07T14:33:56.737700+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:57.019210+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:57.928634+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:33:58.287045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:33:59.805336+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c3048b79a7534064bc2bf19d846dd77f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.422}
> {"timestamp": "2026-05-07T14:34:00.408885+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:00.844738+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:01.816734+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:02.067534+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:04.417325+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9ce2414d2d9e4c408012926cb3f0c849", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.32}
> {"timestamp": "2026-05-07T14:34:04.586840+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:05.513658+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:05.834955+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:06.988267+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:08.123032+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:08.983908+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:09.034135+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9c084fe1f80845228c06a9cd959577b5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.29}
> {"timestamp": "2026-05-07T14:34:09.586685+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:10.420135+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:15.606282+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:16.212328+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:16.542209+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "355a5a3874a3400891953ce33f09206f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.684}
> {"timestamp": "2026-05-07T14:34:16.949995+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:17.504493+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:19.427599+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:20.249207+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:21.040553+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:21.298302+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6a8e2b0f2f124e899c1864b237b819d0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.827}
> {"timestamp": "2026-05-07T14:34:21.537203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:23.810819+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:24.865302+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:25.313953+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:25.846033+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "8f64ded80b1c4dc1b423054d52d490da", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.301}
> {"timestamp": "2026-05-07T14:34:25.917817+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:27.755599+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:28.400274+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:29.303516+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:29.663883+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:30.412529+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ae9f254397ca4b2ab468387bb50e17e6", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.508}
> {"timestamp": "2026-05-07T14:34:32.557998+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:32.605698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:33.748455+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:33.953887+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.11s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:35.024513+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "096ae7e3414f424981ac32f43f3c4907", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.904}
> {"timestamp": "2026-05-07T14:34:36.479526+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:36.820483+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:37.582050+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:37.886984+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:39.673046+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "619debff066d459abefbdcc3918ff687", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.489}
> {"timestamp": "2026-05-07T14:34:40.721443+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:41.052424+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:41.796705+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:42.642093+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:46.875264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:47.008955+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9ee8673970084b9f895969370ebb8bc0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.731}
> {"timestamp": "2026-05-07T14:34:47.855920+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:47.944705+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:49.379053+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:51.180955+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:51.715792+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4661936560b24574becbb3409da626ab", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.898}
> {"timestamp": "2026-05-07T14:34:52.129493+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:52.487911+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:53.588644+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:54.481957+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:55.862087+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:56.144307+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:34:56.407087+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d172f13178994492ba9a08b4105e07fa", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.804}
> {"timestamp": "2026-05-07T14:34:56.821476+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:34:58.994000+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:00.243996+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:00.456013+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:00.946906+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b42c9b8065064056bb5663762972b5e7", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.279}
> {"timestamp": "2026-05-07T14:35:01.299795+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.62s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:03.075907+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:03.374791+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:04.541180+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:04.675828+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:05.483940+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "0a8f7752eb534c88bb1eafe802e44741", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.429}
> {"timestamp": "2026-05-07T14:35:07.215436+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:08.027556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:08.324818+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:09.472284+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:10.024270+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b1df05a9e97c41848c0e2bb5b8b2dde3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.285}
> {"timestamp": "2026-05-07T14:35:10.876097+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:11.751308+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:12.178487+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:13.402269+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:14.716927+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a2fe0fc90d0b400f92fd8d3b0606d593", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.442}
> {"timestamp": "2026-05-07T14:35:15.319985+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:16.297043+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:19.465878+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:20.472059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:21.102077+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:22.138148+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bc547b9a9ae44662b6d2a8f9d04be880", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 8.181}
> {"timestamp": "2026-05-07T14:35:22.688935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:23.380738+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:24.601331+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:25.587957+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:26.774735+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f94a6cfa987148fab49037e70612d8b2", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.682}
> {"timestamp": "2026-05-07T14:35:26.797465+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:27.827495+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:28.987134+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:29.487409+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:31.121680+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:31.356868+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:31.390338+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "894d050d21c0407dae0e425c1f464037", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.471}
> {"timestamp": "2026-05-07T14:35:32.383631+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:34.444744+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:35.469051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:35.724799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:35.951398+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b3e82705ae2d4be8a0615def25ff9875", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 15.299}
> {"timestamp": "2026-05-07T14:35:37.214344+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:38.249869+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:39.580131+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:40.183323+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:40.605648+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "1c3c870edc824e89867b50c56529960c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.119}
> {"timestamp": "2026-05-07T14:35:41.584070+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:42.358187+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:43.639077+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:45.247639+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a1bc6775da4c483282bfb3edb485f2be", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.961}
> {"timestamp": "2026-05-07T14:35:45.270739+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:46.242349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:46.631261+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:47.576900+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:48.780036+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:52.572184+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f3d5a79d62ed49c1874854ff20de8604", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.349}
> {"timestamp": "2026-05-07T14:35:52.669600+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:53.353557+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:54.798692+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:55.960211+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:35:57.245658+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "99364ffc5b814fd48c9fc77d1571cbde", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.731}
> {"timestamp": "2026-05-07T14:35:57.328773+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:57.549391+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:35:58.367638+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:00.825976+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:01.879367+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4a34cc8ea44a4d1db8cc3bcf943f4288", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.235}
> {"timestamp": "2026-05-07T14:36:02.021508+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:02.161631+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:03.434993+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:05.449052+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:06.349403+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:06.492583+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "55bf9ce609d1454f841b14d559f4f7d5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.551}
> {"timestamp": "2026-05-07T14:36:07.105207+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:08.277974+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:09.851620+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:11.135159+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a7594129d3de4d8f81f6b178a0984a1f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 40.722}
> {"timestamp": "2026-05-07T14:36:11.142626+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:11.689052+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:12.782308+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:14.714307+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:15.292682+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:15.781219+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f78bf6d638b5410384384059356ad0d3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.987}
> {"timestamp": "2026-05-07T14:36:15.956672+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:16.383968+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:18.283150+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:19.216128+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:19.591327+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:20.442408+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4bf7761a6f0543bcb012cfa6d5915c62", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.013}
> {"timestamp": "2026-05-07T14:36:20.565774+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:25.550210+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:25.654770+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:27.060799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:27.069120+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:27.704779+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b4ba000cbcdf4e848ffa495de31c587f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.936}
> {"timestamp": "2026-05-07T14:36:30.023327+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:30.949748+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:31.247375+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:32.367457+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9b5d932d0fbf4cfc8ee48adc8feeeb67", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.931}
> {"timestamp": "2026-05-07T14:36:32.942728+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:34.134319+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:35.118697+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:35.541462+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:36.720490+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:37.006397+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a8876f729c554ec393cf107fd2409963", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.009}
> {"timestamp": "2026-05-07T14:36:37.794571+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:39.095140+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:39.962660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:41.342985+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:41.623523+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7ac697fde7804675aea6da4f90c8d1f1", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.801}
> {"timestamp": "2026-05-07T14:36:42.930123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:43.972902+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:44.147797+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:45.461777+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:46.195958+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "79af649cae854a8eadf2a047fba876a2", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.395}
> {"timestamp": "2026-05-07T14:36:46.310521+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:48.079316+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:48.895723+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:50.629988+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:50.858294+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "144253f2593c4c27a4984a6e89e73dcc", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.369}
> {"timestamp": "2026-05-07T14:36:51.727622+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:52.933030+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:53.269155+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:54.326825+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:57.874054+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:36:58.156162+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7eed5e1df04740209060a4f587d49bee", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.485}
> {"timestamp": "2026-05-07T14:36:59.528212+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:36:59.915709+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:01.187806+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:03.036244+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "890a583bf2654daeaa01782ae3055fc8", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 18.368}
> {"timestamp": "2026-05-07T14:37:04.074045+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:04.283970+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:05.454083+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:05.497065+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:07.692552+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4b50238e1f564abc8b66f543ece263f5", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.784}
> {"timestamp": "2026-05-07T14:37:07.982062+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:09.170646+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:09.675553+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:10.456254+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:12.235128+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a4855df50e17422d9e9b27fe132f5e46", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.359}
> {"timestamp": "2026-05-07T14:37:12.761768+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:13.137911+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:13.899256+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:14.833871+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:16.871127+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a814e3e1140345c4a3b5c51aa2da9195", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.619}
> {"timestamp": "2026-05-07T14:37:16.985349+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:18.059700+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:18.122694+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:19.720123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:21.488523+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:21.512708+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ec952a3f571d4b9fbb29897c5e122bfe", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.721}
> {"timestamp": "2026-05-07T14:37:22.211688+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:22.965265+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:23.494024+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:25.571954+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.37s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:26.202342+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "147ce5e8b95e4c59914d3cfd9e3c8874", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.442}
> {"timestamp": "2026-05-07T14:37:26.852528+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:27.184312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:30.962249+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:32.573675+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:33.302965+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:33.569586+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ab54a561bbca4adf9adeb135e7d2ea5e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.101}
> {"timestamp": "2026-05-07T14:37:34.014884+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:35.061807+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:36.613545+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:37.743364+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:38.104203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:38.226936+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b4758ecbe20449f0a3a388ea494a7182", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.029}
> {"timestamp": "2026-05-07T14:37:39.102875+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:41.411131+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:41.821380+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:42.801609+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:42.857464+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e8cd4723575b455d975fa72d1bf5f9c2", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.663}
> {"timestamp": "2026-05-07T14:37:43.224161+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:45.398158+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:46.394460+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:46.583159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:47.440353+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "c1ffbee0e20f4d22befd3464c18e8d50", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.369}
> {"timestamp": "2026-05-07T14:37:47.662450+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:49.111229+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:49.772002+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:50.117648+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:50.793937+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:52.021130+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "57ecd1f0211a4783a4dd8d6bd04f241c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.737}
> {"timestamp": "2026-05-07T14:37:52.508722+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:53.529833+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:53.659007+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:54.774637+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:37:56.630778+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "b104dbec09834d398c0080732bcacf03", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.534}
> {"timestamp": "2026-05-07T14:37:56.967127+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:57.358773+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.33s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:58.179936+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:37:58.914180+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:03.563157+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:04.061317+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bf0bdbbcc8f04fed8b18e144fb0f3c9f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.382}
> {"timestamp": "2026-05-07T14:38:05.284064+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:05.388669+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:07.041529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:08.478379+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:08.776084+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fda81675fa1143c99650ebe49e8ed4f3", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 26.217}
> {"timestamp": "2026-05-07T14:38:09.407422+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:09.832025+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:10.832115+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:12.761255+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:13.339682+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "f7ab406d5953495e8715282f19c63523", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.833}
> {"timestamp": "2026-05-07T14:38:13.628087+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.46s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:14.482979+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:15.261146+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.58s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:17.511355+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:17.570935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:17.931258+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a2c8c420898543e7ada6ee73956d6487", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 13.138}
> {"timestamp": "2026-05-07T14:38:18.699874+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:18.795417+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:21.130848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:22.046292+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:22.198825+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:22.569795+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "28d2e34047384ec29432fcf5b4b26d77", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.543}
> {"timestamp": "2026-05-07T14:38:23.318651+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:25.516267+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.30s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:25.585009+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:26.663158+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:27.126221+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:27.231079+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9a1819f28bbf4822b0194779e914c6ed", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 15.949}
> {"timestamp": "2026-05-07T14:38:30.133741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:30.369429+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:31.414151+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:31.888254+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "d277ff85f8ea48969dbfd81d04f62141", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.131}
> {"timestamp": "2026-05-07T14:38:31.901938+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:37.157032+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:37.567603+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:38.273535+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:38.585469+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:39.378962+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "4787faa491f445b78b3d4e6b1712f60f", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.865}
> {"timestamp": "2026-05-07T14:38:40.638092+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:41.866036+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:42.065059+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:43.370568+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:44.083936+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "53071a1b1d3f4102880a63ba5a40caea", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.839}
> {"timestamp": "2026-05-07T14:38:45.256731+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:45.631518+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:46.703826+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:46.853385+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:48.668367+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ca7b14be112743e3ae6cee86ae6dc454", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.921}
> {"timestamp": "2026-05-07T14:38:49.339927+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:49.440235+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:50.671182+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:51.143426+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.88s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:53.257679+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9c238867712e4de1b5b7fa584fdce1f9", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.951}
> {"timestamp": "2026-05-07T14:38:53.742040+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:54.104436+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:55.017713+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:55.521672+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:57.736336+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:38:57.860394+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "a66da214a1004e3ab460c139c67f603d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.755}
> {"timestamp": "2026-05-07T14:38:57.979996+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:59.319508+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:38:59.434730+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:01.862698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:02.156608+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:02.522669+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "420094589be742b7820d02ab05d89083", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.072}
> {"timestamp": "2026-05-07T14:39:03.260209+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:03.616906+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:09.097103+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:09.121861+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.13s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:09.760101+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "fa4996bc65e74052ba76bfd97ea05c70", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.82}
> {"timestamp": "2026-05-07T14:39:10.453986+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:10.468930+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:13.351645+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:14.031686+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:14.456964+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "eee00bd7f2e040158146367de340ab3e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.418}
> {"timestamp": "2026-05-07T14:39:14.987905+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:15.038973+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:17.686254+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:19.007706+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:19.098788+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6066a7b615e34f4abd18996778561353", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.368}
> {"timestamp": "2026-05-07T14:39:21.763994+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:23.401203+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:23.642960+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "43bc7f10d16644c8a50a9f8f8f28a4ca", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.723}
> {"timestamp": "2026-05-07T14:39:25.792695+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:26.854519+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.68s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:28.230438+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "85c23ce2b64f44588d18d25e94291d5c", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.628}
> {"timestamp": "2026-05-07T14:39:30.345578+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:31.824746+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.96s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:32.847334+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "63a4394abfe4423ebbcd97e54b90c950", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 15.339}
> {"timestamp": "2026-05-07T14:39:34.282004+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:35.395537+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:37.610662+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "dda2364cf564421e82bf99f61258a76d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.038}
> {"timestamp": "2026-05-07T14:39:41.397759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:42.587548+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.65s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:44.990410+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "957c4b03cc7040ecb4fcce6c69d1480e", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.883}
> {"timestamp": "2026-05-07T14:39:45.097046+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:46.204184+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:49.616952+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "06b87990410642e5aefc9b933bf665a0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.745}
> {"timestamp": "2026-05-07T14:39:49.800701+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:51.240241+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:53.703224+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:54.201183+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6a889b7b7ae44f299d6b3028702f02a0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.762}
> {"timestamp": "2026-05-07T14:39:55.399763+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:39:58.247992+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:39:58.742903+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ad37e3467ba649b3b9729ce2d4368a34", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.508}
> {"timestamp": "2026-05-07T14:39:59.901090+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:02.625213+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:40:03.428882+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e79d171b1a074afebf6967954880b72d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.129}
> {"timestamp": "2026-05-07T14:40:04.128909+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:07.158032+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:40:08.085791+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "bdee5906c9a14ebcaea463ccc9cee5d7", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 4.928}
> {"timestamp": "2026-05-07T14:40:08.355532+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:13.688989+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:15.205146+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:40:15.428325+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "5b1f77c27cef42df8b19d585a0688f59", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.357}
> {"timestamp": "2026-05-07T14:40:18.305960+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:19.816565+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:40:20.156526+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "e7988ae7267c4f7ab5deaf16c41e3ead", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 3.547}
> {"timestamp": "2026-05-07T14:40:22.634815+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:40:23.785805+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:40:24.773310+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "6a56c32bebe345be98f273f1cc7fd8f0", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 5.408}
  {"timestamp": "2026-05-07T14:40:29.397910+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "18aebc81018a4c2a8df5824f73888b30", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 14.454}
  [entrypoint] running alembic upgrade head
> [entrypoint] ensuring openwakeword backbone models are downloaded
  {"timestamp": "2026-05-07T14:40:34.006400+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "9cab73d247f248b195ca43123d82244d", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 6.901}
  {"timestamp": "2026-05-07T14:40:38.663036+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "ce79466ce47e4b38ad7734d71a05b121", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 7.434}
  {"timestamp": "2026-05-07T14:46:41.827803+00:00", "level": "INFO", "logger": "violawake.retention", "message": 
"Model retention cleanup complete: deleted 0 model(s)", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:50.455178+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.03s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:46:51.695017+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': 
NoAudioReceived: No audio was received. Please verify that your parameters are correct.; retrying in 1.97s", 
"request_id": "-"}
> {"timestamp": "2026-05-07T14:46:53.859248+00:00", "level": "ERROR", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis failed for voice en-US-DavisNeural text 'viola_e2e_1778163936': edge-tts failed after 3 
attempts: NoAudioReceived: No audio was received. Please verify that your parameters are correct.", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.859382+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.866448+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:55.277999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:56.879119+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:59.116703+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:00.757626+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:03.581945+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:07.610159+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:10.519569+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:12.007456+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:15.578483+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:16.930950+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:19.257344+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:20.529405+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:23.618389+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:25.061257+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:28.052891+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:29.601017+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:32.926241+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:33.976321+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:36.853628+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:41.194838+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:44.277293+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:45.359114+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:48.097763+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:49.132896+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:52.323551+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:53.863533+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:56.080895+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:47:57.465412+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:00.689857+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:01.751313+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:04.569990+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:06.261950+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.14s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:12.801040+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.99s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:14.034280+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:16.611077+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.35s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:18.201690+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:21.464233+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:22.585392+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:25.105377+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:26.492720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:30.250808+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:31.437353+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:34.018320+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:35.018403+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:38.496834+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:39.774200+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:45.349301+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:47.068987+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:50.410570+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:51.997228+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:54.094443+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:55.740854+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:48:58.768920+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:00.130100+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:02.745454+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.27s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:04.224721+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ee e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:07.637851+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:09.298595+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:11.968890+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:12.986920+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:18.509710+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:19.998953+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:22.516224+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:23.620686+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ea e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:27.327712+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:28.585226+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:30.879258+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:32.231662+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:34.906759+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:36.612811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:39.087395+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:40.511705+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e he': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:43.604067+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:44.702200+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:46.680929+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:50.696080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.70s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:53.521928+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.45s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:55.185493+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:57.711593+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:49:58.947467+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e eh': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:02.106372+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.84s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:03.323776+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:05.812804+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:07.030188+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:09.965650+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:11.187470+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:13.845751+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:15.094303+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ee': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:18.676861+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:23.766741+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:26.100661+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:27.318556+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:30.435150+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:31.983439+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.61s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:34.676254+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:36.121447+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ea': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:39.917588+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:41.308181+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:44.077720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:45.518169+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:48.881651+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:49.898394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:52.943866+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:50:57.184303+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola e ae': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.67s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:00.516570+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:02.229579+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:04.825999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:06.040228+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:09.241707+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.17s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:10.626112+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:13.438770+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:14.852516+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola ae e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:18.534185+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:19.684117+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:22.431733+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:23.882644+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:29.503840+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:30.508033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:33.134455+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.32s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:34.677016+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viohla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:38.266025+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.44s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:39.941140+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:42.586801+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:44.007324+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:47.217839+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:48.540912+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.72s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:51.072373+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:52.247921+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vioala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:55.601054+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:51:56.900995+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:01.648909+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:02.873325+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.51s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:05.676724+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.78s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:06.725272+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:09.067205+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:10.514819+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viaola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:13.565907+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.88s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:14.627216+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.74s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:16.850677+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:17.839128+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:20.644420+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:21.803272+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:24.713123+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:26.158039+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.12s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:29.726450+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:31.171429+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:36.173695+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:37.514080+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:40.429767+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.80s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:41.422543+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:44.235351+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:45.419314+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'wiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:49.254800+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.49s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:50.995678+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:53.331476+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:54.736035+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.73s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:57.992102+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:52:59.294476+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:01.885193+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:02.989037+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:09.195769+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.29s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:10.714659+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.53s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:12.697194+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:13.813037+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.03s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:17.619183+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:18.638708+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:20.960730+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:22.321103+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viula e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:25.675863+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:26.793314+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:29.363808+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:30.407213+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.71s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:33.605176+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:35.226430+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:40.462380+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:41.882733+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viora e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.19s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:46.133670+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:47.179167+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:49.909325+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.42s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:51.604941+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:54.234295+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.92s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:55.464698+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.56s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:57.766371+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:53:58.868116+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violo e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.86s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:02.473848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.21s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:04.004799+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.60s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:06.132328+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:07.691155+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:13.463809+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.50s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:15.141628+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:18.155792+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:19.241716+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viala e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:22.791466+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.47s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:24.495607+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:26.768643+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.83s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:27.776400+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:30.943022+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:32.121195+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:35.038949+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.96s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:36.252114+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'veola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:39.782809+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:41.458920+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.57s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:46.389529+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:47.428720+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.15s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:51.207966+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:52.329532+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.05s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:55.286467+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:56.321219+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'piola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:54:59.778235+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:01.419196+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.54s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:03.448848+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:04.716512+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.76s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:07.713352+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:09.380456+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.01s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:12.562432+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.06s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:13.949190+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'fiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.64s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:19.849646+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:20.947934+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.02s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:23.384113+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:25.043429+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:28.278040+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:29.596237+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:32.705673+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.97s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:33.927207+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'biola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:37.354584+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.82s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:38.409038+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:40.881660+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:42.461403+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.69s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:45.128264+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.41s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:46.763288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vyaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:52.442951+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:53.973813+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vyaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.98s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:57.490664+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.93s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:55:58.611149+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.59s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:00.596537+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.34s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:02.156734+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.55s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:04.820706+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 0.77s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:05.767344+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'vvaiola e e': NoAudioReceived: 
No audio was received. Please verify that your parameters are correct.; retrying in 1.94s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:08.719917+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:10.229323+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'vvaiola e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.13s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:13.767646+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:15.243186+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:17.668912+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.75s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:18.712751+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.79s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:24.341878+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:25.927740+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:28.849428+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:29.952461+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.10s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:33.577234+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.26s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:56:35.108971+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.52s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:11.935049+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:13.391847+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:16.553857+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:18.364461+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.08s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:21.260288+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.87s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:22.364896+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violia e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:28.324033+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:29.629766+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:32.252949+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.09s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:33.598434+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.63s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:36.320442+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.95s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:37.598347+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.24s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:40.616822+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.25s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:42.077189+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violah e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:45.728983+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.23s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:47.230246+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.22s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:49.967730+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.04s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:51.263831+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.91s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:54.429191+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.85s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:57:55.510812+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.20s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:01.186868+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.31s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:02.749051+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.18s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:06.378935+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.28s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:07.899341+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.90s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:10.255597+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.11s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:11.594394+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.66s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:14.482811+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.40s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:16.065779+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-BrandonNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.00s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:18.851585+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.89s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:19.970522+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-CoraNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 2.07s", "request_id": "-"}
> {"timestamp": "2026-05-07T14:58:23.516564+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'viola eh e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.43s", "request_id": "-"}
> {"times
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -S "VIOLAWAKE_SKIP_QUALITY_GATE" -- src/violawake_sdk/tools/train.py docker-compose.production.yml console/backend/entrypoint.sh console/backend/app/services/training_service.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show --stat --oneline --all --grep "quality" -n 20' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path src/violawake_sdk/tools/train.py,docker-compose.production.yml -Pattern 'VIOLAWAKE_SKIP_QUALITY_GATE|quality gate|quality_check|grade|exported|blocked|skip' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 196bfdd:docker-compose.production.yml | Select-String -Pattern 'SKIP|QUALITY|VIOLAWAKE' -Context 2,3" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 4c46498 -- src/violawake_sdk/tools/train.py | Select-String -Pattern 'quality gate|skip|VIOLAWAKE_SKIP_QUALITY_GATE|return|raise|export' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 788ms:
acdd18f Fix edge TTS negative generation

 succeeded in 874ms:

  src\violawake_sdk\tools\train.py:15:  - AdamW optimizer with cosine annealing LR schedule
  src\violawake_sdk\tools\train.py:16:  - Exponential Moving Average (EMA) of model weights
  src\violawake_sdk\tools\train.py:17:  - 80/20 group-aware train/validation split with early stopping
> src\violawake_sdk\tools\train.py:18:  - Post-training quality gate (speech FP check)
  src\violawake_sdk\tools\train.py:19:
  src\violawake_sdk\tools\train.py:20:Data pipeline (matches production golden path):
  src\violawake_sdk\tools\train.py:21:  A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 
conditions)
  src\violawake_sdk\tools\train.py:22:  B. Confusable negatives round 1: 30 phonetically similar words x 10 voices
  src\violawake_sdk\tools\train.py:23:  C. Confusable negatives round 2: 16 tighter variants x 10 voices
  src\violawake_sdk\tools\train.py:24:  D. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
  src\violawake_sdk\tools\train.py:129:    "stop the music",
  src\violawake_sdk\tools\train.py:130:    "volume up",
  src\violawake_sdk\tools\train.py:131:    "volume down",
> src\violawake_sdk\tools\train.py:132:    "skip this track",
  src\violawake_sdk\tools\train.py:133:    "read my emails",
  src\violawake_sdk\tools\train.py:134:    "remind me tomorrow",
  src\violawake_sdk\tools\train.py:135:    "schedule a meeting",
  src\violawake_sdk\tools\train.py:136:    "take a note",
  src\violawake_sdk\tools\train.py:137:    "search the web",
  src\violawake_sdk\tools\train.py:138:    "tell me a joke",
  src\violawake_sdk\tools\train.py:816:    audio_rms = float(np.sqrt(np.mean(audio_f32**2)))
  src\violawake_sdk\tools\train.py:817:    if audio_rms < 1e-6:
  src\violawake_sdk\tools\train.py:818:        if verbose:
> src\violawake_sdk\tools\train.py:819:            print(f"    WARNING: Skipping zero-energy clip: {clip_name}")
  src\violawake_sdk\tools\train.py:820:        return None
  src\violawake_sdk\tools\train.py:821:
  src\violawake_sdk\tools\train.py:822:    audio_f32 = center_crop(audio_f32, CLIP_SAMPLES)
  src\violawake_sdk\tools\train.py:823:    audio_i16 = np.clip(audio_f32, -1.0, 1.0)
  src\violawake_sdk\tools\train.py:824:    audio_i16 = (audio_i16 * 32767).astype(np.int16)
  src\violawake_sdk\tools\train.py:825:
  src\violawake_sdk\tools\train.py:961:    )
  src\violawake_sdk\tools\train.py:962:
  src\violawake_sdk\tools\train.py:963:    if verbose and failures > 0:
> src\violawake_sdk\tools\train.py:964:        print(f"  [{tag}] skipped {failures} files during audio loading")
  src\violawake_sdk\tools\train.py:965:
  src\violawake_sdk\tools\train.py:966:    return embeddings, embedding_source_ids, tags
  src\violawake_sdk\tools\train.py:967:
  src\violawake_sdk\tools\train.py:968:
  src\violawake_sdk\tools\train.py:969:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:970:# MLP single-frame embedding extraction (legacy path)
  src\violawake_sdk\tools\train.py:1014:        audio_rms = float(np.sqrt(np.mean(audio**2)))
  src\violawake_sdk\tools\train.py:1015:        if audio_rms < 1e-6:
  src\violawake_sdk\tools\train.py:1016:            if verbose and failures == 0:
> src\violawake_sdk\tools\train.py:1017:                print(f"    WARNING: Skipping zero-energy file: 
{wav_path.name}")
  src\violawake_sdk\tools\train.py:1018:            failures += 1
  src\violawake_sdk\tools\train.py:1019:            continue
  src\violawake_sdk\tools\train.py:1020:
  src\violawake_sdk\tools\train.py:1021:        audio = center_crop(audio, CLIP_SAMPLES)
  src\violawake_sdk\tools\train.py:1022:        audio_i16 = np.clip(audio, -1.0, 1.0)
  src\violawake_sdk\tools\train.py:1023:        audio_i16 = (audio_i16 * 32767).astype(np.int16)
  src\violawake_sdk\tools\train.py:1262:        print("\nStep 2: No positive clips available for augmentation; using 
originals only.")
  src\violawake_sdk\tools\train.py:1263:
  src\violawake_sdk\tools\train.py:1264:    if verbose and load_failures > 0:
> src\violawake_sdk\tools\train.py:1265:        print(f"  Skipped {load_failures} positive files during audio loading")
  src\violawake_sdk\tools\train.py:1266:
  src\violawake_sdk\tools\train.py:1267:    # -- Extract temporal embeddings -----------------------------------------
  src\violawake_sdk\tools\train.py:1268:    if verbose:
  src\violawake_sdk\tools\train.py:1269:        print(f"\nStep 3: Extracting {seq_len}-frame temporal OWW 
embeddings...")
  src\violawake_sdk\tools\train.py:1270:        print(f"  Processing {len(raw_pos_audio)} positive clips...")
  src\violawake_sdk\tools\train.py:1271:
  src\violawake_sdk\tools\train.py:1513:        print(f"Best validation loss: {best_val_loss:.4f} at epoch 
{best_epoch}")
  src\violawake_sdk\tools\train.py:1514:        print(f"Training duration: {training_duration:.1f}s")
  src\violawake_sdk\tools\train.py:1515:
> src\violawake_sdk\tools\train.py:1516:    # -- Post-training quality gate ------------------------------------------
  src\violawake_sdk\tools\train.py:1517:    from violawake_sdk._constants import DEFAULT_THRESHOLD, get_feature_config
  src\violawake_sdk\tools\train.py:1518:    from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
  src\violawake_sdk\tools\train.py:1519:
  src\violawake_sdk\tools\train.py:1520:    deployment_threshold = float(DEFAULT_THRESHOLD)
  src\violawake_sdk\tools\train.py:1521:
  src\violawake_sdk\tools\train.py:1522:    if verbose:
> src\violawake_sdk\tools\train.py:1523:        print("\nStep 5: Post-training quality gate 
(speech/confusable/silence)...")
  src\violawake_sdk\tools\train.py:1524:
> src\violawake_sdk\tools\train.py:1525:    quality_grade, quality_gate = _run_quality_gate(
  src\violawake_sdk\tools\train.py:1526:        model,
  src\violawake_sdk\tools\train.py:1527:        torch_device,
  src\violawake_sdk\tools\train.py:1528:        seq_len,
  src\violawake_sdk\tools\train.py:1529:        EMBEDDING_DIM,
  src\violawake_sdk\tools\train.py:1530:        wake_word=wake_word,
  src\violawake_sdk\tools\train.py:1531:        deployment_threshold=deployment_threshold,
  src\violawake_sdk\tools\train.py:1532:        verbose=verbose,
  src\violawake_sdk\tools\train.py:1533:    )
  src\violawake_sdk\tools\train.py:1534:
> src\violawake_sdk\tools\train.py:1535:    # Optional test-mode bypass. Setting VIOLAWAKE_SKIP_QUALITY_GATE=1 exports
> src\violawake_sdk\tools\train.py:1536:    # the model regardless of grade, with a loud warning. This exists for E2E
  src\violawake_sdk\tools\train.py:1537:    # tests + dev iterations where verifying the full export+download chain
  src\violawake_sdk\tools\train.py:1538:    # matters more than blocking a low-quality model. NEVER set this in a
  src\violawake_sdk\tools\train.py:1539:    # customer-facing deploy — it would let unfit models ship.
> src\violawake_sdk\tools\train.py:1540:    skip_gate = os.environ.get("VIOLAWAKE_SKIP_QUALITY_GATE", "").lower() in 
("1", "true", "yes")
  src\violawake_sdk\tools\train.py:1541:
> src\violawake_sdk\tools\train.py:1542:    if quality_grade == "F":
  src\violawake_sdk\tools\train.py:1543:        print(
> src\violawake_sdk\tools\train.py:1544:            "\n" + "!" * 72 + "\nQUALITY GATE FAILED: model is not ready for 
deployment.\n"
  src\violawake_sdk\tools\train.py:1545:            f"  Speech FP rate:     {quality_gate['speech_fp_rate'] * 
100:.1f}%\n"
  src\violawake_sdk\tools\train.py:1546:            f"  Confusable FP rate: {quality_gate['confusable_fp_rate'] * 
100:.1f}%\n"
  src\violawake_sdk\tools\train.py:1547:            f"  Silence max score:  {quality_gate['silence_max_score']:.2f}\n"
  src\violawake_sdk\tools\train.py:1548:            "Recommended fixes:\n"
  src\violawake_sdk\tools\train.py:1549:            "  - Add more diverse speech negatives via --negatives or keep 
--auto-corpus enabled.\n"
  src\violawake_sdk\tools\train.py:1550:            f"  - Expand confusable negatives for '{wake_word}' and retrain.\n"
  src\violawake_sdk\tools\train.py:1553:            + "!"
  src\violawake_sdk\tools\train.py:1554:            * 72
  src\violawake_sdk\tools\train.py:1555:        )
> src\violawake_sdk\tools\train.py:1556:        if skip_gate:
  src\violawake_sdk\tools\train.py:1557:            print(
  src\violawake_sdk\tools\train.py:1558:                "\n" + "*" * 72 + "\n"
> src\violawake_sdk\tools\train.py:1559:                "WARNING: VIOLAWAKE_SKIP_QUALITY_GATE=1 — exporting failing 
model anyway.\n"
  src\violawake_sdk\tools\train.py:1560:                "         This is for E2E testing only. NEVER set this in 
production.\n"
  src\violawake_sdk\tools\train.py:1561:                + "*" * 72
  src\violawake_sdk\tools\train.py:1562:            )
  src\violawake_sdk\tools\train.py:1563:
> src\violawake_sdk\tools\train.py:1564:    model_exported = (quality_grade != "F") or skip_gate
  src\violawake_sdk\tools\train.py:1565:    output_path.parent.mkdir(parents=True, exist_ok=True)
  src\violawake_sdk\tools\train.py:1566:
  src\violawake_sdk\tools\train.py:1567:    # -- Export to ONNX ------------------------------------------------------
> src\violawake_sdk\tools\train.py:1568:    if model_exported:
  src\violawake_sdk\tools\train.py:1569:        if verbose:
  src\violawake_sdk\tools\train.py:1570:            print(f"\nExporting model to ONNX: {output_path}")
  src\violawake_sdk\tools\train.py:1571:
  src\violawake_sdk\tools\train.py:1572:        export_temporal_onnx(model, str(output_path), seq_len=seq_len, 
embedding_dim=EMBEDDING_DIM)
  src\violawake_sdk\tools\train.py:1573:    elif verbose:
> src\violawake_sdk\tools\train.py:1574:        print("\nSkipping ONNX export because the quality gate failed.")
  src\violawake_sdk\tools\train.py:1575:
  src\violawake_sdk\tools\train.py:1576:    # -- Evaluate if test set provided ---------------------------------------
  src\violawake_sdk\tools\train.py:1577:    d_prime_result: float | None = None
> src\violawake_sdk\tools\train.py:1578:    if model_exported and eval_dir and eval_dir.exists():
  src\violawake_sdk\tools\train.py:1579:        if verbose:
  src\violawake_sdk\tools\train.py:1580:            print(f"\nEvaluating on test set: {eval_dir}")
  src\violawake_sdk\tools\train.py:1581:        try:
  src\violawake_sdk\tools\train.py:1582:            from violawake_sdk.training.evaluate import evaluate_onnx_model
  src\violawake_sdk\tools\train.py:1583:
  src\violawake_sdk\tools\train.py:1584:            results = evaluate_onnx_model(output_path, eval_dir)
  src\violawake_sdk\tools\train.py:1588:            print(f"d': {d_prime_result:.2f}  FAR: {far:.2f}/hr  FRR: 
{frr:.1f}%")
  src\violawake_sdk\tools\train.py:1589:        except Exception as e:
  src\violawake_sdk\tools\train.py:1590:            print(f"Evaluation failed: {e}")
> src\violawake_sdk\tools\train.py:1591:    elif quality_grade == "F" and verbose and eval_dir and eval_dir.exists():
> src\violawake_sdk\tools\train.py:1592:        print("Skipping eval because no ONNX model was exported after the 
failed quality gate.")
  src\violawake_sdk\tools\train.py:1593:
  src\violawake_sdk\tools\train.py:1594:    # -- Save config ---------------------------------------------------------
  src\violawake_sdk\tools\train.py:1595:    config = get_feature_config()
  src\violawake_sdk\tools\train.py:1596:    config.update(
  src\violawake_sdk\tools\train.py:1597:        {
  src\violawake_sdk\tools\train.py:1598:            "architecture": "temporal_cnn",
  src\violawake_sdk\tools\train.py:1619:            "training_duration_s": round(training_duration, 2),
  src\violawake_sdk\tools\train.py:1620:            "wake_word": wake_word,
  src\violawake_sdk\tools\train.py:1621:            "deployment_threshold": deployment_threshold,
> src\violawake_sdk\tools\train.py:1622:            "quality_grade": quality_grade,
  src\violawake_sdk\tools\train.py:1623:            "quality_gate": quality_gate,
> src\violawake_sdk\tools\train.py:1624:            "quality_gate_blocked_export": quality_grade == "F",
  src\violawake_sdk\tools\train.py:1625:            "neg_corpus_breakdown": {tag: len(files) for tag, files in 
neg_tags.items()}
  src\violawake_sdk\tools\train.py:1626:            if neg_tags
  src\violawake_sdk\tools\train.py:1627:            else {},
  src\violawake_sdk\tools\train.py:1628:            "corpus_found": corpus_found,
  src\violawake_sdk\tools\train.py:1629:        }
  src\violawake_sdk\tools\train.py:1630:    )
  src\violawake_sdk\tools\train.py:1638:
  src\violawake_sdk\tools\train.py:1639:    if verbose:
  src\violawake_sdk\tools\train.py:1640:        print(f"\nConfig saved: {config_path}")
> src\violawake_sdk\tools\train.py:1641:        if model_exported:
  src\violawake_sdk\tools\train.py:1642:            print(f"Model saved: {output_path}")
  src\violawake_sdk\tools\train.py:1643:            print(f"Load with:  WakeDetector(model='{output_path}')")
  src\violawake_sdk\tools\train.py:1644:
> src\violawake_sdk\tools\train.py:1645:    if quality_grade == "F" and not skip_gate:
  src\violawake_sdk\tools\train.py:1646:        raise RuntimeError(
> src\violawake_sdk\tools\train.py:1647:            "Model failed the quality gate with grade F; ONNX export was 
blocked. "
  src\violawake_sdk\tools\train.py:1648:            f"See {config_path} for quality metrics."
  src\violawake_sdk\tools\train.py:1649:        )
  src\violawake_sdk\tools\train.py:1650:
  src\violawake_sdk\tools\train.py:1651:    return config
  src\violawake_sdk\tools\train.py:1652:
  src\violawake_sdk\tools\train.py:1653:
  src\violawake_sdk\tools\train.py:1654:# ---------------------------------------------------------------------------
> src\violawake_sdk\tools\train.py:1655:# Post-training quality gate
  src\violawake_sdk\tools\train.py:1656:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:1657:
  src\violawake_sdk\tools\train.py:1658:
  src\violawake_sdk\tools\train.py:1659:def _run_quality_gate(
  src\violawake_sdk\tools\train.py:1660:    model: Any,
  src\violawake_sdk\tools\train.py:1661:    torch_device: str,
  src\violawake_sdk\tools\train.py:1665:    deployment_threshold: float = 0.80,
  src\violawake_sdk\tools\train.py:1666:    verbose: bool = True,
  src\violawake_sdk\tools\train.py:1667:) -> tuple[str, dict[str, Any]]:
> src\violawake_sdk\tools\train.py:1668:    """Run a post-training quality gate on speech, confusables, and silence.
  src\violawake_sdk\tools\train.py:1669:
  src\violawake_sdk\tools\train.py:1670:    Returns:
> src\violawake_sdk\tools\train.py:1671:        Tuple of ``(grade, metrics)`` where grade is one of ``A/B/C/F``.
  src\violawake_sdk\tools\train.py:1672:    """
  src\violawake_sdk\tools\train.py:1673:    import tempfile
  src\violawake_sdk\tools\train.py:1674:
  src\violawake_sdk\tools\train.py:1675:    import numpy as np
  src\violawake_sdk\tools\train.py:1676:    import torch
  src\violawake_sdk\tools\train.py:1677:
  src\violawake_sdk\tools\train.py:1708:            return 1.0
  src\violawake_sdk\tools\train.py:1709:        return float((scores >= deployment_threshold).mean())
  src\violawake_sdk\tools\train.py:1710:
> src\violawake_sdk\tools\train.py:1711:    def _grade_label(grade: str) -> str:
  src\violawake_sdk\tools\train.py:1712:        return {
  src\violawake_sdk\tools\train.py:1713:            "A": "EXCELLENT",
  src\violawake_sdk\tools\train.py:1714:            "B": "GOOD",
  src\violawake_sdk\tools\train.py:1715:            "C": "CAUTION",
  src\violawake_sdk\tools\train.py:1716:            "F": "FAIL",
> src\violawake_sdk\tools\train.py:1717:        }[grade]
  src\violawake_sdk\tools\train.py:1718:
> src\violawake_sdk\tools\train.py:1719:    def _grade_quality(
  src\violawake_sdk\tools\train.py:1720:        speech_fp_rate: float,
  src\violawake_sdk\tools\train.py:1721:        confusable_fp_rate: float,
  src\violawake_sdk\tools\train.py:1722:        silence_max_score: float,
  src\violawake_sdk\tools\train.py:1723:    ) -> str:
  src\violawake_sdk\tools\train.py:1724:        if speech_fp_rate < 0.02 and confusable_fp_rate < 0.05 and 
silence_max_score < 0.20:
  src\violawake_sdk\tools\train.py:1725:            return "A"
  src\violawake_sdk\tools\train.py:1785:    # If silence produced no embeddings, the OWW backbone (correctly) rejected
  src\violawake_sdk\tools\train.py:1786:    # the zero-energy audio — the model can never trigger on silence. Score = 
0.
  src\violawake_sdk\tools\train.py:1787:    silence_max_score = float(silence_scores.max()) if len(silence_scores) 
else 0.0
> src\violawake_sdk\tools\train.py:1788:    grade = _grade_quality(speech_fp_rate, confusable_fp_rate, 
silence_max_score)
  src\violawake_sdk\tools\train.py:1789:
  src\violawake_sdk\tools\train.py:1790:    metrics: dict[str, Any] = {
> src\violawake_sdk\tools\train.py:1791:        "grade": grade,
  src\violawake_sdk\tools\train.py:1792:        "deployment_threshold": float(deployment_threshold),
  src\violawake_sdk\tools\train.py:1793:        "speech_fp_rate": speech_fp_rate,
  src\violawake_sdk\tools\train.py:1794:        "speech_sample_count": int(len(speech_scores)),
  src\violawake_sdk\tools\train.py:1795:        "confusable_fp_rate": confusable_fp_rate,
  src\violawake_sdk\tools\train.py:1796:        "confusable_sample_count": int(len(confusable_scores)),
  src\violawake_sdk\tools\train.py:1797:        "silence_max_score": silence_max_score,
  src\violawake_sdk\tools\train.py:1798:        "silence_window_count": int(len(silence_scores)),
  src\violawake_sdk\tools\train.py:1799:    }
  src\violawake_sdk\tools\train.py:1800:
> src\violawake_sdk\tools\train.py:1801:    print(f"Model Quality Grade: {grade} ({_grade_label(grade)})")
  src\violawake_sdk\tools\train.py:1802:    print(
  src\violawake_sdk\tools\train.py:1803:        f"  Speech FP rate:     {speech_fp_rate * 100:4.1f}% "
  src\violawake_sdk\tools\train.py:1804:        f"({len(speech_scores)} phrases, threshold={deployment_threshold:.2f})"
  src\violawake_sdk\tools\train.py:1805:    )
  src\violawake_sdk\tools\train.py:1806:    print(
  src\violawake_sdk\tools\train.py:1807:        f"  Confusable FP rate: {confusable_fp_rate * 100:4.1f}% "
  src\violawake_sdk\tools\train.py:1812:    if verbose and len(speech_scores) < len(quality_phrases):
  src\violawake_sdk\tools\train.py:1813:        print(
  src\violawake_sdk\tools\train.py:1814:            f"  WARNING: Only {len(speech_scores)}/{len(quality_phrases)} 
speech phrases "
> src\violawake_sdk\tools\train.py:1815:            "were scored in the quality gate."
  src\violawake_sdk\tools\train.py:1816:        )
  src\violawake_sdk\tools\train.py:1817:    if verbose and len(confusable_scores) < 20:
  src\violawake_sdk\tools\train.py:1818:        print(
  src\violawake_sdk\tools\train.py:1819:            f"  WARNING: Only {len(confusable_scores)}/20 confusable words "
> src\violawake_sdk\tools\train.py:1820:            "were scored in the quality gate."
  src\violawake_sdk\tools\train.py:1821:        )
  src\violawake_sdk\tools\train.py:1822:    if verbose and len(silence_scores) == 0:
  src\violawake_sdk\tools\train.py:1823:        print(
  src\violawake_sdk\tools\train.py:1824:            "  NOTE: Silence produced no OWW embeddings (zero-energy rejected 
by backbone). Score: 0.0"
  src\violawake_sdk\tools\train.py:1825:        )
  src\violawake_sdk\tools\train.py:1826:
> src\violawake_sdk\tools\train.py:1827:    return grade, metrics
  src\violawake_sdk\tools\train.py:1828:
  src\violawake_sdk\tools\train.py:1829:
  src\violawake_sdk\tools\train.py:1830:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:1831:# Legacy MLP training (kept for backward compatibility)
  src\violawake_sdk\tools\train.py:1832:# ---------------------------------------------------------------------------
  src\violawake_sdk\tools\train.py:1833:
  src\violawake_sdk\tools\train.py:2712:    auto_eval_payload: dict[str, Any] = {
  src\violawake_sdk\tools\train.py:2713:        "source": "auto_holdout" if eval_dir is None else "user_eval_dir",
  src\violawake_sdk\tools\train.py:2714:        "test_dir": str(eval_target_dir) if eval_target_dir else None,
> src\violawake_sdk\tools\train.py:2715:        "status": "skipped",
  src\violawake_sdk\tools\train.py:2716:    }
  src\violawake_sdk\tools\train.py:2717:    config_path = output_path.with_suffix(".config.json")
  src\violawake_sdk\tools\train.py:2718:
  src\violawake_sdk\tools\train.py:2719:    if eval_target_dir is not None:
  src\violawake_sdk\tools\train.py:2720:        try:
  src\violawake_sdk\tools\train.py:2721:            from violawake_sdk.tools.evaluate import evaluate_onnx_model



 succeeded in 872ms:

      restart: always
      environment:
>       POSTGRES_DB: violawake
>       POSTGRES_USER: violawake
        POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      volumes:
        - pgdata:/var/lib/postgresql/data
      healthcheck:
>       test: ["CMD-SHELL", "pg_isready -U violawake"]
        interval: 5s
        timeout: 3s
        retries: 5
      volumes:
        - backend-data:/app/data
>       - ${VIOLAWAKE_NEGATIVES_CORPUS_DIR:-./violawake_data/negatives}:/app/negatives:ro
        # Universal corpus (LibriSpeech + MUSAN) for training-time negative samples.
        # training_service searches Path("corpus") (CWD-relative = /app/corpus) when
        # edge-tts negative generation falls short. Without this mount, training
        - .env.production
      environment:
>       - VIOLAWAKE_DB_URL=postgresql+asyncpg://violawake:${POSTGRES_PASSWORD}@postgres:5432/violawake
>       - VIOLAWAKE_NEGATIVES_CORPUS_DIR=/app/negatives
      depends_on:
        postgres:
          condition: service_healthy



 succeeded in 911ms:

  Author: ViolaSDK <viola-sdk@project.local>
  Date:   Sun Apr 5 05:08:28 2026 -0500
  
>     fix: silence quality gate, training pipeline consistency, remove TFLite placeholder
      
>     - Silence quality gate: zero-energy audio rejected by OWW backbone now scores 0.0
        instead of 1.0 (was causing false Grade F on models that correctly reject silence)
      - Patience default: 15 everywhere (CLI, SDK function, Console) — was 10 in some paths
      - Console training_service.py: added augment_source_files and repo-root corpus path
      - Standalone train_full_pipeline.py: same fixes for CLI/Console/standalone parity
      - Removed temporal_cnn_tflite placeholder from model registry (conversion not validated)
      
  -    This is critical for pipeline equivalence: streaming push_audio() produces
  -    subtly different embeddings due to internal state accumulation.
  +    This operates on raw waveform arrays before OWW embedding extraction and
> +    returns only augmented copies (the originals remain unchanged).
  +    """
  +    import numpy as np
   
  -    For each audio file, center-crops to CLIP_SAMPLES (1.5s), runs embed_clips
  -    to get (n_frames, 96) embeddings, and builds sliding windows of `seq_len`
  -    consecutive embeddings. Each window is a (seq_len, 96) tensor.
  +            TimeStretch,
  +        )
  +    except ImportError as e:
> +        raise RuntimeError(
  +            "audiomentations is required for positive augmentation. "
  +            "Install with: pip install 'violawake[training]'"
  +        ) from e
  +
  +    if not raw_audio_arrays:
> +        return []
  +
  +    augmenter = Compose(
  +        [
  +            Gain(min_gain_db=-6.0, max_gain_db=6.0, p=0.8),
  +            TimeStretch(min_rate=0.9, max_rate=1.1, p=0.5),
  +            PitchShift(min_semitones=-2.0, max_semitones=2.0, p=0.5),
  +        shuffle=False,
  +    )
   
> -    Returns:
  -        embeddings: List of (seq_len, 96) numpy arrays.
  -        source_indices: Source file index for each embedding (for group-aware split).
  -        tags: Tag string for each embedding.
  -    """
  +    augmented: list[np.ndarray] = []
  +    rng = np.random.default_rng(seed)
  +            augmented_audio = augmenter(samples=base_audio.copy(), sample_rate=sample_rate)
  +            augmented.append(np.asarray(augmented_audio, dtype=np.float32))
  +
> +    return augmented
  +
  +
  +def _prepare_audio_for_oww(
  +    audio: np.ndarray,
  +    *,
  +    clip_name: str,
  +
  +    audio_f32 = np.asarray(audio, dtype=np.float32)
  +    if audio_f32.size == 0:
> +        return None
  +
  +    audio_rms = float(np.sqrt(np.mean(audio_f32**2)))
  +    if audio_rms < 1e-6:
  +        if verbose:
> +            print(f"    WARNING: Skipping zero-energy clip: {clip_name}")
> +        return None
  +
  +    audio_f32 = center_crop(audio_f32, CLIP_SAMPLES)
  +    audio_i16 = np.clip(audio_f32, -1.0, 1.0)
  +    audio_i16 = (audio_i16 * 32767).astype(np.int16)
  +
  +    if len(audio_i16) < CLIP_SAMPLES:
  +    else:
  +        audio_i16 = audio_i16[:CLIP_SAMPLES]
  +
> +    return audio_i16
  +
  +
  +def _extract_temporal_windows_from_audio(
  +    audio_clips: list[np.ndarray],
  +    source_ids: list[int],
  +    tag: str,
           sys.exit(1)
   
  +    if len(audio_clips) != len(source_ids):
> +        raise ValueError("audio_clips and source_ids must have the same length")
  +
       oww = OWWModel()
       preprocessor = oww.preprocessor
   
  @@ -656,40 +737,21 @@ def _extract_temporal_embeddings(
       all_tags: list[str] = []
  -        audio_rms = float(np.sqrt(np.mean(audio ** 2)))
  -        if audio_rms < 1e-6:
  -            if verbose and failures == 0:
> -                print(f"    WARNING: Skipping zero-energy file: {wav_path.name}")
  +    for clip_idx, audio in enumerate(audio_clips):
  +        audio_i16 = _prepare_audio_for_oww(
  +            audio,
  +            clip_name=f"{tag}_{clip_idx:04d}",
  +            verbose=verbose and failures == 0,
  +        )
  -            audio_i16 = audio_i16[:CLIP_SAMPLES]
  -
           try:
> -            # embed_clips returns (n_clips, n_frames, embedding_dim)
  -            # This is the PRODUCTION embedding path — batch mode, not streaming.
               frame_embeddings_3d = preprocessor.embed_clips(audio_i16.reshape(1, -1), ncpu=1)
  -            # Shape: (1, n_frames, 96) -> (n_frames, 96)
  -            frame_embeddings = frame_embeddings_3d[0]  # (n_frames, 96)
  +            frame_embeddings = frame_embeddings_3d[0]
   
               if len(frame_embeddings.shape) == 1:
> -                # Single frame returned -- reshape to (1, 96)
                   frame_embeddings = frame_embeddings.reshape(1, -1)
   
               n_frames = frame_embeddings.shape[0]
  @@ -698,33 +760,88 @@ def _extract_temporal_embeddings(
                   for i in range(n_frames - seq_len + 1):
                       window = frame_embeddings[i : i + seq_len].astype(np.float32)
               f"({failures} failures)"
           )
   
>      return all_embeddings, all_source_idx, all_tags
   
   
  +# ---------------------------------------------------------------------------
  +# Temporal embedding extraction (9-frame windows from OWW backbone)
  +# ---------------------------------------------------------------------------
  +
  +    to get (n_frames, 96) embeddings, and builds sliding windows of `seq_len`
  +    consecutive embeddings. Each window is a (seq_len, 96) tensor.
  +
> +    Returns:
  +        embeddings: List of (seq_len, 96) numpy arrays.
  +        source_indices: Source file index for each embedding (for group-aware split).
  +        tags: Tag string for each embedding.
  +    """
  +    import numpy as np
  +
  +    )
  +
  +    if verbose and failures > 0:
> +        print(f"  [{tag}] skipped {failures} files during audio loading")
  +
> +    return embeddings, embedding_source_ids, tags
  +
  +
   # ---------------------------------------------------------------------------
   # MLP single-frame embedding extraction (legacy path)
   # ---------------------------------------------------------------------------
  @@ -887,11 +1004,13 @@ def _train_temporal_cnn(
  +        augment_source_files: Optional subset of positives to augment. Defaults
  +            to all positives when omitted.
   
>      Returns:
           Config dict with training results.
       """
       training_start = time.monotonic()
   
  +    # -- Direct temp files to a non-system drive when requested --------------
  +    global _TMP_DIR  # noqa: PLW0603
  +        print("\nStep 2: No positive clips available for augmentation; using originals only.")
  +
  +    if verbose and load_failures > 0:
> +        print(f"  Skipped {load_failures} positive files during audio loading")
   
       # -- Extract temporal embeddings -----------------------------------------
       if verbose:
           print(f"\nStep 3: Extracting {seq_len}-frame temporal OWW embeddings...")
  -        print(f"  Processing {len(augmented_pos_files)} positive files...")
  +        print(f"  Processing {len(raw_pos_audio)} positive clips...")
  -        shutil.rmtree(aug_dir, ignore_errors=True)
  -
       if quality_grade == "F":
>          raise RuntimeError(
>              "Model failed the quality gate with grade F; ONNX export was blocked. "
  @@ -1434,7 +1599,7 @@ def _run_quality_gate(
       quality_phrases = SPEECH_NEGATIVE_PHRASES[:50]
       voice = EDGE_TTS_VOICES[0]  # Single voice keeps the gate fast and deterministic.
   
  -    with tempfile.TemporaryDirectory(prefix="violawake_qc_") as tmp_dir:
  +    with tempfile.TemporaryDirectory(prefix="violawake_qc_", dir=_TMP_DIR) as tmp_dir:
   
       metrics: dict[str, Any] = {
  @@ -1517,7 +1684,7 @@ def _run_quality_gate(
>              "were scored in the quality gate."
           )
       if verbose and len(silence_scores) == 0:
> -        print("  WARNING: Silence scoring failed; quality gate forced to grade F.")
  +        print("  NOTE: Silence produced no OWW embeddings (zero-energy rejected by backbone). Score: 0.0")
   
>      return grade, metrics
   
  @@ -2025,10 +2192,11 @@ def main() -> None:
           metavar="N",
           help="Early stopping patience (default: 15)",
       )
  +    parser.set_defaults(augment=True)



 succeeded in 2030ms:
196bfdd fix(training): four runtime bugs blocking the actual product
 console/backend/entrypoint.sh    |   9 ++
 console/backend/requirements.txt |   1 +
 docker-compose.production.yml    |   5 +
 src/violawake_sdk/tools/train.py |  10 +-
 tests/live/full_pipeline_e2e.py  | 295 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 317 insertions(+), 3 deletions(-)
06c878b feat(launch-prep): TIER 1-4 production hardening pass
 .github/workflows/ci.yml                           |   3 +-
 .gitignore                                         |   3 ++
 console/backend/app/middleware.py                  |  22 ++++++++
 console/frontend/public/_headers                   |  21 ++++++++
 console/frontend/public/wasm/demo/index.html       |   2 +-
 .../public/wasm/models/embedding_model.onnx        | Bin 0 -> 1326578 bytes
 .../public/wasm/models/melspectrogram.onnx         | Bin 0 -> 1087958 bytes
 .../frontend/public/wasm/models/temporal_cnn.onnx  | Bin 0 -> 102378 bytes
 console/frontend/src/pages/Landing.tsx             |   5 +-
 scripts/backup_postgres.cmd                        |   4 ++
 scripts/backup_postgres.sh                         |  59 +++++++++++++++++++++
 src/violawake_sdk/models.py                        |  11 ++--
 src/violawake_sdk/oww_backbone.py                  |  31 +++++++++--
 wasm/demo/index.html                               |   2 +-
 14 files changed, 150 insertions(+), 13 deletions(-)
4c46498 fix: silence quality gate, training pipeline consistency, remove TFLite placeholder
 console/backend/app/services/training_service.py   |  67 +++-
 console/backend/scripts/train_full_pipeline.py     |  12 +-
 .../archive/BENCHMARK_REPORT_oww.md                |   0
 .../archive/META_ANALYSIS_mlp_era.md               |   0
 .../archive/RESULTS_eval_clean_mlp.md              |   0
 .../archive}/STREAMING_VS_CLIP_ANALYSIS.md         |   0
 .../archive/far_frr_report_mlp.md                  |   0
 src/violawake_sdk/models.py                        |  12 +-
 src/violawake_sdk/tools/train.py                   | 361 +++++++++++++++------
 9 files changed, 331 insertions(+), 121 deletions(-)
8161298 fix: 3-round adversarial audit — 8 P0s + 11 P1s across SDK, Console, docs
 .github/workflows/ci.yml                           |   57 +-
 .github/workflows/docs.yml                         |   72 +
 ADVERSARY_AUDIT.md                                 |  454 ++
 BUILD_VS_BUY_AUDIT.md                              |  456 ++
 CONTRIBUTING.md                                    |   14 +
 E2E_READINESS.md                                   |  359 +
 FUNCTIONAL_GAP_ANALYSIS.md                         |  441 ++
 LAUNCH_READINESS.md                                |  604 ++
 README.md                                          |  216 +-
 console/Dockerfile.backend                         |    1 +
 console/Dockerfile.frontend                        |   14 +-
 console/README.md                                  |   14 +
 console/backend/.env.example                       |    7 +-
 .../20260328_0001_b2c3d4e5f6a7_add_teams.py        |   60 +
 console/backend/app/auth.py                        |  192 +-
 console/backend/app/config.py                      |   47 +-
 console/backend/app/database.py                    |   17 +
 console/backend/app/email_service.py               |   34 +-
 console/backend/app/job_queue.py                   |  262 +-
 console/backend/app/main.py                        |  105 +-
 console/backend/app/models.py                      |   36 +-
 console/backend/app/rate_limit.py                  |   54 +
 console/backend/app/retention.py                   |  274 +
 console/backend/app/routes/auth.py                 |  216 +-
 console/backend/app/routes/billing.py              |   54 +-
 console/backend/app/routes/files.py                |    2 -
 console/backend/app/routes/jobs.py                 |   37 +-
 console/backend/app/routes/models.py               |   51 +-
 console/backend/app/routes/recordings.py           |  111 +-
 console/backend/app/routes/teams.py                |  395 +
 console/backend/app/routes/training.py             |   41 +-
 console/backend/app/schemas.py                     |   70 +-
 console/backend/app/services/training_service.py   |  518 +-
 console/backend/requirements.txt                   |    3 +
 console/backend/scripts/train_full_pipeline.py     |  276 +
 console/docker-compose.yml                         |    9 +-
 console/frontend/index.html                        |   13 +-
 console/frontend/nginx.conf                        |   12 +
 console/frontend/package-lock.json                 |   22 +
 console/frontend/package.json                      |    1 +
 console/frontend/public/robots.txt                 |    9 +
 console/frontend/public/sitemap.xml                |    9 +
 console/frontend/src/App.tsx                       |   28 +-
 console/frontend/src/api.ts                        |  142 +-
 console/frontend/src/components/AudioRecorder.tsx  |   50 +
 console/frontend/src/components/CookieConsent.tsx  |   16 +
 console/frontend/src/components/Layout.tsx         |   12 +-
 console/frontend/src/components/ModelCard.tsx      |  119 +-
 .../frontend/src/components/RecordingSession.tsx   |    6 +-
 .../frontend/src/components/TrainingProgress.tsx   |   15 +-
 console/frontend/src/contexts/AuthContext.tsx      |   33 +-
 console/frontend/src/hooks/useRecordings.ts        |  119 -
 console/frontend/src/hooks/useTraining.ts          |  120 +-
 console/frontend/src/pages/ForgotPassword.tsx      |  121 +
 console/frontend/src/pages/Landing.tsx             |   20 +-
 console/frontend/src/pages/Login.tsx               |   20 +-
 console/frontend/src/pages/Pricing.tsx             |   70 +-
 console/frontend/src/pages/Privacy.tsx             |  245 +-
 console/frontend/src/pages/Register.tsx            |    6 +-
 console/frontend/src/pages/ResetPassword.tsx       |  180 +
 console/frontend/src/pages/TeamDetail.css          |  380 +
 console/frontend/src/pages/TeamDetail.tsx          |  395 +
 console/frontend/src/pages/Teams.css               |  160 +
 console/frontend/src/pages/Teams.tsx               |  166 +
 console/frontend/src/pages/Terms.tsx               |  208 +-
 console/frontend/src/pages/TrainingStatus.tsx      |    4 +-
 console/frontend/src/pages/VerifyEmail.tsx         |   90 +
 console/frontend/src/styles/global.css             |  145 +-
 console/frontend/src/types.ts                      |   41 +-
 console/frontend/src/utils/audioQuality.ts         |  145 +
 console/frontend/vite.config.ts                    |    4 +-
 console/tests/e2e/conftest.py                      |   30 +-
 console/tests/e2e/test_api_flow.py                 |    3 +
 console/tests/test_auth_email_routes.py            |   16 +
 console/tests/test_backend.py                      |  400 +-
 console/tests/test_billing.py                      |   30 +-
 console/tests/test_job_queue.py                    |  171 +-
 console/tests/test_retention.py                    |  283 +
 console/tests/test_teams.py                        |  704 ++
 docs/AUDIT_2026_03_28.md                           |   88 +
 docs/BUSINESS_PLAN.md                              |  626 +-
 docs/COMPETITIVE_ANALYSIS.md                       |  404 +-
 docs/PRD.md                                        |  446 +-
 docs/SHOW_HN_DRAFT.md                              |   27 +-
 docs/adr/ADR-002-oww-feature-extractor.md          |   18 +-
 docs/adr/ADR-004-open-core.md                      |   14 +-
 docs/adr/ADR-005-packaging.md                      |   24 +-
 docs/api/README.md                                 |   40 -
 docs/api/index.html                                |  217 +
 docs/api/search.js                                 |   46 +
 docs/api/violawake.html                            |  245 +
 docs/api/violawake_sdk.html                        | 7944 ++++++++++++++++++++
 docs/index.html                                    |  277 +
 pyproject.toml                                     |    1 +
 scripts/generate_docs.py                           |  116 +
 scripts/verify_models.py                           |   10 +-
 src/violawake_sdk/__init__.py                      |   26 +-
 src/violawake_sdk/async_detector.py                |   11 +-
 src/violawake_sdk/models.py                        |   88 +-
 src/violawake_sdk/pipeline.py                      |   26 +-
 src/violawake_sdk/stt.py                           |  317 +-
 src/violawake_sdk/tools/download_model.py          |   52 +
 src/violawake_sdk/tools/train.py                   |   20 +
 tests/integration/test_feature_completeness.py     | 2097 ++++++
 tests/integration/test_streaming_stt.py            |  399 +
 tests/unit/test_model_download.py                  |   47 +-
 tests/unit/test_models.py                          |   75 +-
 tools/fetch_release_models.py                      |  236 +-
 wasm/README.md                                     |  188 +
 wasm/demo/index.html                               |  395 +
 wasm/package.json                                  |   49 +
 wasm/rollup.config.mjs                             |   36 +
 wasm/src/detector.ts                               |  303 +
 wasm/src/features.ts                               |  317 +
 wasm/src/index.ts                                  |   23 +
 wasm/tsconfig.json                                 |   19 +
 116 files changed, 23156 insertions(+), 2447 deletions(-)
13c5a59 feat: ViolaWake Console — full SaaS platform for custom wake word training
 .dockerignore                                      |   41 +
 .github/workflows/console-ci.yml                   |  124 ++
 .gitignore                                         |   13 +
 CLAUDE.md                                          |    6 +-
 CONTRIBUTING.md                                    |  185 ++
 PROGRESS.md                                        |  176 ++
 README.md                                          |   39 +-
 RELEASE_NOTES.md                                   |   20 +
 SECURITY.md                                        |   64 +
 console/Dockerfile.backend                         |   27 +
 console/Dockerfile.frontend                        |   12 +
 console/README.md                                  |  103 +
 console/backend/.env.example                       |   67 +
 console/backend/app/__init__.py                    |    1 +
 console/backend/app/auth.py                        |  156 ++
 console/backend/app/config.py                      |  151 ++
 console/backend/app/database.py                    |   61 +
 console/backend/app/email_service.py               |  183 ++
 console/backend/app/health.py                      |  201 ++
 console/backend/app/job_queue.py                   | 1056 ++++++++++
 console/backend/app/main.py                        |   88 +
 console/backend/app/middleware.py                  |  272 +++
 console/backend/app/models.py                      |  112 ++
 console/backend/app/monitoring.py                  |  206 ++
 console/backend/app/routes/__init__.py             |    1 +
 console/backend/app/routes/auth.py                 |  231 +++
 console/backend/app/routes/billing.py              |  537 +++++
 console/backend/app/routes/files.py                |  109 ++
 console/backend/app/routes/jobs.py                 |  183 ++
 console/backend/app/routes/models.py               |  378 ++++
 console/backend/app/routes/recordings.py           |  283 +++
 console/backend/app/routes/training.py             |  143 ++
 console/backend/app/schemas.py                     |  213 ++
 console/backend/app/services/__init__.py           |    1 +
 console/backend/app/services/training_service.py   |  523 +++++
 console/backend/app/storage.py                     |  281 +++
 console/backend/requirements.txt                   |   20 +
 console/backend/run.py                             |   16 +
 console/docker-compose.yml                         |   35 +
 console/frontend/.dockerignore                     |    4 +
 console/frontend/.env.example                      |    3 +
 console/frontend/Dockerfile                        |   23 +
 console/frontend/index.html                        |   26 +
 console/frontend/nginx.conf                        |   37 +
 console/frontend/package-lock.json                 | 1771 +++++++++++++++++
 console/frontend/package.json                      |   23 +
 console/frontend/public/_redirects                 |    1 +
 console/frontend/public/favicon.svg                |    5 +
 console/frontend/src/App.tsx                       |   94 +
 console/frontend/src/api.ts                        |  296 +++
 console/frontend/src/components/AudioRecorder.tsx  |  304 +++
 console/frontend/src/components/ErrorBoundary.tsx  |   58 +
 console/frontend/src/components/Layout.tsx         |   54 +
 console/frontend/src/components/ModelCard.tsx      |  210 ++
 console/frontend/src/components/ProtectedRoute.tsx |   26 +
 .../frontend/src/components/RecordingSession.tsx   |  191 ++
 console/frontend/src/components/Toast.tsx          |   37 +
 .../frontend/src/components/TrainingProgress.tsx   |  144 ++
 console/frontend/src/contexts/AuthContext.tsx      |  128 ++
 console/frontend/src/contexts/ToastContext.tsx     |   56 +
 console/frontend/src/hooks/useAuth.ts              |    2 +
 console/frontend/src/hooks/useRecordings.ts        |  119 ++
 console/frontend/src/hooks/useTraining.ts          |  140 ++
 console/frontend/src/main.tsx                      |   13 +
 console/frontend/src/pages/Billing.css             |  172 ++
 console/frontend/src/pages/Billing.tsx             |  221 +++
 console/frontend/src/pages/Dashboard.tsx           |  100 +
 console/frontend/src/pages/Landing.tsx             |  266 +++
 console/frontend/src/pages/Login.tsx               |  120 ++
 console/frontend/src/pages/ModelPerformance.css    |  184 ++
 console/frontend/src/pages/ModelPerformance.tsx    |  400 ++++
 console/frontend/src/pages/Pricing.tsx             |  304 +++
 console/frontend/src/pages/Privacy.tsx             |  284 +++
 console/frontend/src/pages/Record.tsx              |  154 ++
 console/frontend/src/pages/Register.tsx            |  150 ++
 console/frontend/src/pages/Terms.tsx               |  279 +++
 console/frontend/src/pages/TrainingStatus.tsx      |   72 +
 console/frontend/src/styles/global.css             | 2058 ++++++++++++++++++++
 console/frontend/src/types.ts                      |  103 +
 console/frontend/src/utils/wavEncoder.ts           |   93 +
 console/frontend/src/vite-env.d.ts                 |    1 +
 console/frontend/tsconfig.json                     |   21 +
 console/frontend/vite.config.ts                    |   15 +
 console/launch.py                                  |  232 +++
 console/run_e2e.py                                 |   74 +
 console/tests/__init__.py                          |    0
 console/tests/e2e/__init__.py                      |    0
 console/tests/e2e/conftest.py                      |  204 ++
 console/tests/e2e/conftest_playwright.py           |   93 +
 console/tests/e2e/pytest.ini                       |    5 +
 console/tests/e2e/test_api_flow.py                 |  306 +++
 console/tests/e2e/test_browser_flow.py             |  224 +++
 console/tests/screenshot_audit.py                  |   99 +
 console/tests/test_auth_email_routes.py            |  196 ++
 console/tests/test_backend.py                      |  456 +++++
 console/tests/test_billing.py                      |  403 ++++
 console/tests/test_health_monitoring.py            |  213 ++
 console/tests/test_job_queue.py                    |  323 +++
 console/tests/test_storage.py                      |  104 +
 docs/BUSINESS_PLAN.md                              |  540 +++++
 docs/COMPETITIVE_ANALYSIS.md                       |  345 ++++
 docs/PRD.md                                        |   18 +-
 docs/PRE_LAUNCH_CHECKLIST.md                       |  159 ++
 docs/REGISTRY.md                                   |   15 +-
 docs/ROADMAP_10_OF_10.md                           |  539 +++++
 docs/S1.3_REQUIREMENTS_SYNTHESIS.md                |   12 +-
 docs/SHOW_HN_DRAFT.md                              |   21 +
 docs/TEST_STRATEGY.md                              |    6 +-
 docs/adr/ADR-002-oww-feature-extractor.md          |   20 +-
 docs/adr/ADR-004-open-core.md                      |    2 +-
 docs/adr/ADR-005-packaging.md                      |    6 +-
 pyproject.toml                                     |   31 +-
 railway.toml                                       |   20 +
 src/violawake_sdk/__init__.py                      |    2 +-
 src/violawake_sdk/cli/download.py                  |    1 +
 src/violawake_sdk/cli/evaluate.py                  |    2 +-
 src/violawake_sdk/models.py                        |   48 +-
 src/violawake_sdk/pipeline.py                      |    3 +-
 src/violawake_sdk/py.typed                         |    0
 src/violawake_sdk/stt.py                           |    2 +-
 src/violawake_sdk/tools/collect_samples.py         |    6 +-
 src/violawake_sdk/tools/confusables.py             |  507 +++++
 src/violawake_sdk/tools/evaluate.py                |   75 +-
 src/violawake_sdk/tools/test_confusables.py        |  403 ++++
 src/violawake_sdk/tools/train.py                   |  765 ++++++--
 src/violawake_sdk/training/augment.py              |  339 ++++
 src/violawake_sdk/training/evaluate.py             |  460 ++++-
 src/violawake_sdk/tts.py                           |   37 +-
 src/violawake_sdk/vad.py                           |   67 +-
 src/violawake_sdk/wake_detector.py                 |   15 +-
 src/wakeword/__init__.py                           |   31 -
 tests/integration/test_sdk_surface.py              |  156 ++
 tests/integration/test_training_e2e.py             |  240 +++
 tests/unit/test_augment.py                         |  353 ++++
 tests/unit/test_confusables.py                     |   83 +
 tests/unit/test_evaluate_oww.py                    |  213 ++
 tests/unit/test_training_pipeline.py               |  151 ++
 tests/unit/test_vad.py                             |   20 +-
 tools/fetch_release_models.py                      |  137 ++
 tools/merge_worktrees.py                           |  104 +
 tools/quality_gate.py                              |  349 ++++
 tools/setup_github_repo.sh                         |   54 +
 tools/update_model_registry.py                     |  278 +++
 143 files changed, 24330 insertions(+), 317 deletions(-)

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show acdd18f -- src/violawake_sdk/tools/train.py | Select-String -Pattern 'VIOLAWAKE_SKIP_QUALITY_GATE|quality gate|quality_grade|model_exported|blocked|skip_gate' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show acdd18f''^:src/violawake_sdk/tools/train.py | Select-String -Pattern '"'quality gate|quality_grade|model_exported|blocked|raise RuntimeError|export_temporal_onnx' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show acdd18f:src/violawake_sdk/tools/train.py | Select-String -Pattern 'VIOLAWAKE_SKIP_QUALITY_GATE|quality gate|quality_grade|model_exported|blocked|raise RuntimeError|export_temporal_onnx' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 858ms:

           verbose=verbose,
       )
   
> +    # Optional test-mode bypass. Setting VIOLAWAKE_SKIP_QUALITY_GATE=1 exports
  +    # the model regardless of grade, with a loud warning. This exists for E2E
  +    # tests + dev iterations where verifying the full export+download chain
  +    # matters more than blocking a low-quality model. NEVER set this in a
  +    # customer-facing deploy — it would let unfit models ship.
> +    skip_gate = os.environ.get("VIOLAWAKE_SKIP_QUALITY_GATE", "").lower() in ("1", "true", "yes")
  +
>      if quality_grade == "F":
           print(
>              "\n" + "!" * 72 + "\nQUALITY GATE FAILED: model is not ready for deployment.\n"
  @@ -1425,8 +1518,15 @@ def _train_temporal_cnn(
               + "!"
               * 72
           )
> +        if skip_gate:
  +            print(
  +                "\n" + "*" * 72 + "\n"
> +                "WARNING: VIOLAWAKE_SKIP_QUALITY_GATE=1 — exporting failing model anyway.\n"
  +                "         This is for E2E testing only. NEVER set this in production.\n"
  +                + "*" * 72
  +            )
   
> -    model_exported = quality_grade != "F"
> +    model_exported = (quality_grade != "F") or skip_gate
       output_path.parent.mkdir(parents=True, exist_ok=True)
   
       # -- Export to ONNX ------------------------------------------------------
  @@ -1507,7 +1607,7 @@ def _train_temporal_cnn(
               print(f"Model saved: {output_path}")
               print(f"Load with:  WakeDetector(model='{output_path}')")
   
> -    if quality_grade == "F":
> +    if quality_grade == "F" and not skip_gate:
           raise RuntimeError(
>              "Model failed the quality gate with grade F; ONNX export was blocked. "
               f"See {config_path} for quality metrics."



 succeeded in 875ms:

    - AdamW optimizer with cosine annealing LR schedule
    - Exponential Moving Average (EMA) of model weights
    - 80/20 group-aware train/validation split with early stopping
>   - Post-training quality gate (speech FP check)
  
  Data pipeline (matches production golden path):
    A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 conditions)
    B. Confusable negatives round 1: 30 phonetically similar words x 10 voices
    C. Confusable negatives round 2: 16 tighter variants x 10 voices
    D. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
          audio, sr = sf.read(io.BytesIO(mp3_data), dtype="float32")
          audio = np.asarray(audio, dtype=np.float32)
          if audio.size == 0:
>             raise RuntimeError("decoded MP3 contained no audio samples")
          if audio.ndim > 1:
              audio = audio.mean(axis=1)
          if sr != 16000:
              audio = _resample_audio(audio, sr, 16000)
          _save_wav(audio, output_path, 16000)
          return output_path.exists() and output_path.stat().st_size > 44
              TimeStretch,
          )
      except ImportError as e:
>         raise RuntimeError(
              "audiomentations is required for positive augmentation. "
              "Install with: pip install 'violawake[training]'"
          ) from e
  
      if not raw_audio_arrays:
          return []
      from violawake_sdk.training.temporal_model import (
          TemporalCNN,
          count_parameters,
>         export_temporal_onnx,
      )
      from violawake_sdk.training.weight_averaging import (
          EMATracker,
          auto_select_averaging,
      )
  
          print(f"Best validation loss: {best_val_loss:.4f} at epoch {best_epoch}")
          print(f"Training duration: {training_duration:.1f}s")
  
>     # -- Post-training quality gate ------------------------------------------
      from violawake_sdk._constants import DEFAULT_THRESHOLD, get_feature_config
      from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
  
      deployment_threshold = float(DEFAULT_THRESHOLD)
  
      if verbose:
>         print("\nStep 5: Post-training quality gate (speech/confusable/silence)...")
  
>     quality_grade, quality_gate = _run_quality_gate(
          model,
          torch_device,
          seq_len,
          EMBEDDING_DIM,
          wake_word=wake_word,
          deployment_threshold=deployment_threshold,
          verbose=verbose,
      )
  
>     # Optional test-mode bypass. Setting VIOLAWAKE_SKIP_QUALITY_GATE=1 exports
      # the model regardless of grade, with a loud warning. This exists for E2E
      # tests + dev iterations where verifying the full export+download chain
      # matters more than blocking a low-quality model. NEVER set this in a
      # customer-facing deploy — it would let unfit models ship.
>     skip_gate = os.environ.get("VIOLAWAKE_SKIP_QUALITY_GATE", "").lower() in ("1", "true", "yes")
  
>     if quality_grade == "F":
          print(
>             "\n" + "!" * 72 + "\nQUALITY GATE FAILED: model is not ready for deployment.\n"
              f"  Speech FP rate:     {quality_gate['speech_fp_rate'] * 100:.1f}%\n"
              f"  Confusable FP rate: {quality_gate['confusable_fp_rate'] * 100:.1f}%\n"
              f"  Silence max score:  {quality_gate['silence_max_score']:.2f}\n"
              "Recommended fixes:\n"
              "  - Add more diverse speech negatives via --negatives or keep --auto-corpus enabled.\n"
              f"  - Expand confusable negatives for '{wake_word}' and retrain.\n"
          if skip_gate:
              print(
                  "\n" + "*" * 72 + "\n"
>                 "WARNING: VIOLAWAKE_SKIP_QUALITY_GATE=1 — exporting failing model anyway.\n"
                  "         This is for E2E testing only. NEVER set this in production.\n"
                  + "*" * 72
              )
  
>     model_exported = (quality_grade != "F") or skip_gate
      output_path.parent.mkdir(parents=True, exist_ok=True)
  
      # -- Export to ONNX ------------------------------------------------------
>     if model_exported:
          if verbose:
              print(f"\nExporting model to ONNX: {output_path}")
  
>         export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)
      elif verbose:
>         print("\nSkipping ONNX export because the quality gate failed.")
  
      # -- Evaluate if test set provided ---------------------------------------
      d_prime_result: float | None = None
>     if model_exported and eval_dir and eval_dir.exists():
          if verbose:
              print(f"\nEvaluating on test set: {eval_dir}")
          try:
              from violawake_sdk.training.evaluate import evaluate_onnx_model
  
              results = evaluate_onnx_model(output_path, eval_dir)
              print(f"d': {d_prime_result:.2f}  FAR: {far:.2f}/hr  FRR: {frr:.1f}%")
          except Exception as e:
              print(f"Evaluation failed: {e}")
>     elif quality_grade == "F" and verbose and eval_dir and eval_dir.exists():
>         print("Skipping eval because no ONNX model was exported after the failed quality gate.")
  
      # -- Save config ---------------------------------------------------------
      config = get_feature_config()
      config.update(
          {
              "architecture": "temporal_cnn",
              "training_duration_s": round(training_duration, 2),
              "wake_word": wake_word,
              "deployment_threshold": deployment_threshold,
>             "quality_grade": quality_grade,
              "quality_gate": quality_gate,
>             "quality_gate_blocked_export": quality_grade == "F",
              "neg_corpus_breakdown": {tag: len(files) for tag, files in neg_tags.items()}
              if neg_tags
              else {},
              "corpus_found": corpus_found,
          }
      )
  
      if verbose:
          print(f"\nConfig saved: {config_path}")
>         if model_exported:
              print(f"Model saved: {output_path}")
              print(f"Load with:  WakeDetector(model='{output_path}')")
  
>     if quality_grade == "F" and not skip_gate:
>         raise RuntimeError(
>             "Model failed the quality gate with grade F; ONNX export was blocked. "
              f"See {config_path} for quality metrics."
          )
  
      return config
  
  
  # ---------------------------------------------------------------------------
> # Post-training quality gate
  # ---------------------------------------------------------------------------
  
  
  def _run_quality_gate(
      model: Any,
      torch_device: str,
      deployment_threshold: float = 0.80,
      verbose: bool = True,
  ) -> tuple[str, dict[str, Any]]:
>     """Run a post-training quality gate on speech, confusables, and silence.
  
      Returns:
          Tuple of ``(grade, metrics)`` where grade is one of ``A/B/C/F``.
      """
      import tempfile
  
      if verbose and len(speech_scores) < len(quality_phrases):
          print(
              f"  WARNING: Only {len(speech_scores)}/{len(quality_phrases)} speech phrases "
>             "were scored in the quality gate."
          )
      if verbose and len(confusable_scores) < 20:
          print(
              f"  WARNING: Only {len(confusable_scores)}/20 confusable words "
>             "were scored in the quality gate."
          )
      if verbose and len(silence_scores) == 0:
          print(
              "  NOTE: Silence produced no OWW embeddings (zero-energy rejected by backbone). Score: 0.0"
          )
  



 succeeded in 917ms:

    - AdamW optimizer with cosine annealing LR schedule
    - Exponential Moving Average (EMA) of model weights
    - 80/20 group-aware train/validation split with early stopping
>   - Post-training quality gate (speech FP check)
  
  Data pipeline (matches production golden path):
    A. Positives: user-provided + auto-TTS (edge-tts, 20 voices x 3 phrases x 3 conditions)
    B. Confusable negatives round 1: 30 phonetically similar words x 10 voices
    C. Confusable negatives round 2: 16 tighter variants x 10 voices
    D. Speech negatives: common phrases via TTS (100+ phrases x 5 voices)
              TimeStretch,
          )
      except ImportError as e:
>         raise RuntimeError(
              "audiomentations is required for positive augmentation. "
              "Install with: pip install 'violawake[training]'"
          ) from e
  
      if not raw_audio_arrays:
          return []
      from violawake_sdk.training.temporal_model import (
          TemporalCNN,
          count_parameters,
>         export_temporal_onnx,
      )
      from violawake_sdk.training.weight_averaging import (
          EMATracker,
          auto_select_averaging,
      )
  
          print(f"Best validation loss: {best_val_loss:.4f} at epoch {best_epoch}")
          print(f"Training duration: {training_duration:.1f}s")
  
>     # -- Post-training quality gate ------------------------------------------
      from violawake_sdk._constants import DEFAULT_THRESHOLD, get_feature_config
      from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
  
      deployment_threshold = float(DEFAULT_THRESHOLD)
  
      if verbose:
>         print("\nStep 5: Post-training quality gate (speech/confusable/silence)...")
  
>     quality_grade, quality_gate = _run_quality_gate(
          model,
          torch_device,
          seq_len,
          EMBEDDING_DIM,
          wake_word=wake_word,
          deployment_threshold=deployment_threshold,
          verbose=verbose,
      )
  
>     if quality_grade == "F":
          print(
>             "\n" + "!" * 72 + "\nQUALITY GATE FAILED: model is not ready for deployment.\n"
              f"  Speech FP rate:     {quality_gate['speech_fp_rate'] * 100:.1f}%\n"
              f"  Confusable FP rate: {quality_gate['confusable_fp_rate'] * 100:.1f}%\n"
              f"  Silence max score:  {quality_gate['silence_max_score']:.2f}\n"
              "Recommended fixes:\n"
              "  - Add more diverse speech negatives via --negatives or keep --auto-corpus enabled.\n"
              f"  - Expand confusable negatives for '{wake_word}' and retrain.\n"
              * 72
          )
  
>     model_exported = quality_grade != "F"
      output_path.parent.mkdir(parents=True, exist_ok=True)
  
      # -- Export to ONNX ------------------------------------------------------
>     if model_exported:
          if verbose:
              print(f"\nExporting model to ONNX: {output_path}")
  
>         export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)
      elif verbose:
>         print("\nSkipping ONNX export because the quality gate failed.")
  
      # -- Evaluate if test set provided ---------------------------------------
      d_prime_result: float | None = None
>     if model_exported and eval_dir and eval_dir.exists():
          if verbose:
              print(f"\nEvaluating on test set: {eval_dir}")
          try:
              from violawake_sdk.training.evaluate import evaluate_onnx_model
  
              results = evaluate_onnx_model(output_path, eval_dir)
              print(f"d': {d_prime_result:.2f}  FAR: {far:.2f}/hr  FRR: {frr:.1f}%")
          except Exception as e:
              print(f"Evaluation failed: {e}")
>     elif quality_grade == "F" and verbose and eval_dir and eval_dir.exists():
>         print("Skipping eval because no ONNX model was exported after the failed quality gate.")
  
      # -- Save config ---------------------------------------------------------
      config = get_feature_config()
      config.update(
          {
              "architecture": "temporal_cnn",
              "training_duration_s": round(training_duration, 2),
              "wake_word": wake_word,
              "deployment_threshold": deployment_threshold,
>             "quality_grade": quality_grade,
              "quality_gate": quality_gate,
>             "quality_gate_blocked_export": quality_grade == "F",
              "neg_corpus_breakdown": {tag: len(files) for tag, files in neg_tags.items()}
              if neg_tags
              else {},
              "corpus_found": corpus_found,
          }
      )
  
      if verbose:
          print(f"\nConfig saved: {config_path}")
>         if model_exported:
              print(f"Model saved: {output_path}")
              print(f"Load with:  WakeDetector(model='{output_path}')")
  
>     if quality_grade == "F":
>         raise RuntimeError(
>             "Model failed the quality gate with grade F; ONNX export was blocked. "
              f"See {config_path} for quality metrics."
          )
  
      return config
  
  
  # ---------------------------------------------------------------------------
> # Post-training quality gate
  # ---------------------------------------------------------------------------
  
  
  def _run_quality_gate(
      model: Any,
      torch_device: str,
      deployment_threshold: float = 0.80,
      verbose: bool = True,
  ) -> tuple[str, dict[str, Any]]:
>     """Run a post-training quality gate on speech, confusables, and silence.
  
      Returns:
          Tuple of ``(grade, metrics)`` where grade is one of ``A/B/C/F``.
      """
      import tempfile
  
      if verbose and len(speech_scores) < len(quality_phrases):
          print(
              f"  WARNING: Only {len(speech_scores)}/{len(quality_phrases)} speech phrases "
>             "were scored in the quality gate."
          )
      if verbose and len(confusable_scores) < 20:
          print(
              f"  WARNING: Only {len(confusable_scores)}/20 confusable words "
>             "were scored in the quality gate."
          )
      if verbose and len(silence_scores) == 0:
          print(
              "  NOTE: Silence produced no OWW embeddings (zero-energy rejected by backbone). Score: 0.0"
          )
  



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
for label,p in [('container','/app/data/violawake.db')]:
    con=sqlite3.connect('file:'+p+'?mode=ro', uri=True); con.row_factory=sqlite3.Row
    print('DB',label)
    for r in con.execute('select id,user_id,wake_word,size_bytes,created_at,config_json from trained_models order by id'):
        cfg={}
        try:
            cfg=json.loads(r['config_json'] or '{}')
        except Exception:
            pass
        print({'id':r['id'],'wake_word':r['wake_word'],'size':r['size_bytes'],'created_at':r['created_at'],'architecture':cfg.get('architecture'),'quality_grade':cfg.get('quality_grade'),'quality_blocked':cfg.get('quality_gate_blocked_export'),'has_quality_gate':'quality_gate' in cfg,'keys':sorted([k for k in cfg.keys() if k in ('architecture','quality_grade','quality_gate','quality_gate_blocked_export','d_prime','auto_eval')])})
    con.close()
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import sqlite3, json
p=r'J:\\CLAUDE\\PROJECTS\\Wakeword\\console\\backend\\data\\violawake.db'
con=sqlite3.connect('file:'+p+'?mode=ro', uri=True); con.row_factory=sqlite3.Row
print('LOCAL')
for r in con.execute('select id,user_id,wake_word,size_bytes,created_at,config_json from trained_models order by id'):
    cfg={}
    try:
        cfg=json.loads(r['config_json'] or '{}')
    except Exception:
        pass
    print({'id':r['id'],'wake_word':r['wake_word'],'size':r['size_bytes'],'created_at':r['created_at'],'architecture':cfg.get('architecture'),'quality_grade':cfg.get('quality_grade'),'quality_blocked':cfg.get('quality_gate_blocked_export'),'has_quality_gate':'quality_gate' in cfg,'keys':sorted([k for k in cfg.keys() if k in ('architecture','quality_grade','quality_gate','quality_gate_blocked_export','d_prime','auto_eval')])})
con.close()
'@ | python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-postgres-1 psql -U violawake -d violawake -c \"select count(*) as trained_models, min(created_at), max(created_at) from trained_models; select count(*) as completed_jobs from training_jobs where status='completed';\"" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 433ms:
LOCAL
{'id': 1, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 07:59:55.796727', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 2, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 12:47:41.930089', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 3, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 14:22:21.298915', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 4, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 16:12:23.952185', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 5, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:26:01.289689+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 6, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:26:05.095396+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 7, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:29:07.835466+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 8, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:32:07.594423+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 9, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:36:58.832961+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 10, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:38:33.644597+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 11, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:52:47.445797+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 12, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:56:05.129993+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 13, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.363549', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 14, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.372446', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 15, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.457196', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 16, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.809170', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 17, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.895028', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 18, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.922875', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 19, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:21.120144', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 20, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:36.776176', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 21, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:36.942544', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 22, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:37.231282', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 23, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:37.586302', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 24, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:52.682519', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 25, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.108200', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 26, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.171221', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 27, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.493260', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 28, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:18:06.760051', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 29, 'wake_word': 'big chungus', 'size': 34010, 'created_at': '2026-03-29 00:03:28.595075', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 30, 'wake_word': 'big chungus', 'size': 34010, 'created_at': '2026-03-29 22:51:58.183076', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 31, 'wake_word': 'delete-account', 'size': 16, 'created_at': '2026-05-07T03:47:45.486714+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['d_prime']}
{'id': 32, 'wake_word': 'delete-account', 'size': 16, 'created_at': '2026-05-07T03:48:34.410068+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['d_prime']}
{'id': 33, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T03:52:31.269906+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 34, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T03:57:42.189953+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 35, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T03:59:31.294660+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 36, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T04:59:05.724821+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 37, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T05:14:30.989295+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 38, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T05:15:58.565157+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 39, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T05:38:43.454621+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 40, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T11:40:29.711133+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 41, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-05-07T12:59:29.811389+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}

 succeeded in 453ms:
DB container
{'id': 1, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 07:59:55.796727', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 2, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 12:47:41.930089', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 3, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 14:22:21.298915', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 4, 'wake_word': 'goldentest', 'size': 34010, 'created_at': '2026-03-26 16:12:23.952185', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 5, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:26:01.289689+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 6, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:26:05.095396+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 7, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:29:07.835466+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 8, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:32:07.594423+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 9, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:36:58.832961+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 10, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:38:33.644597+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 11, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:52:47.445797+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 12, 'wake_word': 'token-test', 'size': 22, 'created_at': '2026-03-28T21:56:05.129993+00:00', 'architecture': None, 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': []}
{'id': 13, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.363549', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 14, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.372446', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 15, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:05.457196', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 16, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.809170', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 17, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.895028', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 18, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:20.922875', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 19, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:21.120144', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 20, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:36.776176', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 21, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:36.942544', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 22, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:37.231282', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 23, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:37.586302', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 24, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:52.682519', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 25, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.108200', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 26, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.171221', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 27, 'wake_word': 'traintest', 'size': 34010, 'created_at': '2026-03-28 23:17:53.493260', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 28, 'wake_word': 'statustest', 'size': 34010, 'created_at': '2026-03-28 23:18:06.760051', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 29, 'wake_word': 'big chungus', 'size': 34010, 'created_at': '2026-03-29 00:03:28.595075', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}
{'id': 30, 'wake_word': 'big chungus', 'size': 34010, 'created_at': '2026-03-29 22:51:58.183076', 'architecture': 'mlp_on_oww', 'quality_grade': None, 'quality_blocked': None, 'has_quality_gate': False, 'keys': ['architecture']}

 succeeded in 418ms:
 trained_models | min | max 
----------------+-----+-----
              0 |     | 
(1 row)

 completed_jobs 
----------------
              0
(1 row)


exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'ls -ld /app/data/tmp/violawake_job_39_* /app/data/tmp/violawake_job_40_* /app/data/tmp/violawake_job_49_* 2>/dev/null; find /app/data/tmp -maxdepth 2 -type f -name \"*.config.json\" | sort | tail -20'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import json, glob, os
paths=sorted(glob.glob('/app/data/tmp/violawake_job_*/*.config.json'))
print('config_count', len(paths))
for p in paths[-20:]:
    try:
        data=json.load(open(p, 'r', encoding='utf-8'))
    except Exception as e:
        print('BAD', p, e); continue
    print({'path': p, 'wake_word': data.get('wake_word'), 'architecture':data.get('architecture'), 'quality_grade':data.get('quality_grade'), 'quality_gate_blocked_export':data.get('quality_gate_blocked_export'), 'quality_gate': data.get('quality_gate'), 'auto_eval':data.get('auto_eval'), 'training_duration_s':data.get('training_duration_s'), 'neg_corpus_breakdown':data.get('neg_corpus_breakdown')})
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 2350ms:
drwx------ 2 app app 4096 May  7 14:25 /app/data/tmp/violawake_job_49_hhqjwf1s

 succeeded in 2382ms:
config_count 0

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker logs --since 12h wakeword-backend-1 2>&1 | Select-String -Pattern 'Model Quality Grade|QUALITY GATE FAILED|Speech FP rate|Confusable FP rate|Silence max score|Skipping ONNX export|VIOLAWAKE_SKIP_QUALITY_GATE|exporting failing model|quality gate' -Context 0,2 | Select-Object -First 160" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker logs --since 12h wakeword-backend-1 2>&1 | Select-String -Pattern 'job 39|job 40|job 49|Training job failed|Model failed the quality gate|Failed to convert the exported program|ONNX export was blocked' -Context 1,3 | Select-Object -First 200" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:12:38.061639Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.6 seconds
Output:

 exited 1 in 579ms:
2026-05-07T16:12:38.124703Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.6 seconds
Output:

  {"timestamp": "2026-05-07T14:25:40.140501+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "14a98ad091834ef387fea73a6449c7bb", "method": "GET", "path": "/api/recordings", 
"route": "/api/recordings", "status_code": 200, "duration_ms": 7.268}
> {"timestamp": "2026-05-07T14:25:40.229591+00:00", "level": "INFO", "logger": "violawake.jobs", "message": "Queued 
training job 49 for user 36 (priority=0)", "request_id": "359fbf7f17b34c60bc4d13266edd7426"}
  {"timestamp": "2026-05-07T14:25:40.243676+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "359fbf7f17b34c60bc4d13266edd7426", "method": "POST", "path": "/api/training/start", 
"route": "/api/training/start", "status_code": 202, "duration_ms": 69.691}
  {"timestamp": "2026-05-07T14:25:40.281611+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf1d7b892f5a4a4da684a5b205bcb671", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.965}
  {"timestamp": "2026-05-07T14:25:42.440901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.120582+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:54.123711+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.153852+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7c38b8b991d24d2da331e95e75c13e60", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 17.755}
  {"timestamp": "2026-05-07T14:25:54.631772+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:55.458312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.859382+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:53.866448+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:55.277999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:56.879119+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:59.116703+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
    return cls.__new__(cls, *args)
> {"timestamp": "2026-05-07T15:14:49.995941+00:00", "level": "ERROR", "logger": "violawake.training", "message": 
"Training job failed", "request_id": "-", "source": "training", "error_kind": "unexpected", "error_reason": "bug", 
"error_type": "ConversionError", "error_message": "Failed to convert the exported program to an ONNX model. 
\u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there is a missing ONNX 
function, implement it and register it to the registry.\n- If there is an internal error during ONNX conversion, debug 
the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., report=True)`, and save 
the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against the 
\u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)", "job_id": 49, 
"wake_word": "viola_e2e_1778163936", "exception": "Traceback (most recent call last):\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 816, in _translate_fx_graph\n 
   _handle_call_function_node_with_lowering(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 598, in 
_handle_call_function_node_with_lowering\n    raise 
_errors.DispatchError(\ntorch.onnx._internal.exporter._errors.DispatchError: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent 
call last):\n  File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1509, in 
export\n    onnx_program = _exported_program_to_onnx_program(\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n 
 File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1123, in 
_exported_program_to_onnx_program\n    values = _translate_fx_graph(\n             ^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 842, in _translate_fx_graph\n 
   raise _errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Error when translating node 
%adaptive_max_pool2d : [num_users=1] = call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = 
(%unsqueeze, [1, 1]), kwargs = {}). See the stack trace for more information.\n\nThe above exception was the direct 
cause of the following exception:\n\nTraceback (most recent call last):\n  File 
\"/app/app/services/training_service.py\", line 304, in run_training_job_sync\n    _train_temporal_cnn(\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/tools/train.py\", line 1572, in _train_temporal_cnn\n    
export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/training/temporal_model.py\", line 271, in 
export_temporal_onnx\n    torch.onnx.export(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/__init__.py\", line 291, in export\n    return 
_compat.export_compat(\n           ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_compat.py\", line 161, in export_compat\n    
onnx_program = _core.export(\n                   ^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_flags.py\", line 27, in wrapper\n    return 
func(*args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1551, in export\n    raise 
_errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Failed to convert the exported 
program to an ONNX model. \u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there 
is a missing ONNX function, implement it and register it to the registry.\n- If there is an internal error during ONNX 
conversion, debug the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., 
report=True)`, and save the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against 
the \u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)"}
> {"timestamp": "2026-05-07T15:14:50.055445+00:00", "level": "ERROR", "logger": "violawake.jobs", "message": "Training 
job failed", "request_id": "-", "source": "job_queue", "error_kind": "unexpected", "error_reason": "bug", 
"error_type": "ConversionError", "error_message": "Failed to convert the exported program to an ONNX model. 
\u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there is a missing ONNX 
function, implement it and register it to the registry.\n- If there is an internal error during ONNX conversion, debug 
the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., report=True)`, and save 
the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against the 
\u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)", "job_id": 49, 
"exception": "Traceback (most recent call last):\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 816, in _translate_fx_graph\n 
   _handle_call_function_node_with_lowering(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 598, in 
_handle_call_function_node_with_lowering\n    raise 
_errors.DispatchError(\ntorch.onnx._internal.exporter._errors.DispatchError: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent 
call last):\n  File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1509, in 
export\n    onnx_program = _exported_program_to_onnx_program(\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n 
 File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1123, in 
_exported_program_to_onnx_program\n    values = _translate_fx_graph(\n             ^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 842, in _translate_fx_graph\n 
   raise _errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Error when translating node 
%adaptive_max_pool2d : [num_users=1] = call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = 
(%unsqueeze, [1, 1]), kwargs = {}). See the stack trace for more information.\n\nThe above exception was the direct 
cause of the following exception:\n\nTraceback (most recent call last):\n  File \"/app/app/job_queue.py\", line 719, 
in _execute_job\n    artifact = await asyncio.to_thread(\n               ^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await loop.run_in_executor(None, 
func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/app/app/services/training_service.py\", 
line 304, in run_training_job_sync\n    _train_temporal_cnn(\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/tools/train.py\", line 1572, in _train_temporal_cnn\n    
export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/training/temporal_model.py\", line 271, in 
export_temporal_onnx\n    torch.onnx.export(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/__init__.py\", line 291, in export\n    return 
_compat.export_compat(\n           ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_compat.py\", line 161, in export_compat\n    
onnx_program = _core.export(\n                   ^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_flags.py\", line 27, in wrapper\n    return 
func(*args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1551, in export\n    raise 
_errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Failed to convert the exported 
program to an ONNX model. \u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there 
is a missing ONNX function, implement it and register it to the registry.\n- If there is an internal error during ONNX 
conversion, debug the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., 
report=True)`, and save the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against 
the \u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)"}



 exited 1 in 641ms:

  {"timestamp": "2026-05-07T14:25:40.140501+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "14a98ad091834ef387fea73a6449c7bb", "method": "GET", "path": "/api/recordings", 
"route": "/api/recordings", "status_code": 200, "duration_ms": 7.268}
> {"timestamp": "2026-05-07T14:25:40.229591+00:00", "level": "INFO", "logger": "violawake.jobs", "message": "Queued 
training job 49 for user 36 (priority=0)", "request_id": "359fbf7f17b34c60bc4d13266edd7426"}
  {"timestamp": "2026-05-07T14:25:40.243676+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "359fbf7f17b34c60bc4d13266edd7426", "method": "POST", "path": "/api/training/start", 
"route": "/api/training/start", "status_code": 202, "duration_ms": 69.691}
  {"timestamp": "2026-05-07T14:25:40.281611+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "cf1d7b892f5a4a4da684a5b205bcb671", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 2.965}
  {"timestamp": "2026-05-07T14:25:42.440901+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-BrandonNeural text 'violaa e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.16s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.120582+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
> {"timestamp": "2026-05-07T14:25:54.123711+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:54.153852+00:00", "level": "INFO", "logger": "violawake.request", "message": 
"request.complete", "request_id": "7c38b8b991d24d2da331e95e75c13e60", "method": "GET", "path": 
"/api/training/status/49", "route": "/api/training/status/{job_id}", "status_code": 200, "duration_ms": 17.755}
  {"timestamp": "2026-05-07T14:25:54.631772+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'viola he e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.38s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:25:55.458312+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 0.81s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:53.859382+00:00", "level": "INFO", "logger": "violawake_sdk.tts", "message": 
"TTSEngine created: voice=af_heart, speed=1.0", "request_id": "-"}
> {"timestamp": "2026-05-07T14:46:53.866448+00:00", "level": "INFO", "logger": "violawake.training", "message": 
"Generated 27 TTS positives for job 49 (total: 49)", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:55.277999+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.36s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:56.879119+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 2/3 failed for voice en-US-DavisNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.78s", "request_id": "-"}
  {"timestamp": "2026-05-07T14:46:59.116703+00:00", "level": "WARNING", "logger": "violawake_sdk.tools.train", 
"message": "edge-tts synthesis attempt 1/3 failed for voice en-US-AmberNeural text 'violla e e': NoAudioReceived: No 
audio was received. Please verify that your parameters are correct.; retrying in 1.39s", "request_id": "-"}
    return cls.__new__(cls, *args)
> {"timestamp": "2026-05-07T15:14:49.995941+00:00", "level": "ERROR", "logger": "violawake.training", "message": 
"Training job failed", "request_id": "-", "source": "training", "error_kind": "unexpected", "error_reason": "bug", 
"error_type": "ConversionError", "error_message": "Failed to convert the exported program to an ONNX model. 
\u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there is a missing ONNX 
function, implement it and register it to the registry.\n- If there is an internal error during ONNX conversion, debug 
the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., report=True)`, and save 
the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against the 
\u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)", "job_id": 49, 
"wake_word": "viola_e2e_1778163936", "exception": "Traceback (most recent call last):\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 816, in _translate_fx_graph\n 
   _handle_call_function_node_with_lowering(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 598, in 
_handle_call_function_node_with_lowering\n    raise 
_errors.DispatchError(\ntorch.onnx._internal.exporter._errors.DispatchError: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent 
call last):\n  File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1509, in 
export\n    onnx_program = _exported_program_to_onnx_program(\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n 
 File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1123, in 
_exported_program_to_onnx_program\n    values = _translate_fx_graph(\n             ^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 842, in _translate_fx_graph\n 
   raise _errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Error when translating node 
%adaptive_max_pool2d : [num_users=1] = call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = 
(%unsqueeze, [1, 1]), kwargs = {}). See the stack trace for more information.\n\nThe above exception was the direct 
cause of the following exception:\n\nTraceback (most recent call last):\n  File 
\"/app/app/services/training_service.py\", line 304, in run_training_job_sync\n    _train_temporal_cnn(\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/tools/train.py\", line 1572, in _train_temporal_cnn\n    
export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/training/temporal_model.py\", line 271, in 
export_temporal_onnx\n    torch.onnx.export(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/__init__.py\", line 291, in export\n    return 
_compat.export_compat(\n           ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_compat.py\", line 161, in export_compat\n    
onnx_program = _core.export(\n                   ^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_flags.py\", line 27, in wrapper\n    return 
func(*args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1551, in export\n    raise 
_errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Failed to convert the exported 
program to an ONNX model. \u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there 
is a missing ONNX function, implement it and register it to the registry.\n- If there is an internal error during ONNX 
conversion, debug the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., 
report=True)`, and save the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against 
the \u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)"}
> {"timestamp": "2026-05-07T15:14:50.055445+00:00", "level": "ERROR", "logger": "violawake.jobs", "message": "Training 
job failed", "request_id": "-", "source": "job_queue", "error_kind": "unexpected", "error_reason": "bug", 
"error_type": "ConversionError", "error_message": "Failed to convert the exported program to an ONNX model. 
\u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there is a missing ONNX 
function, implement it and register it to the registry.\n- If there is an internal error during ONNX conversion, debug 
the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., report=True)`, and save 
the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against the 
\u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)", "job_id": 49, 
"exception": "Traceback (most recent call last):\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 816, in _translate_fx_graph\n 
   _handle_call_function_node_with_lowering(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 598, in 
_handle_call_function_node_with_lowering\n    raise 
_errors.DispatchError(\ntorch.onnx._internal.exporter._errors.DispatchError: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent 
call last):\n  File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1509, in 
export\n    onnx_program = _exported_program_to_onnx_program(\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n 
 File \"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1123, in 
_exported_program_to_onnx_program\n    values = _translate_fx_graph(\n             ^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 842, in _translate_fx_graph\n 
   raise _errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Error when translating node 
%adaptive_max_pool2d : [num_users=1] = call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = 
(%unsqueeze, [1, 1]), kwargs = {}). See the stack trace for more information.\n\nThe above exception was the direct 
cause of the following exception:\n\nTraceback (most recent call last):\n  File \"/app/app/job_queue.py\", line 719, 
in _execute_job\n    artifact = await asyncio.to_thread(\n               ^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/asyncio/threads.py\", line 25, in to_thread\n    return await loop.run_in_executor(None, 
func_call)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/concurrent/futures/thread.py\", line 58, in run\n    result = self.fn(*self.args, 
**self.kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/app/app/services/training_service.py\", 
line 304, in run_training_job_sync\n    _train_temporal_cnn(\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/tools/train.py\", line 1572, in _train_temporal_cnn\n    
export_temporal_onnx(model, str(output_path), seq_len=seq_len, embedding_dim=EMBEDDING_DIM)\n  File 
\"/usr/local/lib/python3.11/site-packages/violawake_sdk/training/temporal_model.py\", line 271, in 
export_temporal_onnx\n    torch.onnx.export(\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/__init__.py\", line 291, in export\n    return 
_compat.export_compat(\n           ^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_compat.py\", line 161, in export_compat\n    
onnx_program = _core.export(\n                   ^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_flags.py\", line 27, in wrapper\n    return 
func(*args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/usr/local/lib/python3.11/site-packages/torch/onnx/_internal/exporter/_core.py\", line 1551, in export\n    raise 
_errors.ConversionError(\ntorch.onnx._internal.exporter._errors.ConversionError: Failed to convert the exported 
program to an ONNX model. \u001b[96mThis is step 3/3\u001b[0m of exporting the model to ONNX. Next steps:\n- If there 
is a missing ONNX function, implement it and register it to the registry.\n- If there is an internal error during ONNX 
conversion, debug the error and submit a PR to PyTorch.\n- Create an error report with `torch.onnx.export(..., 
report=True)`, and save the ExportedProgram as a pt2 file. Create an issue in the PyTorch GitHub repository against 
the \u001b[96m*onnx*\u001b[0m component. Attach the error report and the pt2 model.\n\n## Exception summary\n\n<class 
'torch.onnx._internal.exporter._errors.DispatchError'>: No ONNX function found for 
<OpOverload(op='aten.adaptive_max_pool2d', overload='default')>. Failure message: No decompositions registered for the 
real-valued input\n\u2b06\ufe0f\n<class 'torch.onnx._internal.exporter._errors.ConversionError'>: Error when 
translating node %adaptive_max_pool2d : [num_users=1] = 
call_function[target=torch.ops.aten.adaptive_max_pool2d.default](args = (%unsqueeze, [1, 1]), kwargs = {}). See the 
stack trace for more information.\n\n(Refer to the full stack trace above for more information.)"}



codex
One important distinction is emerging: the SDK resolver auto-downloads only when code uses `violawake_sdk.oww_backbone`, while the training pipeline constructs `openwakeword.Model` directly. I’m checking that call graph now because it changes whether the entrypoint download is actually redundant.
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "rg \"resolve_openwakeword_backbone_paths|get_openwakeword_backbone_hashes|OpenWakeWordBackbone|OWWModel\\(\" src console tests -n" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import inspect
from openwakeword.model import Model
import openwakeword
from pathlib import Path
print('openwakeword', getattr(openwakeword,'__version__',None), Path(openwakeword.__file__))
print(inspect.signature(Model.__init__))
src=inspect.getsource(Model.__init__)
for i,line in enumerate(src.splitlines(),1):
    if 'download' in line or 'inference_framework' in line or 'tflite' in line or 'onnx' in line or 'resources' in line:
        print(i, line)
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 python - <<'PY'
import inspect
from openwakeword.model import Model
import openwakeword
from pathlib import Path
print('openwakeword', getattr(openwakeword,'__version__',None), Path(openwakeword.__file__))
print(inspect.signature(Model.__init__))
src=inspect.getsource(Model.__init__)
for i,line in enumerate(src.splitlines(),1):
    if 'download' in line or 'inference_framework' in line or 'tflite' in line or 'onnx' in line or 'resources' in line:
        print(i, line)
PY" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'python - <<PY
from pathlib import Path
import openwakeword
p=Path(openwakeword.__file__).parent/\"resources\"/\"models\"
print(p)
for name in [\"embedding_model.onnx\",\"melspectrogram.onnx\",\"alexa_v0.1.tflite\",\"alexa_v0.1.onnx\"]:
    f=p/name
    print(name, f.exists(), f.stat().st_size if f.exists() else None)
PY'" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:13:07.291833Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
At line:2 char:42
+ docker exec wakeword-backend-1 python - <<'PY'
+                                          ~
Missing file specification after redirection operator.
At line:2 char:41
+ docker exec wakeword-backend-1 python - <<'PY'
+                                         ~
The '<' operator is reserved for future use.
At line:2 char:42
+ docker exec wakeword-backend-1 python - <<'PY'
+                                          ~
The '<' operator is reserved for future use.
At line:4 char:1
+ from openwakeword.model import Model
+ ~~~~
The 'from' keyword is not supported in this version of the language.
At line:6 char:1
+ from pathlib import Path
+ ~~~~
The 'from' keyword is not supported in this version of the language.
At line:7 char:22
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                      ~
Missing expression after ','.
At line:7 char:23
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                       ~~~~~~~
Unexpected token 'getattr' in expression or statement.
At line:7 char:22
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                      ~
Missing closing ')' in expression.
At line:7 char:43
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                                           ~
Missing argument in parameter list.
At line:7 char:92
+ ... etattr(openwakeword,'__version__',None), Path(openwakeword.__file__))
+                                                                         ~
Unexpected token ')' in expression or statement.
Not all parse errors were reported.  Correct the reported errors and try again.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingFileSpecification
 

 exited 1 in 419ms:
At line:2 char:42
+ docker exec wakeword-backend-1 python - <<'PY'
+                                          ~
Missing file specification after redirection operator.
At line:2 char:41
+ docker exec wakeword-backend-1 python - <<'PY'
+                                         ~
The '<' operator is reserved for future use.
At line:2 char:42
+ docker exec wakeword-backend-1 python - <<'PY'
+                                          ~
The '<' operator is reserved for future use.
At line:4 char:1
+ from openwakeword.model import Model
+ ~~~~
The 'from' keyword is not supported in this version of the language.
At line:6 char:1
+ from pathlib import Path
+ ~~~~
The 'from' keyword is not supported in this version of the language.
At line:7 char:22
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                      ~
Missing expression after ','.
At line:7 char:23
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                       ~~~~~~~
Unexpected token 'getattr' in expression or statement.
At line:7 char:22
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                      ~
Missing closing ')' in expression.
At line:7 char:43
+ print('openwakeword', getattr(openwakeword,'__version__',None), Path( ...
+                                           ~
Missing argument in parameter list.
At line:7 char:92
+ ... etattr(openwakeword,'__version__',None), Path(openwakeword.__file__))
+                                                                         ~
Unexpected token ')' in expression or statement.
Not all parse errors were reported.  Correct the reported errors and try again.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingFileSpecification
 

2026-05-07T16:13:07.407056Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.5 seconds
Output:
  File "<stdin>", line 5
    for name in [embedding_model.onnx,melspectrogram.onnx,alexa_v0.1.tflite,alexa_v0.1.onnx]:
                                                          ^^^^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

 exited 1 in 533ms:
  File "<stdin>", line 5
    for name in [embedding_model.onnx,melspectrogram.onnx,alexa_v0.1.tflite,alexa_v0.1.onnx]:
                                                          ^^^^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

 succeeded in 689ms:
src\violawake_sdk\oww_backbone.py:97:class OpenWakeWordBackbonePaths:
src\violawake_sdk\oww_backbone.py:104:def resolve_openwakeword_backbone_paths(backend_name: str = "onnx") -> OpenWakeWordBackbonePaths:
src\violawake_sdk\oww_backbone.py:147:    return OpenWakeWordBackbonePaths(
src\violawake_sdk\oww_backbone.py:162:def get_openwakeword_backbone_hashes(backend_name: str = "onnx") -> dict[str, str]:
src\violawake_sdk\oww_backbone.py:164:    paths = resolve_openwakeword_backbone_paths(backend_name)
src\violawake_sdk\oww_backbone.py:171:class OpenWakeWordBackbone:
src\violawake_sdk\oww_backbone.py:175:        paths = resolve_openwakeword_backbone_paths(backend.name)
src\violawake_sdk\oww_backbone.py:184:    def _verify_backbone_integrity(paths: OpenWakeWordBackbonePaths) -> None:
src\violawake_sdk\oww_backbone.py:194:            actual_hashes = get_openwakeword_backbone_hashes()
src\violawake_sdk\training\evaluate.py:264:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\training\evaluate.py:327:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\tools\contamination_check.py:114:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\tools\train.py:857:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\tools\train.py:997:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\tools\train.py:1518:    from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
src\violawake_sdk\tools\train.py:1631:    config.update(get_openwakeword_backbone_hashes("onnx"))
src\violawake_sdk\tools\train.py:1875:    from violawake_sdk.oww_backbone import get_openwakeword_backbone_hashes
src\violawake_sdk\tools\train.py:1903:    oww = OWWModel(inference_framework="onnx")
src\violawake_sdk\tools\train.py:2180:    config.update(get_openwakeword_backbone_hashes("onnx"))
tests\unit\test_oww_backbone.py:1:"""Tests for oww_backbone: _RingBuffer, OpenWakeWordBackbone, and helpers."""
tests\unit\test_oww_backbone.py:18:    OpenWakeWordBackbone,
tests\unit\test_oww_backbone.py:19:    OpenWakeWordBackbonePaths,
tests\unit\test_oww_backbone.py:20:    resolve_openwakeword_backbone_paths,
tests\unit\test_oww_backbone.py:154:# resolve_openwakeword_backbone_paths tests
tests\unit\test_oww_backbone.py:162:                resolve_openwakeword_backbone_paths()
tests\unit\test_oww_backbone.py:170:                resolve_openwakeword_backbone_paths("onnx")
tests\unit\test_oww_backbone.py:180:            paths = resolve_openwakeword_backbone_paths("onnx")
tests\unit\test_oww_backbone.py:192:            paths = resolve_openwakeword_backbone_paths("tflite")
tests\unit\test_oww_backbone.py:197:# OpenWakeWordBackbone tests (mocked ONNX sessions)
tests\unit\test_oww_backbone.py:230:        bb = OpenWakeWordBackbone(backend)
tests\unit\test_oww_backbone.py:336:        result = OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:341:        result = OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:348:        result = OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:353:        result = OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:358:        result = OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:365:            OpenWakeWordBackbone._to_pcm_int16(data)
tests\unit\test_oww_backbone.py:369:        result = OpenWakeWordBackbone._to_pcm_int16(raw)
src\violawake_sdk\wake_detector.py:26:    OpenWakeWordBackbone,
src\violawake_sdk\wake_detector.py:27:    get_openwakeword_backbone_hashes,
src\violawake_sdk\wake_detector.py:540:    def _create_oww_backbone(self) -> OpenWakeWordBackbone:
src\violawake_sdk\wake_detector.py:542:        return OpenWakeWordBackbone(self._backend)
src\violawake_sdk\wake_detector.py:562:            current_hashes = get_openwakeword_backbone_hashes("onnx")

 succeeded in 2938ms:
openwakeword None /usr/local/lib/python3.11/site-packages/openwakeword/__init__.py
(*args, **kwargs)

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import inspect
from openwakeword.model import Model
src=inspect.getsource(Model)
print('source_lines', len(src.splitlines()))
for i,line in enumerate(src.splitlines(),1):
    if any(x in line for x in ['download','inference_framework','tflite','onnx','resources','model_path']):
        print(f'{i}: {line}')
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
from pathlib import Path
import openwakeword
p=Path(openwakeword.__file__).parent/'resources'/'models'
print(p)
for name in ['embedding_model.onnx','melspectrogram.onnx','alexa_v0.1.tflite','alexa_v0.1.onnx','hey_jarvis_v0.1.onnx']:
    f=p/name
    print(name, f.exists(), f.stat().st_size if f.exists() else None)
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
from pathlib import Path
from violawake_sdk.oww_backbone import resolve_openwakeword_backbone_paths
print(resolve_openwakeword_backbone_paths('onnx'))
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 678ms:
OpenWakeWordBackbonePaths(melspectrogram=PosixPath('/usr/local/lib/python3.11/site-packages/openwakeword/resources/models/melspectrogram.onnx'), embedding_model=PosixPath('/usr/local/lib/python3.11/site-packages/openwakeword/resources/models/embedding_model.onnx'))

 succeeded in 1900ms:
/usr/local/lib/python3.11/site-packages/openwakeword/resources/models
embedding_model.onnx True 1326578
melspectrogram.onnx True 1087958
alexa_v0.1.tflite True 855312
alexa_v0.1.onnx True 854246
hey_jarvis_v0.1.onnx True 1271370

 succeeded in 1915ms:
source_lines 473
6:     @re_arg({"wakeword_model_paths": "wakeword_models"})  # temporary handling of keyword argument change
15:             inference_framework: str = "tflite",
21:             wakeword_models (List[str]): A list of paths of ONNX/tflite models to load into the openWakeWord model object.
46:             inference_framework (str): The inference framework to use when for model prediction. Options are
47:                                        "tflite" or "onnx". The default is "tflite" as this results in better
53:         pretrained_model_paths = openwakeword.get_pretrained_model_paths(inference_framework)
56:             wakeword_models = pretrained_model_paths
64:                     matching_model = [j for j in pretrained_model_paths if i.replace(" ", "_") in j.split(os.path.sep)[-1]]
81:         if inference_framework == "tflite":
83:                 import tflite_runtime.interpreter as tflite
85:                 def tflite_predict(tflite_interpreter, input_index, output_index, x):
86:                     tflite_interpreter.set_tensor(input_index, x)
87:                     tflite_interpreter.invoke()
88:                     return tflite_interpreter.get_tensor(output_index)[None, ]
91:                 logging.warning("Tried to import the tflite runtime, but it was not found. "
92:                                 "Trying to switching to onnxruntime instead, if appropriate models are available.")
93:                 if wakeword_models != [] and all(['.onnx' in i for i in wakeword_models]):
94:                     inference_framework = "onnx"
95:                 elif wakeword_models != [] and all([os.path.exists(i.replace('.tflite', '.onnx')) for i in wakeword_models]):
96:                     inference_framework = "onnx"
97:                     wakeword_models = [i.replace('.tflite', '.onnx') for i in wakeword_models]
99:                     raise ValueError("Tried to import the tflite runtime for provided tflite models, but it was not found. "
100:                                      "Please install it using `pip install tflite-runtime`")
102:         if inference_framework == "onnx":
104:                 import onnxruntime as ort
106:                 def onnx_predict(onnx_model, x):
107:                     return onnx_model.run(None, {onnx_model.get_inputs()[0].name: x})
110:                 raise ValueError("Tried to import onnxruntime, but it was not found. Please install it using `pip install onnxruntime`")
114:             if inference_framework == "onnx":
115:                 if ".tflite" in mdl_path:
116:                     raise ValueError("The onnx inference framework is selected, but tflite models were provided!")
127:                 pred_function = functools.partial(onnx_predict, self.models[mdl_name])
130:             if inference_framework == "tflite":
131:                 if ".onnx" in mdl_path:
132:                     raise ValueError("The tflite inference framework is selected, but onnx models were provided!")
134:                 self.models[mdl_name] = tflite.Interpreter(model_path=mdl_path, num_threads=1)
140:                 tflite_input_index = self.models[mdl_name].get_input_details()[0]['index']
141:                 tflite_output_index = self.models[mdl_name].get_output_details()[0]['index']
143:                 pred_function = functools.partial(tflite_predict, self.models[mdl_name], tflite_input_index, tflite_output_index)
182:         self.preprocessor = AudioFeatures(inference_framework=inference_framework, **kwargs)

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import inspect, openwakeword
src=inspect.getsource(openwakeword.get_pretrained_model_paths)
print(src)
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import inspect
from openwakeword import utils
src=inspect.getsource(utils.download_models)
for i,line in enumerate(src.splitlines(),1):
    if 'exists' in line or 'download' in line or 'model' in line or 'http' in line:
        print(f'{i}: {line}')
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 1956ms:
1: def download_models(
2:         model_names: List[str] = [],
3:         target_directory: str = os.path.join(pathlib.Path(__file__).parent.resolve(), "resources", "models")
6:     Download the specified models from the release assets in the openWakeWord GitHub repository.
10:         model_names (List[str]): The names of the models to download (e.g., hey_jarvis_v0.1). Both ONNX and
11:                                  tflite models will be downloaded. If not provided (the default),
12:                                  the latest versions of all models will be downloaded.
13:         target_directory (str): The directory to save the models to. Defaults to the install location
14:                                 of openWakeWord (i.e., the `resources/models` directory).
18:     if not isinstance(model_names, list):
19:         raise ValueError("The model_names argument must be a list of strings")
21:     # Always download melspectrogram and embedding models, if they don't already exist
22:     if not os.path.exists(target_directory):
24:     for feature_model in openwakeword.FEATURE_MODELS.values():
25:         if not os.path.exists(os.path.join(target_directory, feature_model["download_url"].split("/")[-1])):
26:             download_file(feature_model["download_url"], target_directory)
27:             download_file(feature_model["download_url"].replace(".tflite", ".onnx"), target_directory)
29:     # Always download VAD models, if they don't already exist
30:     for vad_model in openwakeword.VAD_MODELS.values():
31:         if not os.path.exists(os.path.join(target_directory, vad_model["download_url"].split("/")[-1])):
32:             download_file(vad_model["download_url"], target_directory)
34:     # Get all model urls
35:     official_model_urls = [i["download_url"] for i in openwakeword.MODELS.values()]
36:     official_model_names = [i["download_url"].split("/")[-1] for i in openwakeword.MODELS.values()]
38:     if model_names != []:
39:         for model_name in model_names:
40:             url = [i for i, j in zip(official_model_urls, official_model_names) if model_name in j]
42:                 if not os.path.exists(os.path.join(target_directory, url[0].split("/")[-1])):
43:                     download_file(url[0], target_directory)
44:                     download_file(url[0].replace(".tflite", ".onnx"), target_directory)
46:         for official_model_url in official_model_urls:
47:             if not os.path.exists(os.path.join(target_directory, official_model_url.split("/")[-1])):
48:                 download_file(official_model_url, target_directory)
49:                 download_file(official_model_url.replace(".tflite", ".onnx"), target_directory)

 succeeded in 2011ms:
def get_pretrained_model_paths(inference_framework="tflite"):
    if inference_framework == "tflite":
        return [MODELS[i]["model_path"] for i in MODELS.keys()]
    elif inference_framework == "onnx":
        return [MODELS[i]["model_path"].replace(".tflite", ".onnx") for i in MODELS.keys()]


exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "Select-String -Path console/backend/requirements.txt,pyproject.toml -Pattern 'tflite|openwakeword|onnxruntime|torch|torchaudio|soundfile|fast_mp3|onnxscript' -Context 2,2" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -S "tflite-runtime" -- pyproject.toml console/backend/requirements.txt console/Dockerfile.backend' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -S "OWWModel(inference_framework" -- src/violawake_sdk/tools/train.py src/violawake_sdk/training/evaluate.py src/violawake_sdk/tools/contamination_check.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import importlib.metadata as md
for pkg in ['openwakeword','tflite-runtime','onnxruntime','torch','torchaudio','torchcodec','soundfile','onnxscript','fast-mp3-augment']:
    try:
        print(pkg, md.version(pkg))
    except Exception as e:
        print(pkg, 'NOT_INSTALLED')
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
from openwakeword.model import Model
for fw in [None,'tflite','onnx']:
    try:
        if fw is None:
            m=Model()
            print('default OK')
        else:
            m=Model(inference_framework=fw)
            print(fw,'OK')
    except Exception as e:
        print(fw or 'default','FAIL',type(e).__name__, str(e)[:300])
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 1928ms:

  console\backend\requirements.txt:23:tomli>=2.0; python_version < "3.11"
  console\backend\requirements.txt:24:boto3>=1.34
> console\backend\requirements.txt:25:fast_mp3_augment
> console\backend\requirements.txt:26:onnxscript
  pyproject.toml:37:# Core dependencies (inference-only: wake word + VAD)
  pyproject.toml:38:# pyaudio, requests, and tqdm are optional — see [audio] and [download] extras
> pyproject.toml:39:# openwakeword is optional — see [oww] extra (tflite-runtime has no Python 3.12+ Linux wheels)
  pyproject.toml:40:dependencies = [
> pyproject.toml:41:    "onnxruntime>=1.17",
  pyproject.toml:42:    "numpy>=1.24",
  pyproject.toml:43:    "scipy>=1.11",
  pyproject.toml:49:audio = [
  pyproject.toml:50:    "pyaudio>=0.2.14",
> pyproject.toml:51:    "soundfile>=0.12",
  pyproject.toml:52:]
  pyproject.toml:53:
  pyproject.toml:69:]
  pyproject.toml:70:
> pyproject.toml:71:# OWW: openwakeword backbone (optional due to tflite-runtime Python 3.12 issue)
  pyproject.toml:72:oww = [
> pyproject.toml:73:    "openwakeword>=0.6",
  pyproject.toml:74:]
  pyproject.toml:75:
> pyproject.toml:76:# TFLite: lightweight inference backend (alternative to onnxruntime)
> pyproject.toml:77:tflite = [
> pyproject.toml:78:    "tflite-runtime>=2.14.0",
  pyproject.toml:79:]
  pyproject.toml:80:
  pyproject.toml:87:# Training: model training pipeline
  pyproject.toml:88:training = [
> pyproject.toml:89:    "torch>=2.1",
> pyproject.toml:90:    "torchaudio>=2.1",
> pyproject.toml:91:    "openwakeword>=0.6",
  pyproject.toml:92:    "audiomentations>=0.37",
  pyproject.toml:93:    "librosa>=0.10",
> pyproject.toml:94:    "soundfile>=0.12",
  pyproject.toml:95:    "scikit-learn>=1.3",
  pyproject.toml:96:    "matplotlib>=3.8",
  pyproject.toml:99:    "pydub>=0.25",
  pyproject.toml:100:    "onnx>=1.15",
> pyproject.toml:101:    # Required for ONNX export of the trained TemporalCNN — torch.onnx.export
> pyproject.toml:102:    # uses onnxscript internally for newer opsets. Was missing from the
  pyproject.toml:103:    # extra; surfaced as a runtime ModuleNotFoundError on first export.
> pyproject.toml:104:    "onnxscript>=0.6",
  pyproject.toml:105:    # Required for the augmentation step in _train_temporal_cnn (MP3
  pyproject.toml:106:    # codec-based time-stretch + pitch-shift augmentation). Was missing.
> pyproject.toml:107:    "fast_mp3_augment>=0.2",
  pyproject.toml:108:]
  pyproject.toml:109:
  pyproject.toml:113:]
  pyproject.toml:114:
> pyproject.toml:115:# Sample generation: TTS-based sample creation (no torch needed)
  pyproject.toml:116:generate = [
  pyproject.toml:117:    "edge-tts>=6.1",
  pyproject.toml:118:    "pydub>=0.25",
> pyproject.toml:119:    "soundfile>=0.12",
  pyproject.toml:120:]
  pyproject.toml:121:
  pyproject.toml:122:# Full install
  pyproject.toml:123:all = [
> pyproject.toml:124:    "violawake[audio,download,tts,stt,oww,tflite,vad,training,generate]",
  pyproject.toml:125:]
  pyproject.toml:126:
  pyproject.toml:238:warn_unused_configs = true
  pyproject.toml:239:disallow_untyped_defs = true
> pyproject.toml:240:# numpy/torch return types are complex; these codes are noisy in strict mode
  pyproject.toml:241:disable_error_code = ["no-any-return", "type-var", "no-untyped-call"]
  pyproject.toml:242:exclude = ["violawake_sdk/training/", "violawake_sdk/tools/"]
  pyproject.toml:244:[[tool.mypy.overrides]]
  pyproject.toml:245:module = [
> pyproject.toml:246:    "openwakeword.*",
> pyproject.toml:247:    "onnxruntime.*",
  pyproject.toml:248:    "pyaudio.*",
  pyproject.toml:249:    "sounddevice.*",
> pyproject.toml:250:    "soundfile.*",
  pyproject.toml:251:    "faster_whisper.*",
  pyproject.toml:252:    "kokoro_onnx.*",
  pyproject.toml:254:    "requests.*",
  pyproject.toml:255:    "tqdm.*",
> pyproject.toml:256:    "torchaudio.*",
> pyproject.toml:257:    "torch.*",
  pyproject.toml:258:    "tensorflow.*",
  pyproject.toml:259:    "scipy.*",



 succeeded in 1903ms:
0c3923b Pin OpenWakeWord evaluation helpers to ONNX
196bfdd fix(training): four runtime bugs blocking the actual product

 succeeded in 1956ms:
d7f7c8c fix: CI green — mypy, macOS runner, openwakeword deps, pytest-asyncio
bfbf47b fix: 3 more adversary findings — CHANGELOG gate count, oww_backbone visibility, dev deps

 succeeded in 2196ms:
openwakeword 0.6.0
tflite-runtime 2.14.0
onnxruntime 1.25.1
torch 2.11.0
torchaudio 2.11.0
torchcodec NOT_INSTALLED
soundfile 0.13.1
onnxscript 0.7.0
fast-mp3-augment 0.2.0

 succeeded in 4131ms:
default FAIL SystemError <built-in method CreateWrapperFromFile of PyCapsule object at 0x777109ea86f0> returned a result with an exception set
tflite FAIL SystemError <built-in method CreateWrapperFromFile of PyCapsule object at 0x777109ea86f0> returned a result with an exception set
onnx OK

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.4.4 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Traceback (most recent call last):  File "<stdin>", line 5, in <module>
  File "/usr/local/lib/python3.11/site-packages/openwakeword/utils.py", line 686, in wrapped
    return func(*args, **new_kwargs)
  File "/usr/local/lib/python3.11/site-packages/openwakeword/model.py", line 165, in __init__
    self.models[mdl_name] = tflite.Interpreter(model_path=mdl_path, num_threads=1)
  File "/usr/local/lib/python3.11/site-packages/tflite_runtime/interpreter.py", line 464, in __init__
    self._interpreter = _interpreter_wrapper.CreateWrapperFromFile(
AttributeError: _ARRAY_API not found

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.4.4 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Traceback (most recent call last):  File "<stdin>", line 8, in <module>
  File "/usr/local/lib/python3.11/site-packages/openwakeword/utils.py", line 686, in wrapped
    return func(*args, **new_kwargs)
  File "/usr/local/lib/python3.11/site-packages/openwakeword/model.py", line 165, in __init__
    self.models[mdl_name] = tflite.Interpreter(model_path=mdl_path, num_threads=1)
  File "/usr/local/lib/python3.11/site-packages/tflite_runtime/interpreter.py", line 464, in __init__
    self._interpreter = _interpreter_wrapper.CreateWrapperFromFile(
AttributeError: _ARRAY_API not found

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git show 9545987''^:src/violawake_sdk/audio.py | Select-String -Pattern '"'def load_audio|torchaudio|soundfile|wave|flac|mp3' -Context 3,6" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command 'git log --oneline -- src/violawake_sdk/audio.py' in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker images --format \"table {{.Repository}}\\t{{.Tag}}\\t{{.ID}}\\t{{.CreatedSince}}\\t{{.Size}}\" | Select-String -Pattern 'wakeword|backend|<none>'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker history wakeword-backend --format \"table {{.ID}}\\t{{.CreatedSince}}\\t{{.CreatedBy}}\\t{{.Size}}\" | Select-Object -First 30" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
from pathlib import Path
import glob, traceback
files=glob.glob('/app/corpus/librispeech/**/*.flac', recursive=True)
print('flac_count', len(files))
p=files[0] if files else None
print('sample', p)
if p:
    try:
        import torchaudio
        print('torchaudio', torchaudio.__version__)
        x,sr=torchaudio.load(p)
        print('torchaudio OK', tuple(x.shape), sr)
    except Exception as e:
        print('torchaudio FAIL', type(e).__name__, str(e)[:500])
    try:
        import soundfile as sf
        data,sr=sf.read(p, dtype='float32')
        print('soundfile OK', data.shape, sr)
    except Exception as e:
        print('soundfile FAIL', type(e).__name__, str(e)[:500])
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 385ms:
9545987 fix(audio): try soundfile before torchaudio in load_audio
6d0714c fix: CI pipeline + 53 ruff violations + format compliance
7345832 fix: close/context managers, backbone pinning, Kokoro fallback, package shim
fd7a739 feat: WW-4 through WW-10 — STT engine, voice pipeline, CLIs, packaging, CI/CD

 succeeded in 581ms:

  logger = logging.getLogger(__name__)
  
  # Optional imports
> _TORCHAUDIO_AVAILABLE = False
  
  try:
>     import torchaudio
>     import torchaudio.transforms as T
  
>     _TORCHAUDIO_AVAILABLE = True
  except ImportError:
      pass
  
  
> def load_audio(path: Path, target_sr: int = SAMPLE_RATE) -> np.ndarray | None:
      """
      Load audio file and return as numpy array.
  
      Args:
>         path: Path to audio file (.wav, .flac, .mp3)
          target_sr: Target sample rate (default 16kHz)
  
      Returns:
          Audio samples as float32 numpy array, or None if failed
      """
>     # Try torchaudio first, fall back to wave module
>     if _TORCHAUDIO_AVAILABLE:
          try:
>             waveform, sr = torchaudio.load(str(path))
              # Convert to mono if stereo
>             if waveform.shape[0] > 1:
>                 waveform = waveform.mean(dim=0, keepdim=True)
              # Resample if needed
              if sr != target_sr:
                  resampler = T.Resample(sr, target_sr)
>                 waveform = resampler(waveform)
>             return waveform.squeeze().numpy()
          except Exception:
              logger.warning(
>                 "torchaudio failed for %s, falling back to wave module", path, exc_info=True
              )
  
>     # Fallback to wave module (WAV only)
      try:
>         import wave
  
>         with wave.open(str(path), "rb") as wf:
              sr = wf.getframerate()
              audio_int16 = np.frombuffer(wf.readframes(wf.getnframes()), dtype=np.int16)
              audio_float = audio_int16.astype(np.float32) / AUDIO_INT16_SCALE
              if sr != target_sr:
                  from scipy import signal
  
      """
      Compute mel spectrogram features.
  
>     IMPORTANT: Always uses scipy spectrogram (not torchaudio) because the
>     viola_v3.onnx model was trained with scipy features. Using torchaudio
      would produce different features and cause 0.0 scores.
  
      Args:
          audio: Audio samples (should be CLIP_SAMPLES length)
  
      Returns:
          Mel spectrogram as numpy array (N_MELS x time_frames)
      """
      # Always use scipy - model was trained with scipy features
>     # DO NOT use torchaudio even if available - features are incompatible!
      from scipy import signal
  
      _f, _t, Sxx = signal.spectrogram(
          audio, fs=SAMPLE_RATE, nperseg=WIN_LENGTH, noverlap=WIN_LENGTH - HOP_LENGTH
      )
      # Take first N_MELS frequency bins (matches training)



 succeeded in 539ms:
IMAGE          CREATED        CREATED BY                                      SIZE
185255d23907   3 hours ago    ENTRYPOINT ["/app/entrypoint.sh"]               0B
<missing>      3 hours ago    EXPOSE [8000/tcp]                               0B
<missing>      3 hours ago    RUN /bin/sh -c chmod +x /app/entrypoint.sh #…   4.1kB
<missing>      3 hours ago    COPY console/backend/entrypoint.sh /app/entr…   12.3kB
<missing>      3 hours ago    RUN /bin/sh -c chown -R app:app /app /app/da…   101MB
<missing>      3 hours ago    RUN /bin/sh -c addgroup --system app && addu…   45.1kB
<missing>      3 hours ago    RUN /bin/sh -c mkdir -p /app/data # buildkit    4.1kB
<missing>      3 hours ago    COPY console/backend/ . # buildkit              101MB
<missing>      3 hours ago    RUN /bin/sh -c pip install --no-cache-dir "/…   5.31GB
<missing>      3 hours ago    COPY src/ /sdk/src/ # buildkit                  1.76MB
<missing>      3 hours ago    COPY LICENSE /sdk/ # buildkit                   20.5kB
<missing>      3 hours ago    COPY README.md /sdk/ # buildkit                 61.4kB
<missing>      3 hours ago    COPY pyproject.toml /sdk/ # buildkit            16.4kB
<missing>      4 hours ago    RUN /bin/sh -c pip install --no-cache-dir --…   648MB
<missing>      4 hours ago    COPY console/backend/requirements.txt . # bu…   12.3kB
<missing>      13 hours ago   RUN /bin/sh -c apt-get update && apt-get ins…   26.4MB
<missing>      13 hours ago   WORKDIR /app                                    8.19kB
<missing>      2 weeks ago    CMD ["python3"]                                 0B
<missing>      2 weeks ago    RUN /bin/sh -c set -eux;  for src in idle3 p…   16.4kB
<missing>      2 weeks ago    RUN /bin/sh -c set -eux;   savedAptMark="$(a…   48.4MB
<missing>      2 weeks ago    ENV PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33…   0B
<missing>      2 weeks ago    ENV PYTHON_VERSION=3.11.15                      0B
<missing>      2 weeks ago    ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8…   0B
<missing>      2 weeks ago    RUN /bin/sh -c set -eux;  apt-get update;  a…   4.94MB
<missing>      2 weeks ago    ENV LANG=C.UTF-8                                0B
<missing>      2 weeks ago    ENV PATH=/usr/local/bin:/usr/local/sbin:/usr…   0B
<missing>      2 weeks ago    # debian.sh --arch 'amd64' out/ 'trixie' '@1…   87.4MB

 succeeded in 680ms:

wakeword-backend                      latest                185255d23907   3 hours ago         9.61GB



 succeeded in 4243ms:
flac_count 5323
sample /app/corpus/librispeech/LibriSpeech/dev-clean/1272/128104/1272-128104-0000.flac
torchaudio 2.11.0+cu130
torchaudio FAIL ImportError TorchCodec is required for load_with_torchcodec. Please install torchcodec to use this function.
soundfile OK (93680,) 16000

exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show fd7a739:src/violawake_sdk/audio.py | Select-String -Pattern 'def load_audio|torchaudio|soundfile|wave' -Context 3,5" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "git show 7345832:src/violawake_sdk/audio.py | Select-String -Pattern 'def load_audio|torchaudio|soundfile|wave' -Context 3,5" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'which ffmpeg || true; ffmpeg -version 2>/dev/null | head -3 || true; python - <<PY
import importlib.util
print(\"torchcodec\", importlib.util.find_spec(\"torchcodec\"))
PY'" in J:\CLAUDE\PROJECTS\Wakeword
2026-05-07T16:14:51.867502Z ERROR codex_core::tools::router: error=Exit code: 1
Wall time: 0.4 seconds
Output:
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'torchcodec' is not defined

 exited 1 in 359ms:
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'torchcodec' is not defined

 succeeded in 369ms:

  )
  
  # Optional imports
> _TORCHAUDIO_AVAILABLE = False
  
  try:
>     import torchaudio
>     import torchaudio.transforms as T
  
>     _TORCHAUDIO_AVAILABLE = True
  except ImportError:
      pass
  
  
> def load_audio(path: Path, target_sr: int = SAMPLE_RATE) -> np.ndarray | None:
      """
      Load audio file and return as numpy array.
  
      Args:
          path: Path to audio file (.wav, .flac, .mp3)
      Returns:
          Audio samples as float32 numpy array, or None if failed
      """
>     # Try torchaudio first, fall back to wave module
>     if _TORCHAUDIO_AVAILABLE:
          try:
>             waveform, sr = torchaudio.load(str(path))
              # Convert to mono if stereo
>             if waveform.shape[0] > 1:
>                 waveform = waveform.mean(dim=0, keepdim=True)
              # Resample if needed
              if sr != target_sr:
                  resampler = T.Resample(sr, target_sr)
>                 waveform = resampler(waveform)
>             return waveform.squeeze().numpy()
          except Exception:
>             pass  # Fall through to wave module
  
>     # Fallback to wave module (WAV only)
      try:
>         import wave
  
>         with wave.open(str(path), "rb") as wf:
              sr = wf.getframerate()
              audio_int16 = np.frombuffer(wf.readframes(wf.getnframes()), dtype=np.int16)
              audio_float = audio_int16.astype(np.float32) / AUDIO_INT16_SCALE
              if sr != target_sr:
                  from scipy import signal
      """
      Compute mel spectrogram features.
  
>     IMPORTANT: Always uses scipy spectrogram (not torchaudio) because the
>     viola_v3.onnx model was trained with scipy features. Using torchaudio
      would produce different features and cause 0.0 scores.
  
      Args:
          audio: Audio samples (should be CLIP_SAMPLES length)
  
          Mel spectrogram as numpy array (N_MELS x time_frames)
      """
      # Always use scipy - model was trained with scipy features
>     # DO NOT use torchaudio even if available - features are incompatible!
      from scipy import signal
  
      _f, _t, Sxx = signal.spectrogram(
          audio, fs=SAMPLE_RATE, nperseg=WIN_LENGTH, noverlap=WIN_LENGTH - HOP_LENGTH
      )



 succeeded in 379ms:

  )
  
  # Optional imports
> _TORCHAUDIO_AVAILABLE = False
  
  try:
>     import torchaudio
>     import torchaudio.transforms as T
  
>     _TORCHAUDIO_AVAILABLE = True
  except ImportError:
      pass
  
  
> def load_audio(path: Path, target_sr: int = SAMPLE_RATE) -> np.ndarray | None:
      """
      Load audio file and return as numpy array.
  
      Args:
          path: Path to audio file (.wav, .flac, .mp3)
      Returns:
          Audio samples as float32 numpy array, or None if failed
      """
>     # Try torchaudio first, fall back to wave module
>     if _TORCHAUDIO_AVAILABLE:
          try:
>             waveform, sr = torchaudio.load(str(path))
              # Convert to mono if stereo
>             if waveform.shape[0] > 1:
>                 waveform = waveform.mean(dim=0, keepdim=True)
              # Resample if needed
              if sr != target_sr:
                  resampler = T.Resample(sr, target_sr)
>                 waveform = resampler(waveform)
>             return waveform.squeeze().numpy()
          except Exception:
>             logger.warning("torchaudio failed for %s, falling back to wave module", path, exc_info=True)
  
>     # Fallback to wave module (WAV only)
      try:
>         import wave
  
>         with wave.open(str(path), "rb") as wf:
              sr = wf.getframerate()
              audio_int16 = np.frombuffer(wf.readframes(wf.getnframes()), dtype=np.int16)
              audio_float = audio_int16.astype(np.float32) / AUDIO_INT16_SCALE
              if sr != target_sr:
                  from scipy import signal
      """
      Compute mel spectrogram features.
  
>     IMPORTANT: Always uses scipy spectrogram (not torchaudio) because the
>     viola_v3.onnx model was trained with scipy features. Using torchaudio
      would produce different features and cause 0.0 scores.
  
      Args:
          audio: Audio samples (should be CLIP_SAMPLES length)
  
          Mel spectrogram as numpy array (N_MELS x time_frames)
      """
      # Always use scipy - model was trained with scipy features
>     # DO NOT use torchaudio even if available - features are incompatible!
      from scipy import signal
  
      _f, _t, Sxx = signal.spectrogram(
          audio, fs=SAMPLE_RATE, nperseg=WIN_LENGTH, noverlap=WIN_LENGTH - HOP_LENGTH
      )



exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "docker exec wakeword-backend-1 sh -lc 'which ffmpeg || true; ffmpeg -version 2>/dev/null | head -3 || true'" in J:\CLAUDE\PROJECTS\Wakeword
exec
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -Command "@'
import importlib.util
print(importlib.util.find_spec('torchcodec'))
'@ | docker exec -i wakeword-backend-1 python -" in J:\CLAUDE\PROJECTS\Wakeword
 succeeded in 369ms:
 succeeded in 376ms:
None

codex
Read-only investigation complete. I did not modify, commit, push, or restart anything.

**Verdicts**

1. **Corpus mount: NECESSARY.**  
`docker-compose.production.yml` did not exist at `54f20b4`; immediately before `196bfdd`, it only mounted `backend-data` and `${VIOLAWAKE_NEGATIVES_CORPUS_DIR:-./violawake_data/negatives}` to `/app/negatives`. Current backend corpus search paths are `/app/corpus`, derived repo root `/app/corpus`, `~/.violawake/corpus`, and CWD `corpus`. In the live container, `/app/corpus` exists with 7,339 audio files, `/app/negatives` has 0 files, and `~/.violawake/corpus` is missing. So `./violawake_data/negatives` was not sufficient.

2. **Removal of `_generate_speech_negatives`: UNNECESSARY / hardening, not the blocker fix.**  
The 17 successful `job_queue.db` training jobs completed on **March 28-29, 2026**, not recently, and there were **0 successful jobs in the last 7 days**. Those successful jobs used the older `mlp_on_oww` backend path before console training called `_generate_speech_negatives`, so they do not prove Edge TTS speech negatives worked in production. The TTS speech-negative path has always been Edge-TTS based since introduction. Current logs show Edge TTS is flaky, but corpus mounting was the actual blocker fix; removing the helper was not strictly required once corpus negatives were available.

3. **`VIOLAWAKE_SKIP_QUALITY_GATE`: REGRESSION if set in production.**  
Postgres `trained_models` has 0 rows, so there is no Postgres evidence of past successful exports. Local/container SQLite model rows from the 17 successes are old `mlp_on_oww` or test-token rows with no `quality_gate` fields. The 17 completed jobs are fixture-like: mostly `traintest`/`statustest`, 10 recordings each, all uploaded within milliseconds, usually exactly 1.5s. Recent jobs 39/40 failed the quality gate. So the env var was only needed to force uniform E2E/test data past the gate. The live container currently has `VIOLAWAKE_SKIP_QUALITY_GATE=1`, which is a production safety regression.

4. **Entrypoint `download_models()`: NECESSARY.**  
`resolve_openwakeword_backbone_paths()` does auto-download missing backbone files, but the training path constructs `openwakeword.Model` directly, not through that resolver. `openwakeword.Model` itself does not auto-download; it just resolves model paths. SQLite job 37 failed with missing `alexa_v0.1.tflite`, and logs show the entrypoint downloaded OWW assets on startup. I found no duplicate SDK resolver download after entrypoint.

5. **`OWWModel(inference_framework="onnx")` pinning: NECESSARY.**  
`openwakeword.Model` defaults to `inference_framework="tflite"`. In the live container, `Model()` and `Model(inference_framework="tflite")` both fail with the PyCapsule / NumPy `_ARRAY_API` tflite-runtime error; `Model(inference_framework="onnx")` succeeds. The old 17 completed jobs do not disprove this because they are old local/dev MLP fixture jobs, not current production-container TemporalCNN runs.

6. **Audio loader soundfile-first: NECESSARY.**  
Before `9545987`, `load_audio()` always tried `torchaudio` first, then `wave` only. In the current container, `torchaudio.load()` on LibriSpeech FLAC fails because TorchCodec is required and not installed; `soundfile.read()` succeeds. No older backend image tags were available to prove this used to work. Current evidence supports the change.

**Consider Reverting**

Revert/remove the production setting of `VIOLAWAKE_SKIP_QUALITY_GATE=1`. Keeping the code path for local E2E is defensible, but enabling it in the live backend is not.

Consider partially reverting b45e03c only if you want TTS speech negatives as a best-effort fallback. I would not make them the primary path.

**Keep**

Keep the corpus mount, entrypoint OWW model download, ONNX pinning, and soundfile-first audio loading. Those are backed by live container failures or direct repros.
SUCCESS: The process with PID 60584 (child process of PID 73700) has been terminated.
SUCCESS: The process with PID 73700 (child process of PID 80748) has been terminated.
tokens used
308,140
Read-only investigation complete. I did not modify, commit, push, or restart anything.

**Verdicts**

1. **Corpus mount: NECESSARY.**  
`docker-compose.production.yml` did not exist at `54f20b4`; immediately before `196bfdd`, it only mounted `backend-data` and `${VIOLAWAKE_NEGATIVES_CORPUS_DIR:-./violawake_data/negatives}` to `/app/negatives`. Current backend corpus search paths are `/app/corpus`, derived repo root `/app/corpus`, `~/.violawake/corpus`, and CWD `corpus`. In the live container, `/app/corpus` exists with 7,339 audio files, `/app/negatives` has 0 files, and `~/.violawake/corpus` is missing. So `./violawake_data/negatives` was not sufficient.

2. **Removal of `_generate_speech_negatives`: UNNECESSARY / hardening, not the blocker fix.**  
The 17 successful `job_queue.db` training jobs completed on **March 28-29, 2026**, not recently, and there were **0 successful jobs in the last 7 days**. Those successful jobs used the older `mlp_on_oww` backend path before console training called `_generate_speech_negatives`, so they do not prove Edge TTS speech negatives worked in production. The TTS speech-negative path has always been Edge-TTS based since introduction. Current logs show Edge TTS is flaky, but corpus mounting was the actual blocker fix; removing the helper was not strictly required once corpus negatives were available.

3. **`VIOLAWAKE_SKIP_QUALITY_GATE`: REGRESSION if set in production.**  
Postgres `trained_models` has 0 rows, so there is no Postgres evidence of past successful exports. Local/container SQLite model rows from the 17 successes are old `mlp_on_oww` or test-token rows with no `quality_gate` fields. The 17 completed jobs are fixture-like: mostly `traintest`/`statustest`, 10 recordings each, all uploaded within milliseconds, usually exactly 1.5s. Recent jobs 39/40 failed the quality gate. So the env var was only needed to force uniform E2E/test data past the gate. The live container currently has `VIOLAWAKE_SKIP_QUALITY_GATE=1`, which is a production safety regression.

4. **Entrypoint `download_models()`: NECESSARY.**  
`resolve_openwakeword_backbone_paths()` does auto-download missing backbone files, but the training path constructs `openwakeword.Model` directly, not through that resolver. `openwakeword.Model` itself does not auto-download; it just resolves model paths. SQLite job 37 failed with missing `alexa_v0.1.tflite`, and logs show the entrypoint downloaded OWW assets on startup. I found no duplicate SDK resolver download after entrypoint.

5. **`OWWModel(inference_framework="onnx")` pinning: NECESSARY.**  
`openwakeword.Model` defaults to `inference_framework="tflite"`. In the live container, `Model()` and `Model(inference_framework="tflite")` both fail with the PyCapsule / NumPy `_ARRAY_API` tflite-runtime error; `Model(inference_framework="onnx")` succeeds. The old 17 completed jobs do not disprove this because they are old local/dev MLP fixture jobs, not current production-container TemporalCNN runs.

6. **Audio loader soundfile-first: NECESSARY.**  
Before `9545987`, `load_audio()` always tried `torchaudio` first, then `wave` only. In the current container, `torchaudio.load()` on LibriSpeech FLAC fails because TorchCodec is required and not installed; `soundfile.read()` succeeds. No older backend image tags were available to prove this used to work. Current evidence supports the change.

**Consider Reverting**

Revert/remove the production setting of `VIOLAWAKE_SKIP_QUALITY_GATE=1`. Keeping the code path for local E2E is defensible, but enabling it in the live backend is not.

Consider partially reverting b45e03c only if you want TTS speech negatives as a best-effort fallback. I would not make them the primary path.

**Keep**

Keep the corpus mount, entrypoint OWW model download, ONNX pinning, and soundfile-first audio loading. Those are backed by live container failures or direct repros.
