feat: add violence and eroticism level parameters to synopsis and script generation requests

This commit is contained in:
2026-03-13 13:36:55 +08:00
parent 0d63d0e6d1
commit 0a12f204ba
6 changed files with 129 additions and 11 deletions

View File

@@ -208,6 +208,16 @@ def parse_ai_script(script_text: str, char_map: dict) -> list[dict]:
elif content.startswith('"') and content.endswith('"'):
content = content[1:-1].strip()
if emo_text is None:
emo_m = _EMO_RE.search(content)
if emo_m:
emo_text = emo_m.group(1)
try:
emo_alpha = float(emo_m.group(2))
except ValueError:
emo_alpha = None
content = content[:emo_m.start()].strip()
character = speaker
results.append({
@@ -252,6 +262,8 @@ async def generate_ai_script(project_id: int, user: User, db: Session) -> None:
style = cfg.get("style", "")
num_characters = cfg.get("num_characters", 5)
num_chapters = cfg.get("num_chapters", 8)
violence_level = cfg.get("violence_level", 0)
eroticism_level = cfg.get("eroticism_level", 0)
ps.append_line(key, f"\n[Step 1] 生成 {num_characters} 个角色...\n")
ps.append_line(key, "")
@@ -262,6 +274,7 @@ async def generate_ai_script(project_id: int, user: User, db: Session) -> None:
characters_data = await llm.generate_story_characters(
genre=genre, subgenre=subgenre, premise=premise, style=style,
num_characters=num_characters, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
has_narrator = any(c.get("name") in ("narrator", "旁白") for c in characters_data)
@@ -370,9 +383,16 @@ async def generate_ai_script_chapters(project_id: int, user: User, db: Session)
premise = cfg.get("premise", "")
style = cfg.get("style", "")
num_chapters = cfg.get("num_chapters", 8)
violence_level = cfg.get("violence_level", 0)
eroticism_level = cfg.get("eroticism_level", 0)
llm = _get_llm_service(db)
_llm_model = crud.get_system_setting(db, "llm_model")
is_nsfw = cfg.get("nsfw_mode", False)
if is_nsfw:
llm = _get_grok_service(db)
_llm_model = crud.get_system_setting(db, "grok_model") or "grok-4"
else:
llm = _get_llm_service(db)
_llm_model = crud.get_system_setting(db, "llm_model")
_user_id = user.id
def _log_usage(prompt_tokens: int, completion_tokens: int) -> None:
@@ -400,6 +420,7 @@ async def generate_ai_script_chapters(project_id: int, user: User, db: Session)
chapters_data = await llm.generate_chapter_outline(
genre=genre, subgenre=subgenre, premise=premise, style=style,
num_chapters=num_chapters, characters=characters_data, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
ps.append_line(key, f"\n\n[完成] 大纲:{len(chapters_data)}")
@@ -440,6 +461,7 @@ async def generate_ai_script_chapters(project_id: int, user: User, db: Session)
genre=genre, premise=premise,
chapter_index=idx, chapter_title=title, chapter_summary=summary,
characters=characters_data, on_token=on_token, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
chapter_obj.source_text = script_text
@@ -530,9 +552,16 @@ async def continue_ai_script_chapters(project_id: int, additional_chapters: int,
subgenre = cfg.get("subgenre", "")
premise = cfg.get("premise", "")
style = cfg.get("style", "")
violence_level = cfg.get("violence_level", 0)
eroticism_level = cfg.get("eroticism_level", 0)
llm = _get_llm_service(db)
_llm_model = crud.get_system_setting(db, "llm_model")
is_nsfw = cfg.get("nsfw_mode", False)
if is_nsfw:
llm = _get_grok_service(db)
_llm_model = crud.get_system_setting(db, "grok_model") or "grok-4"
else:
llm = _get_llm_service(db)
_llm_model = crud.get_system_setting(db, "llm_model")
_user_id = user.id
def _log_usage(prompt_tokens: int, completion_tokens: int) -> None:
@@ -568,6 +597,7 @@ async def continue_ai_script_chapters(project_id: int, additional_chapters: int,
genre=genre, subgenre=subgenre, premise=premise, style=style,
existing_chapters=existing_chapters_data, additional_chapters=additional_chapters,
characters=characters_data, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
ps.append_line(key, f"\n\n[完成] 续写大纲:{len(new_chapters_data)}")
@@ -596,6 +626,7 @@ async def continue_ai_script_chapters(project_id: int, additional_chapters: int,
genre=genre, premise=premise,
chapter_index=idx, chapter_title=title, chapter_summary=summary,
characters=characters_data, on_token=on_token, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
chapter_obj.source_text = script_text
@@ -1521,6 +1552,8 @@ async def generate_ai_script_nsfw(project_id: int, user: User, db: Session) -> N
style = cfg.get("style", "")
num_characters = cfg.get("num_characters", 5)
num_chapters = cfg.get("num_chapters", 8)
violence_level = cfg.get("violence_level", 0)
eroticism_level = cfg.get("eroticism_level", 0)
ps.append_line(key, f"\n[Step 1] 生成 {num_characters} 个角色...\n")
ps.append_line(key, "")
@@ -1531,6 +1564,7 @@ async def generate_ai_script_nsfw(project_id: int, user: User, db: Session) -> N
characters_data = await llm.generate_story_characters(
genre=genre, subgenre=subgenre, premise=premise, style=style,
num_characters=num_characters, usage_callback=_log_usage,
violence_level=violence_level, eroticism_level=eroticism_level,
)
has_narrator = any(c.get("name") in ("narrator", "旁白") for c in characters_data)