Refactor localization files and remove Aliyun references

This commit is contained in:
2026-04-07 11:37:47 +08:00
parent 2662b494c5
commit b395cb0b98
47 changed files with 136 additions and 1311 deletions

View File

@@ -335,7 +335,7 @@ async def generate_ai_script(project_id: int, user: User, db: Session) -> None:
crud.delete_audiobook_segments(db, project_id)
crud.delete_audiobook_characters(db, project_id)
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
backend_type = "local"
for char_data in characters_data:
name = char_data.get("name", "旁白")
@@ -449,7 +449,7 @@ async def generate_ai_script_chapters(project_id: int, user: User, db: Session)
for c in db_characters
]
char_map = {c.name: c for c in db_characters}
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
backend_type = "local"
ps.append_line(key, f"[AI剧本] 开始生成 {num_chapters} 章大纲...\n")
ps.append_line(key, "")
@@ -618,7 +618,7 @@ async def continue_ai_script_chapters(project_id: int, additional_chapters: int,
for c in db_characters
]
char_map = {c.name: c for c in db_characters}
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
backend_type = "local"
existing_chapters = crud.list_audiobook_chapters(db, project_id)
existing_chapters_data = [
@@ -839,7 +839,7 @@ async def analyze_project(project_id: int, user: User, db: Session, turbo: bool
crud.delete_audiobook_segments(db, project_id)
crud.delete_audiobook_characters(db, project_id)
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
backend_type = "local"
for char_data in characters_data:
name = char_data.get("name", "旁白")
@@ -1437,7 +1437,7 @@ async def process_all(project_id: int, user: User, db: Session) -> None:
logger.info(f"process_all: project={project_id} complete")
async def generate_character_preview(project_id: int, char_id: int, user: User, db: Session) -> None:
async def generate_character_preview(project_id: int, char_id: int, user: User, db: Session, force_recreate: bool = False) -> None:
"""Generate a short audio preview for a specific character."""
project = crud.get_audiobook_project(db, project_id, user.id)
if not project:
@@ -1470,21 +1470,11 @@ async def generate_character_preview(project_id: int, char_id: int, user: User,
preview_text = f"你好,我是{preview_name}{preview_desc}"
from core.tts_service import TTSServiceFactory
from core.security import decrypt_api_key
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
user_api_key = None
if backend_type == "aliyun":
encrypted = crud.get_system_setting(db, "aliyun_api_key")
if encrypted:
user_api_key = decrypt_api_key(encrypted)
elif user.aliyun_api_key:
user_api_key = decrypt_api_key(user.aliyun_api_key)
backend = await TTSServiceFactory.get_backend(backend_type, user_api_key)
backend = await TTSServiceFactory.get_backend()
try:
if backend_type == "local" and not design.voice_cache_id:
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
from core.cache_manager import VoiceCacheManager
@@ -1524,73 +1514,46 @@ async def generate_character_preview(project_id: int, char_id: int, user: User,
db.commit()
logger.info(f"Bootstrapped local voice cache for preview: design_id={design.id}, cache_id={cache_id}")
if backend_type == "aliyun" and not design.aliyun_voice_id:
from core.tts_service import AliyunTTSBackend
if isinstance(backend, AliyunTTSBackend):
try:
voice_id = await backend._create_voice_design(
instruct=_get_gendered_instruct(char.gender, design.instruct),
preview_text=preview_text,
)
design.aliyun_voice_id = voice_id
db.commit()
logger.info(f"Bootstrapped aliyun voice_id for preview: design_id={design.id}, voice_id={voice_id}")
except Exception as e:
logger.warning(f"Failed to bootstrap aliyun voice_id for preview, falling back to instruct: {e}")
if backend_type == "aliyun":
if design.aliyun_voice_id:
audio_bytes, _ = await backend.generate_voice_design(
{"text": preview_text, "language": "zh"},
saved_voice_id=design.aliyun_voice_id
)
else:
audio_bytes, _ = await backend.generate_voice_design({
"text": preview_text,
"language": "zh",
"instruct": _get_gendered_instruct(char.gender, design.instruct),
})
else:
if design.voice_cache_id:
from core.cache_manager import VoiceCacheManager
cache_manager = await VoiceCacheManager.get_instance()
cache_result = await cache_manager.get_cache_by_id(design.voice_cache_id, db)
x_vector = cache_result['data'] if cache_result else None
if x_vector:
audio_bytes, _ = await backend.generate_voice_clone(
{
"text": preview_text,
"language": "Auto",
"max_new_tokens": 512,
"temperature": 0.3,
"top_k": 10,
"top_p": 0.9,
"repetition_penalty": 1.05,
},
x_vector=x_vector
)
else:
audio_bytes, _ = await backend.generate_voice_design({
if design.voice_cache_id:
from core.cache_manager import VoiceCacheManager
cache_manager = await VoiceCacheManager.get_instance()
cache_result = await cache_manager.get_cache_by_id(design.voice_cache_id, db)
x_vector = cache_result['data'] if cache_result else None
if x_vector:
audio_bytes, _ = await backend.generate_voice_clone(
{
"text": preview_text,
"language": "Auto",
"instruct": _get_gendered_instruct(char.gender, design.instruct),
"max_new_tokens": 512,
"temperature": 0.3,
"top_k": 10,
"top_p": 0.9,
"repetition_penalty": 1.05,
})
},
x_vector=x_vector
)
else:
audio_bytes, _ = await backend.generate_voice_design({
"text": preview_text,
"language": "Auto",
"instruct": design.instruct,
"instruct": _get_gendered_instruct(char.gender, design.instruct),
"max_new_tokens": 512,
"temperature": 0.3,
"top_k": 10,
"top_p": 0.9,
"repetition_penalty": 1.05,
})
else:
audio_bytes, _ = await backend.generate_voice_design({
"text": preview_text,
"language": "Auto",
"instruct": design.instruct,
"max_new_tokens": 512,
"temperature": 0.3,
"top_k": 10,
"top_p": 0.9,
"repetition_penalty": 1.05,
})
with open(audio_path, "wb") as f:
f.write(audio_bytes)
@@ -1672,7 +1635,7 @@ async def generate_ai_script_nsfw(project_id: int, user: User, db: Session) -> N
crud.delete_audiobook_segments(db, project_id)
crud.delete_audiobook_characters(db, project_id)
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
backend_type = "local"
for char_data in characters_data:
name = char_data.get("name", "旁白")