fix: Add new paths to config, fix Uvicorn logging, and update Storage settings
This commit is contained in:
parent
c26dabe296
commit
6ffba2d588
@ -37,8 +37,8 @@ _SETTINGS_KEYS = {
|
|||||||
"client_voice_bindings",
|
"client_voice_bindings",
|
||||||
"llm_url", "llm_model",
|
"llm_url", "llm_model",
|
||||||
# Browser-persistent UI state
|
# Browser-persistent UI state
|
||||||
"engine_local_urls", "engine_container_names", "custom_engine_cards",
|
|
||||||
"refine_llm_url", "conv_llm_url", "seed_finder_text",
|
"refine_llm_url", "conv_llm_url", "seed_finder_text",
|
||||||
|
"seed_finder_dir", "pt_dir",
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── TTS stability defaults ────────────────────────────────────────────────────
|
# ── TTS stability defaults ────────────────────────────────────────────────────
|
||||||
@ -276,6 +276,8 @@ def _load_settings() -> dict:
|
|||||||
"refine_llm_url": "",
|
"refine_llm_url": "",
|
||||||
"conv_llm_url": "",
|
"conv_llm_url": "",
|
||||||
"seed_finder_text": "",
|
"seed_finder_text": "",
|
||||||
|
"seed_finder_dir": "",
|
||||||
|
"pt_dir": "",
|
||||||
}
|
}
|
||||||
if CONFIG_FILE.exists():
|
if CONFIG_FILE.exists():
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -30,6 +30,8 @@ app.add_middleware(GZipMiddleware, minimum_size=1024)
|
|||||||
_buf_handler = _BufferHandler()
|
_buf_handler = _BufferHandler()
|
||||||
_buf_handler.setLevel(logging.DEBUG)
|
_buf_handler.setLevel(logging.DEBUG)
|
||||||
logging.getLogger().addHandler(_buf_handler)
|
logging.getLogger().addHandler(_buf_handler)
|
||||||
|
logging.getLogger("uvicorn.error").addHandler(_buf_handler)
|
||||||
|
logging.getLogger("uvicorn.access").addHandler(_buf_handler)
|
||||||
|
|
||||||
# ── File log handler (rotates at 5 MB, keeps 3 files) ────────────────────────
|
# ── File log handler (rotates at 5 MB, keeps 3 files) ────────────────────────
|
||||||
|
|
||||||
@ -48,6 +50,8 @@ try:
|
|||||||
datefmt="%Y-%m-%d %H:%M:%S",
|
datefmt="%Y-%m-%d %H:%M:%S",
|
||||||
))
|
))
|
||||||
logging.getLogger().addHandler(_file_handler)
|
logging.getLogger().addHandler(_file_handler)
|
||||||
|
logging.getLogger("uvicorn.error").addHandler(_file_handler)
|
||||||
|
logging.getLogger("uvicorn.access").addHandler(_file_handler)
|
||||||
except Exception as _log_err:
|
except Exception as _log_err:
|
||||||
logger.warning("Could not set up file logging at %s: %s", _LOG_DIR, _log_err)
|
logger.warning("Could not set up file logging at %s: %s", _LOG_DIR, _log_err)
|
||||||
|
|
||||||
|
|||||||
@ -343,7 +343,9 @@ const SETTINGS_FIELD_HELP = {
|
|||||||
's-tts-key': ['TTS API key', 'Optional. For local OpenAI-compatible servers, sk-local or empty usually works.'],
|
's-tts-key': ['TTS API key', 'Optional. For local OpenAI-compatible servers, sk-local or empty usually works.'],
|
||||||
's-vd-key': ['Voice Design API key', 'Optional. Use only if your Voice Design backend requires Authorization.'],
|
's-vd-key': ['Voice Design API key', 'Optional. Use only if your Voice Design backend requires Authorization.'],
|
||||||
's-whisper-key': ['Whisper API key', 'Optional. Needed for cloud STT, usually empty for local Whisper-compatible containers.'],
|
's-whisper-key': ['Whisper API key', 'Optional. Needed for cloud STT, usually empty for local Whisper-compatible containers.'],
|
||||||
's-seed-finder-text': ['Seed Finder text', 'Custom test sentence used when opening the Seed Finder. Leave empty to use language defaults.']
|
's-seed-finder-text': ['Seed Finder text', 'Custom test sentence used when opening the Seed Finder. Leave empty to use language defaults.'],
|
||||||
|
's-seed-finder-dir': ['Seed Finder Sample Files', 'Container path for seed finder sample storage.'],
|
||||||
|
's-pt-dir': ['PT Files', 'Container path for .pt embedding storage.']
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -460,6 +462,10 @@ async function loadSettings() {
|
|||||||
$('s-vd-key').value = s.voice_design_api_key || '';
|
$('s-vd-key').value = s.voice_design_api_key || '';
|
||||||
$('s-voices-scan-dir').value = s.voices_scan_dir || '';
|
$('s-voices-scan-dir').value = s.voices_scan_dir || '';
|
||||||
$('s-output-dir').value = s.output_dir || '';
|
$('s-output-dir').value = s.output_dir || '';
|
||||||
|
const seedFinderDirEl = $('s-seed-finder-dir');
|
||||||
|
if (seedFinderDirEl) seedFinderDirEl.value = s.seed_finder_dir || '';
|
||||||
|
const ptDirEl = $('s-pt-dir');
|
||||||
|
if (ptDirEl) ptDirEl.value = s.pt_dir || '';
|
||||||
const seedTextEl = $('s-seed-finder-text');
|
const seedTextEl = $('s-seed-finder-text');
|
||||||
if (seedTextEl) seedTextEl.value = s.seed_finder_text || '';
|
if (seedTextEl) seedTextEl.value = s.seed_finder_text || '';
|
||||||
const themeEl = $('s-theme-select');
|
const themeEl = $('s-theme-select');
|
||||||
@ -560,6 +566,8 @@ document.addEventListener('click', async e => { if (!e.target.closest('.s-save-b
|
|||||||
voice_design_api_key: $('s-vd-key').value,
|
voice_design_api_key: $('s-vd-key').value,
|
||||||
voices_scan_dir: $('s-voices-scan-dir').value,
|
voices_scan_dir: $('s-voices-scan-dir').value,
|
||||||
output_dir: $('s-output-dir').value,
|
output_dir: $('s-output-dir').value,
|
||||||
|
seed_finder_dir: $('s-seed-finder-dir')?.value || '',
|
||||||
|
pt_dir: $('s-pt-dir')?.value || '',
|
||||||
stt_language: $('s-stt-language')?.value || '',
|
stt_language: $('s-stt-language')?.value || '',
|
||||||
stt_preferred_backend: $('s-stt-preferred-backend')?.value || '',
|
stt_preferred_backend: $('s-stt-preferred-backend')?.value || '',
|
||||||
auto_refine: $('s-auto-refine')?.value || 'off',
|
auto_refine: $('s-auto-refine')?.value || 'off',
|
||||||
|
|||||||
@ -422,6 +422,16 @@
|
|||||||
<input type="text" id="s-output-dir" placeholder="/voices/active_voices">
|
<input type="text" id="s-output-dir" placeholder="/voices/active_voices">
|
||||||
<span class="s-hint">New cloned/exported voices are saved here.</span>
|
<span class="s-hint">New cloned/exported voices are saved here.</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="s-field">
|
||||||
|
<label>Seed Finder Sample Files</label>
|
||||||
|
<input type="text" id="s-seed-finder-dir" placeholder="/voices/seed_finder">
|
||||||
|
<span class="s-hint">Directory containing generated seed finder samples.</span>
|
||||||
|
</div>
|
||||||
|
<div class="s-field">
|
||||||
|
<label>PT Files</label>
|
||||||
|
<input type="text" id="s-pt-dir" placeholder="/voices/pt_files">
|
||||||
|
<span class="s-hint">Directory for saved embedding models (.pt files).</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="s-page-actions">
|
<div class="s-page-actions">
|
||||||
<button class="btn-primary s-save-btn">Save settings</button>
|
<button class="btn-primary s-save-btn">Save settings</button>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user