feat: implement core UI tabs, API backend management, and initial service infrastructure.

This commit is contained in:
tinix-ai
2026-03-18 08:40:54 +07:00
parent 78cf08823d
commit bde89de5ce
16 changed files with 898 additions and 258 deletions
+19 -3
View File
@@ -9,6 +9,7 @@ from services.novel_generator import OutlineParser
from services.project_manager import ProjectManager
from services.genre_manager import GenreManager
from services.sub_genre_manager import SubGenreManager
from services.style_manager import StyleManager
from core.state import app_state
import logging
@@ -36,6 +37,14 @@ def build_create_tab():
multiselect=True,
interactive=True
)
style_choices = StyleManager.get_style_names()
create_style_dropdown = gr.Dropdown(
choices=style_choices,
label="Phong cách viết",
value=style_choices[0] if style_choices else None,
interactive=True
)
with gr.Column(scale=2):
title_input = gr.Textbox(
@@ -115,6 +124,8 @@ def build_create_tab():
memory_type = gr.Radio(label="Cách nhớ ngữ cảnh", choices=["Toàn văn", "Tóm tắt"], value="Toàn văn")
with gr.Column(scale=1):
memory_chapters = gr.Number(label="Số chương ghi nhớ", value=3, minimum=1, maximum=20, step=1)
with gr.Column(scale=1):
use_reflection_checkbox = gr.Checkbox(label="Bật chế độ Tự kiểm duyệt (Self-Reflection)", value=False, info="AI tự đọc lại và sửa lỗi nháp. Tốn gấp đôi thời gian & Token.")
with gr.Row():
auto_generate_btn = gr.Button(t("create.start_gen_btn"), variant="primary", size="lg", interactive=False)
stop_btn = gr.Button(t("create.pause_gen_btn"), variant="stop", size="lg", interactive=False)
@@ -200,9 +211,13 @@ def build_create_tab():
)
return content, msg
def on_auto_generate(title, genre, sub_genres, char_setting, world_setting, plot_idea, outline_text, mem_type, mem_chaps, progress=gr.Progress()):
def on_auto_generate(title, genre, sub_genres, char_setting, world_setting, plot_idea, outline_text, mem_type, mem_chaps, use_reflection, selected_style, progress=gr.Progress()):
"""Tự động tạo toàn bộ tiểu thuyết"""
gen = app_state.get_generator()
# Cập nhật style vào config hiện tại
if selected_style:
gen.config.generation.writing_style = selected_style
chapters, parse_msg = OutlineParser.parse(outline_text)
if not chapters:
@@ -273,7 +288,8 @@ def build_create_tab():
chapter_desc=chapter.desc, novel_title=title,
character_setting=char_setting, world_setting=world_setting,
plot_idea=plot_idea, genre=genre, sub_genres=sub_genres,
previous_content=prev_content, context_summary=context_summary
previous_content=prev_content, context_summary=context_summary,
use_reflection=use_reflection
)
if content:
@@ -340,7 +356,7 @@ def build_create_tab():
)
auto_generate_btn.click(
fn=on_auto_generate,
inputs=[title_input, genre_dropdown, sub_genre_dropdown, character_input, world_input, plot_input, outline_output, memory_type, memory_chapters],
inputs=[title_input, genre_dropdown, sub_genre_dropdown, character_input, world_input, plot_input, outline_output, memory_type, memory_chapters, use_reflection_checkbox, create_style_dropdown],
outputs=[generation_progress, chapter_selector]
)
chapter_selector.change(