From a8d6195cdb852d6ee6b0c105168300b1970ed064 Mon Sep 17 00:00:00 2001 From: bdim404 Date: Tue, 7 Apr 2026 11:38:35 +0800 Subject: [PATCH] feat: enhance logging for character updates and voice cache management --- dev.sh | 26 ++++++++++++++++++--- qwen3-tts-backend/api/audiobook.py | 2 ++ qwen3-tts-backend/core/audiobook_service.py | 6 +++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/dev.sh b/dev.sh index 8b8991f..8e857f0 100755 --- a/dev.sh +++ b/dev.sh @@ -1,7 +1,27 @@ #!/bin/bash -trap 'kill 0' EXIT +trap 'kill 0' EXIT INT TERM -(cd qwen3-tts-backend && DEV_MODE=true LOG_LEVEL=debug /home/bdim/miniconda3/envs/qwen3-tts/bin/uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug 2>&1 | sed 's/^/[backend] /') & -(cd qwen3-tts-frontend && npm run dev 2>&1 | sed 's/^/[frontend] /') & +colorize() { + local color="$1" name="$2" + local R=$'\033[0m' DIM=$'\033[90m' YEL=$'\033[33m' RED=$'\033[31m' + local prefix="${color}[${name}]${R} " + while IFS= read -r line; do + if [[ "$line" =~ ^DEBUG ]]; then + printf '%s%s%s%s\n' "$prefix" "$DIM" "$line" "$R" + elif [[ "$line" =~ ^WARNING ]]; then + printf '%s%s%s%s\n' "$prefix" "$YEL" "$line" "$R" + elif [[ "$line" =~ ^(ERROR|CRITICAL) ]]; then + printf '%s%s%s%s\n' "$prefix" "$RED" "$line" "$R" + else + printf '%s%s\n' "$prefix" "$line" + fi + done +} + +BLUE=$'\033[34m' +MAGENTA=$'\033[35m' + +(cd qwen3-tts-backend && DEV_MODE=true LOG_LEVEL=debug /home/bdim/miniconda3/envs/qwen3-tts/bin/uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug 2>&1 | colorize "$BLUE" "backend") & +(cd qwen3-tts-frontend && npm run dev 2>&1 | colorize "$MAGENTA" "frontend") & wait diff --git a/qwen3-tts-backend/api/audiobook.py b/qwen3-tts-backend/api/audiobook.py index 80e1162..eb0888c 100644 --- a/qwen3-tts-backend/api/audiobook.py +++ b/qwen3-tts-backend/api/audiobook.py @@ -745,11 +745,13 @@ async def update_character( if (data.instruct is not None or data.gender is not None) and char.voice_design_id: voice_design = crud.get_voice_design(db, char.voice_design_id, current_user.id) + logger.info(f"update_character: char_id={char_id}, voice_design_id={char.voice_design_id}, found={voice_design is not None}") if voice_design: if data.instruct is not None: voice_design.instruct = data.instruct voice_design.voice_cache_id = None db.commit() + logger.info(f"update_character: cleared voice_cache_id for design {voice_design.id}") return _char_to_response(char, db) diff --git a/qwen3-tts-backend/core/audiobook_service.py b/qwen3-tts-backend/core/audiobook_service.py index 1bd0d7b..848a5f2 100644 --- a/qwen3-tts-backend/core/audiobook_service.py +++ b/qwen3-tts-backend/core/audiobook_service.py @@ -1474,6 +1474,12 @@ async def generate_character_preview(project_id: int, char_id: int, user: User, backend = await TTSServiceFactory.get_backend() try: + if force_recreate and design.voice_cache_id: + design.voice_cache_id = None + db.commit() + db.refresh(design) + logger.info(f"Cleared voice_cache_id for char {char_id} (force_recreate)") + if not design.voice_cache_id: logger.info(f"Local voice cache missing for char {char_id}. Bootstrapping now...") from core.model_manager import ModelManager